深度学习经验总结:
大多数情况下,只要数据集足够大且标记良好,无需更改模型或训练设置即可获得良好的结果。 如果一开始你没有得到好的结果,针对YOLOv5,你可以采取一些步骤来改进。
1. 数据集
- 图像数量:推荐每种类别至少大于1500张图片;
- 图像多样性:必须代表已部署的环境。 推荐来自一天中不同时间、不同季节、不同天气、不同光照、不同角度、不同来源(在线抓取、本地收集、不同相机)等的图像;
- 标签一致性: 必须标记所有图像中所有类的所有实例, 部分标签将不起作用;
- 标签准确性: 标签必须紧密地包围每个对象。 对象与其边界框之间不应存在空间。 任何对象都不应缺少标签。
- 背景图片:背景图像是没有对象的图像,这些图像被添加到数据集中以减少误报 (FP)。 推荐大约 0-10% 的背景图片来帮助减少误报(COCO 有 1000 张背景图片供参考,占总数的 1%)。 背景图像不需要标签。
2. 模型选取
YOLOv5x 和 YOLOv5x6 等较大的模型几乎在所有情况下都会产生更好的结果,但参数更多,需要更多的 CUDA 内存来训练,并且运行速度较慢。 对于移动部署,我们推荐 YOLOv5s/m,对于云部署,我们推荐 YOLOv5l/x。
- 预训练模型:(推荐中小型数据集训练)
python train.py --data custom.yaml --weights yolov5s.pt
yolov5m.pt
yolov5l.pt
yolov5x.pt
custom_pretrained.pt
- 白手起家:(推荐大型数据集训练)
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml
3. 训练技巧
- Epochs:从 300 个 epoch 开始。 如果这过早过拟合,那么您可以减少 epochs。 如果在 300 个 epoch 后没有发生过拟合,则训练更长时间,即 600、1200 个等 epoch;
- Image size:COCO以 --img 640 的原始分辨率进行训练,但由于数据集中有大量小对象,它可以从更高分辨率的训练中受益,例如 --img 1280。如果有很多小对象,那么自定义数据集将受益于以原生或更高分辨率进行训练。 最佳推理结果是在与运行训练相同的 --img 处获得的,即如果您在 --img 1280 处训练,您还应该在 --img 1280 处进行测试和检测;
- Batch size:使用您的硬件允许的最大 --batch-size。 小批量会产生较差的批量规范统计数据,应避免使用;
- Hyperparameters:增强超参数将减少延迟和过拟合,允许更长的训练和更高的mAP。(可在首次训练使用scrath参数,再利用预训练权重进行finetune)