文章目录
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-sens