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

如何为已训练的YOLOV8分类模型添加新类别且无需重新训练?

为YOLOv8分类模型添加新类别(无需从头训练)

首先明确:完全不进行任何训练就添加新类别是不可能的——YOLOv8分类模型的输出层参数和原类别绑定,新类别对应的输出分支不存在,必须通过微调(迁移学习)让模型学习新类别的特征,只是不用从头训练,复用原模型的大部分参数即可。

你之前直接训练没效果,大概率是数据集格式不对、没指定预训练模型(从头训练了),或者配置文件没更新。CLI是YOLOv8官方推荐的操作方式,确实更便捷易复现,具体步骤如下:

1. 整理数据集

  • 按YOLO分类数据集格式组织:创建数据集文件夹,结构为:
    your_dataset/
    ├── train/
    │   ├── class_old1/
    │   ├── class_old2/
    │   └── class_new/  # 你的新类别
    └── val/
        ├── class_old1/
        ├── class_old2/
        └── class_new/
    
    • 如果不需要保留原类别,只保留新类别即可,但原模型的旧类别识别能力会丢失;如果要同时保留旧类别和新增类别,必须把原类别数据也包含进来。

2. 更新数据集配置文件

创建或修改data.yaml文件,更新类别数和类别名称:

train: path/to/your_dataset/train
val: path/to/your_dataset/val
nc: 原类别数+1  # 比如原先是2类,现在改成3
names: ["class_old1", "class_old2", "class_new"]  # 按顺序包含新旧类别

3. 用CLI执行迁移学习(微调)

直接调用YOLOv8的CLI命令,基于原预训练模型进行微调,不用从头训练:

yolo classify train model=your_old_model.pt data=data.yaml epochs=20 batch=16 lr0=0.001
  • model=your_old_model.pt:指定你已有的预训练分类模型,这是实现“无需从头训练”的核心,模型会在原参数基础上更新输出层并微调特征提取层。
  • epochs:根据新类别数据量调整,一般10-30足够,不用像从头训练那样设几百轮。
  • lr0:学习率设小一点,避免破坏原模型已学到的特征。

4. 验证与测试

  • 验证模型效果:
    yolo classify val model=runs/classify/train/weights/best.pt data=data.yaml
    
  • 测试新类别样本:
    yolo classify predict model=runs/classify/train/weights/best.pt source=path/to/new_class_images
    

常见问题排查

如果之前训练没效果,检查:

  • 数据集路径是否正确,data.yaml里的路径要和实际一致。
  • 是否指定了预训练模型,没加model=xxx.pt的话会默认从头训练,效果差且慢。
  • 新类别数据量是否足够,至少要有几十张标注清晰的样本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:12:11