论文地址: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的优化问题可以定义为下面这个公式的最优解:
比如在Fast RCNN框架中, crit是用smooth-L1距离。
用回归的方式估计 c∗ c ∗ ,得到的结果受输入分布影响大,而且如Cascade RCNN指出,回归次数增加,效果会越来越差。本文提出一种基于优化的方式,用IoU-Net来估计 c∗ c ∗ , 算法如下所示:
这里的PrPool为本文新提出的一种RoI-pooling方式,在后面介绍。
算法大致流程是:
for i=1 to T(最大迭代次数) :
-迭代输入 bj,bj∈B 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