赞
踩
目标检测作为一种经典CV任务,大致可以认为是三个子任务的集合:1. 确定目标大概位置;2. 分类出目标类别;3. 回归出检测框的宽高;
这三种子任务分别需要对应损失函数的反传来学习。今天介绍的b-box回归损失函数主要是面向第三个子任务而设计的损失函数。
全称Intersection-Over-Union,即交并比。计算预测框和标注框(即GT框)的交并比,就可以知道它们的“贴合程度”好不好,作为调整模型的指导。
原文链接:[1608.01471] UnitBox: An Advanced Object Detection Network (arxiv.org)
指两个b-box之间交集部分的面积比并集的面积:
IOU = 绿色面积/(蓝色面积+绿色面积+橙色面积)
而IOU loss可以简单表示为:
一个简单的python实现:https://blog.csdn.net/leviopku/article/details/81629492
IOU虽然简单,但有一些明显的缺点:1,当两个框没有任何交集时,IOU为0,IOU loss会一直为1。无法反应出检测框与GT框之间的距离,从而导致:只要两个框没有交集,IOU loss就恒等于1,则无论朝哪个方向优化,IOU loss都不会下降,此时的IOU loss失去了指导性。2. 很多场景下,IOU并不能反应两个b-box之间的贴合度。GIOU就是在IOU的基础上做了一些改进.
发表于:CVPR2019
算法描述为:
看图更容易懂:
在IOU的基础上找到一个“全局框”C,这个全局框能够刚好把两个b-box装进去。这样对多一部分面积C_。
根据上图表示:GIOU = IOU - C_/C
GIOU loss可以简单表示为:
即:
在两个b-box没有交集的情况下:
可以看到GIOU会随两个框之间的距离变化而变化,从而反应到loss上,从而指导预测框的移动方向。
链接:[1911.08287] Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression (arxiv.org)
发表于:AAAI2020
在GIOU的基础上进一步强调了距离的重要性。直接算出一个中心点的距离相对于框规模的一个比值。咱们先看公式:
跟GIOU loss相比只是替换了最后一项。这一项是怎么算的呢?看图:
跟GIOU一样,DIOU还是需要找到最小包围框C(注意大小写),然后c作为C的对角线长度。图中的d表示,两个b-box中间点连线的长度。
则,最后这一项可以解读为:中心连线的长度d与最小包围框C对角线长度c的比值的平方。这里为啥加个平方呢?答:咱们算距离或长度的时候需要开根号,这里加平方其实是减少开根号的运算步骤。
CIOU的全称是:Complete-IOU。CIOU就稍微有些复杂了。
看公式:
我们发现,这就是DIOU加了最后一项而已,即调整长宽比的loss项。咱们只需要了解
假设预测框和GT框的宽长比不一致,则
由
那么,在IOU很大的情况下,变为0(中心点重合),这个时候需要调节长宽比了。DIOU在这个时候,loss的梯度也变小了(只靠IOU loss的部分在传递梯度),而CIOU可以依靠最后一项继续保持loss的梯度,使得检测器能够迅速调整好自己与GT框拥有一样的宽长比。
辅以一张对比图来说明:
第一排是GIOU,第二排是CIOU,原点处的绿色框是GT框,黑色框是anchor框,红色框是预测框。可以看到,在预测框和GT框没有交集(即IOU=0)的情况下,GIOU和CIOU都有指导检测框移动的能力。此时,GIOU从位置、宽长比、size等角度调整预测框,而CIOU是迅速拉回位置(不怎么动预测框的形状),因此CIOU可以比GIOU更快拉回预测框使其IOU>0。等IOU>0以后,CIOU迅速调整size规模。等IOU>0.5以后,CIOU的宽长比(也叫纵横比)部分开始作为梯度传播的主要部分,使得预测框和GT框有用一样的宽长比。
文章本人原创,有问题欢迎留言交流~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。