论文地址:https://arxiv.org/abs/1807.11590
代码地址:https://github.com/vacancy/PreciseRoIPooling
本文指出定位置信度与分类置信度不匹配的问题,并把定位问题从回归的方式改为基于优化的方式,从而提升定位精度。

Motivation

当前two-stage的目标检测任务流程为:
1. RPN找出一系列候选框,区分前景背景
2. 对前景框进行分类和回归,得到每个框的分类置信度及回归坐标
3. 通过NMS,以分类置信度排序,过滤掉IoU大于一定阈值的框,得到最终的结果
可以看到,在这个过程中,对于定位置信度没有考虑。这样会出现两个问题:
这里写图片描述
(1)分类置信度高不代表IoU大,如上图(a)所示,以分类置信度当做这个框的置信度做NMS, 会把与ground-truth的IoU大,但是分类分数低的框给抑制
(2)边界框回归算法的可解释性较差,在Cascade RCNN论文中指出:边界框回归不是单调的,如上图(b)所示,如果边界框回归次数过多,结果可能会退化。
这里写图片描述
基于上述观察,本文探索将IoU置信度加入到目标检测的流程中,并以一种新的思路:基于优化的方法来进行边界框修正

Contribution

IoU-Net

这里写图片描述
IoU-Net网络结构如上图所示,与Faster RCNN的主要区别在RoI-Pooling 换成了PrRoI-Pooling, 加入了一个IoU预测器。
1. IoU predictor
本文IoU预测器的输入不是用RPN产生的RoIs,而是对Ground Truth框随机扰动,得到Jittered RoIs,过滤掉与GT的IoU<0.5的框,剩下的作为输入,经过PrRoI Pooling给IoU predictor。
2. IoU-guided NMS
分类置信度与定位置信度不是对齐的。本文提出了IoU-guided NMS,将IoU与分类置信度结合在一起。算法如下图所示。
这里写图片描述
对于一类的所有检测出的bbox B:
  取出定位置信度最大的框 bm b m , 得分为s
    对于与 bm b m 的IoU大于阈值的框,将其过滤,若分类置信度高于 bm b m ,则更新 bm b m 的分类置信度。
不断迭代进行,直到B中所有bbox都处理完毕。
之前的NMS是以bbox的分类置信度排序,然后按IoU过滤。得到分类置信度最高的框
IoU-guided NMS则是以bbox的定位置信度排序,然后按IoU过滤,并更新分类置信度。得到定位置信度最高的框,并且分类置信度变成最高了
3. Bounding box refinement as an optimization procedure
Bounding box的优化问题可以定义为下面这个公式的最优解:

c=argminccrit(trainsform(boxdet,c),boxgt) c ∗ = a r g min c c r i t ( t r a i n s f o r m ( b o x d e t , c ) , b o x g t )

比如在Fast RCNN框架中, crit是用smooth-L1距离。
用回归的方式估计 c c ∗ ,得到的结果受输入分布影响大,而且如Cascade RCNN指出,回归次数增加,效果会越来越差。本文提出一种基于优化的方式,用IoU-Net来估计 c c ∗ , 算法如下所示:
这里写图片描述
这里的PrPool为本文新提出的一种RoI-pooling方式,在后面介绍。
算法大致流程是:
for i=1 to T(最大迭代次数) :
 -迭代输入 bjbjB b j , b j ∈ B (检测出的所有bbox),
  -用PrPool来抽 bj b j 特征,然后通过IoU分支,可以得到梯度grad,以及分数PrevScore,
  -通过反向传播,更新 bj b j
  -用新的 bj b j 计算出新的分数NewScore
  -如果更新前后分数变化小于阈值,则将 bj b j 标记,存入A中,不进入下一次迭代
-直到B中所有bbox被存入A中,或者迭代到一定次数T才终止迭代

简单来说,就是不断将经过PrPool的检测框输入到IoU分支,通过计算与GT的IoU分数来计算梯度,从而更新IoU分支的参数
4. Precise RoI Pooling
这里写图片描述
如图,绿色点为feature map的值,虚线为1个bin的实际位置,
-RoI Pooling: 虚线框的坐标不是整数,RoI Pooling操作会将其量化成整数,得到实线框,然后再作池化。边界框位置由虚线框变成实线框,产生量化误差
-RoI Align: 为了避免RoI Pooling的量化误差,保持浮点数边界不变,取这个bin中四个固定位置,如红点所示,通过双线性插值,由绿点值得到四个红点的值,然后再做池化
这里写图片描述
-PrRoI Pooling: 因为RoI Align对于每个bin取出固定的点来做池化,这样对于bin的大小不具有适应性。PrRoI Pooling则使用二阶积分来做池化
这里写图片描述
不同于RoI Align用双线性插值求4个红点的值,PrRoI Pooling把整个区域看做连续的,对于bin中白色的区域,都可以用双线性插值通过绿色的已知值得到。(x,y)坐标的值f(x,y)计算规则如下
这里写图片描述
这里写图片描述
IC是插值系数, wi,j w i , j 为点(i,j)的值
PrPooling另一个好处是反向传播时求导连续。
RoI Pooling反向传播:这里写图片描述
这里,xi代表池化前特征图上的像素点;yrj代表池化后的第r个候选区域的第j个点;i*(r,j)代表点yrj像素值的来源(最大池化的时候选出的最大像素值所在点的坐标)。由上式可以看出,只有当池化后某一个点的像素值在池化过程中采用了当前点Xi的像素值(即满足i=i*(r,j)),才在xi处回传梯度。
RoI Align反向传播:这里写图片描述
在ROIAlign中,xi*(r,j)是一个浮点数的坐标位置(前向传播时计算出来的采样点),在池化前的特征图中,每一个与 xi*(r,j) 横纵坐标均小于1的点都应该接受与此对应的点yrj回传的梯度。
PrRoI Pooling:这里写图片描述
由于PrRoI Pooling在前向传播时是连续可导的,其反向传播也是连续可导的。避免了任何量化
5. Joint training
IoU预测器分支可集成到标准的FPN的网络架构中,与分类分支同时训练。
具体细节可参照论文,现在指出一些特殊的地方
IoU预测器的loss选用smooth-L1,训练数据为上文所说的Jittered RoIs。
在inference阶段,对于anchor box先用bbox regression修正,然后用IoU-guided NMS取出置信度最高的100个bbox,最后使用基于优化的算法优化bbox。

Experiment

在COCO数据集中trainval35k共8万张图片上训练,在minival共5000张图片上评估,结果如下
这里写图片描述
因为IoU-NMS保留的是IoU最大的框,所以在高IoU threshold上结果是最优的
这里写图片描述
可以看出基于优化的bbox修正效果也挺显著

这里写图片描述

Conclusion

本文提出一篇新颖的修正目标定位的网络IoU-Net,指出了分类与定位置信度不匹配的问题,提出IoU-NMS来获取位置更精确的bbox,并将定位的回归问题重新定义为优化问题,提升了定位的精度。同时IoU预测器可方便集成到别的网络。

参考

https://www.jiqizhixin.com/articles/2018-08-01-4
http://blog.leanote.com/post/afanti.deng@gmail.com/b5f4f526490b

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐