【论文笔记】 NWD-Based Model

前言

这板块对我来说是个很大的挑战,可能更多的内容是转载其他博主的内容。
本来题目想取为论文解读的,但是我感觉我好像没到解读那个水平,于是就改为论文笔记了。


小目标检测是一个非常具有挑战性的问题,因为小目标只包含几个像素大小。作者证明,由于缺乏外观信息,最先进的检测器也不能在小目标上得到令人满意的结果。作者的主要观察结果是,基于IoU (Intersection over Union, IoU)的指标,如IoU本身及其扩展,对小目标的位置偏差非常敏感,在基于Anchor的检测器中使用时,严重降低了检测性能。

为了解决这一问题,本文提出了一种新的基于Wasserstein距离的小目标检测评估方法。具体来说,首先将BBox建模为二维高斯分布,然后提出一种新的度量标准,称为Normalized Wasserstein Distance(NWD),通过它们对应的高斯分布计算它们之间的相似性。提出的NWD度量可以很容易地嵌入到任何基于Anchor的检测器的Assignment、非最大抑制和损失函数中,以取代常用的IoU度量。

作者在一个用于小目标检测(AI-TOD)的新数据集上评估了度量,其中平均目标大小比现有的物体检测数据集小得多。大量的实验表明,当使用NWD度量时,本文方法的性能比标准fine-tuning baseline高出6.7 AP,比最先进的SOTA模型高出6.0 AP。
在这里插入图片描述


1. 贡献

本文的贡献总结如下:

分析了IoU对小目标定位偏差的敏感性,提出了NWD作为衡量2个BBox之间相似性的更好的度量;

将NWD应用于Anchor-Based检测器的标签分配、NMS和损失函数,并设计了一个小目标检测器;

提出的NWD可以显著提高目前流行的Anchor-Based检测器的TOD性能,在AI-TOD数据集上Faster R-CNN实现了从11.1%到17.6%的性能提升。

2. 问题所在

在这里插入图片描述
如图中所看到的那样,对于大目标,相同的像素偏移,IoU变化从0.90到0.65,但是对于小目标,他的像素值非常的小,轻微的位置偏差就会导致IoU大幅度下降(0.53下降到0.06),导致标签分配不准确。

此外,下面的图片给出了4条不同目标尺度的IoU-Deviation(IoU偏离)曲线。从左侧两个图片可以看到,随着目标尺度的减小,曲线下降速度非常块。左下方曲线切断是因为bbox太小,在一定偏离范围内,都在gt中,所以IoU在一定范围内都没变化。
在这里插入图片描述

这种现象意味着IoU度量对离散位置偏差的目标尺度是变化的,最终导致标签分配存在以下2个缺陷(其中,IoU阈值用于Anchor-Based检测器中Pos/Neg训练样本的分配,(0.7,0.3)用于Region Proposal Network (RPN)):

首先,由于IoU对小目标的敏感性,使得微小的位置偏差翻转Anchor标记,导致Pos/Neg样本特征相似,网络收敛困难;

其次,利用IoU度量,作者发现AI-TOD数据集中分配给每个Ground-Truth (GT)的平均正样本数小于1,因为GT与任何Anchor之间的IoU低于最小正阈值。

鉴于IoU不是一个很好的度量小目标的度量标准,本文提出了一种新的度量标准,用Wasserstein距离来度量BBox的相似性来代替标准IoU。NWD方法的主要内容就是:利用提出的方法来度量预测框与真实框二维高斯分布的相似性。

具体来说:

  • 首先,将包围盒建模为二维高斯分布;

  • 然后,使用提出的Normalized Wasserstein Distance (NWD)来度量导出的高斯分布的相似性。

优点:

  1. 无论小目标之间有没有重叠都可以度量分布相似性;
  2. NWD对不同尺度的目标不敏感,更适合测量小目标之间的相似性。

NWD可应用于One-Stage和Multi-Stage Anchor-Based检测器。此外,NWD不仅可以替代标签分配中的IoU,还可以替代非最大抑制中的IoU(NMS)和回归损失函数。在一个新的TOD数据集AI-TOD上的大量实验表明,本文提出的NWD可以持续地提高所有检测器的检测性能。

3. Wasserstein Distance

3.1 二维高斯分布

这里先提前说一下二维高斯分布的公式:
在这里插入图片描述
以二维高斯分布为例,即: x = [ x , y ] T \mathbf{x}=[\mathrm{x}, \mathrm{y}]^{\mathrm{T}} x=[x,y]T,包含以下要点:

  1. 协方差矩阵的对角线元素为 x 和 y 轴的方差
  2. 反斜对角线上的两个值为协方差,表明 x 和 y 的线性相关程度(正值时:x 增大,y 也随之增大;负值时:x 增大,y 随之减小)
    在这里插入图片描述
    贴张图更好理解:
    在这里插入图片描述
    可以看到,对于二元正态分布,给定一个p(x),其截面相当于一个椭圆。
    看到这,我还是对二维高斯分布的作用不是很理解,于是就去问了下gpt,得到了一个通俗易懂的答案:

二维高斯分布在统计学和概率论中有着重要的应用。它是一种常见的概率分布,通常用来描述两个变量之间的相关性。

具体来说,二维高斯分布可以用来模拟两个变量之间的关系,例如身高和体重之间的关系、温度和湿度之间的关系等。它也可以用来描述随机噪声的分布,例如图像处理中的噪声去除、数字信号处理中的滤波等。

另外,二维高斯分布还可以用于模式识别和机器学习中的分类和聚类问题。例如,可以使用它来建立高斯混合模型(GMM)进行图像分割、语音识别、手写字体识别等任务。

总之,二维高斯分布在各个领域都有着广泛的应用,是一个非常重要的概率分布。


3.2 边界框的高斯分布建模

对于微小的物体,它们的边界框中往往会有一些背景像素,因为大多数真实物体不是严格的矩形。在这些边界框中,前景像素和背景像素分别集中在边界框的中心和边界上。为了更好地描述边界框中不同像素的权重,边界框可以建模为二维(2D)高斯分布,其中边界框的中心像素具有最高的权重,像素的重要性从中心到边界递减.具体来说,对于水平边界框R = (cx, cy, w, h),其中(cx, cy),w和h分别表示中心坐标、宽度和高度。其内接椭圆方程可以表示为:
在这里插入图片描述
这个其实就是椭圆公示。其中 (µx, µy) 是椭圆的中心坐标,σx, σy 是沿 x 和 y 轴的半轴长度。因此,μx = cx,μy = cy,σx = w 2 ,σy = h 2 。

二维高斯分布的概率密度函数由下式给出:
在这里插入图片描述
其中x、µ和Σ表示高斯分布的坐标(x, y)、均值向量和协方差矩阵。
这里的x应该是一个二维的变量。
当满足:
在这里插入图片描述
便得到了标准高斯分布。

公式1中的椭圆将是二维高斯分布的密度等值线。因此,水平边界框 R = (cx, cy, w, h) 可以建模为二维高斯分布 N (µ, Σ)
在这里插入图片描述
此外,边界框 A 和 B 之间的相似度可以转换为两个高斯分布之间的分布距离。

到这里,便把两个边界框转化为了高斯分布之间的分布距离,也就是得到了x和y之间的分布关系,即得到了两个边界框之间的相关性。


3.3 Wasserstein距离(最优传输距离)

Wasserstein Distance的定义是评估由P分布转换成Q分布所需要的最小代价(移动的平均距离的最小值)→和挖东墙补西墙类似(把一个形状转换成另一个形状所需要做的最小工),所以经常查到Wasserstein Distance称为推土机距离。

从P分布移动到Q分布,假设P有M堆土(在P的第i堆有pi质量的土),Q有N堆土(在Q的第j堆还能存放qj质量的土)。
d_ij表示从P的第i堆移动到Q的第j堆的距离。(成本函数,已知)
f_ij表示从P的第i堆移动到Q的第j堆的土的质量。(控制变量,待求,待优化)

在这里插入图片描述
所以从P移动到Q的总花费为
在这里插入图片描述
<D,F>_F为计算D和F的弗罗贝尼乌斯系数(Frobenius Norm)
wasserstein距离就是求最小的P移动到Q所花费的成本。
在这里插入图片描述

3.4 归一化高斯 Wasserstein 距离

我们使用来自最优传输理论的 Wasserstein 距离来计算分布距离。对于两个二维高斯分布 µ1 = N (m1, Σ1) 和 µ2 = N (m2, Σ2),µ1 和 µ2 之间的二阶 Wasserstein 距离定义为:
在这里插入图片描述
化简后:
在这里插入图片描述
其中||.||F 是 Frobenius 范数。

此外,对于从边界框 A = (cxa, cya, wa, ha) 和 B = (cxb, cyb, wb, hb) 建模的高斯分布 Na 和 Nb,等式 6 可进一步简化为:
在这里插入图片描述
但是, W 2 2 ( N a , N b ) W_{2}^{2}(\mathrm{Na}, \mathrm{Nb}) W22(Na,Nb)是距离度量,不能直接用作相似度度量(即,0 和 1 之间的值作为 IoU)。因此,我们使用它的指数形式归一化并获得称为归一化 Wasserstein 距离 (NWD) 的新度量:
在这里插入图片描述

4. 与IoU相比

与 IoU 相比,NWD 在检测微小物体方面具有以下优势:

  1. 尺度不变性
  2. 对位置偏差的平滑性
  3. 测量非重叠或相互包含的边界框之间相似度的能力
    在这里插入图片描述
    由这幅图可以看到,右上角的图中,我们保持A和B的比例相同,此时沿着A的对角线移动B,可以看到四条曲线是重合的,说明NWD对不同尺寸的目标不敏感。

此外,在右下角的图中,当我们将 B 的边长设置为 A 的边长一半的时候,沿着A的对角线移动B,我们可以看到NWD对位置偏差更加平滑,并且可以始终如一反映 A 和 B 之间的相似性。即使 |A ∩ B| = A 或 B 和 |A ∩ B| = 0。

5. 基于NWD的检测器

NWD可以在IoU的上面进行改进,包括 pos/neg 标签分配、NMS 和回归损失函数。

我在实验的时候在回归损失函数上进行了测试,对小目标的提升效果非常好。下面我讲一下基于NWD的回归损失。

引入 IoU-Loss是为了消除训练和测试之间的性能差距。然而,IoU-Loss 在以下两种情况下无法为优化网络提供梯度:(1)预测的边界框 P 和真实框 G 之间没有重叠(即 |P ∩ G| = 0)或( 2) 框 P 完全包含框 G,反之亦然(即 |P ∩ G| = P 或 G)。此外,这两种情况对于微小的物体非常常见。具体来说,一方面,P中的几个像素的偏差会导致P和G之间没有重叠,另一方面,微小的物体容易被错误预测,导致 |P∩G| = P 或 G。因此,IoU-Loss 不适用于微小物体检测器。尽管 CIoU 和 DIoU 可以处理上述两种情况,但它们对微小物体的位置偏差很敏感,因为它们都是基于 IoU 的。为了处理上述问题,我们将 NWD 度量设计为损失函数:
在这里插入图片描述

其中 Np 为预测框 P 的高斯分布模型,Ng 为 gt 框 G 的高斯分布模型。 即使在两种情况下,基于 NWD 的损失都可以提供梯度 |P ∩ G| = 0 和 |P ∩ G| = P 或 G。


6. 改进YOLOv5

loss.py中,创建NWD的函数定义

def wasserstein_loss(pred, target, eps=1e-7, constant=12.8):
    r"""`Implementation of paper `Enhancing Geometric Factors into
    Model Learning and Inference for Object Detection and Instance
    Segmentation <https://arxiv.org/abs/2005.03572>`_.
    Code is modified from https://github.com/Zzh-tju/CIoU.
    Args:
        pred (Tensor): Predicted bboxes of format (x_center, y_center, w, h),
            shape (n, 4).
        target (Tensor): Corresponding gt bboxes, shape (n, 4).
        eps (float): Eps to avoid log(0).
    Return:
        Tensor: Loss tensor.
    """

    center1 = pred[:, :2]
    center2 = target[:, :2]

    whs = center1[:, :2] - center2[:, :2]

    center_distance = whs[:, 0] * whs[:, 0] + whs[:, 1] * whs[:, 1] + eps #

    w1 = pred[:, 2]  + eps
    h1 = pred[:, 3]  + eps
    w2 = target[:, 2] + eps
    h2 = target[:, 3] + eps

    wh_distance = ((w1 - w2) ** 2 + (h1 - h2) ** 2) / 4

    wasserstein_2 = center_distance + wh_distance
    return torch.exp(-torch.sqrt(wasserstein_2) / constant)

并在ComputeLoss中,修改回归框损失的定义,根据自己的需要修改iou_ratio

#NWD,nwd,iou_ratio,lbox,#Objectness,iou
nwd = wasserstein_loss(pbox, tbox[i]).squeeze()
iou_ratio = 1	# 这里设置修改权重
lbox += (1 - iou_ratio) * (1.0 - nwd).mean() + iou_ratio * (1.0 - iou).mean()  # iou loss
# lbox += (1.0 - iou).mean()  # iou loss

关于损失函数的源码,可以看我之前写的这一篇博客:YOLOv5-6.x源码分析(八)---- loss.py

7. 总结

花了一整个下午来看NWD,总算是把大部分看懂了。但是在公式推导上面还是没明白,比如3.4节那里如何将边界框信息放入二阶 Wasserstein 距离的,不是很明白。涉及到数学推导的东西还是蛮难的。


Reference

二维高斯分布(Two-dimensional Gaussian distribution)
NWD-Based Model | 小目标检测新范式,抛弃IoU-Based暴力涨点(登顶SOTA)
【Normalized Wasserstein Distance (NWD)】小目标检测新度量

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值