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

如何在yolov7-seg.pt中新增自定义类别且不重训原有80类?

YOLOv7-segmentation新增单类别增量训练方案

核心思路

不重训原有80类,只练新增类别A,关键是冻结原有所有层的权重,仅解冻最后输出层的参数,同时修改配置适配81类的分割模型结构(分割任务的输出层和纯检测模型不一样,要注意掩码通道的计算)。

具体操作步骤

1. 修改数据集配置

  • 找到data/coco.yaml(或自定义数据集配置文件),将nc(总类别数)改为81;
  • 在names列表末尾添加自定义类别A,顺序必须是原有80类+新增的A;
  • 将train、val路径指向你已划分好的类别A的训练/验证集。

2. 修改模型配置

  • 打开cfg/training/yolov7-seg.yaml,将头部的nc参数改为81;
  • 定位所有YOLO输出层,更新filters参数:公式为(nc + 5 + 32),原80类时为80+5+32=117,现在改为81+5+32=118,三个YOLO层的filters都要修改。(注:32是分割任务的掩码通道数,纯检测模型无此参数,这也是之前用YOLOv5方法失败的核心原因)

3. 精准冻结权重

  • 加载预训练的yolov7-seg.pt后,仅让最后三个YOLO输出层的参数可训练:
    • 打开train.py,找到模型初始化代码段,遍历所有参数并默认设置requires_grad=False,再单独将三个YOLO层的参数设为requires_grad=True;
    • 不建议用命令行--freeze参数,易冻错层,代码精准控制更稳妥。

4. 调整训练参数

  • 学习率设为原训练值的1.5-2倍,比如原lr0=0.01,可设为0.015-0.02,仅训练少数参数需要稍高学习率;
  • 训练轮次无需过多,根据数据集大小设置100-300轮即可,重点关注验证集上类别A的mAP和分割掩码效果;
  • 你的数据集仅包含类别A,训练时损失仅针对该类别样本,不会扰动原有80类权重。

5. 验证效果

  • 训练完成后,用包含原有80类和类别A的样本测试,确认原有类别检测/分割效果无下降,同时类别A效果达标;
  • 若原有类别效果下降,检查是否存在未冻结的参数,或降低学习率重新训练。

踩坑排查

  • 训练损失不下降:检查所有YOLO层的filters是否都改为118,输出层参数是否真的解冻;
  • 原有类别失效:确认数据集和模型配置的nc、names完全对应,冻结代码是否覆盖所有非输出层;
  • 分割掩码异常:确认掩码通道数计算正确,损失函数是否适配新增类别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:35:28