前言
yolov3神经网络框架很厉害!opencv-dnn模块也不错!两个工具搭配相得益彰!因此本人使用yolov3的神经网络框架训练目标用opencv-dnn模块实现目标检测!效果嘛!棒棒的!非常完美!非常nice!
教程
以检测图片中的太阳花为例!
步骤:
1、准备工具:vs2017、darknet、opencv、Yolo_mark,并且安装好(本人的是win10系统环境),不懂怎么安装的请浏览本人博客,有详细教程安装这些工具!
博客地址:链接
2、使用yolo-mark为我们的目标检测图片制作训练集和测试集所需要的数据。
(使用yolo-mark的详细教程网址:https://github.com/AlexeyAB/Yolo_mark)
网址链接:链接
2.1、在安装好的Yolo_mark-master\x64\Release\data\img文件夹里放入我们需要检测的目标图片。(每次检测新的目标时,都要清空img文件夹)
2.2、修改Yolo_mark-master\x64\Release\data\obj.data里面的各个参数,例如我只检测太阳花一类,就在classes=1,2类就写2,几类就写几,其他的建议不用修改
classes= 1,训练图片中的对象数、
train = data/train.txt,训练标签的路径
valid = data/train.txt,验证标签的路径
names = data/obj.names,类名的路径
backup = backup/,训练权重存放的路径(一般存放在darknet-master\build\darknet\x64\backup里面)
2.3、修改Yolo_mark-master\x64\Release\data\obj.names里面的类名,有几个检测目标就写几个检测目标的类名(使用英文),每个类名都要换行书写,不能连在一起。
2.4、运行文件命令Yolo_mark-master\x64\Release\yolo_mark.cmd,弹出应用控制窗口,在里面框选要检测的目标,完成后会在Yolo_mark-master\x64\Release\data\img文件夹中生成各个图片的标签文件****.txt,如图:
2.5、选择合适的cfg网络(可以在cfg文件夹里选择),使用记事本打开并更改classes(位置一般在最后)的数量,classes=类的数量,只有一个检测目标就填1,继续更改filter(位置就在classes前面一点,对于yolov2它的数值是(classes+5)*5,对于Yolov3 (classes + 5)*3),最后修改random(位置在文件末尾)为1。
2.6、subdivision:这个参数很有意思的,它会让你的每一个batch不是一下子都丢到网络里。而是分成subdivision对应数字的份数,一份一份的跑完后,在一起打包算作完成一次iteration。这样会降低对显存的占用情况。如果设置这个参数为1的话就是一次性把所有batch的图片都丢到网络里,如果为2的话就是一次丢一半(本人用的是yolov2-voc.cfg,官网推荐修改了batch=64和subdivision=64)。
2.7、选择合适的卷积层的预训练权重(我用的预权重darknet19_448.conv.23),其实就是迁移学习。
2.8、把选择好的的cfg网络和Yolo_mark-master\x64\Release\data文件夹里面的train.txt、obj.names、obj.data 、(预训练权重)darknet19_448.conv.23和文件夹img这几个文件复制粘贴到自己安装的darknet-master\build\darknet\x64\data文件夹里。
如图:
2.9、在安装的darknet-master\build\darknet\x64文件中,在空白处按住shift+鼠标右键点击Windows power shell ,运行训练命令:
./darknet.exe detector train data\obj.data data\yolov2-voc.cfg data\darknet19_448.conv.23(本人的训练命令)
训练命令格式:
darknet.exe detector train <.data文件位置> <.cfg文件位置> <权重文件位置> <识别文件位置>(各命令的解释)
3、运行训练命令,正常运行会出现如图所示:
3.1训练过程中,鼠标点击控制台窗口,会暂停训练,按键盘任意键则继续训练。
3.2在darknet-master\build\darknet\backup里面存放的是训练的权重(weights文件)类似于级联分类器的xml文件。
3.3训练完后得到权重(weights文件),在darknet-master\build\darknet\x64里面开始测试,启动Windows power shell输入测试命令。
测试命令:
.\darknet.exe detector test data/obj.data data/yolov2-voc.cfg data\yolo
v2-voc.weights -i 0 -thresh 0.25 sunflower.jpg -ext_output
命令格式:
darknet.exe detector test <.data文件位置> <.cfg文件位置> <权重文件位置> <识别文件位置>(各命令的解释)
3.4本人测试的结果如图:
下一篇博客内容预告
下篇博客,将使用训练好的weight和cfg和names结合opencv,分享进行检测目标的代码
敬请期待!!!