144、SIoU 引入角度惩罚的 YOLOv11 代码实现:四阶段距离度量的完整计算从一次诡异的mAP抖动说起去年年底调一个行人检测项目,CIoU loss训到第120个epoch,mAP@0.5:0.95突然掉了3个点,然后又在10个epoch内涨回来。排查了学习率、数据增强、甚至怀疑过PyTorch版本,最后发现是CIoU的宽高比惩罚项在特定场景下产生了梯度震荡。那段时间正好在看SIoU的论文,顺手把CIoU换成了SIoU,mAP稳定了,收敛速度还快了15%。这个坑让我意识到:边界框回归的损失函数,远不止“算个IOU再补个惩罚”这么简单。SIoU的核心创新在于引入了角度惩罚,把距离度量拆成了四个阶段:角度、距离、形状、IOU。这四个阶段不是简单的加权求和,而是有明确的物理含义和梯度传导路径。下面直接上代码,从YOLOv11的loss模块开始改。第一步:定位YOLOv11的损失函数入口YOLOv11的损失计算在ultralytics/utils/loss.py的v8DetectionLoss类里(v11沿用v8的架构)。找到__init__方法,里面有个self.bce和self.hyp.box。我们不需要动分类损失,只改回归部分。# 在__ini