天天看点

YOLOv4训练自己的数据

环境要求:

1、ubuntu16.04或者ubuntu18.04

2、cmake_minimum_required(VERSION 3.12)(升级包见software)

升级cmake:

(1)tar zxvf cmake-3.12.2-Linux-x86_64.tar.gz

(2)mv cmake-3.12.2-Linux-x86_64 /opt/cmake-3.12.2

(3)ln -sf /opt/cmake-3.12.2/bin

在darknet-master目录下运行:cmake.&make -j48

数据集制作与规范性检查:重要

1、数据集目录结构:

VOCdevkit

--VOC2007

----Annotations(XML标签文件)

----ImageSets

------Main(不带路径、标签的train.txt,trainval.txt,test.txt,val,只有文件名索引)

----JPEGImages(原始图片)

2、数据集rename

主要作用:

yolov4读取数据时,会按照其逻辑读取图片和labels文件,当图片名出现不规范命名时,会读取错误,故加入rename操作保证读取正确。

详情请见:rename_jpg.py脚本文件,可根据实际情况修改

3、数据规范性检查

主要作用有:

(1)检查标签是否越界,当越界后可根据实际情况逐一删除

(2)检查jpg和xml文件是否对应

详情请见:xml_jpg.py脚本文件,可根据实际情况修改

4、yolov4的labels 、train.txt,trainval.txt,test.txt,val.txt文件生成

详情请见:make_txt.py,可根据实际情况修改

注意:修改classes类别和相关文件路径

至此,数据集制作已经完成,如果所有步骤都认真完成并检查,即可确认数据集没问题。

YOLOv4训练配置:

训练文件准备:

1、网络和超参:yolo-obj.cfg

主要修改部分:

classes:对应自己数据集类别数

filters:连接classes的三个修改为(classes+5)*3,5对应回归的五个参数(x,y,w,h,pro)

bacth:96(在GPU 内存允许前提下尽量调大)

subdivisions:32(配合bacth调节)

learning_rate:建议初始学习率为0.001,当loss更新不动时,调小学习率(至于多大,自己尝试即可)

2、数据入口配置文件

voc.data中

3、voc.names

训练数据集的类别

4、训练脚本

./darknet detector train cfg/voc.data cfg/yolo-obj.cfg /media/em/data_1/0716/darknet-master/backup/backup0715_416/yolo-obj_best.weights -map

脚本可见:train_demo.sh

5、最佳map测试

说明:可打印每个类别的ap,map等参数

脚本可见:map_demo.sh

6、批量图片测试及预训练标签文件生成

详情请见:test.py

前向测试脚本,批量读取图片,可打印、输出预测结果(图片和txt文件)。

后期补充:

1、添加检测类别

(1)利用前训练模型生成txt标签文件

详情请见:test.py生成图像对应的txt标签文件,如下:

  (2)txt2xml

详情请见:txt2xml.py脚本

(3)合并xml

详情请见:VOCdatasetOperation.rar

2、添加类别后的训练方法:

方法一:通过训练好的模型finetinue,冻结某些层的参数(目前知道如何冻结层,但是还需理解并做实验:冻结哪些层和如何单独训练哪些层更符合理论且能得到更好的效果)

方法二:合并数据集重新训练

训练及调优相关:

1、设置random=1,打开多分辨率输入开关

2、增加网络输入分辨率,如将输入提高到(height=608,witdh=608),以增加精度

3、建议max_batchsize为2000×classes

4、推荐在训练数据集中负样本加入一些空txt

5、建议标注时,仅标注物体的可见部分,或标注物体的可见和重叠部分,或标注比整个物体稍多一点的部分(有一点间隙),标注你想让检测器检测的部分

6、如果单幅图像中的物体很多,需要在[yolo]层或[region]层中修改参数max=200或者更高(全局最大目标检测数量为0,0615234375*(width*height))

6、加速收敛:可以在cfg文件layer-136中设置参数stopbackward=1

7、可根据实际情况修改聚类anchor_boxes修改对应的size(也有kmeans脚本计算对应数据集的对应anchor_boxes的size,在尝试)

脚本文件看专栏其他博客

上一篇: CSS3多列
下一篇: CSS3属性(上)

继续阅读