使用yolov3的神经网络框架训练实现自定义目标检测

前言

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,如图:
1
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
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、运行训练命令,正常运行会出现如图所示:
4
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本人测试的结果如图:
5

下一篇博客内容预告

下篇博客,将使用训练好的weight和cfg和names结合opencv,分享进行检测目标的代码
敬请期待!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值