本节摘要:损失函数告诉模型"错在哪、错多少"。本节讲分类损失、回归损失、IoU 损失家族——检测器优化的目标函数。
阅读完本节,你应当能够:
目标检测损失 = 分类损失 + 回归损失:
total_loss = cls_loss + box_loss # 简化形式
分类和回归的优化目标是不同的:分类要让类别概率分布接近真实标签,回归要让框的坐标连续逼近真值。两者量纲不同、梯度尺度不同,需要配权重。YOLOv5 里损失还细分为类别损失、置信度损失、框回归损失三部分,分别有超参平衡。
多分类用交叉熵:
二分类用二元交叉熵(BCE)。交叉熵的梯度特点:预测置信度越低,梯度越大,模型被推着向正确方向更新。
RetinaNet 提出 focal loss 解决正负样本不均衡(背景框远多于目标框):
单阶段检测器每张图生成上万个候选位置,其中只有几十个是正样本,其余全是背景。普通交叉熵里,这些大量"很容易分对"的背景样本贡献了绝大部分梯度,模型花大力气学会说"没有目标",却学不好目标本身。focal loss 给易分样本一个 (1-p_t)^\gamma 的折扣,让难分样本(包括稀有类别)主导梯度。
focal loss 让模型专注难分样本,是单阶段检测器关键创新。
直接回归框坐标 (x,y,w,h):
L1/L2 对尺度敏感,大目标和小目标损失不可比。一张 300 像素宽的车和 30 像素宽的人,同样是偏移 3 像素,L2 损失分别为 9 和 9(绝对值一样),但相对误差差 10 倍。这导致小目标框的回归被大目标掩盖。
Fast R-CNN 用 Smooth L1,结合 L1 和 L2 优点:小误差用 L2(平滑),大误差用 L2 的导数上限(不爆炸)。
def smooth_l1(pred, target, beta=1.0): diff = torch.abs(pred - target) small = 0.5 * diff ** 2 / beta large = diff - 0.5 * beta return torch.where(diff < beta, small, large)
IoU(交并比)衡量框重叠程度,是检测的核心指标。IoU 损失族解决 L1/L2 的尺度问题——IoU 天然归一化到 0~1,与框大小无关。

| 损失 | 考虑因素 | 问题 |
|---|---|---|
| IoU | 重叠面积 | 不重叠时无梯度 |
| GIoU | + 最小外接框 | 收敛慢 |
| DIoU | + 中心点距离 | 不考虑长宽比 |
| CIoU | + 长宽比 | 综合,YOLOv4/v5 用 |
问题:两框不重叠时 IoU=0,损失无梯度,无法优化。此外 IoU 对"重叠程度"的区分度有限:IoU 0.5 和 0.9 之间梯度变化不连续。
加最小外接框 C:GIoU = IoU - \frac{|C \setminus (A \cup B)|}{|C|}
不重叠时也有梯度(外接框缩小方向),但收敛慢,且框相交但相对位置不同时可能给出相同值。
加中心点欧氏距离:DIoU = IoU - \frac{\rho^2(b, b^{gt})}{c^2}
考虑框中心距离,收敛快。中心越近,损失越小,引导框先对齐中心再重叠。
DIoU + 长宽比一致性:CIoU = DIoU - \alpha v
\alpha 是平衡参数,v 衡量长宽比一致性。CIoU 综合重叠、距离、比例,YOLOv4/v5 采用。它在 DIoU 基础上再惩罚宽高比不一致,让框的形状也贴近真值。
分类和回归损失量级不同,要加权平衡:
loss = λ_cls * cls_loss + λ_box * box_loss + λ_iou * iou_loss
权重 \lambda 是重要超参,影响训练侧重。YOLO 系里通常设 box 权重 0.05、cls 权重 0.5,置信度权重 1.0;Faster R-CNN 的 RPN 和检测头也有各自的损失配比。调损失权重和调学习率一样,属于"见效慢但影响大"的超参。
第一,标签分配直接影响损失:一个预测框该对齐哪个真值框、算正样本还是负样本,决定了损失计算的输入。YOLO 用中心点归属,Faster R-CNN 用 IoU 阈值,现代方法用动态分配(TaskAlignedAssigner、OTA)。损失函数本身再好,标签分配错了也白搭。
第二,回归目标归一化:直接回归绝对坐标难学,通常回归相对网格/锚点的偏移并除以尺度,YOLO 还会用 sigmoid 限制中心点偏移范围。归一化让不同尺度的回归目标同量级,训练更稳。
⚠️ 常见坑:用 L2 损失做框回归——L2 对尺度敏感,大框小框损失不可比。用 IoU 家族损失(CIoU/DIoU),尺度无关。
💡 关键直觉:检测损失 = 分类 + 回归。分类用交叉熵/focal loss(解决正负不均衡)。回归用 IoU 家族(CIoU 综合),尺度无关。损失权重平衡是关键超参。
下一节讲优化器。