目录
上一篇博文讲解了 java 实现 darknet + yolov4 实现官方标注的目标检测,本篇博文记录下训练自定义数据的整个过程。
yolov4 的 github ,上面讲解的比较详细了。
一、前期准备工作
1、样本数据集的收集
样本需要多样化,其特点:
- 不同角度
- 不同大小
- 不同光照
- 不同形态
- 不要过多重复(重复率最好低于80%)
样本的数量是越多越好。
数据收集好了之后,按照 4:1
到 1:1
的比例范围分成两份,多的用作训练数据集
,少的部分用作测试数据集
。强烈建议不要使用训练数据集作为测试数据集。
2、样本数据的处理
图片的标注直接影响整个 ai 分析的精准度以及预测框的精准度,所以一定要定义好标注的规范文档,规定好每种目标对象的定义是什么,因为在实际的标准过程中,可能不是你自己来标注,所以需要统一每个人的标注。
自己实践过程中整理的标注规范
- 标注目标物体或者重叠部分
- 以肉眼能够看清的为标准
- 标注框只比目标物体大一点,留有一点空隙即可
- 训练数据集保留少量负样本——不画任何标注框,但是需要生成 txt 文件(把图片在 yolo_mark 工具上过一遍就会自动生成 txt 文件),我的做法是在 10 的整数倍图片上不标注,即 1/10 的样本作为负样本。
如果样本较少,可以少留一点负样本。负样本是增加网络的泛化性的。
- 标注对象的定义需要清楚
标注图片
使用 yolov4 github 上推荐的 yolo_mark 工具 对 训练数据集、验证数据集
进行标注,详情请查阅github 文档。
准备好 obj.names 文件,里面存放的是要训练的类型名称,一行一个类型名称。
例如:obj.names
people
car
ship
dog
...
将该文件放在 yolo_mark/data
目录下。注意训练数据集需要保留负样本,而测试数据集是不需要负样本的。
标注完成后,yolo_mark/data/img
目录下会自动生成与jpg同名的txt文件;yolo_mark/data
目录下会自动生成 train.txt 文件。
3、修改配置和下载预训练模型
yolo-obj.cfg:修改配置请依据 自定义配置 和 不同显卡的模型参数设置 进行修改,讲解的比较详细。
yolov4.conv.137:下载预训练模型
二、darknet 的环境搭建
1、windows 编译环境搭建
使用的编译方式官方文档上推荐的 windows 系统 vcpkg 的方式。(vc 表示的是 Visual c++环境)
需要的环境和版本号(github 上有详细说明)
- CUDA >= 10.2: CUDA Toolkit Archive | NVIDIA Developer (on Linux do