(R-FCN)R-FCN: Object Detection via Region-based Fully Convolutional Networks论文阅读笔记
文章目录
- R-FCN: Object Detection via Region-based Fully Convolutional Networks论文阅读笔记2016
-
-
Abstract
-
1. Introduction
-
2. Our approach
-
3. Related Work
-
4. Experiments
-
- 4.1 Experiments on PASCAL VOC
- 4.2 Experiments on MS COCO
-
5. Conclusion and Future Work
-
R-FCN: Object Detection via Region-based Fully Convolutional Networks论文阅读笔记2016
Abstract
我们提出了一个基于区域的,fully-convolutional网络,用来进行准确有效的目标检测。与之前的基于区域的网络相反,比如Fast/Faster R-CNN需要使用一个子网络对每个区域进行计算,花费很大,**我们的网络是fully convolutional的,整张图的几乎所有的计算是共享的。**为了达到这个效果,==我们提出了对位置敏感的分数图(position-sensitive score maps)来解决图像分类的平移不变性和目标检测中的平移可变性这个难题。==因此,我们的方法可以直接对分类的backbone网络改为fully-convolutional,用于目标检测。我们使用101层的ResNet在PASCAL VOCA2007取得了83.6% mAP,同时测试速度可以达到每张图像170 ms,比Faster R-CNN快2.5-20倍。
1. Introduction
通常来说,普遍用于目标检测的深度网络被ROI池化层分成了两个子网络:
- 一个是共享的、全卷积的网络
- 另一个是不共享计算的,分别RoI池化以及后续计算的网络。
这种结构主要是由之前的分类网络结构造成的,卷积层+空间池化+fc层。因此在目标检测中,最后一个池化层就转化为RoI池化。
但是最近的SOTA分类网络,比如ResNet、GoogLeNet等是使用全卷积的。以此类推,使用全卷积的网络用来目标检测似乎是可行的,但是工作中表明,直接这样取得的效果不佳,在ResNet论文中,为了解决这个问题,直接将RoI池化层插入了前后两个卷积网络之间,使得RoI作用的更深,因此提升了准确率,但是因为每个RoI不共享计算,速度很慢。
我们认为上面的问题主要是因为图像分类需要平移不变性而目标检测需要平移可变性。一方面、图像尺度上的分类任务支持平移不变性——图像中目标的漂移是没有区别的,因此卷积层这种平移不变性的结构就可以提升分类效果;另一方面,目标检测任务需要定位的表示(representation),这就在某种程度上是平移可变的 。ResNet论文中将RoI池化层插入到卷积之中,这个对每个区域进行操作的层就打破了前面的平移不变性,RoI层之后的卷积层就不再有平移不变性了,就可以很好的进行坐标回归。然而,如表1所示,这种设计牺牲了训练和测试的效率,因为它引入了很多region-wise layers,即对每个区域进行计算的子网络 ,计算量大。
本文中,我们提出了一种叫做Region-based Fully Convolutional Network(R-FCN)的目标检测框架。**我们的网络由共享计算、全卷积的结构组成。**为了将平移可变性组合到FCN中,**我们使用一些特殊的卷积层来得到一些位置敏感的分数图(position-sensitive score maps)作为FCN的输出。每个分数图将相对的空间位置信息进行编码(比如,一个目标的左侧)。在FCN的最后(top),我们增加了一个位置敏感的RoI池化层,来汇总这些分数图中的信息,之后就没有带权重的层了(fc/conv)。**整个网络是端到端学习的。所有需要学习的层都是卷积层,且整张图共享计算,但是需要对空间信息进行编码。图1展示了关键的思想,表1对比了不同的方法。
使用ResNet101作为Backbone,我们的方法在PASCAL VOC2007取得了83.6%mAP、VOC2012上取得了82.0%mAP。同时测试阶段170ms每张图像,比Faster R-CNN+ResNet101快2.5-20倍。
2. Our approach
Overview。
我们使用two-stage的方法,首先region proposal,然后region classification,因为region-based的方法在准确率上是领先于one-stage的。我们使用RPN网络来提取候选区域,RPN网络也是一个全卷积网络;然后像Faster R-CNN一样,在RPN和R-FCN中共享特征 ,图2展示了整个系统结构。
R-FCN网络对RoI区域分类、并定位。R-FCN最后的卷积层对于每一类产生k ^ 2个位置敏感的分数图,因此输出了k ^ 2(C+1)个通道(C类+1背景)。k ^ 2个分数图与k * k个描述相对位置的空间格子相关。比如,k=3的话,9个分数图将每一类目标的{左上、上、右上……右下}九个相对位置信息进行编码。
R-FCN的最后一层是一个位置敏感的RoI池化层。这个层汇总了最后一层卷积层的输出,对每个RoI生成了分数 。我们的这个RoI池化层使用选择性池化(selective pooling),**k * k中的每个bin都只来自k * k个分数图中的对应的那一个图,并汇总了这个图的响应。随着训练的进行,RoI层就指导着最后一层卷积层来学习特定的分数图。**图1展示了这个想法;图3图4可视化了一个例子,细节在下面介绍。


Backbone architecture。
本文中R-FCN的backbone基于ResNet101,但是其他的网络也适配。ResNet 101有100层卷积层然后是一个全局平均池化和1000类fc分类层。**我们移除了平均池化层和fc层,只使用卷积层来计算特征图。**我们使用在ImageNet上预训练的ResNet101,最后的卷积块维度为2048-d,我们连接了一个随机初始化的1024-d 1 * 1卷积来降低维度。然后我们使用k ^ 2(C+1)-channel的卷积层来生成分数图。
Position-sensitive score maps & Position-sensitive RoI pooling。
为了明确的将位置信息编码到每个RoI中,我们**将每个RoI矩形框分成k * k个bins网格。对于一个长宽为w、h的RoI,每个bin的尺寸大概是w/k、h/k。**我们的方法在最后一个卷积层对每一类目标生成k ^ 2个分数图。在(i,j)-th这个bin中(i,j范围大于等于0,小于k),我们定义一个位置敏感的RoI池化操作,这个操作在(i,j)-th分数图上进行。
**这里rc(i,j)为(i,j)-th bin对于第c类别的池化响应。z_{i,j,c}是k^2(C+1)个分数图之中对应的那一个,(x0,y0)表示RoI的左上角,n为这个bin中像素的数量。\Theta表示网络中所有的需要学习的参数。(i,j)-th bin的扫描范围即为:**即每个bin只扫描RoI上对应的那一块,进行池化。
公式1的操作如图1,每个颜色代表一对(i,j),公式1中使用了平均池化(本文全部使用平均池化),但是最大池化同样可以。
最后,得到k ^ 2个响应,在这个RoI中进行投票。本文中,我们简单使用平均分数来进行投票,**对于每个RoI,输出C+1维度的向量,表示对C+1类,该RoI的结果,之后再计算softmax,**用来计算交叉熵loss进行训练和测试时候的排序。
之后我们进行bbox回归,与Fast R-CNN类似,我们除了添加了k ^ 2(C+1)-d的卷积层,我们还添加了一个4k ^ 2-d的卷积层sibling分支用来bbox回归 。**在这 4k^2个maps上我们使用位置敏感的RoI池化,对每个RoI生成了4k^2-d的向量。然后通过平均投票来聚合成一个4-d向量,这个向量t=(tx、ty、tw、th)。**这里为了简化,我们的bbox回归是类无关的,class-specific也是可以的(生成4k^2C-d向量)。如图2中并行操作,RPN产生了许多RoI,然后送到RoI池化中,在RoI池化层进行操作的时候,同时对 k^2(C+1)和4k^2的map进行操作,生成了回归的和分类的结果。
在RoI层之后,就没有需要学习参数的层了,这使得基于区域的计算几乎是cost-free的,加速了训练和测试过程。
Training。
我们的loss是交叉熵loss和box回归loss的综合。
这里面c* 是RoI的ground truth标签,为0代表是背景。Lcls为分类的交叉熵loss,Lreg为bbox回归的loss,t* 代表ground truth box。[c* >0]是一个指示器,当条件满足时代表1,否则为0;即RoI为背景时,没有定位loss。我们将平衡参数 \lambda设为1。我们将与ground truth的IoU大于等于0.5的RoI设为正样本,否则为负样本。
在训练的时候,我们的方法可以使用OHEM,假设每张图像N个proposals,前向传播计算loss,然后排序,选择B个,使用选择的B个进行反向传播。因为我们每个RoI的计算量是可以忽略的,因此前向传播的速度没有被N所影响,而使用OHEM的Fast R-CNN的每张图像训练时间几乎翻倍。
**我们使用权值衰减0.005,动量0.9。默认使用单尺度训练,图像resize到短边为600像素。**使用8个GPU,每个GPU一次1张图,128个RoI,所以有效的mini-batch为8。使用0.001学习率训练20k,然后0.0001训练10k。为了将R-FCN和RPN共享特征,我们采用了4步交替训练法(Faster R-CNN中)。
Inference。
如图2中所示,RPN和R-FCN之间共享特征图,然后RPN提出RoI,R-FCN对其生成分数图、并回归bbox。测试时我们使用300个RoIs,之后使用阈值0.3的NMS对结果进行处理。
Atrous and stride。
我们的全卷积结构也使用了语义分割中广泛使用的修改操作。我们将ResNet101的有效步长从32像素降到了16像素,从而增加了分数图的分辨率。conv4以及之前的操作没有改变,conv5 block中的stride2变为stride1,并且conv5中的所有卷积核变为带洞卷积(atrous)来补偿对于补偿的减小。之后的表格中展示出atrous trick提升了2.6点的mAP。
Visualization。
图3图4中我们可视化了k=3的R-FCN分数图。这些图对于某个目标的特定相对位置有着很强的响应。比如,“左上”分数图对于接近于目标左上位置的bin就有很高的分数响应。如图3所示,如果一个候选框与真实物体精确重叠,那么这个RoI中k ^ 2个bin中大部分的bin都会有较高的响应,这样它们的投票结果就分数很高。
3. Related Work
R-CNN证明了使用region proposals的有效,之后的SPPnet、Fast R-CNN、Faster R-CNN都是半卷积的,它们都是其中一个子卷积网络共享整张图的计算,另一个子网络对单个region进行评价。
Faster R-CNN中的RPN网络是全卷积的,原本的RPN是类无关的,但是class-specific也是可行的。
4. Experiments
4.1 Experiments on PASCAL VOC
我们在VOC2007trainval和VOC2012trainval并集上进行训练,使用VOC07test测试,使用mAP评价准确率。
Comparisons with Other Fully Convolutional Strategies。
我们与下面几个全卷积方法(或almost全卷积,只有一个分类fc层),使用ResNet101进行对比。朴素的Faster R-CNN使用全部的卷积层来计算共享特征图,然后RoI池化,然后使用一个21类的fc层来评估每个RoI。class-specific RPN与Faster R-CNN中一样,只不过把原来的2类分类器(目标/背景)改为21类卷积分类器。没有位置敏感性的R-FCN,我们设置k=1来移除位置敏感性,来进行对比。
图2展示了结果,标准的Faster R-CNN(在conv4和conv5之间插入RoI池化层)取得76.4%的mAP,作为对比,朴素Faster R-CNN(在conv5之后插入RoI池化层)降到了68.9%。这证明了空间信息对RoI池化的重要性。
class-specific的RPN取得67.6%的mAP,比标准的Faster R-CNN低了大概9点。
我们的方法与标准的Faster R-CNN相近,这证明了我们方法的有效。当我们的k=1时,网络无法收敛,这种情况下RoI池化层没有获取到空间位置信息。
Comparisons with Faster R-CNN Using ResNet-101。
下面我们与标准的Faster R-CNN + ResNet101进行比较,它在多个数据集上取得SOTA。下面我们使用k=7,表3展示了结果。Faster R-CNN对每个区域有一个额外的10层子网络来计算,而R-FCN没有,测试时使用300个RoI,它每张图像需要0.42s,比我们的方法慢2.5倍。我们的方法训练也要更快,而且OHEM并没有给我们的训练增加额外的计算负担。使用2000RoI训练也是可行的,但是实验结果表明从更大数量的候选框中 进行mining没有提升,所以我们使用300RoI。
表4展示了更多的对比。
我们进行多尺度训练,训练时将每张图像随机采样为{400,500,600,700,800}像素,测试时仍是600像素。mAP为80.5%。另外,我们在MSCOCO上进行训练,然后再PSACAL VOC上进行微调,R-FCN达到了83.6%的mAP。效果接近Faster R-CNN+++,但是我们比它快20倍(0.17s vs 3.36s)。我们同样在VOC2012测试集上进行了对比,如表5所示。
On the Impact of Depth。
下面的表格展示了使用不同深度ResNet、以及VGG的R-FCN模型的效果。对于VGG16,fc层(fc6、fc7)替换成滑动的卷积层,并使用1 * 1的卷积层来生成位置敏感分数图。我们的网络越深,效果越好,但是深度增加到152,效果就饱和了。
On the Impact of Region Proposals。
R-FCN可以使用其他的region proposal方法,比如选择性搜索SS,Edge Boxes(EB)。下面的表格展示了结果(使用ResNet101),使用RPN效果更好。
4.2 Experiments on MS COCO
接下来我们在MS COCO数据集上进行评估(共80类目标)。学习率设为0.001训练90k,0.0001训练30k,mini-batch为8。把4步交替训练扩展为5步(最后再多训练一次RPN),这轻微提升了准确率。我们同样发现,两步训练已经足够取得较好的准确率,但是特征没有共享。
结果如表6所示,我们的单尺度训练网络val的结果为48.9%/27.6%,与Faster R-CNN相当,但是我们快2.5倍。值得注意的是,我们的方法对于小尺寸目标表现更好。
我们的多尺度训练网络在val取得了49.1%/27.2%,在test-dev取得了51.5%/29.2%。考虑到COCO数据集目标尺度的范围之大,我们又使用了多尺度测试,测试尺度为{200,400,600,800,1000}。mAP为53.2%/31.5%,结果接近COCO2015比赛第一名的效果(Faster R-CNN +++,55.7%/34.9%)。而我们的方法更简单,没有加附加的网络,且训练和测试都更快。
5. Conclusion and Future Work
我们提出了R-FCN网络,简单但是准确且有效率的目标检测框架。我们的方法使用了SOTA的分类backbone,比如ResNets,设计成全卷积。我们的方法取得了与Faster R-CNN相当的准确率,但是无论训练还是测试都比它快。
FCN已经有了许多的用在语义分割上的扩展,就像作为基于区域的方法的扩展用在目标检测一样。我们希望我们的系统可以更多享受到该领域发展带来的好处。
