美文网首页
AAAI 2020 | DIoU损失函数详解,源码已开源

AAAI 2020 | DIoU损失函数详解,源码已开源

作者: DevWeekly | 来源:发表于2020-03-14 12:22 被阅读0次

    微信关注公众号【平凡而诗意】,原创技术文章第一时间推送。

    本文介绍一篇AAAI 2020新提出的一种交并比损失函数,Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression[1],它在收敛速度、回归准确性方面相对于IoU和GIoU都有显著的提升,下面就来看一下DIoU的详细内容。

    摘要

    边界框回归是目标检测任务中非常关键的一环,交并比(IoU)是边界框回归过程中一个被广泛使用的评估指标。目前提出的IoU和广义IoU(GIoU)有利于评估IoU指标,但是,仍然存在两点问题,

    • 收敛速度缓慢
    • 回归不准确

    因此,在这篇文章中,作者提出一种结合预测框目标框之间距离的一种距离IoU(Distance-IoU,DIoU)损失,它在训练中收敛速度比IoU和GIoU要快的多。

    本文总结了在边界框回归中比较重要的3个因素,

    • 重叠面积
    • 中心点距离
    • 长宽比

    这3个因素在本文非常重要,本文提出的两种改进方案DIoU和CIoU都是围绕这3点因素再展开。

    IoU和GIoU

    IoU(Intersection over Union)是评估边界框回归效果非常重要且被广泛使用的指标,它的定义如下,

    I o U=\frac{\left|B \cap B^{g t}\right|}{\left|B \cup B^{g t}\right|}

    其中Bgt是目标框,B是预测框。

    IoU的损失函数定义如下,

    \mathcal{L}_{I o U}=1-\frac{\left|B \cap B^{g t}\right|}{\left|B \cup B^{g t}\right|}

    从上面这个损失函数我们可以看出,如果目标框和预测框没有重叠的话,那么分子就为0,也就是说,损失函数一直为1。

    也就是说,IoU损失仅在边界框有重叠的情况下起作用,而在没有重叠的情况梯度不会发生变化。

    基于这个弊端,GIoU就出现了。

    GIoU主要针对IoU损失在边界框无重叠的情况下梯度不变化的情况进行改进,它的做法是在原来IoU损失函数的基础上加了一个惩罚项,改进后的损失函数如下,

    \mathcal{L}_{G I o U}=1-I o U+\frac{\left|C-B \cup B^{g t}\right|}{|C|}

    式中多了一个参数C,它代表的含义是能够同时覆盖B和Bgt的最小边界框。从上述公式中引入的惩罚项可以看出,在不重叠的情况下,预测框会不断向目标框移动。

    虽然GIoU可以缓解不重叠情况下梯度消失问题,但是它依然存在一些局限性。

    img

    我们再回到上述损失函数,可以看一下惩罚项,如果B和Bgt其中一个覆盖另外一个框的情况下,那么分子就变成了0,就如同上图所示,这时候惩罚项就没有作用了,它就又退化成IoU损失。

    img

    上述图中,第一行代表GIoU几个边界框回归步骤,第二行代表DIoU的几个迭代步,图中绿色代表目标框,黑色代表锚框,蓝色代表GIoU的预测框,红色代表DIoU的预测框。

    从上面迭代过程中预测框为了与目标框重叠,它在开始阶段会逐渐的增大尺寸。然而到后面阶段,GIoU会退化成IoU损失,因此,它需要在垂直和水平方向需要多次的迭代来达到收敛。

    思考

    思考2个问题,

    •为了获得更快的收敛速度,是否可以直接最小化预测框和目标框之间的归一化距离?•当与目标框有重叠甚至存在包含关系时,如何使得回归速度更准确、更快速?

    可以思考一下这两个问题,本文提出的DIoU和CIoU都是在围绕这两个问题在展开。

    DIoU

    读到这里可以看出,无论是IoU还是GIoU都是基于前面我们列出来的3个因素的第一点:重叠面积

    img

    因此,本文将第二点因素中心点距离考虑在损失函数之中提出了DIoU。

    \mathcal{L}_{D I o U}=1-I o U+\frac{\rho^{2}\left(\mathbf{b}, \mathbf{b}^{g t}\right)}{c^{2}}

    式中b和bgt分别代表B和Bgt的中心点,p(.)的含义代表欧式距离,c代表覆盖两个边界框最小框的对角线长度(上图中蓝色线)。

    DIoU在IoU的基础上加入了一个惩罚项,用于度量目标框和预测框之间中心点的距离,我们在最小化边界框中心点的距离过程中,能够使得边界框收敛速度更快。

    DIoU继承了IoU和GIoU的一些特性,

    • DIoU损失仍然与回归问题的规模无关
    • 与GIoU损失类似,DIoU损失在与目标框不重叠时可以为边界框明确移动方向

    DIoU对比IoU和GIoU也有一些优越性,

    • DIoU损失可以直接最小化两个盒子的距离,因此收敛速度比GIoU损失快得多
    • 对于目标框和预测框存在包含关系的情况,DIoU损失可以使回归非常快,而GIoU损失几乎退化为IoU损失

    到这里,就会打了思考部分的第一个问题:为了获得更快的收敛速度,是否可以直接最小化预测框和目标框之间的归一化距离。

    CIoU

    现在就来回答第二个问题:当与目标框有重叠甚至存在包含关系时,如何使得回归速度更准确、更快速?

    现在把摘要中强调的一部分拿回来再重申一遍,边界框回归中比较重要的3个因素,

    • 重叠面积
    • 中心点距离
    • 长宽比

    DIoU考虑了重叠面积中心点距离达到了很不错的效果,然而,长宽比这个重要的因素还没有被考虑进来。

    因此,基于DIoU提出了CIoU损失,在原来DIoU损失函数的基础上引入了长宽比的一致性,改进后的损失函数为,

    \mathcal{L}_{C I o U}=1-I o U+\frac{\rho^{2}\left(\mathbf{b}, \mathbf{b}^{g t}\right)}{c^{2}}+\alpha v

    其中,v用于测量长宽比的一致性,

    v=\frac{4}{\pi^{2}}\left(\arctan \frac{w^{g t}}{h^{g t}}-\arctan \frac{w}{h}\right)^{2}

    \alpha代表一个平衡参数,

    \alpha=\frac{v}{(1-I o U)+v}

    其中重叠面积因子在回归中被赋给更高的优先级,特别是在非重叠情况下。

    DIoU应用于非极大值抑制

    在原始的NMS(Non-Maximum Suppression,非极大值抑制)会移除一些容易的检测框,其中IoU就是一个度量冗余检测框的一个重要指标,在抑制冗余检测框的过程中,唯一考虑的因素就是重叠面积,这样显然是不合理的,如果存在遮挡的情况,这样就会产生错误的抑制。

    本文提出将DIoU应用于NMS中,这样不仅考虑重叠区域,还会将检测框与目标框中心点之间的距离考虑在内,这样能够有效避免上述错误。

    实验结果

    img

    从上图误差可视化中我们可以看出,(a)和(b)在中间凹陷部分对应的回归效果较好,但是,IoU损失在非重叠的情况下有较大误差,GIoU在水平和垂直情况下有较大误差。而本文提出的GIoU,无论在哪种情况下,都会产生非常小的误差。

    img

    使用YOLOv3模型,在PASCAL VOC 2007数据集上对比IoU、GIoU、DIoU、CIoU四种损失的表现,选取的对比指标分别是AP和AP75。可以从上图中看出,在AP和AP75这两项评价指标方面DIoU对比IoU和GIoU均取得了显著的提升。

    源代码

    DIoU[2]目前源代码已经开源,代码是由Matlab编写,代码已经托管到Github,可以直接在Github搜索DIoU,也可以查看引用链接。

    引用链接

    [1] DIoU Paper: https://github.com/Zzh-tju/DIoU

    [2] DIoU Code: https://github.com/Zzh-tju/DIoU

    推荐阅读

    相关文章

      网友评论

          本文标题:AAAI 2020 | DIoU损失函数详解,源码已开源

          本文链接:https://www.haomeiwen.com/subject/roevshtx.html