前言
在大部分目标检测方法中,分类和定位的处理方法是不同的。给定一个proposal,预测的每个类标签的概率就作为这个proposal的分类置信度(classification confidence),而bbox回归模块只是预测了针对该proposal的变换系数,使该proposal更接近gt box,以拟合目标的位置。在这个过程中,定位置信度(localization confidence)并没有被考虑进来,这就会带来两个缺点:
在抑制重复检测时忽略了定位精度,而只使用分类置信度对proposal进行排序。在下图中,黄色的bbox是gt,红色和绿色的bbox是检测结果,可以看到一些检测结果虽然分类置信度很高,但它们与相应的gt之间的IoU却很小。而分类置信度与定位精度之间这种不能匹配的问题,可能会导致在NMS过程中选出的是定位不准确的bbox,而过滤掉那些定位更准确的bbox。
定位置信度的缺失,可能会使得bbox回归缺少可解释性。之前的一些研究证明了bbox回归在迭代过程中的非单调性,也就是说,如果多次应用bbox回归,可能会损害输入bbox的定位效果。
本文提出了IoU-Net,通过预测检测结果与相应gt box之间的IoU,使得网络能像分类模块那样,也对定位精度有所掌握。通过使用这个预测的IoU也可以解决前面提到的问题:
IoU对于定位精度来说是一种天然标准,可以用这个预测的IoU替换分类置信度作为NMS操作中的排序依据,从而消除分类置信度的误导性,得到更准确的检测结果。提出一种基于优化的bbox调整方法,在inference时,将预测的IoU作为优化目标,也作为定位置信度的可解释性指示量。Precise RoI Pooling层使得研究者可以利用梯度上升来处理IoU优化问题。实验证明,与基于回归的方法相比,基于优化的bbox调整方法能实现定位精度的提升。
IoU-Net的结构
上图是IoU-Net的整体结构,虚线框内的模块构成了一个单独的IoU-Net,以FPN作为backbone,将RoI Pooling层替换为PrRoI Pooling层。在训练IoU-Net时,使用一组随机参数对gt box进行变换,得到一组候选bbox,也就是图中的Jittered RoIs,然后过滤掉其中与gt box的IoU<0.5的bbox,在剩下的bbox中采样训练数据,作为PrRoI Pooling层的输入。对于每个bbox来说,它的特征来自FPN的输出和PrRoI Pooling层的处理,然后这些bbox被送入IoU predictor中。
由于IoU-Net的训练过程相对于检测器来说是独立的,因此它可以与不同的检测器结合,并且鲁棒性很强。
IoU-guided NMS
本文提出了一种IoU-guided NMS来解决分类置信度与定位精度之间的不匹配问题。具体来说就是,使用预测的IoU替换分类置信度,作为NMS操作时的排序依据。这样在进行NMS时,选出与gt之间的IoU最高的那个bbox bmb_mbm,它的分类置信度为sss,将那些与bmb_mbm的IoU大于阈值的bbox过滤掉,若某个bbox bjb_jbj的分类置信度高于bmb_mbm,则更新bmb_mbm的分类置信度为:s=max(s,sj)s=max(s,s_j)s=max(s,sj)。算法如下:
传统的NMS是按分类置信度进行排序,然后根据IoU进行过滤,得到分类置信度最高的bbox。而IoU-guided NMS是按IoU进行排序,并按一定方式进行过滤,最后得到的是定位置信度(IoU)最高的bbox,同时它的分类置信度也是最高的。
基于优化的bbox调整方法
bbox的优化问题可以定义为寻找式(1)的最优解c∗c^*c∗:
其中boxdetbox_{det}boxdet是detected bbox,boxgtbox_{gt}boxgt是gt box,transform是一个bbox的转换函数,它以ccc作为参数并对给定的bbox进行转换。critcritcrit用来衡量两个bbox之间的距离。
基于回归的方法直接用一个神经网络来估计c∗c^*c∗的最优值,但是,这种方法得到的结果对于输入分布的变化非常敏感,如下图所示,在FPN和Cascade R-CNN中,随着迭代次数的增加,性能反而会下降。
为了解决这个问题,本文提出了基于优化的bbox调整方法,利用IoU-Net作为定位精度(IoU)估计器。此外,IoU估计器还可以用作提前停止条件,以自适应步骤实现迭代优化。IoU-Net可以直接估计IoU(boxdet,boxgt)(box_{det},box_{gt})(boxdet,boxgt),而PrRoI Pooling层可以确保IoU的梯度计算,可以直接使用梯度上升方法找到式(1)的最优值。算法如下图所示:
算法流程大致是:在不断的迭代过程中,对于bj∈Bb_j \in Bbj∈B,用PrPoolPrPoolPrPool提取bjb_jbj特征,再经过IoUIoUIoU分支计算出梯度gradgradgrad和分数PrevScorePrevScorePrevScore;经过反向传播对bjb_jbj进行更新,然后计算出新的分数NewScoreNewScoreNewScore;如果更新前后分数变化小于阈值,就将bjb_jbj存入AAA中,不进入下一次迭代。直到BBB中所有的bbox都存入AAA中,或迭代到一定次数TTT才终止迭代。
Precise RoI Pooling
PrRoI Pooling避免了对坐标的量化,并且在bbox坐标上有连续梯度。设特征图FFF为PrRoI Pooling的输入,wi,jw_{i,j}wi,j是特征图上在一个离散位置(i,j)(i,j)(i,j)处的特征,使用双线性插值,这个离散的特征图就可以被视为在任意坐标(x,y)(x,y)(x,y)处都是连续的:
IC(x,y,i,j)IC(x,y,i,j)IC(x,y,i,j)是插值系数。然后定义RoI的一个bin为bin={(x1,y1),(x2,y2)}bin=\lbrace (x_1,y_1),(x_2,y_2) \rbracebin={(x1,y1),(x2,y2)},其中(x1,y1)(x_1,y_1)(x1,y1)和(x2,y2)(x_2,y_2)(x2,y2)分别是左上角和右下角的连续坐标。在给定binbinbin和特征图FFF的情况下,通过计算二阶积分来进行池化操作:
下图分别展示了RoI Pooling,RoI Align和PrRoI Pooling,在传统的RoI Pooling中,连续的坐标首先需要被量化,以计算bin中激活值的和;在RoI Align中,为了消除量化误差,在bin中采样了N=4N=4N=4个连续点,定义为(ai,bi)(a_i,b_i)(ai,bi),后续的池化操作是在这些采样点上进行的,但是NNN是预先设定好的,并且不能根据bin的大小进行调整;而在PrRoI Pooling中,它直接基于连续特征图计算二阶积分。
结论
将检测结果与相应gt之间的IoU融入到目标检测器中,似乎是一个提升AP的可行办法,只是关于这个IoU有不同的使用方法,本文是直接根据这个IoU来进行NMS操作,这篇论文是将这个IoU与分类置信度进行相乘,根据乘积进行NMS操作。本文除了提出IoU-Net,还提出了一种新的基于优化的bbox调整方法,以往的目标检测方法中都是通过回归来调整bbox。本文提出的PrRoI Pooling也是为了更好的进行bbox调整。