加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!
同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~
DIoU要比GIou更加符合目标框回归的机制,将目标与anchor之间的距离,重叠率以及尺度都考虑进去,使得目标框回归变得更加稳定,不会像IoU和GIoU一样出现训练过程中发散等问题。
论文标题:
Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression(已经被AAAI2020接收)
https://arxiv.org/pdf/1911.08287.pdf
https://github.com/Zzh-tju/DIoU-darknet
IoU & GIoU存在的问题分析
论文作者通过一个仿真实现,从实验结果的角度说明了IoU和GIoU存在的问题。
实验设定如下图所示:
-
绿色框代表仿真实验需要回归的七个不同尺度的目标框,七个目标框的中心点坐标都是(10 * 10)。
-
蓝色的点代表了所有anchor的中心点,中心点的分布如下图所示,各个方向都有,各种距离都有,当然每个anchor的一个中心点都包含有七个不同面积的anchor框。
而且每个面积的anchor框又有其中不用比例尺寸。
因此一共有5000个蓝色点,有5000*7*7个anchor框,而且每个框都需要回归到七个目标框去,因此一共有5000*7*7*7个回归案例。
最终的实验结果如下:
图中展示的训练同样的代数后(200代),IoU,GIoU以及本文提出的DIoU作为loss的情况下,每个anchor的误差分布。
-
IoU:
从IoU误差的曲线我们可以发现,anchor越靠近边缘,误差越大,那些与目标框没有重叠的anchor基本无法回归。
-
GIoU:
从GIoU误差的曲线我们可以发现,对于一些没有重叠的anchor,GIoU的表现要比IoU更好。
但是由于GIoU仍然严重的依赖IoU,因此在两个垂直方向,误差很大,基本很难收敛,这就是GIoU不稳定的原因。
-
DIoU:
从DIoU误差的曲线我们可以发现,对于不同距离,方向,面积和比例的anchor,DIoU都能做到较好的回归。
再用一张很形象的图,来说明GIoU不稳定以及收敛很慢的原因。
下图中第一行三张图展示的是GIoU的回归过程,其中绿色框为目标框,黑色框为anchor,蓝色框为不同次数的迭代后,anchor的偏移结果。
第二行三张图展示的是DIoU的回归过程,其中绿色框为目标框,黑色框为anchor,红色框为不同次数的迭代后,anchor的偏移结果。
从图中我们可以看到,GIoU在回归的过程中,从损失函数的形式我们发现,当IoU为0时,GIoU会先尽可能让anchor能够和目标框产生重叠,之后GIoU会渐渐退化成IoU回归策略,因此整个过程会非常缓慢而且存在发散的风险。
而DIoU考虑到anchor和目标之间的中心点距离,可以更快更有效更稳定的进行回归。
基于IoU和GIoU存在的问题,作者提出了两个问题:
第一:
直接最小化anchor框与目标框之间的归一化距离是否可行,以达到更快的收敛速度。
第二:
如何使回归在与目标框有重叠甚至包含时更准确、更快。
作者为了回答第一个问题:提出了Distance-IoU Loss。
上述损失函数为DIoU的损失。
其中,b,bgt分别代表了anchor框和目标框的中心点,且p代表的是计算两个中心点间的欧式距离。
c代表的是能够同时覆盖anchor和目标框的最小矩形的对角线距离。
因此DIoU中对anchor框和目标框之间的归一化距离进行了建模。
直观的展示如下图所示。
-
与GIoU loss类似,DIoU loss在与目标框不重叠时,仍然可以为边界框提供移动方向。
-
DIoU loss可以直接最小化两个目标框的距离,因此比GIoU loss收敛快得多。
对于包含两个框在水平方向和垂直方向上这种情况,DIoU损失可以使回归非常快,而GIoU损失几乎退化为IoU损失。
DIoU还可以替换普通的IoU评价策略,应用于NMS中,使得NMS得到的结果更加合理和有效。
问题2答案:CIoU
作者为了回答第二个问题:
提出了Complete-IoU Loss。
作者认为一个好的目标框回归损失应该考虑三个重要的几何因素:重叠面积、中心点距离、长宽比。
GIoU:为了归一化坐标尺度,利用IoU,并初步解决IoU为零的情况。
DIoU:DIoU损失同时考虑了边界框的重叠面积和中心点距离。
然而,anchor框和目标框之间的长宽比的一致性也是极其重要的。基于此,作者提出了Complete-IoU Loss。
上述损失函数为CIoU的损失,通过公式可以很直观的看出,CIoU比DIoU多出了阿尔法和v这两个参数。
其中阿尔法是用于平衡比例的参数。
v用来衡量anchor框和目标框之间的比例一致性。
从阿尔法参数的定义可以看出,损失函数会更加倾向于往重叠区域增多方向优化,尤其是IoU为零的时候。
从下表可以看出,DIoU和CIoU在YOLOv3上都有较大的性能提升!
-End-
极市目标检测方向交流群
添加极市小助手微信(ID : cv-mart),备注:研究方向-姓名-学校/公司-城市(如:目标检测-小极-北大-深圳),即可申请加入极市目标检测交流群(已经添加小助手的好友直接私信),更有每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流,一起来让思想之光照的更远吧~
△长按添加极市小助手
△长按关注极市平台
觉得有用麻烦给个在看啦~