模型训练通用规则:
- 如果 train 效果挺好, 但test或predict效果较差, 说明 overfit 了. 原因有: (1)模型太复杂了, 这时候应该减少epoch 或者使用更小scale的模型. (2) train数据集太小, 这时候需要增加训练数据
- 如果 train 效果不佳, 可以使用更大规模的模型, 或者增加训练数据, 或者增大 epoch.
- 计算过程中不用关心 loss 是否太大, 重要的是loss 是否可以收敛. 如果始终不收敛, 尝试调整优化器类型或降低学习率.
- from scratch 训练模型需要足够的算力和数据集, 以及强大的调参能力, 否则毫无意义.
- 调整神经网络结构. 选择合适的模型规格( n/s/m/l/x 以及 p2/p6), 增加网络深度和宽度可以增强模型的表达能力.
- 数据集应该大于 500, 否则效果很难上来.
- 数据集应有较高质量, 标签不能错误, box边框要准确, 正负样本要平衡, 增加数据多样性.
- 调整预测的阈值, 降低conf阈值可以提升recall, 提高conf阈值可以提升precision.
- 调整超参, 学习率/batch/优化器/epoch 等参数
yolov8 参数设置技巧:
- train/val/test/predict 超参最好要一致, 不一致的参数有可能会引起predict显著变化.
- task 参数默认为 detect, 可以传递 task 如:[detect、classify、segment]
- mode 参数默认为train, train模式下默认包含 val, ,mode 有:[train、predict、val、export]
- model 选择v8的预训练 yolov8n.pt 模型文件, 该文件初始时不存在, 但软件包会自动下载 yolov8n.pt 模型到 myEnv\Scripts目录. YoloV8 提供三个系列的模型, 正常系列(640像素) yolov8, 小目标系列 p2, 高清(1280像素) p6, 按需选择即可.
- epochs: 训练数据集需要重复训练多少次, yolov5 推荐初始为 300 个, 而 yolov8推荐初始为500, 如果发现有 overfit, 则减少, 如果没有overfit, 则增加增加到600、1200. 如果使用 CPU, 为了缩短时间epochs可从100开始试.
- batch: batch size 为一次前向传播送入模型的图片数量, 完成后将做反向传递, 进行weight/bias参数调整, batch size 取值必须为2的n次方, 最小值为2. 这个参数应使用硬件支持的最大 batch size, 比如64开始, 如果不爆内存/显存问题, 则增加到 128、256, batch size越大 batchNorm 效果越好, 精度越高.
- lr0 为初始学习率, 学习率是梯度下降的步长系数
- lrf 为最终学习率, 学习率是梯度下降的步长系数
- imgsz 参数: 这个参数非常重要:
- 被检查物size, 应该大于 15 * 15 , 否则效果很差, 如要检测小物体最好搭配 yolov8 P2模型.
- imgsz 参数必须是 32 的倍数
- 最好是train/val/test 图像最好保持同样的size.
- 通常 imgsz 越大效果也越好, 但这并不绝对, 如果被检查物非常小, img size 太大反而不行.
- 采用较大 imgsz, 比较容易爆显存.
- 送入模型的图像最好不需要经过resize, 即原始图像size最好等于 imgsz 参数.
- 通常设置 imgsz=640 是一个很好的选择, yolo会自动将我们的图像缩放到640*640的尺寸, 方法是:将图像的长边缩放到640, 图像的短边按照长边缩放的比例缩放, 如果不足640, 则在短边两侧自动padding黑色像素.
- yolov8 预训练模型基于 640 尺寸的图像训练, 如果我们的数据集为高清图像, 可以采用 yolov8 P6模型.
参考
https://docs.ultralytics.com/guides/yolo-common-issues/
https://docs.ultralytics.com/guides/yolo-performance-metrics/
https://docs.ultralytics.com/yolov5/tutorials/tips_for_best_training_results/#dataset