环境要求:
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/* /usr/bin/
3、CUDA>=10.0
4、opencv>=2.4
5、cudnn7.5.1.10
3、依赖库安装
sh run_requirements.sh
4、darknet-master环境配置
makefile前面几行:
打开GPU 加速,打开opencv,打开libdarknet.so生成开关
/*
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
ZED_CAMERA=0 # ZED SDK 3.0 and above
ZED_CAMERA_v2_8=0 # ZED SDK 2.X
*/
在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中
/*
classes= 24#类别数
train = /media/em/data_1/0716/VOCdevkit/2007_train.txt#训练数据
valid = /media/em/data_1/0716/VOCdevkit/2007_test.txt#测试数据
names = /media/em/data_1/0716/darknet-master/data/voc.names#类别名
backup = /media/em/data_1/0716/darknet-master/backup/backup0719_416#权重保存路径
*/
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标签文件,如下:
/*
1365 791 2001 1048 label
*/
(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,在尝试)
脚本文件看专栏其他博客