140、YOLOv8改进实战:Label Smoothing标签平滑在分类分支中的实现与过拟合抑制

140、YOLOv8改进实战:Label Smoothing标签平滑在分类分支中的实现与过拟合抑制
140、YOLOv8改进实战:Label Smoothing标签平滑在分类分支中的实现与过拟合抑制上个月调一个细粒度分类检测项目,模型在训练集上分类准确率冲到98%,验证集死活卡在82%不动。看loss曲线,分类分支的loss降得飞快,但val的top-1 accuracy纹丝不动。这种场景太熟悉了——模型对训练样本的类别特征过度自信,把噪声和偶然共现的模式当成了分类依据。当时试了dropout、weight decay、数据增强,效果都不明显。后来在分类分支的loss计算里加了Label Smoothing,验证集直接跳了3.7个点。今天把这个trick的落地细节掰开揉碎讲清楚。为什么分类分支需要Label SmoothingYOLOv8的分类分支输出的是每个anchor对应的类别概率分布,训练时用BCE Loss(二值交叉熵)逐类别计算。标准的BCE Loss会让模型朝着预测概率为1(正类)或0(负类)的方向疯狂优化。问题在于,真实标签的one-hot编码隐含了一个假设:类别之间是互斥且绝对确定的。实际数据中,一张模糊的猫图片可能同时有60%像猫、30%像狗、10%像狐狸,但标签硬生生给了猫100%。这种硬标签训练会导致两个后果:一是模型对logit的数值极度敏感,稍微偏离就产生巨大梯度,训练不稳定;二是模型会把训练集中的噪声模式(比如特定光照、背景)当作类别判据,过拟合就这么来的。Label Smoothing做的事情很简单——把硬标签软化,让正类的目标概率从1降到比如0.9,负类从0升到0.1/(num_classes-1)。模型不再需要输出极端