深度学习目标检测之YOLOv3实战(一)keras原demo复现

深度学习目标检测之YOLOv3实战(一)原Demo复现

  • 环境配置
  • 框架及权重下载
  • 原代码复现
  • 单类物体识别

怀着异常忐忑的心情,写下第一篇博客,记录一下自己在图像识别方面的心路历程,与大家分享共勉,交流进步。
在寒假放假的最后一天里,把在深度学习实现的第一个模型YOLOv3,从环境配置到原模型复现再到训练自己的数据,全部过程记录下来,方便入门的同学,也希望自己在总结中得到进步。
关于YOLOv3的原理及模型的介绍我在后面的文章会进行更新,这里讲的主要是应用实战,直接上重点。

转载请注明出处

效果图镇住:
深度学习目标检测之YOLOv3实战(一)keras原demo复现_第1张图片

环境配置

运行的环境如下,显卡是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的权重粘贴复制进项目,完成后页面如下:
深度学习目标检测之YOLOv3实战(一)keras原demo复现_第2张图片
第二步: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文件。
深度学习目标检测之YOLOv3实战(一)keras原demo复现_第3张图片
第三步:图片及视频检测
打开yolo.py,修改model_path、anchors_path、classes_path等路径,未防止出现不必要的报错,强烈建议大家使用绝对路径。在demo的score与iou根据识别效果可进行相应修改,score为置信度,值越大检测到的物体越少,准确度越高,iou设置检测框的重合度,值越大,框越多,一个物体上被多次框选的可能性就越大。
图片尺寸不需要进行修改,因为框架中已经写入了自动对图片进行统一尺寸的函数。
在项目cmd下输入以下命令进行图像检测:
图片:
yolo_video.py --image
运行后会提示输入图片,将所需要检测的图片复制到项目下,输入图像名即可,或者输入图片的绝对路径进行检测。识别效果如下:
深度学习目标检测之YOLOv3实战(一)keras原demo复现_第4张图片
视频:
将视频复制到项目下,或者输入绝对路径
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

与镇贴的图片对比
只检测人哦
深度学习目标检测之YOLOv3实战(一)keras原demo复现_第5张图片

整个框架已经搭建完成,基本可以完成初步的测试识别的工作,下一篇文章我会讲一下如何用自己的训练数据进行训练并识别。
收拾东西准备放假,欢迎留言,交流进步。

你可能感兴趣的:(深度学习,目标识别)