yolov8数据模型增量实验记录

22 阅读4分钟

前言

首先了解yolov8的几个模型(n、s、m、l、x),能识别到的物体有80种

类别ID物体名称类别ID物体名称类别ID物体名称类别ID物体名称
0person20elephant40wine glass60dining table
1bicycle21bear41cup61toilet
2car22zebra42fork62tv
3motorcycle23giraffe43knife63laptop
4airplane24backpack44spoon64mouse
5bus25umbrella45bowl65remote
6train26handbag46banana66keyboard
7truck27tie47apple67cell phone
8boat28suitcase48sandwich68microwave
9traffic light29frisbee49orange69oven
10fire hydrant30skis50broccoli70toaster
11stop sign31snowboard51carrot71sink
12parking meter32sports ball52hot dog72refrigerator
13bench33kite53pizza73book
14bird34baseball bat54donut74clock
15cat35baseball glove55cake75vase
16dog36skateboard56chair76scissors
17horse37surfboard57couch77teddy bear
18sheep38tennis racket58potted plant78hair drier
19cow39bottle59bed79toothbrush

想做的事情

在yolov8能识别的物体之上再新增一种物体80+1

思路一 (冻结骨干 + 定量训练)

YOLOv8 想象成一个 "识别工厂" ,有两个主要部分:

部分作用类比
骨干网络 (Backbone)提取图片的通用特征(边缘、形状、纹理等)“眼睛和大脑”,看东西的基础能力
检测头 (Head)识别具体物体并画框“工人”,根据特征判断是什么

冻结骨干?

❌ 不冻结的问题

如果整个网络都训练,就像让工厂重新装修+换工人,结果:

  • 旧工人(原有识别能力)会忘记怎么工作
  • 知识遗忘 - 不再认识 person、dog 了

✅ 冻结骨干的好处

只培训新工人,保留老工人:

  • 骨干网络不动(保留看东西的能力)
  • 只训练检测头(学习识别新东西)
  • 不会忘记原有80类

结果

生成新的模型始终只能识别新添加的物体

  • 旧模型的状态:模型已经学会了如何区分“人、狗”这两类。它的参数(权重)稳定在能够划分这两类空间的特定数值上。

  • 只加新类(如“phc”)的情况:当你冻结部分层或直接微调,只用“平衡车”的图片训练时,模型只有一个任务:把“平衡车”这一类区分出来。

    • 问题在于,数据集中没有“人、狗”的负样本。模型为了把“平衡车”的准确率提得更高,会擅自移动原有的决策边界。
    • 结果往往是:模型现在非常擅长认出“平衡车”,但在原来“人、狗”的边界上出现了漂移。原本属于“人”的特征空间,可能现在被划给了“平衡车”或者变成了模糊地带。
    • 这就是参数冲突:为了拟合新知识,模型覆盖了旧知识。

新模型、如图, image.png

yolov8默认能识别到的物体,如图

image.png

思路二 (混合数据集 + 定量训练)

将新类别的数据和旧类别的数据混合,构成一个新的完整训练集,然后进行微调或从头训练

混合数据集?

❌ 混合数据集的问题

随着类别增加,训练集越来越大,算力成本线性增长。

✅ 冻结骨干的好处

效果最好,几乎不会遗忘,模型能完美区分类别间的界限。

结果

确实必须保留旧类别的数据来避免遗忘

新模型,如图

image.png

总结

针对“模型数据增量和持续学习”的场景:

  1. 如果追求极致的识别准确率,且旧数据可以随时获取:

    • 必须将旧数据+新数据合并重新训练。这是工业界上线的标准做法,虽然最笨,但最稳。
  2. 如果旧数据无法获取(数据回流受限)或存储成本极高

    • 不要直接微调。直接微调(仅用新类数据)是灾难性遗忘最严重的方式。
    • 推荐做法:采用特征提取器不变(冻结Backbone)+ 新增分类头的策略。虽然准确率可能略低于联合训练,但能保证旧类别的准确率100%不下降(因为旧参数没变)。或者使用蒸馏法,让新模型在通用特征提取能力上向旧模型看齐。

第三方数据集及模型 www.kaggle.com/