深度学习目标检测之YOLOv3实战(一)keras原Demo复现
怀着异常忐忑的心情,写下第一篇博客,记录一下自己在图像识别方面的心路历程,与大家分享共勉,交流进步。
在寒假放假的最后一天里,把在深度学习实现的第一个模型YOLOv3,从环境配置到原模型复现再到训练自己的数据,全部过程记录下来,方便入门的同学,也希望自己在总结中得到进步。
关于YOLOv3的原理及模型的介绍我在后面的文章会进行更新,这里讲的主要是应用实战,直接上重点。
转载请注明出处
效果图镇住:
环境配置
运行的环境如下,显卡是GTX960M,内存16G,训练一般在晚上跑,没多少感觉,视频实时检测一般在6-8帧,稍微有些卡顿,但用于学习还是勉强能够接受。
环境配置过程中,会出现各种版本之间不相容的问题,出现各种报错,大家可以尽情尝试。
强烈建议大家一定要配置GPU进行训练,否则,cpu的龟速会让你怀疑人生
Windows 10
Visual Studio 2017
Python 3.6.0
Opencv 3.4.1
Gpu 9.0 + cudnn 7.0
Keras 2.2.0
Tensorflow 1.6.0 -- gpu
Anaconda3
框架及权重下载
YOLOv3框架:https://github.com/qqwweee/keras-yolo3
YOLOv3模型权重: https://pjreddie.com/media/files/yolov3.weights
进行下一步的前提是,你必须确定环境配置没有问题,后面我会专门写一篇文章来记录环境配置的相关步骤及问题。
`
原代码复现
第一步 :
在Vs中,新建项目,在原有python程序上建立,选择下载好的Yolov3的框架文件夹,进行添加。将下载好的Yolov3的权重粘贴复制进项目,完成后页面如下:
第二步:h5文件的转换
因为使用的是keras的框架,所以它支持读取的权重格式为.h5,而下载后的权重为.weights,所以进行测试前需要将weights模型转换成.h5模型,运行demo中convert.py。一定要把下载好的weight权重放进项目中,在目录下cmd输入命令
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5运行,过程如下,结束后会在model_data下形成.h5文件。
第三步:图片及视频检测
打开yolo.py,修改model_path、anchors_path、classes_path等路径,未防止出现不必要的报错,强烈建议大家使用绝对路径。在demo的score与iou根据识别效果可进行相应修改,score为置信度,值越大检测到的物体越少,准确度越高,iou设置检测框的重合度,值越大,框越多,一个物体上被多次框选的可能性就越大。
图片尺寸不需要进行修改,因为框架中已经写入了自动对图片进行统一尺寸的函数。
在项目cmd下输入以下命令进行图像检测:
图片:
yolo_video.py --image
运行后会提示输入图片,将所需要检测的图片复制到项目下,输入图像名即可,或者输入图片的绝对路径进行检测。识别效果如下:
视频:
将视频复制到项目下,或者输入绝对路径
yolo_video.py --input 视频名
单类物体识别
ok,到此一个初步的yolo框架已经调试完成,可以进行80类常用物品的识别,可以满足日常学习的识别需要。
与此同时,80类物体的识别也带来了困扰,如果任务只是需要对单类物体的识别,该怎么去进行代码的编写呢。
其实这个问题很简单,大家在后续学习中随着对代码的深入了解,很快就能明白其中的道理,这里我也就不卖关子,你只需要在yolo.py中加入一个判断语句,只输出所需类的label即可。修改代码如下:
yolo.py中 detect_image函数:(应该在第130行左右,因为修改过内容,确切行数有点不确定)
for i, c in reversed(list(enumerate(out_classes))):
predicted_class = self.class_names[c]
#判断是否有person这一类,只选择person
if predicted_class != 'person':
continue
与镇贴的图片对比
只检测人哦
整个框架已经搭建完成,基本可以完成初步的测试识别的工作,下一篇文章我会讲一下如何用自己的训练数据进行训练并识别。
收拾东西准备放假,欢迎留言,交流进步。