一、常见的训练技巧
1. 数据增强技术
几何变换:随机旋转(±15°)、平移(±10%)、缩放(0.8-1.2 倍)。
像素级增强:颜色抖动(Hue ±5, Saturation ±15%)、高斯模糊(σ=0.5)。
高级技巧:Mosaic 混合四张图像(YOLOv5 首创)、Copy-Paste 粘贴小目标至复杂背景。
2. 训练优化方案
学习率调度:采用余弦退火(Cosine Annealing)或 Warmup 策略,避免过拟合。
正则化:应用 L2 正则化(权重衰减)、DropBlock 随机失活区域特征。
半精度训练:使用 FP16 精度加速训练,减少显存占用(NVIDIA 显卡支持)。
3. 模型压缩与加速
剪枝:通过通道剪枝(Channel Pruning)减少冗余参数,如使用 YOLOv5 的 prune.py 脚本。
量化:将浮点模型转换为 INT8/INT4 定点数,在 TensorRT 中部署可提速 2-3 倍。
知识蒸馏:利用教师模型(如 YOLOv8-L)指导学生模型(YOLOv8-S)学习,保持精度同时减小模型体积。
二、常见问题及解决
- 1、CUDA内存不足
减小batch-size或者image size - 2、训练损失NaN
降低学习率,检查数据标注 - 3、验证精度低
增加数据量(比如进行数据增强),延长训练时间 - 4、推理速度慢
使用TensorRT加速,减小输入尺寸 - 5、小目标检测差
增大image size,使用FPN/PAN结构
这部分参考https://blog.csdn.net/afghjhg/article/details/155888665
三、神经网络的调参顺序
- 1.先保证"能稳定训练",再谈效果
在任何调参之前,先确认一件事:模型能不能正常收敛,重点看三点:- loss是否持续下降,而不是剧烈震荡
- 训练集和验证集曲线是否基本合理
- 不出现NaN、梯度爆炸、直接崩掉的情况
- 2.学习率(Learning Rate)
学习率永远是最重要的参数,没有之一。
常见经验:- loss不降:学习率可能太大
- loss降得很慢:学习率可能太小
- loss上下震荡:学习率大概率不合适,在不确定时,先用一个相对偏小但稳定的学习率,确保模型能学,再考虑调大
- 3.batch size 与优化器
在学习率基本可用后,再调整这两项- 小batch:噪声大,泛化好,但不稳定
- 大batch:收敛稳,但容易过拟合
- Adam/AdamW:收敛快,调参友好
- SGD:泛化好,但对学习率更敏感,建议:先用Adam类优化器跑通流程,再考虑是否更换SGD
- 4.正则化相关参数
这一步是为了解决过拟合问题,常见可调项包括:
weight decay/dropout/label smoothing
调参逻辑是:- 训练集好,验证集差:加强正则
- 两边都差:返回步骤1
- 5.训练策略与技巧
在模型基本稳定后,再考虑这些"锦上添花"的东西,这些通常带来的是小而稳定的提升,而不是质变- 学习率调度策略(cosine/step/warmup)
- EMA、梯度裁剪
- 混合精度、梯度累计
- 6.模型结构相关参数
- 网络深度、宽度
- 模块数量
- 隐藏维度
四、如何解决类别不平衡的问题
-
损失函数:
- 加权交叉熵:为少数类分配更高权重
- Dice Loss:直接优化Dice系数
- Focal Loss:降低易分类样本的权重
- Tversky Loss:平衡精确率和召回率
-
采样策略:
- 过采样少数类
- 欠采样多数类
- 在线困难样本挖掘(OHEM)
-
数据增强:
- 针对少数类进行特定增强
-
评估指标:
- 使用mIoU代替准确率