YOLOv5自定义重训:新增数据时是否需合并旧数据集以节省训练资源
YOLOv5 重训相关问题解答
问题1:重训时是否需要将旧的1万多条数据与新增的1000条数据合并使用?
建议必须合并使用。如果仅使用新增的1000条数据重训,模型会出现灾难性遗忘问题,之前在1万条旧数据上学到的特征会被大幅覆盖,原本能正确识别的样本大概率会出现误检、漏检的情况,反而得不偿失。
如果不想完全从头训练,也可以用你之前得到的准确率80%的模型作为预训练权重,在合并后的数据集上做微调,训练效率和最终精度都会比单独用新数据重训好很多。
问题2:若重训时新增了类别,是否可以仅使用新数据完成重训?
除非你完全不需要模型再识别原来的旧类别,否则绝对不能这么做。仅用带新增类别的新数据训练后,模型会彻底遗忘旧类别的特征,旧类别的识别准确率会直接降到接近0。
如果你的需求是保留原有全部类别、同时增加新类别识别能力,必须把包含所有旧类别的旧数据集,和标注了新类别的新数据集合并,保证训练集中覆盖所有需要识别的类别后再启动训练。
问题3:有哪些方法可以节省训练的时间与存储空间?
你可以参考以下实操性很强的优化手段:
- 优先用之前训练得到的80%准确率的模型作为预训练权重微调,不需要从随机初始化开始训练,可将所需训练epoch数减半,至少节省50%的训练时间
- 开启混合精度训练,YOLOv5原生支持该功能,训练命令加
--amp参数即可,既能降低显存占用、提升训练速度,还能减少中间文件体积 - 调整权重保存逻辑,不需要每轮训练都存权重,仅保留最优权重和最后一轮权重即可,把参数
--save-period设为-1就能关闭每轮保存的逻辑,大幅降低存储空间占用 - 适当降低训练输入分辨率,比如原本用640×640训练,没有极小目标检测需求的话可以调到480×480,训练速度能提升30%以上,精度损失基本可以忽略
- 采用冻结训练策略,前几轮先冻结backbone主干网络的权重,仅训练检测头部分,之后再解冻全网络训练,微调场景下能节省30%左右的训练时间,对最终精度影响极小
- 训练时关闭不必要的可视化输出,比如不需要每轮都生成检测样例图、冗余日志,能减少不必要的存储开销
内容的提问来源于stack exchange,提问作者123bmc
相关产品推荐
相关产品推荐

