点击上方码农的后花园”,选择星标” 公众号

精选文章,第一时间送达

目标检测分为:目标分类+目标定位两个任务。目标分类就是要对该目标进行分类以确定该目标属于什么类别以及其属于该类别的置信度。目标定位是要在图像中确定目标的位置,输出其在图像中的坐标信息。目标定位依赖一个边界框回归模块去定位目标。边界框回归是指使用矩形边界框去预测目标对象在图像中的位置,然后不断细化预测边界框的位置。

不断细化预测的边界框的位置是通过定义边界框回归损失函数、计算回归损失值Loss然后进行反向梯度下降实现的。一开始定义计算边界框回归的损失函数使用的还是基于L1、L2距离范数。基于L1范数定义的边界框损失函数是指预测边界框的四个点P(,)坐标和真实边界框对应的四个点G(,横坐标和纵坐标分别计算绝对值之差然后相加。基于L2范数定义的边界框损失函数是指预测边界框的四个点P(,)坐标和真实边界框对应的四个点G(,)横坐标和纵坐标分别计算平方和之差然后相加。

6fa1339e51316298ef30e445d892c404.png

L1范数和L2范数定义的边界框回归的损失函数Loss都是将预测的bbox真实框bbox的四个点分别求loss值然后相加,并没有考虑靠坐标之间的相关性。

如下图所示,绿色框为真实框,黑色框为预测的边界框。先忽略GIOU那一行,可以看出,预测框和真实框三种不同位置和不同区域的相交,最终基于L1范数和L2范数定义的边界框回归损失函数在计算得到的边界框回归损失Loss值都是一样的。4785b64f843af0948dec512e6b075246.png而在肉眼观察,图(a)和图(b)中最后一种预测的框和真实框重合明显好于前面两种,而这是基于L1范数和L2范数定义的边界框回归损失函数计算得到边界框回归损失值是无法判别的。而这一点可以通过IOU定义的损失函数计算的损失值很好的区别出来,因此后来提出来了基于交并比的IOU定义的边界框回归损失函数。

开始之前

注意本文中的用词: 完全重合(预测框和真实框大小一模一样)、部分重合(相交)、水平和垂直方向上的重合(闭包,预测框包含在真实框内部)、不相交(完全不重合)。

1 IOU计算和损失函数

**边界框回归损失函数(IoU Loss)**,它是将边界框的4个点构成的box看成一个整体进行回归,考虑到了坐标之间的相关性。IoU 的全称为交并比(Intersection over Union),其计算是 “预测的边框” 和 “真实的边框” 的交集和并集的比值,IOU计算公式如下所示:

d42cd09a57f88417fb1905c4dd4963e4.png从上图可以看出IOU的值域为【0,1】之间,添加之前的原文链接。

Iou-loss本身是是从人脸检测的paper引入进来的(https://arxiv.org/pdf/1608.01471.pdf),如下图所示:61cb9419a030b4dd3640c24f836822a8.png

IOU回归损失Loss算法计算流程179724aa9a7651b55d569d960f371488.png其中, 是预测边界框(Bounding box)的面积, 是真实边界框(Bounding box)的面积, 是两个区域的交集,   是两个区域的并集。 是对IOU的交叉熵损失函数,是对IOU取负对数-ln。

在实际使用中,实际很多IoU的损失Loss常常被定义为Loss(IoU) = 1-IoU。它们完全重合时,IoU就是1,那么对于Loss来说,Loss是越小越好,说明他们重合度高,所以IoU Loss就可以简单表示为 1- IoU。

边界框box位置的修正是通过对IOU的损失函数的损失值loss进行反向传播迭代计算的。

IOU回归的优缺点

  • 1.当预测框和真实框完全不相交时,IOU=0,此时损失函数-lnIOU不可导,因此IoU Loss 无法优化两个框不相交的情况。这时的IOU不能反映真实框和预测的边界框距离的远近。也因为不可导,所以没有梯度回传,无法进行下一步训练。

  • 2.预测框和真实框无法反映相交程度的大小和好坏。如下图所示,这三种预测框和真实框重合的情况下,三者的IOU值相同,IOU不能反映两个框是如何相交的,直观上看第三种重合方式是最差的,但是IOU是无法分辨的。468e2e9fb38df37383e71441f052faab.png

  • 3.IOU Loss解决了L1和L2范数定义的边界框回归损失函数的系列变量(边界框的四个点)相互独立和不具有尺度不变性的两大问题。相互独立是指L1范数和L2范数定义的损失函数:先独立地求出4个点的损失Loss,然后进行相加,这种做法假设了边界框的4个点是相互独立的,但实际上应该是有一定相关性的,因为边界框的4个点都依赖于同一个目标。尺度不变性则指基于L1范数和L2范数的大边界框的L2损失通常会大于小边界框的损失,这使得在网络训练过程中,网络会更加注重大边界框的定位,忽视小边界框的定位,最终导致模型对小目标的检测性能比较差。

2 GIOU计算和损失函数

GIOU的诞生就是为了解决IOU定义的损失函数无法优化预测框和真实框不相交的情况、和不知道预测框和真实框如何相交的两个问题。斯坦福学者在2019年的文章《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》中提出了GIOU Loss,在IOU的基础上引入了预测框和真实框的最小外接矩形。

GIOU定义:

如下图,假设紫色A为真实框,B为预测的边界框,则GIOU计算公式如下:

3e78c46a18a3d2d108b41c89ef36f901.png

其中蓝色闭包框C为能包含预测框和真实框最小的外接矩形框。这里C \ (A ∪ B)的意思是闭包框C的面积-A∪B的面积所剩余的面积。从计算公式可以看出GIOU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映预测框和真实框的重合度。

GIOU边界框回归损失函数:

GIoU和IoU一样,可以作为损失函数,Loss(GIoU) = 1 - GIoU。我们知道IOU的值域为[0,1],而GIoU有对称区间,取值范围[-1,1]。

69b968d86207dc420e7ab780a618fd49.png

GIOU边界框回归的优缺点

  • 1.GIoU能够更好地反映预测框和真实框相交的情况,如下图所示,虽然两种情况下计算得到的IOU一致,但是(a)中两个框相交的更为整齐,因此(a)GIOU要比(b)中大。

    GIoU考虑到了 IoU 没有考虑到的预测框和真实框的非重叠区域,能够反映出真实框A,预测框B重叠的方式。

458ed30b9e169f61528b6b2ca4c27808.png

2.当预测框和真实框不重合时,不重合度越高GIOU的值越接近于-1.此时的GIOU等于734700d81ae4f5a3027ca637a82a70de.png,最大化GIOU就是指使得预测框和真实框不断地靠近,以此达到回归优化边界框的目的。

3.当预测框和真实框完全重合时(预测框在真实框的内部),IoU和GIoU的损失值Loss都一样,此时GIoU退化为IoU,GIOU=IOU,最终还是无法区分预测框和真实框的位置关系,也导致此时的边界框回归收敛很慢。4a310714f51b958d87b7463ef481848b.png

3 DIOU计算和损失函数

基于GIoU的缺点(当预测框和真实框完全重合时,GIOU=IOU,导致此时的边界框回归收敛很慢),因此DIoU被提出。其论文为:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression。

DIOU计算公式


d=
DIOU =

其中d表示预测框与真实框中心点的欧式距离,c表示覆盖预测框与真实框的最小闭合框的对角线长度。

3c7897b31c6da49fb53af8813f917dc9.png上图中绿色框为真实框,黑色框为预测框,灰色框为能包含预测框和真实框的最小外界矩形框,b 和 分别代表真实框和预测框的中心点,代表的是计算预测框和边界框两中心点间的欧式距离。

DIOU回归损失函数

与IOU、GIoU 定义损失函数loss类似,Loss(DIOU)= 1-DIOU,计算公式如下所示:

dd4d61edb3143cfe7e59884bb3e13c86.png此处的 ,表示预测框和边界框中心点的间的欧式距离的平方。当预测框和真实框完全重合时,L(GIOU)=L(GIOU)=L(DIOU)=0;完全重叠是指预测框和真实框大小一模一样。

DIOU边界框回归的优缺点

  • 1.当预测框和真实框不重叠时,也就是不相交时,DIOU=,可以通过最小化预测框和真实框的两个中心点的距离为预测框提供移动方向。

  • 2.DIoU loss通过最小化预测框和真实框中心点的距离来进行收敛,而GIOU loss优化的是预测框和真实框之间的面积(减少外界包围框的面积)来进行收敛,因此DIOU loss 比GIoU loss回归收敛要快得多。即使预测框和真实框在水平和垂直两个方向上同时重合时(即预测框在真实框内部的时候),也可以通过最小化中心点的距离,来继续进行水平方向和垂直方向的预测框回归。而此时这种情况下的GIOU=IOU,GIOU损失退化为了IOU损失,基本上很难收敛。

  • 3.DIoU还可以替换普通的IoU评价策略,应用于NMS中,使得NMS得到的结果更加合理和有效。

4 CIOU计算和损失函数

虽然DIOU解决了当预测框和真实框相交(部分重叠)、预测框包含在真实框内部两种情况下的预测框回归收敛问题,但是这都是通过最小化预测框和真实框两个中心点的距离实现的,因此为了加快这两种情况下的预测框回归收敛更快、更准确,因此提出了CIOU。

CIOU计算公式

一个好的目标框回归损失应该考虑三个重要的几何因素:重叠面积、中心点距离、长宽比。预测框和目标框之间的长宽比的一致性也是极其重要的,因此CIOU在DIOU的基础上添加了一个边界框box长宽比的惩罚项,CIOU的损失函数计算公式如下:

56b95d88436eee05157d17eb3b4e3b7f.png因此CIOU等于

703d34de3b96c7c5332cb9d9ca72686a.png

CIOU边界框损失函数

CIOU和IOU、GIOU、CIOU损失函数设置一样,因此CIOU的损失函数为Loss(CIOU)=1-CIOUd224b7e30296fb57c3e4202257ea92a0.png

其中α是用于平衡比例的参数,v用来衡量预测框和真实框的宽和高之间的比例一致性。b代表预测框,代表真实框,、代表真实框的宽和高,w和h代表预测框的宽和高。

CIOU边界框回归的优点

  • 从CIOU边界框损失函数可以看出,它包含了预测框和真实框重叠区域面积的IOU损失、预测框和真实框中心点之间归一化后的距离损失、预测框和真实框的宽和高的纵横比损失三个部分。CIOU边界框损失函数通过迭代可以将预测框不断向真实框移动,还尽可能的保证了预测框和真实框的宽和高的纵横比更为接近,加快了预测框的回归收敛速度。

CIOU边界框回归的问题(缺点)

CIOU Loss虽然考虑了边界框回归:预测框和真实框重叠面积、预测框和真实框的中心点距离、预测框和真实框高和宽的纵横比三个方面。f88d4201d9ea7c3f2593f6a411402fd4.png从上面的公式,我们可以看出CIoU使用的是预测框和真实框的宽和高的相对比例,并不是宽和高的值。根据 纵横比v的定义,可以看出只要预测框的宽和高和真实框的比例满足:

9dcc4f89d449a7ce46ba79057354ec19.png

那么CIoU中的添加的相对比例的惩罚项便不再起作用。从预测框的宽和高的相对于v的公式:3f156af3fecf52313b70d90c660241ac.png可以推导出:910f294594863db3fb9f9a93d9f05dff.png表明预测框 w 和 h 的梯度值 和 是具有相反的符号。这个相反的符号在训练的过程中问题就很大,它表明预测框回归过程中w和h其中某一个值增大时,另外一个值必须减小,预测框回归过程中它的w和h不能同时保持同增或者同减。

CIOU总结:CIOU将边界框的纵横比作为惩罚项加入到边界框损失函数中,一定程度上可以加快预测框的回归收敛过程,但是一旦收敛到预测框和真实框的宽和高呈现线行比例时,就会导致预测框回归时的宽和高不能同时增大或者减少。

5 IOU、GIOU、DIOU、CIOU损失函数对比

下图显示了几种IoU损失函数在不同迭代次数情况下的回归误差曲线:fd8860362dadd786c4bbaf1a68c5f9e0.png

  • 由于IoU损失只有在预测框与真实框有重叠的情况下才有效,因此收敛得很慢,得到的预测框与真实框之间的误差也很大;

  • GIoU损失通过增加预测框的大小慢慢移动到与真实框重叠的区域来帮助处理非重叠的情况,其迭代过程收敛得比较缓慢,尤其是预测框与真实框的纵横比相差很大的时候,这种情况下GIoU回归得到的预测框与真实框之间的误差也比较大。

  • DIoU 和 CIoU损失可以收敛得比IoU和GIoU更快,特别是CIoU收敛速度和回归的精度都比使用它之前几种损失函数得到的结果更好。

下图是在YOLOv3上几种边界框回归损失函数对模型提升效果对比图83316dc6740c2b21106b72d22e41b863.png

总结

  • IOU解决了L1、L2初步预测框和真实框三种不同位置和不同区域的相交时的判断,但是没有解决预测框和真实框无法反映相交程度的大小和好坏。当预测框在真实框内部时的不同位置时,IOU是一样的,无法继续优化。预测框和真实框不相交时,IOU=0,也没有办法继续进行优化。

  • GIOU通过预测框和真实框的最小外接闭包矩形解决了IOU,当预测框和真实框不相交时无法继续优化问题,但是没有解决当预测框在真实框内部不同位置时的优化问题。

  • DIOU通过直接优化预测框和真实框两个中心点的距离和两个框的最小外接矩形对角线的距离解决了GIOU,当预测框在真实框内部不同位置时的回归收敛问题。

  • CIOU通过在DIOU的基础上添加了预测框和真实框的宽高纵横比的惩罚项,加快了预测框和真实框回归收敛的速度。

6 EIOU计算和损失函数

CIOU损失,在DIOU损失的基础上添加了衡量预测框和真实框纵横比v,在一定程度上可以加快预测框的回归速度,但是存在的问题是预测框回归过程中,一旦预测框和真实框的宽高纵横比呈现线性比例时,预测框w和h就不能同时增加或者减少,就不能继续进行回归优化了。

2021年中科院提出了EIOU,论文:《Focal and Efficient IOU Loss for Accurate Bounding Box Regression》, EIOU是在CIOU的惩罚项基础上将预测框和真实框的纵横比的影响因子拆开,分别计算预测框和真实框的长和宽,来解决CIOU存在的问题。

EIOU回归损失函数

CIOU回归损失Loss(CIOU):1a31bd227009c57c45bdae425c6d54b3.pngEIOU回归损失Loss(EIOU):83968d71167dc06d9b6b068fe0b44945.png其中 和   是覆盖预测框真实框的最小外接框的宽度和高度。

EIOU损失函数公式我们可以看出,EIOU损失函数包含三个部分:预测框和真实框的重叠损失,预测框和真实框的中心距离损失,预测框和真实框的宽和高损失。EIOU损失的前两部分延续CIOU中的方法,但是宽高损失直接使预测框与真实框的宽度和高度之差最小,使得收敛速度更快。

下图是CIOU和EIOU损失预测框的迭代过程对比图,红色框和绿色框就是预测框的回归过程,蓝色框是真实框,黑色框是预先设定的锚框,可以看出CIOU的问题是宽和高不能同时增大或者减少,而EIOU可以。7211dc043e0cb18259301d1ec9e3318c.png

EIOU回归损失的优点

  • 1.将纵横比的损失项拆分成预测的宽高分别与最小外接框宽高的差值,加速了预测框的收敛、提高了预测框的回归精度。

此外在这篇论文《Focal and Efficient IOU Loss for Accurate Bounding Box Regression》中引入的Focal-EIoU Loss,是指对EIOU损失(Loss(EIOU)中进行加权处理。

cdf036b6a9e9e9d3dc96fd3276aa2174.png其中,γ为控制异常值抑制程度的参数。

Focal-EIoU Loss传统的Focal Loss有一定的区别,传统的Focal Loss针对越困难的样本损失越大,起到的是困难样本挖掘的作用;而Focal-EIoU Loss:和真实框IOU越高的,预测框的损失越大。这就相当于加权作用,给越好的回归目标一个越大的损失,有助于提高预测框的回归精度。

因为在目标检测中,大部分最开始根据预先设定的锚框得到的预测框都和ground truth(真实框)的IoU不大,这一部分叫做低质量样本,而在低质量样本上的训练容易造成损失值的剧烈波动。而Focal-EIoU Loss的提出目标便是解决高低质量样本类别不平衡的问题,也就是说减少与真实框重叠较少的大量预先设定的锚框而得到的预测框的损失值,减少其对预测框回归优化过程中的贡献,使预测框回归过程专注于高质量锚框->(也就是和真实框IOU比较大的预先设定的锚框得到的预测框)。

传统的Focal Loss:,点击跳转。Focal loss是最初由何恺明提出的,最初用于图像领域解决数据不平衡造成的模型性能问题。传统Focal Loss计算公式如下:f80d816e98cb07ee1415ae9a7d7b0419.png但是EIOU的论文作者尝试直接将EIOU代替,发现不太好,就改成了Focal-EIoU Loss:LEIOU的形式,也就是最终论文中出现的Focal-EIoU Loss。

终极总结

预测框回归的三大几何因素:预测框和真实框的重叠面积、预测框和真实框的中心点距离、预测框和真实框的宽和高的纵横比(宽和高的比例、还要考虑宽和高的差异)。

  • IOU Loss:考虑了重叠面积,归一化坐标尺度;

  • GIOU Loss:考虑了重叠面积,基于IOU解决边界框不相交时loss等于0的问题;

  • DIOU Loss:考虑了重叠面积和中心点距离,基于IOU解决GIOU收敛慢的问题;

  • CIOU Loss:考虑了重叠面积、中心点距离、纵横比,基于DIOU提升回归精确度;

  • EIOU Loss:考虑了重叠面积,中心点距离、长宽边长真实差,基于CIOU解决了纵横比的模糊定义,并添加Focal Loss解决预测框回归中的样本不平衡问题。

1609b2f4d39ff867e242f86ee46477bf.png

参考资料:

https://blog.csdn.net/c2250645962/article/details/106053242 https://blog.csdn.net/weixin_41560402/article/details/106007224 https://blog.csdn.net/m0_53114462/article/details/117398110 https://blog.csdn.net/qiu931110/article/details/103330107 https://blog.csdn.net/lovep1/article/details/114449861 https://zhuanlan.zhihu.com/p/270663039 https://zhuanlan.zhihu.com/p/416550548 https://zhuanlan.zhihu.com/p/94799295 https://blog.csdn.net/neil3611244/article/details/113794197 https://www.it610.com/article/1453500272809689088.htm https://zhuanlan.zhihu.com/p/375745293 https://mp.weixin.qq.com/s/jMWTFeDh6_0rhCzcYjw7sg https://zhuanlan.zhihu.com/p/266023273 https://zhuanlan.zhihu.com/p/394892530

——The  End——

如果觉得有用,就请分享到朋友圈吧!

觉得有用麻烦给个在看啦~  

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐