031、DFL 回归损失详解:把边框回归从狄拉克变成分布

031、DFL 回归损失详解:把边框回归从狄拉克变成分布 031、DFL 回归损失详解:把边框回归从狄拉克变成分布从一次诡异的mAP抖动说起去年调一个YOLOv8的检测模型,训练到第80个epoch,mAP突然从0.72掉到0.68,然后又慢慢爬回去。我盯着曲线看了半天,以为是学习率策略的问题,调了cosine annealing、调了warmup,折腾两天没解决。后来翻到一篇知乎文章提到DFL(Distribution Focal Loss)的梯度特性,才意识到问题出在回归分支的损失函数上。当时用的还是最原始的IoU Loss + L1 Loss组合,边界框回归本质上是在拟合一个狄拉克函数——模型认为每个框的坐标就是一个确定值。但真实场景中,边界框的模糊性(遮挡、截断、标注误差)远比我们想象的大。DFL的核心思想很简单:别让模型死磕那个“精确”的坐标值,而是去学习一个分布。狄拉克函数为什么不适合目标检测先看传统做法。假设我们要预测边界框的左边距(l),模型输出一个标量值,损失函数用Smooth L1或者IoU系列。这相当于在假设:真实框的左边距就是一个确定的数,模型的任务就是无限逼近这个数。但实际标注中,一个目标的边界可能因为遮挡而模糊,或者标注员本身就有几个像素的偏差。更关键的是,在特征图上下采样后,每个网格的感受野覆盖的区域本身就存在空间歧义性。让模型去拟合一个“精确”值,本质上是在强迫它忽略这种不确定性。我见过一个极端案例:在COCO数据集上,某个被遮挡的自行车,标注框的左边距是100.5像素。模型训练时反复在这个值附近