R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述

R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述

摘要:faster r-cnn中在第二阶段网络中,有多少roi就丢进分类和回归子网络中计算多少次,太耗时,本文提出的R-FCN几乎全是共享参数卷积层,大大减少了计算量。
分类具有平移不变性,而目标检测要回归检测框的偏移,具有一定的平移敏感性,为了满足检测的平移敏感性要求,提出了位置敏感的得分图(score map)。

1 引言
faster r-cnn中用一个roi池化作为中间层,其前面网络用于生成roi,后面的两个子网络没有卷积层,而且没有隐藏层,直接就是全连接层分别做分类和检测。但是由于roi池化使得fm丢失了一部分空间位置信息,使得检测的精度远低于分类的精度。
于是,为了提高检测的精度,在ResNet论文中,在roi池化后的检测器中加入了卷积层,这样加卷积层没什么道理,因为丢失的空间位置信息难道能够通过新加入的卷积层找回来吗?但是这样做却能够提高了检测的精度。但是由于每个roi都要在这个检测器中的卷积层做计算,即卷积层计算出的fm不共享,导致计算量大大增加。
注:平移不变性,即目标在形状大小不变的情况下,只改变其所处的位置,对最后处理的结果没有影响。
分类任务是在图片(fm)层面完成的,目标在图片中的哪个位置不影响最后的分类结果,所以做分类更倾向需要平移不变性。而目标检测任务在一定程度上需要平移可变性,因为目标在候选框中平移,理应会影响这个框包裹这个目标的能力。

2.方案
总览:用的两步网络,模型总体架构如下:
R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述
R-FCN最后一个卷积层对于每个类别都产生一组K2大小的得分图,所以如果是C类,就会产生一个有K2(C+1)个通道的输出层,其中+1代表还有一个类别是背景。K2=3*3=9时代表一个框中的{左上,左中,左下,中上,中心,中下,右上,右中,右下}共计9个区域。
R-FCN的最后一层是一个对位置敏感的ROI池化层,这一层聚合了最后一个卷积层的输出,并且对每个ROI都给出一个得分。这个池化层跟一般的池化不一样,它执行的是选择性池化, 也就是池化后的结果中的每个bin是来自于在前一层上选择的fm中的不同的通道。

主干网络:RseNet-101,经ImageNet预训练。最初的ResNet-101的最后一层卷积层是输出的是2048通道的fm,我们额外加了一个11的卷积层降维到1024通道,然后又加了个有K2(C+1)个卷积核的卷积层来生成得分图和4K*K个卷积核的卷积层用于做回归,这两个卷积层是并列的。

位置敏感的得分图和位置敏感的roi池化
每个ROI框都被分成了kk个网格,分的规则跟faster r-cnn中的roi pooling规则差不多。前面已经说过了,最后一个卷积层会生成KK*(C+1)个通道的fm,生成每个类别的roi时是从KK(C+1)通道中提取KK个通道,80类加背景类共计81类,这81类用完fm的所有通道。每个类提取到KK个通道后每个通道的对应位置组合在一块形成最后的roi,例如一个9个通道,第一个通道的上这个roi范围内的左上角部分组成生成的roi的左上角,第二个通道的上这个roi范围内的左中部分组成生成的roi的左中部分,以此类推,9个通道的同样roi范围内的不同区域组成了最后生成的roi。
位置敏感的池化操作具体如下:
R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述
实际就是对每个bin里的所有元素取平均值,当然也可以取最大值,这里用的是平均值,取平均值之每个roi后就得到KK个平均值,然后对这KK个元素再取一个平均值得到这个roi的最终得分(两次取平均实际上就是对这个roi上的所有元素取个平均值)。最终81类共产生81个得分值,这81个得分竞争(softmax),这个softmax值在训练时就用交叉熵损失计算,在测试时哪个大这个roi就属于哪个类别。

以上解决的是分类得分计算的问题,那么回归框的偏移值怎么计算呢?
类似,加了个并列的4KK个卷积核的卷积层用于做回归,这就说明是做的类别无关的回归。也可以做类别有关的回归,即每个类别都回归,那么这层就有4KK*(C+1)个卷积核。这两种方式哪个更好呢?论文中没说,但毫无疑问第一种方式计算量更小。

训练:
损失函数如下
R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述
分类损失是交叉熵损失函数
L_cls (s_(c^* ) )=-log(s_(c^* ) )
回归损失函数跟fast r-cnn中的一样。
本文采用了OHEM方法来均衡输入到第二步网络中正负样本比例。

推断:
输入到第二步网络中的roi设置成300个。

可视化:
R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述
3 相关工作
介绍了r-cnn系列参数共享的情况。

4 消融实验
4.1voc上的实验
做了三类实验证明本文方法的有效性
最原始的faster r-cnn并加了à trous技巧作为基础对比实验,其他的实验也都用了à trous。
注:这个faster r-cnn是把roi pooling插入到了卷积层中间,将卷积层一分两半。而标准的faster r-cnn是把roi pooling放到最后,然后跟的就是分类会回归层,标准的效果很好。
类别独立的rpn网络,即本来只分两类的rpn网络改为分21类。
R-FCN网络不用位置敏感池化,即不是每个通道上取一小块做平均,而是在每个roi上做平均??
注:是在看不出前第二个实验跟本文有什么关系。
实验结果
R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述
R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述
R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述
4.2 coco实验结果
R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述
附:VOC上的详细实验结果
R-FCN: Object Detection via Region-based Fully Convolutional Networks(2016)论文综述