《GIoU》论文笔记

论文连接:arxiv.org/abs/1902.09…html

代码连接:github.com/generalized…git

  这篇论文出自CVPR2019,算是目前已被录用且公布的为数很少的目标检测相关论文了。这篇论文提出了一种优化边界框的新方式——GIoU(generalized IoU,广义IoU)。目前关于IOU的新用法真是层出不穷,从Cascade R-CNNIOU Net再到现在的GIoU,GIoU的方法是这些论文中相对简单的,相信不少朋友了解了这篇文章的原理后,心里的OS都是“总以为损失函数能够优化,这么简单我怎么没想到呢?”,哈哈,反正我是这样想的了。下面来看看这篇文章所提出的方法吧。github

动机

  目前目标检测中主流的边界框优化采用的都是BBox的回归损失(MSE loss, L1-smooth loss等),这些方式计算损失值得方式都是检测框得“代理属性”——距离,而忽略了检测框自己最显著的性质——IoU。以下图所示,在L1及L2范数取到相同的值时,实际上检测效果倒是差别巨大的,直接表现就是预测和真实检测框的IoU值变化较大,这说明L1和L2范数不能很好的反映检测效果。算法

enter description here

  除了能反映预测检测框与真实检测框的检测效果外,IoU还具备尺度不变性。但是既然IOU这么好,为何以前不直接用IoU呢,这是因为IoU有两个缺点,致使其不太适合作损失函数:网络

  • 但检测框与gt之间没有重合时,IoU为0。而在优化损失函数时,梯度为0,意味着没法优化
  • 在检测框与gt之间IoU相同时,检测的效果也具备较大差别,以下图所示:
    enter description here

  基于IoU的优良特性和其做为损失函数时的致命缺点,做者提出了一个新的概念——GIoU函数

方法

  GIoU的定义以下图所示,post

enter description here

  根据定义,GIoU具备以下性质:优化

  • GIoU具备做为一个度量标准的优良性质。包括非负性,同一性,对称性,以及三角不等式的性质
  • 与IoU类似,具备尺度不变性
  • GIoU的值老是小于IoU的值
  • 对于两个矩形框A和B,0≤IoU(A,B)≤1,而-1≤GIoU≤1
  • 在A,B没有良好对齐时,会致使C的面积增大,从而使GIoU的值变小,而两个矩形框不重合时,依然能够计算GIoU,必定程度上解决了IoU不适合做为损失函数的缘由

  GIoU做为损失函数时计算方式以下的算法2代理

enter description here

  从算法中能够看到和GIoU的计算方式和IoU的步骤基本保持一致,在获得IoU的值后在根据上面的算法1计算GIoU的值。这里还不太清楚方向传播时,梯度是怎么计算的。等我看看源码再来更新吧cdn

实验

  做者分别在几种主流的目标检测算法上作了实验,分别是YoLo、Faster R-CNN和Mask R-CNN。这里贴上在Pascal Voc数据集上的实验结果,以下

enter description here

enter description here

  实验结果中在YoLo v3上能够看到GIoU相比IoU的损失函数有较大幅度的提高,而在faster r-cnn中GIoU和IoU做为损失函数的区别不大,这里做者给出的解释是faster rcnn的anchor更密集,致使不易出现与gt不重叠的检测框。其实我的认为,anchor多的情形与gt不重叠的检测框才多,更根本的缘由应该是RPN网络进行了一次粗检后,滤去了大部分跟gt没有重合的检测框。致使GIoU相比IoU的损失函数提高不明显吧

总结

  GIoU的方法很简单,巧妙的是优化的点。经过广义IoU做为损失函数替代bbox回归仍是颇有趣的。不过疑惑的是实验结果中的检测AP值都很是低,原生的faster rcnn在pascal voc上的检测效果都不会这么差。从实验对比上GIoU的损失函数相比原始的损失函数在准确率不到40%的效果上来讲确实有较大幅度的提高。然而要是换到准确率较高的baseline上呢?这一点还须要实验验证。   另外总感受这篇论文有点点到即止,没有更多的实验验证bbox做为损失函数存在缺陷的缘由。


欢迎关注个人公众号
enter description here
相关文章
相关标签/搜索