061、增量训练与灾难性遗忘:扩充类别时如何保留旧类别的检测能力
2026/6/13 15:32:53 网站建设 项目流程

061、增量训练与灾难性遗忘:扩充类别时如何保留旧类别的检测能力

上周三凌晨两点,我在服务器上跑完第47轮增量训练,mAP@0.5从0.78直接掉到0.41。新加的“安全帽”类别检测得不错,但原来能稳定识别的“行人”“车辆”几乎全崩了。这种“学新忘旧”的痛,做目标检测的兄弟应该都懂——这就是灾难性遗忘。

灾难性遗忘的本质:不是模型笨,是梯度在打架

先别急着调学习率。你得理解为什么旧类别会“失忆”。YOLO的检测头里,每个类别对应一组分类权重。当你加入新类别,分类层的维度从C扩展到C+K,新初始化的权重是随机的。反向传播时,新类别的梯度会“冲刷”掉旧类别在特征提取层积累的判别信息。

我做过一个实验:在COCO子集上训练5类,冻结backbone只训练检测头,增量加入3类后,旧类AP下降12%。如果放开backbone一起训,旧类AP直接掉28%。这说明灾难性遗忘主要发生在特征提取层,而不是分类头。

实战方案一:知识蒸馏——让旧模型当老师

最直接的办法是让旧模型“监督”新模型。训练时加载旧模型权重作为teacher,新模型作为student。损失函数改成:

# 这里踩过坑:蒸馏损失不能只加在分类头上# 特征层的蒸馏更重要def

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询