本篇文章是使用大神开源代码后得出的总结,带你规避路上的坑,带你快速使用上YOLOv3,可以不了解它的原理的前提下,知道它是个目标检测器就好了,帮你自动检测图片中物品的位置。
首先,上大神凯源代码:https://github.com/YunYang1994/tensorflow-yolov3,该代码讲述是大神用voc数据训练时使用的全部代码,所以你的训练自己的数据有些代码用不到。
下面是整个步骤,纯属个人理解,有不同意见欢迎提出。
一.首先将大神的代码克隆下来 :
$ git clone https://github.com/YunYang1994/tensorflow-yolov3.git
如果是识别常规物体,使用大神的part 2 的quick start 就好了,而如果是自己的数据集特别的物品,请参看下面的讲解:
1.制作自己的训练图像数据集,工具labelimg,在网上可以搜到官方安装和使用教程,这里不做赘述,python3使用者推荐安装方法:
pip install labelimg
在终端输入 labelimg 启动软件
2.图像标记后数据格式xml,将xml数据提取data.txt,格式为:
Xxx/xxx.jpg 48,240,195,371,11 8,12,352,498,14 #注意逗号和空格的位置
#image path x_min,ymin,x_max,y_max,class_id x_min,y_min
Image path 推荐使用相对于train.py的相对路径
定义自己的类名文件:Class.nams:
Person
car
…
这里已将将数据提取为data.txt的形式,就不用大神训练VOC数据的代码 voc_annotation.py
将data.txt按一定比例分为trian.txt和test.txt,拿来训练网络和测试效果。
3.编辑./core/config.py 中的配置项
_C.YOLO.CLASSES =”./data/classes/class.names”
_C.TRAIN.ANNOT_PATH=”./data/dataset/train.txt”
_C.TEST.ANNOT_PATH=”./data/dataset/test.txt”
按照大神的两种训练方式都可以训练方式,推荐迁移学习方式训练,最后迭代50遍训练结束,保留误差最下的权重文件ckpt。
到这里大家都比较疑惑代码中的convert_weight.py用不了,其实这个代码不用使用。大家刚把代码拷贝下来时应该注意源代码中不存在.ckpt文件,所以这个代码的作用是将模型中的yolov3.weight文件转成.ckpt文件!!
所以下面一步应该是直接用代码freeze_graph.py将ckpt文件转为pb文件,被调用识别图片中物体。
转化前将freeze_graph.py中的pb.file改为自己想要的模型文件名,ckpt_file改为要转换的训练出来的ckpt文件。
现在大功告成,开心的使用源代码提供的image_demo和vedio_demo代码识别图像和视频中的物体吧。