多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

041、YOLOv11损失函数自适应——自适应损失权重分配机制的即插即用模块设计与收敛加速验证

041、YOLOv11损失函数自适应——自适应损失权重分配机制的即插即用模块设计与收敛加速验证 041、YOLOv11损失函数自适应——自适应损失权重分配机制的即插即用模块设计与收敛加速验证上个月调一个工业缺陷检测的场景,模型在训练到第80个epoch时,分类分支的loss突然崩了,定位分支却还在正常下降。翻看训练日志,发现分类分支的梯度范数在某个batch后直接跳了两个数量级。这种场景下,分类和定位的损失权重如果固定死,遇到数据分布偏移或者难样本集中出现,模型很容易被某个分支带偏。后来我干脆把损失权重改成动态的,让模型自己学会什么时候该重视分类、什么时候该重视定位。效果出乎意料,收敛速度提升了将近30%,mAP也涨了2个点。为什么固定权重是反直觉的YOLOv11默认的损失函数由三部分组成:分类损失(BCE)、定位损失(CIoU)和DFL损失。官方给的权重配比是分类:定位:DFL = 0.5:7.5:1.5。这个配比在COCO上表现不错,但换到自己的数据集上,尤其是类别不平衡或者目标尺度差异大的场景,固定权重的问题就暴露了。训练初期,模型啥都认不出来,分类损失大得离谱,定位损失相对较小。这时候如果分类权重给得高,梯度更新会偏向分类分支,定位分支学得慢。训练后期,分类基本收敛了,定位还在挣扎,但固定权重让定位分支的梯度被分类分支的噪声淹没。更坑的是,不同batch的难易程度不一样。一个全是简单样本的batch和一个全是难样本的batch,损失分布天差地别。固定权重相当于让模型用同一套标准去应对所有情况,这不合理。自适应权重分配机制的设计思路我设计的这个模块叫Adaptive Loss Weighting(ALW),核心
返回列表