yolov5获得最佳训练效果的秘诀
共 2131字,需浏览 5分钟
·
2021-08-17 21:37
大多数情况下,只要您的数据集足够大且标记良好,无需更改模型或训练设置即可获得良好的结果。如果一开始你没有得到好的结果,你可以采取一些步骤来改进,但我们总是建议用户在考虑任何更改之前首先使用所有默认设置进行训练。这有助于建立绩效基线并找出需要改进的领域。
如果您对训练结果有疑问,我们建议您提供尽可能多的信息(如果您希望得到有用的响应),包括结果图(训练损失、val 损失、P、R、mAP)、PR 曲线、混淆矩阵、训练马赛克,测试结果和数据集统计图像,如labels.png。所有这些都位于您的project/name
目录中,通常是yolov5/runs/train/exp
.
我们为希望在下面的 YOLOv5 培训中获得最佳结果的用户提供了完整指南。
数据集
每个班级的图像。每类≥1.5k 图像
每个类的实例。每类总计≥10k 个实例(标记对象)
图像多样性。必须代表已部署的环境。对于实际用例,我们推荐来自一天中不同时间、不同季节、不同天气、不同光照、不同角度、不同来源(在线抓取、本地收集、不同相机)等的图像。
标签一致性。必须标记所有图像中所有类的所有实例。部分标签将不起作用。
标签准确性。标签必须紧密地包围每个对象。对象与其边界框之间不应存在空间。任何对象都不应缺少标签。
背景图片。背景图像是没有对象的图像,这些图像被添加到数据集中以减少误报 (FP)。我们推荐大约 0-10% 的背景图片来帮助减少 FPs(COCO 有 1000 张背景图片供参考,占总数的 1%)。
型号选择
YOLOv5x 和YOLOv5x6等较大的模型几乎在所有情况下都会产生更好的结果,但参数更多,需要更多的 CUDA 内存来训练,并且运行速度较慢。对于移动部署,我们推荐 YOLOv5s/m,对于云部署,我们推荐 YOLOv5l/x。有关所有模型的完整比较,请参阅我们的 README表。
从预训练权重开始。推荐用于中小型数据集(即 VOC、VisDrone、GlobalWheat)。将模型的名称传递给
--weights
参数。模型会从最新的 YOLOv5 版本自动下载。
python train.py --data custom.yaml --weights yolov5s.pt
yolov5m.pt
yolov5l.pt
yolov5x.pt
custom_pretrained.pt
白手起家。推荐用于大型数据集(即 COCO、Objects365、OIv6)。传递您感兴趣的模型架构 yaml,以及一个空
--weights ''
参数:
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml
训练设置
在修改任何内容之前,首先使用默认设置进行训练以建立性能基线。train.py 设置的完整列表可以在train.py argparser 中找到。
时代。从 300 个 epoch 开始。如果这过早过拟合,那么您可以减少 epochs。如果在 300 个 epoch 后没有发生过拟合,则训练更长时间,即 600、1200 个等 epoch。
图片尺寸。COCO
--img 640
以--img 1280
. 如果有许多小对象,那么自定义数据集将受益于本机或更高分辨率的训练。最好的推理结果是在--img
训练运行的同时获得的,即如果你在 训练,--img 1280
你也应该在 进行测试和检测--img 1280
。批量大小。使用
--batch-size
您的硬件允许的最大尺寸。小批量会产生较差的批量规范统计数据,应避免使用。超参数。默认超参数在hyp.scratch.yaml 中。我们建议您先使用默认超参数进行训练,然后再考虑修改任何超参数。一般来说,增加增强超参数将减少和延迟过拟合,允许更长的训练和更高的最终 mAP。减少损失分量增益超参数等
hyp['obj']
将有助于减少那些特定损失分量的过度拟合。