You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Darknet YOLOv3预训练模型自定义训练:新增类别是否需同步标注原有类别

YOLOv3自定义双类别训练问题解答

核心问题结论

1. 能不能只喂新增类(单反)的数据集训练,同时保留原有类(手机)的检测能力?

完全不行。直接这么做会出现「灾难性遗忘」问题:模型在学习新增类特征的过程中,会完全覆盖之前从COCO数据集学到的手机类特征,最终要么只能识别单反,要么两类的识别精度都会崩到不可用的水平。

2. 是不是必须同时准备两类的标注数据集共同训练?

对入门者来说,这是最稳妥、踩坑最少的首选方案,而且你不需要自己标注手机类的数据集,可以直接复用COCO的公开标注:

  • 从公开COCO数据集中筛选出所有标注为cell phone的图片和对应标签文件,省掉自己标注原有类的工作量
  • 只需要自己标注新增的单反类的数据集,和前面导出的手机类数据集混合后按7:2:1比例拆分训练/验证/测试集即可

入门级实操步骤

如果你选两类共同训练的方案,按以下步骤操作就行:

  • 替换标签文件:把原coco.names内容清空,依次写你的两个类别名,注意和标注文件里的类别顺序完全对应,示例:
    cell phone
    dslr camera
    
  • 修改YOLOv3配置文件:
    • 把所有classes=80的参数改成classes=2(一共有3处,对应3个不同尺度的检测头)
    • 把每个[yolo]层前紧邻的[convolutional]层的filters参数改成21(计算公式是3*(类别数+5),2类的话就是3*(2+5)=21,一共也是3处)
  • 训练时加载官方公开的darknet53.conv.74预训练权重做迁移学习,比从零开始训练速度快3~5倍,最终精度也更高

其他可选方案(新手谨慎尝试)

如果实在不想准备原有类的数据集,还有两个替代方案,但都有明显短板:

  • 增量训练+知识蒸馏方案:修改YOLO的损失函数,加入知识蒸馏模块,保留模型原有学到的手机类特征,只微调新增类的检测头。优势是不需要原有类数据集,劣势是需要修改Darknet源码,调参难度高,最终原有类的精度大概率会比联合训练低10%以上
  • 双模型融合方案:单独训一个只识别单反的YOLO模型,推理时同时跑官方80类预训练模型和你训的单类模型,最后合并两个模型的输出结果,过滤掉除手机、单反之外的其他类别结果。优势是完全不需要改训练逻辑,劣势是推理速度慢一倍,仅适合本地测试、不需要部署到边缘设备的场景

内容的提问来源于stack exchange,提问作者mlmlmlm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:06:01