论文主要针对微小目标的优化,作者提出IOU指标对于微小物体的位置偏差非常敏感,anchor-based检测器会恶化检测性能。作者提出一种使用Wasserstein距离(NWD)评估微小物体检测
首先将边界框建模为2D高斯分布
归一化NWD,相应的计算高斯分布之间的相似性
重点内容
为什么IOU对微小物体很敏感
- 看一张图:一个网格代表一像素,
A
代表真实边界框,B,C
表示1和4个像素的对角线偏差的预测框 - 看两张图:可以看出大目标和小目标对比相同的偏差其IOU差别36x36的目标从
0.95->0.65
而6x6的目标从0.53->0.06
- 确实证实了IOU对小目标更加敏感
- 作者还提出了另一个原因:IoU 的敏感性源于边界框位置只能离散变化的特殊性,简单说就是边界框的位置只能离散变化,而这种离散变化(尤其是微小的位移)可能导致IoU值出现较大的变化。因此在目标检测任务中,IoU可能表现出较强的敏感性。
作者方法对比现有方法
- 首先作者方法对不同尺寸物体都不敏感,因此适合测量微小物体之间的相似性
- NWD不仅可以替代标签分配中的IoU,还可以替代非极大值抑制(NMS)和回归损失函数中的IoU
什么是标签分配中的IoU:标签分配的目的是为训练过程中的每个预测框确定正确的目标类别,并进行回归以逼近真实框的位置。这一过程通常包括以下几个步骤:计算预测框与真实框的IoU,如果一个预测框的IoU值高于某个阈值(比如0.5),通常就认为这个预测框与该真实框匹配,并将该框的标签分配给预测框。如果IoU值较低,那么该预测框可能被视为背景。可划分为正负样本
- GWD 的动机是解决定向目标检测中的边界不连续性和类正方形问题。 作者的动机是减轻 IoU 对微小物体位置偏差的敏感性,这里可能作者的一些灵感来源于GWD
GWD是OBB旋转目标检测中面对类正方形目标提出的iou优化方法
- 横坐标代表A和B中心点之间像素偏差
- 纵坐标表示对应的度量值
- 从图中可以发现NWD对比IOU更加平缓
结果对比
- 第一行代表IOU,第二行代表NWD
- 绿色、蓝色、红色分别表示TP、FP、FN
具体实现
源码地址:论文实现
iou loss
YoloV8中实现NWD方法:
def wasserstein_loss(pred, target, eps=1e-7, constant=12.8):
Args:
pred (Tensor): Predicted bboxes of format (x_min, y_min, x_max, y_max),
shape (n, 4).
target (Tensor): Corresponding gt bboxes, shape (n, 4).
eps (float): Eps to avoid log(0).
b1_x1, b1_y1, b1_x2, b1_y2 = pred.chunk(4, -1)
b2_x1, b2_y1, b2_x2, b2_y2 = target.chunk(4, -1)
w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + eps
w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps
b1_x_center, b1_y_center = b1_x1 + w1 / 2, b1_y1 + h1 / 2
b2_x_center, b2_y_center = b2_x1 + w2 / 2, b2_y1 + h2 / 2
center_distance = (b1_x_center - b2_x_center) ** 2 + (b1_y_center - b2_y_center) ** 2 + eps
wh_distance = ((w1 - w2) ** 2 + (h1 - h2) ** 2) / 4
wasserstein_2 = center_distance + wh_distance
return torch.exp(-torch.sqrt(wasserstein_2) / constant)
总结
代码参考github