训练详细步骤:YunYang1994/tensorflow-yolov3 训练自己的数据集
我这边使用自己的数据集已经训练好了权重文件,将该权重文件应用于evaluate.py效果不错,但用video_demo.py做实时检测却完全不行,查看代码发现,evaluate.py只用了cfg.TEST.WEIGHT_FILE"./checkpoint/f_g_c_weights_files/yolov3_test_loss=15.8845.ckpt-47",而video_demp.py使用的却是转换后的.pb文件。


但是video_demo.py使用的.pb文件确实又是从cfg.TEST.WEIGHT_FILE通过freeze_graph.py转换过来的,照理来说也不应有问题。。。

尝试更改video_demo.py里的input_size(因为发现evaluate.py里的input_sizevideo_demp.py里的不一样。。。)

video_demo.py里的为416,evaluate.py里的是使用的cfg.TEST.INPUT_SIZE,为544。。。

video_demo.py里的改成544:
效果貌似比416好那么一丢丢???但还是不理想,胡乱识别。

算了,要不我还是根据evaluate.py重写一个算了。。。。
给它命名为dontla_evaluate_detect.py
。。。

因为有现成的代码可以套用,所以没一会就写好了:

# -*- encoding: utf-8 -*-
"""
@File    : dontla_evaluate_detect.py
@Time    : 2019/11/21 13:11
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""import cv2
import numpy as np
import tensorflow as tf
import core.utils as utils
from core.config import cfg
from core.yolov3 import YOLOV3
import pyrealsense2 as rsclass YoloTest(object):def __init__(self):# D·C 191111:__C.TEST.INPUT_SIZE = 544self.input_size = cfg.TEST.INPUT_SIZEself.anchor_per_scale = cfg.YOLO.ANCHOR_PER_SCALE# Dontla 191106注释:初始化class.names文件的字典信息属性self.classes = utils.read_class_names(cfg.YOLO.CLASSES)# D·C 191115:类数量属性self.num_classes = len(self.classes)self.anchors = np.array(utils.get_anchors(cfg.YOLO.ANCHORS))# D·C 191111:__C.TEST.SCORE_THRESHOLD = 0.3self.score_threshold = cfg.TEST.SCORE_THRESHOLD# D·C 191120:__C.TEST.IOU_THRESHOLD = 0.45self.iou_threshold = cfg.TEST.IOU_THRESHOLDself.moving_ave_decay = cfg.YOLO.MOVING_AVE_DECAY# D·C 191120:__C.TEST.ANNOT_PATH = "./data/dataset/Dontla/20191023_Artificial_Flower/test.txt"self.annotation_path = cfg.TEST.ANNOT_PATH# D·C 191120:__C.TEST.WEIGHT_FILE = "./checkpoint/f_g_c_weights_files/yolov3_test_loss=15.8845.ckpt-47"self.weight_file = cfg.TEST.WEIGHT_FILE# D·C 191115:可写标记(bool类型值)self.write_image = cfg.TEST.WRITE_IMAGE# D·C 191115:__C.TEST.WRITE_IMAGE_PATH = "./data/detection/"(识别图片画框并标注文本后写入的图片路径)self.write_image_path = cfg.TEST.WRITE_IMAGE_PATH# D·C 191116:TEST.SHOW_LABEL设置为Trueself.show_label = cfg.TEST.SHOW_LABEL# D·C 191120:创建命名空间“input”with tf.name_scope('input'):# D·C 191120:建立变量(创建占位符开辟内存空间)self.input_data = tf.placeholder(dtype=tf.float32, name='input_data')self.trainable = tf.placeholder(dtype=tf.bool, name='trainable')model = YOLOV3(self.input_data, self.trainable)self.pred_sbbox, self.pred_mbbox, self.pred_lbbox = model.pred_sbbox, model.pred_mbbox, model.pred_lbbox# D·C 191120:创建命名空间“指数滑动平均”with tf.name_scope('ema'):ema_obj = tf.train.ExponentialMovingAverage(self.moving_ave_decay)# D·C 191120:在允许软设备放置的会话中启动图形并记录放置决策。(不懂啥意思。。。)allow_soft_placement=True表示允许tf自动选择可用的GPU和CPUself.sess = tf.Session(config=tf.ConfigProto(allow_soft_placement=True))# D·C 191120:variables_to_restore()用于加载模型计算滑动平均值时将影子变量直接映射到变量本身self.saver = tf.train.Saver(ema_obj.variables_to_restore())# D·C 191120:用于下次训练时恢复模型self.saver.restore(self.sess, self.weight_file)def predict(self, image):# D·C 191107:复制一份图片的镜像,避免对图片直接操作改变图片的内在属性org_image = np.copy(image)# D·C 191107:获取图片尺寸org_h, org_w, _ = org_image.shape# D·C 191108:该函数将源图结合input_size,将其转换成预投喂的方形图像(作者默认544×544,中间为缩小尺寸的源图,上下空区域为灰图):image_data = utils.image_preprocess(image, [self.input_size, self.input_size])# D·C 191108:打印维度看看:# print(image_data.shape)# (544, 544, 3)# D·C 191108:创建新轴,不懂要创建新轴干嘛?image_data = image_data[np.newaxis, ...]# D·C 191108:打印维度看看:# print(image_data.shape)# (1, 544, 544, 3)# D·C 191110:三个box可能存放了预测框图(可能是N多的框,有用的没用的重叠的都在里面)的信息(但是打印出来的值完全看不懂啊喂?)pred_sbbox, pred_mbbox, pred_lbbox = self.sess.run([self.pred_sbbox, self.pred_mbbox, self.pred_lbbox],feed_dict={self.input_data: image_data,self.trainable: False})# D·C 191110:打印三个box的类型、形状和值看看:# print(type(pred_sbbox))# print(type(pred_mbbox))# print(type(pred_lbbox))# 都是<class 'numpy.ndarray'># print(pred_sbbox.shape)# print(pred_mbbox.shape)# print(pred_lbbox.shape)# (1, 68, 68, 3, 6)# (1, 34, 34, 3, 6)# (1, 17, 17, 3, 6)# print(pred_sbbox)# print(pred_mbbox)# print(pred_lbbox)# D·C 191110:(-1,6)表示不知道有多少行,反正你给我整成6列,然后concatenate又把它们仨给叠起来,最终得到无数个6列数组(后面self.num_classes)个数存放的貌似是这个框属于类的概率)pred_bbox = np.concatenate([np.reshape(pred_sbbox, (-1, 5 + self.num_classes)),np.reshape(pred_mbbox, (-1, 5 + self.num_classes)),np.reshape(pred_lbbox, (-1, 5 + self.num_classes))], axis=0)# D·C 191111:打印pred_bbox和它的维度看看:# print(pred_bbox)# print(pred_bbox.shape)# (18207, 6)# D·C 191111:猜测是第一道过滤,过滤掉score_threshold以下的图片,过滤完之后少了好多:# D·C 191115:bboxes维度为[n,6],前四列是坐标,第五列是得分,第六列是对应类下标bboxes = utils.postprocess_boxes(pred_bbox, (org_h, org_w), self.input_size, self.score_threshold)# D·C 191111:猜测是第二道过滤,过滤掉iou_threshold以下的图片:bboxes = utils.nms(bboxes, self.iou_threshold)return bboxesdef dontla_evaluate_detect(self):pipeline = rs.pipeline()config = rs.config()config.enable_stream(rs.stream.depth, 1280, 720, rs.format.z16, 30)config.enable_stream(rs.stream.color, 1280, 720, rs.format.bgr8, 30)pipeline.start(config)# 创建对齐对象(深度对齐颜色)align = rs.align(rs.stream.color)try:while True:frames = pipeline.wait_for_frames()# 获取对齐帧集aligned_frames = align.process(frames)# 获取对齐后的深度帧和彩色帧aligned_depth_frame = aligned_frames.get_depth_frame()color_frame = aligned_frames.get_color_frame()# 获取颜色帧内参color_profile = color_frame.get_profile()cvsprofile = rs.video_stream_profile(color_profile)color_intrin = cvsprofile.get_intrinsics()color_intrin_part = [color_intrin.ppx, color_intrin.ppy, color_intrin.fx, color_intrin.fy]if not aligned_depth_frame or not color_frame:continuecolor_image = np.asanyarray(color_frame.get_data())# D·C 191121:显示帧看看# cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)# cv2.imshow('RealSense', color_frame)# cv2.waitKey(1)bboxes_pr = self.predict(color_image)image = utils.draw_bbox(color_image, bboxes_pr, aligned_depth_frame, color_intrin_part,show_label=self.show_label)cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)cv2.imshow('RealSense', image)cv2.waitKey(1)finally:pipeline.stop()if __name__ == '__main__':YoloTest().dontla_evaluate_detect()

运行试试,效果还行。。。

参考文章:YunYang1994/tensorflow-yolov3 训练自己的数据集

如何使用yunyang tensorflow-yolov3训练自己的数据集并使用 Intel realsense D435 传输视频流应用于实时检测?相关推荐

  1. Tensorflow版yolov3训练自己的数据

    Tensorflow版yolov3训练自己的数据 源代码:https://github.com/YunYang1994/TensorFlow2.0-Examples/tree/master/4-Obj ...

  2. YOLOv3训练自己的数据(附优化与问题总结)

    文章目录 YOLOv3训练自己的数据附优化与问题总结 环境说明 实现YOLOV3的demo 命令简介 训练自己的数据 优化与个性化问题 2020.3.11 更新可视化和python接口 可能出现的问题 ...

  3. 【两个例子】Tensorflow+Inception-v3训练自己的数据+分析retrain源码

    [学习笔记]Tensorflow+Inception-v3训练自己的数据 https://www.cnblogs.com/EstherLjy/p/9861034.html TensorFlow学习笔记 ...

  4. yunyang tensorflow-yolov3 Intel Realsense D435 (并发)调用两个摄像头运行识别程序并画框

    只是一个测试,测试在并发运行下,同时开启两个摄像头获取视频流并调用识别函数的运行结果,以后在摄像头多的情况下,肯定不能这样,需要批量创建各种对象. 并发,指的是不在多线程的情况下,每个摄像头的视频流送 ...

  5. Ultralytics公司YOLOv8来了(训练自己的数据集并基于NVIDIA TensorRT和华为昇腾端到端模型加速)--跟不上“卷“的节奏

    Official YOLOv8 训练自己的数据集并基于NVIDIA TensorRT和华为昇腾端到端模型加速 说明: 本项目支持YOLOv8的对应的package的版本是:ultralytics-8. ...

  6. tensorflow yolov3训练自己的数据集,详细教程

    这个教程是我在自己学习的过程中写的,当作一个笔记,写的比较详细 在github上下载yolov3的tensorflow1.0版本: https://github.com/YunYang1994/ten ...

  7. YOLOv3: 训练自己的数据(绝对经典版本1)

    为什么80%的码农都做不了架构师?>>>    windows版本:请参考:https://github.com/AlexeyAB/darknet linux       版本:请参 ...

  8. 从零开始带你一步一步使用YOLOv3训练自己的数据

    红色石头的个人网站:redstonewill.com 知乎:https://www.zhihu.com/people/red_stone_wl 公众号:AI有道(redstonewill) YOLOv ...

  9. yolov3目标检测android,目标检测 | YOLOv3训练自己的数据全流程

    1.构建YOLOv3网络的cfg文件 该文件表示的是你的检测网络的结构,类似caffe的prototxt文件. YOLOv3的cfg文件 上篇介绍YOLOv3网络中提到的去掉上采样操作的YOLOv3c ...

最新文章

  1. 百度地图JavascriptApi Marker平滑移动及车头指向行径方向
  2. Cocos2d-x 在缓存创建图片
  3. QT系统性总结(推荐新手看)
  4. TortoiseSVN操作
  5. BaseRecyclerViewAdapterHelper结合autolayout使用
  6. 集成显卡与独立显卡的区别
  7. 如何在 WebAPI 中启用 CORS
  8. C#中形态各异的class
  9. 【程序设计】流程图的规范和绘制
  10. Spring Boot笔记-WebSocket的使用
  11. 不加入域不能访问域资源
  12. coding.net及git的使用方式
  13. MySQL 通过存储过程生成带有随机姓名的百万条测试数据
  14. 网络安全专栏——telnet远程登录数据包捕获个性化登录账号及密码(图文丰富 保姆级 有几种错误解决方案 为什么不用输入telnet密码就能登录 )
  15. 表格表头绘制对角线(不固定表格宽高)
  16. 团队任务3每日立会(2018-10-26)
  17. Thread yield
  18. LNK2001: unresolved external symbol_WinMain@16
  19. jmeter非GUI输出性能测试报告报WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x
  20. el表达式ne什么意思_el表达式中的比较eq ne gt lt

热门文章

  1. 【温故知新】HTML学习笔记(上)
  2. 采购寄售业务的系统实现
  3. SAP实施不成功就像女人丰乳没效果
  4. ABAP函数:SD_VBAP_READ_WITH_VBELN(根据销售订单读取表vbap中的信息)
  5. 如何用C语言清空特定文件夹中的所有文件
  6. SD--关于定价过程中的存储顺序的参考结构和参考字段的使用代码跟踪
  7. 长沙县这一年:战在新高地,筑牢新高台,攀向新高峰
  8. java arraylist 源代码_Java中ArrayList源码浅析
  9. windows 7下如何卸载重装mysql 压缩包版百度经验_windows下安装、卸载mysql服务的方法(mysql 5.6 zip解压...
  10. 很多人调用接口会阻塞吗_锻炼的真相你知道吗?这些你可能都想了解,很多人都会问的2点...