122、YOLOv8改进实战:Label Smoothing标签平滑——防止过拟合的正则化技巧与代码集成
122、YOLOv8改进实战:Label Smoothing标签平滑——防止过拟合的正则化技巧与代码集成上个月调一个工业缺陷检测项目,模型在训练集上mAP冲到0.97,验证集死活卡在0.82不动。Loss曲线漂亮得像教科书,但val的混淆矩阵里,背景类误检率飙到15%。这种过拟合症状太典型了——模型对训练集的标签分布过于自信,把噪声和边缘案例都当成了绝对真理。翻遍YOLOv8的ultralytics源码,发现官方实现里压根没集成Label Smoothing。这其实是个历史遗留问题,YOLOv5时代就有人提PR,但官方一直没合。今天就把这个坑填上,手把手教你怎么在YOLOv8里把标签平滑塞进去。标签平滑到底在干什么先别急着看代码。理解原理才能调好参数。传统分类任务里,one-hot标签告诉模型:这个类别概率是1,其他都是0。模型学到的logits会拼命往无穷大推,导致类别间的决策边界极其尖锐。这种尖锐边界在训练集上表现完美,但遇到验证集里那些模棱两可的样本,直接就崩了。标签平滑的做法很简单:把硬标签(1,0,0,0)变成软标签(0.9, 0.033, 0.033, 0.033)。这里0.033是平滑系数0.1除以类别数3得到的。模型不再需要把正类logits推到无穷大,只需要比其他类大一点点就行。决策边界变平滑了,泛化能力自然就上来了。这里有个关键点:平滑系数不是越大越好。我见过有人直接设0.3,结果模型学成了均匀分布,检测头直接废了。工业场景下0.05到0.1是个安全区间,学术竞赛可以试试0.15。