R-FCN学习笔记
R-FCN的主要贡献在于解决了“分类网络的位置不敏感性(translation-invariance in image classification)”与“检测网络的位置敏感性(translation-variance in object detection)”之间的矛盾,在提升精度的同时利用“位置敏感得分图(position-sensitive score maps)”提升了检测速度。
已经提出来的两种解决方案:
首先Faster-rcnn网络的缺陷是大量的卷积层位于roi-pooling层的前面,而roi-pooling层后面的分类和回归网络只有两层全连接网络。
这里要注意的,第1部分都是像VGG、GoogleNet、ResNet之类的基础分类网络,这些网络的计算都是所有RoIs共享的,在一张图片测试的时候只需要进行一次前向计算即可。而对于第2部分的RoI-wise subnetwork,它却不是所有RoIs共享的,因为这一部分的作用就是“给每个RoI进行分类和回归”,所以当然不能共享计算。那么现在问题就处在这里,首先第1部分的网络具有“位置不敏感性”,而如果我们将一个分类网络比如ResNet的所有卷积层都放置在第1部分用来提取特征,而第2部分则只剩下全连接层,这样的目标检测网络是“位置不敏感的translation-invariance”,所以其检测精度会较低,并且也白白浪费了分类网络强大的分类能力
所以我们提出来的设想就是将roi-pooling层放在卷积网络的中间,这样对每个rois分别进行计算。但是这样做的缺点就是计算量太大了。
而R-FCN的做法是:第一个是将ROI Pooling后面的全连接层都用卷积层所代替,第二个是对ROI Pooling的魔改。
如上图所示:
首先在得到的feature_maps上面进行卷积得到一个(k²(c+1))纬度的score_maps,k代表我们后面要分分尺寸大小(这里通过消融实验得知最好的k是3)C是类别数,C+1是加了一个背景类。我们最后的roi-pooling层是kxkx(C+1)的,最后进行求和操作,得到1x(C+1)的向量。
那么具体是怎么找的呢?
其实也简单,首先我们需要确定我们要找的是哪一个类别,然后对我们的ROIS的位置的kxk个方格的每一个方格对应的通道的对应的位置进行平均池化操作,若每一个方格的置信度均很大的话,那么这个roi属于这个类的概率就比较大。(其中反向传播的时候,就是传回来最后的总和最大的值,我们以总和最大认定为每一个方格的值也比较大。)
具体的操作流程表示为:
1、抽取特定类别(这里为人这个类别)对应的个位置的特征图。
2、对抽取出来的部分进行求均值,然后按照位置组成一个kxk大小的矩阵。
3、对这个kxk大小的矩阵求和,得到一个值。
4、对其他每个类别都执行1-3步骤,最终得到一个的向量。将这个向量进行softmax,从而判别特征图上的这个ROI区域对应的目标类别是什么。
接下来就是位置回归。
position-sensitive regression 前面的“position-sensitive score map”+“Position-sensitive RoI pooling”得到的值是用来分类的,那么自然就有相应的操作得到的值用来回归。按照“position-sensitive score map”+“Position-sensitive RoI pooling”思路,其会让每一个RoI得到 C+1个数作为每个类别的score,那么现在每个RoI还需要4 个数作为“回归的偏移量”,也就是“坐标和长宽”的偏移量,所以仿照分类设计的思想,还需要一个类似于position-sensitive score map的用于回归的score map。那么现在就这样设计:在ResNet的共享卷积层的最后一层上,接上一个与position-sensitive score map并行的(sibling)score maps,该score maps用于regression,暂且命名为“regression score map”,而该regression score map的维度应当是 k²x4 ,那么在经过Position-sensitive RoI pooling操作后,每一个RoI就会得到 4个数作为“该RoI的坐标和长宽的偏移量”了。
在测试的时候,为了减少RoIs的数量,作者在RPN提取阶段就将RPN提取的大约2W个proposals进行过滤:
1、去除超过图像边界的proposals
2、使用基于类别概率且阈值IoU=0.7的NMS过滤
3、按照类别概率选择top-N个proposals
所以在测试的时候,一般只剩下300个RoIs,当然这个数量是一个超参数。并且在R-FCN的输出300个预测框之后,仍然要对其使用NMS去除冗余的预测框。