损失函数改进:引入Alpha-IoU:当IoU梯度消失时,我们该怎么做?

张开发
2026/4/11 15:58:27 15 分钟阅读

分享文章

损失函数改进:引入Alpha-IoU:当IoU梯度消失时,我们该怎么做?
上周调一个无人机小目标检测模型,在树冠和建筑边缘的漏检率始终压不下去。IoU阈值调到0.3,NMS参数反复调,指标就是不动。盯着训练曲线看了半天,发现一个细节:模型训练到30个epoch后,边界框回归的loss下降明显变缓,但分类loss还在正常下降。问题不在分类头,而在回归头——这是典型的梯度消失症状,IoU在低重叠度时梯度几乎为零,模型“学不动”了。IoU的老毛病与新解法传统IoU loss有个先天缺陷:当预测框与真实框没有重叠时,IoU=0且梯度为0,模型完全失去修正方向。后续的GIoU、DIoU、CIoU虽然缓解了部分问题,但本质上还是基于IoU的线性变换。2021年提出的Alpha-IoU换了个思路:既然IoU的梯度特性不理想,那就用幂变换重塑它的梯度分布。核心公式简单得让人怀疑效果:Alpha-IoU = IoU^α Alpha-IoU Loss = 1 - IoU^α这个α就是魔法参数。当α1时,高IoU样本的loss被放大,低IoU样本的loss相对缩小,梯度分布变得更陡峭。在YOLO里动手实现别直接去改ultralytics的源码,我们继承重写更稳妥。在YOLOv11的loss.py里加个新类:classAlphaIoULoss

更多文章