首先,当然是要配置好环境啦,这里相信屏幕前的你已经配置好了,如果没有配置好也不用着急。可以看一下本博主另一篇保姆教程,请移步:https://blog.csdn.net/weixin_39954922/article/details/105785460,,,,啊哈哈哈哈

一、配置好之后,最重要的就是数据集,因为博主报名参加了RM比赛,所以就用大疆给的官方数据集试验了一下,首先准备两个数据集,一个是图片数据集Image,一个是每个图像内标记好目标后生成的xml文件Annotation。这里我只用了两百张图片:如下图:

二、把图片放在darknet.exe同级目录下的data文件夹,在data内新建文件夹专门用来存放图片,这里我建立的是robomaster文件夹。

三、需要准备两种txt文件,一种是train.txt,这个txt文件要放在data文件夹下,且内容为存储了每张图片相对于darknet.exe的路径,笔者的文件如下:

另一种TXT文件是每张图片都对应有一个,是通过xml文件得来的,每个TXT文件里面都是纯数字如图一所示,记录了标记目标的信息。这个TXT的命名与对应图片的命名一样,且训练时要放置在与image相同目录下,如图2所示:

图一

图二

四、在data文件夹下建立.names和.data文件。笔者建立的是robomaster.names和robomaster.data文件,在robomaster.names文件里面写上要检测的目标的名称,每个名称占用一行,如图三所示,这里检测目标有五个

图三

robomaster.data文件的内容包括总共有多少类对象,train.txt的文件路径,备份路径等,如图四所示。classes要改成对应的数字,如果你想检测的目标有6个,就改成6。

图四

五、建立训练所需的.cfg文件,在cfg文件夹下创建,笔者直接复制的原有的yolov4.cfg,并改名为yolov4-robomaster.cfg。

六、更改cfg文件内的参数。非常重要!!!

6.1更改batch为batch=64

6.2更改subdivisions为subdivisions=16

6.3更改max_batches为classes数*2000,但是不要少于4000,例如笔者这里有classes=5,那么max_batches=10000

6.4更改steps为max_batches的80%,90%,笔者这里steps=8000,9000,再设置神经网络尺寸width=416
height=416,或者其他32的倍数。

6.5在cfg的3个[yolo]里面,将classes=80改为你的classes数目,笔者这里为classes=5,三个都要改哦

6.6在每个[yolo]前面有个[convolutional],注意有两个,在最靠近[yolo]那个里面改,将里面的filters=255改为filters=(classes+5)*3

笔者这里filters=(5+5)*3=30,注意每个都要改哦。

如果您使用[Gaussian_yolo] 则filters=(classes + 9)x3  在每个 [Gaussian_yolo] 之前的[convolutional]

6.7注意,不要在cfg文件里面写filters=(classes + 5)x3),要直接算出数字

七、下载预训练模型,这里我用的是yolov4.conv.137,下载地址为:https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137

下载完成后,保存在与darknet.exe相同目录下

八、开始训练在darknet.exe目录下用powershell运行:

.\darknet.exe detector train data/robomaster.data cfg/yolov4-robomaster.cfg yolov4.conv.137

然后就开始训练啦。

9.训练的时候会在终端出现一张损失函数的图标和当前迭代的函数图,按照官方的说法是:当红框内第一个参数小于0.06就可以停止训练了。第二个参数是当前迭代的次数,注意,YOLOV4每迭代100次会自动保存训练的模型,文件名为yolo-robomaster_last.weights,在backup文件夹内。若训练结束,则在该文件夹下生成yolo-robomaster_final.weights。每训练1000次会生成:yolo-robomaster_1000.weights,两千次会生成yolo-robomaster_2000.weights等等,,具体的可以看一下YOLOV4github官方说明:https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects

10.笔者电脑台垃圾,训练到三百次就放弃了,不得不说显卡是个好东西,损失函数快到20,说明误差还是很大的,没办法,就这样凑合跑吧:.\darknet.exe detector demo data/robomaster.data cfg/yolov4-robomaster.cfg yolov4-robomaster.weights -ext_output test.mp4

(我总觉得这个代码不对,但是为啥能运行,还是很迷啊哈哈哈哈,应该不是这个代码,各位看官有了解的可以在评论区解释一下子。感激不尽)

记得要把测试视频放到和darknet.exe同一目录下哦。检测效果如下:模型训练的误差很大,效果确实不咋滴。

训练时bug说明:

1.CUDAERROR,out of memory:把subdivisions改大一些,但一定要是32的倍数。

2.如果在训练过程中看到平均(损失)字段的nan值-则训练有误,但如果nan在其他行中-则训练进行得很好

3.如果您在cfg文件中更改了width =或height =,则新宽度和高度必须被32整除。

引用:

1.数据集TXT文件的生成参考:https://blog.csdn.net/public669/article/details/98020800?depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2&utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2

2.https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects