目标检测系列:论文阅读——Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression
这也是2019CVPR的一篇论文,斯坦福大学的,针对IoU进行了改善,提出generalized IoU(GIoU)。
IoU是目标检测等任务中必不可少的一部分,通过计算预测box和标签box之间的IoU对目标进行分类,并且通过IoU阈值进行筛选后边框回归,以修正目标位置和形状。泛化一点,IoU可以衡量任意两个区域的形状相似度,对于区域A和B,。
有公式可知,对于任何具体情况,IoU都和区域的大小无关(invariant to the scale of the problem)。其值介于0-1之间,IoU=1表示两个区域形状完全相同,即完全重合;IoU=0表示两个区域完全无重合。在这个程度上,IoU可以理解为一个编码的过程:将形状信息编码为区域信息,通过区域重合性来表示形状相似性。
目前IoU存在的问题:边框回归中,结果通常是边框的两个角点坐标或者是中心点坐标加宽高,通常用或
norm计算loss,但
或
norm的值与IoU并不总是一致的(优化
或
norm的loss时并不一定优化了IoU,导致边框回归并未向真值靠拢),如下图所示:
图(a)中使用的是 norm,预测的是左下角和右上角两个点的坐标。当其中一个点(左下角)位置确定后,在
norm的值保持不变时,另一个点(右上角)的位置轨迹为一个圆(虚线所示),只要右上角点在圆上,
norm就一样,但是三个图很明显交并比不同,说明以
norm的值作为loss优化时,由于其和IoU的不一致很可能导致边框回归的结果不理想。
图(b)使用的是 norm,预测的是中心点坐标和宽高。尽管
norm的值是相同的,box的IoU仍然不同。这种情况下,如果考虑边框的旋转会更加复杂,参数变多。因此往往会对box的预测有一些限定,比如提出的anchor概念,就是把box的形状大小离散化,简化了问题,但上面不一致的问题仍然存在。
同时IoU还有一个问题,如下图所示:这三种情况下IoU的值是一样的,但明显回归效果不同,此时IoU并未真正表示边框回归的效果。
本文提出的generalized IoU,针对两个axis-aligned rectangles/n-orthotopes,可以在训练中反向传播,因此可以直接作为优化目标(应该就不再需要上面的/
norm了),解决了不一致的问题。原始的IoU不能直接作为优化目标的原因是: IoU=0的两个边框,无论它们具体的差距有多大,都无法体现出来。因此只要不重合,形状是否相近是无法通过IoU表现的,此时IoU是无法优化的,因为没有梯度。而generalized IoU即GIoU在保持了IoU关键特性的同时,解决了不重合边框的问题(还有上图IoU表达能力有限的问题)。GIoU算法如下:
很简单,只是在原始IoU上减去一项,这项中有一个object C,是包围A和B的最小box;黄色标注的部分就是C中没有A和B的部分(空白区),用C进行normalize就会得到和IoU一样的性质:invariant to the scale of the problem;IoU减去的这一项表示的意义其实和IoU接近,如果A和B重合度高,这一项就很小,得到的GIoU仍然是大的,它主要的意义是解决了不重合A和B存在的梯度消失问题:此种情况下IoU是相同的,但这一项的值不同,就会得到不同的GIoU值,可以继续优化目标函数。
1)IoU作为优化目标时可以将其视为一种距离(distance),那么目标函数中对应的loss就应该为;同理,GIoU作为优化目标时有
;
2)由于减去的第二项是invariant to the scale of the problem的,GIoU同样保持了这个性质;
3)GIoU是一个比IoU更低的界限,因为减去了一项(这一项介于0-1之间),并且有;
4)IoU是介于0-1的,但GIoU的取值区间是对称的,介于-1到1。GIoU=1表示的意义和IoU相同:A和B完全重合;GIoU=-1时,有,表示A和B完全不重合且相距十分远,因此GIoU是可以表示不重合box间的差距的;
5)IoU只关注了A和B的重合区域,而GIoU还关注了两者不重合的区域,因此有更强的编码/表达能力,更能体现A和B的相似性。
IoU与GIoU的关系如下图:
在IoU>0时,尤其是IoU比较高时,两者是很接近的;当IoU=0时,GIoU并不为0,而是有很长的拖尾。
如果GIoU衡量的是任意形状的两个objects,是很难计算的,但在目标检测任务中,由于边框都是矩形,交集和C也都是矩形,并且预测的结果是角点坐标,很容易通过求最大最小值得到。利用IoU和GIoU作为边框回归loss的算法如下:
该算法对应的是预测box的两个角点的情况:
1. 首先找到预测结果中的左下和右上点;
2. 计算真值box面积;
3. 计算预测box面积;
4. 根据两者面积计算交集面积;
5. 根据角点坐标找到最小包围box的角点;
6. 计算包围box面积;
7. 计算IoU;
8. 计算GIoU;
9. 计算两者对应的loss。
本文在YOLO v3,Faster R-CNN,Mask R-CNN等one-stage和two-stage的检测网络上做了实验,效果如下:
其中在one-stage的YOLO v3上的效果比较显著,因为one-stage中没有anchor吧,而two-stage中anchor很密集,能更好地找到效果好的box,GIoU能起到的作用就很小了。
其实去年也有两篇关于IoU的论文,一个是cascade R-CNN吧,好像是级联的结构加上不断提升的IoU阈值,以解决样本不均衡问题;另一个IoU Net是加了个分支网络,预测IoU,然后作为监督信息,以解决分类置信度和IoU之间的不一致问题吧。
这篇论文的网站:https://giou.stanford.edu/,做得好好哦,而且代码也开源了。