R-FCN论文阅读笔记

论文地址:https://arxiv.org/pdf/1605.06409.pdf
项目地址:tensorflow版本caffe版本mxnet版本pytorch版本

本论文发表于NIPS 2016上,是16年何凯明去Facebook之前,在微软亚研院代季峰、何凯明所在团队的工作。当时,R-FCN的提出,在略微损失精度的情况下(精度低于Faster RCNN +++),精度超过了Faster RCNN,且速度比Faster RCNN快了2.5~20倍。

摘要

本文介绍了针对准确且高效的目标检测的基于区域的(region-based)全卷积网络(fully convolutional networks)。比较于先前基于区域(Region-based)检测器如Fast/Faster RCNN每个区域子网络(Region subnetworks)数百次的计算代价,本文设计的基于区域的(Region based)检测器是采用在几乎整个图像上共享计算的全卷积。为了实现这一目标,本文提出了一种“位置敏感评分图”(position-sensitive score maps)来解决图像分类中的平移不变性(translation-invariance)和目标检测的平移变化性(translation-variance)之间的两难困境。因此,本文的方法自然采用了全卷积图像分类网络骨干,如最新的残差网络(ResNets),来用于目标检测。本文展示了采用101层ResNet在PASCAL VOC数据集上的比赛成绩(如在VOC2007上获得83.6%mAP)。此外,本文的结果在测试时的速度达到了每张图170ms,是2.5~20倍快于Faster RCNN。
1.引言
比较流行的目标检测深度学习网络可以采用感兴趣区域池化层(Region-of-Interest Pooling layer)划分为两个子网络:
(1)独立于ROI的共享的、全卷积的子网络
(2)不共享计算的ROI-wise子网
这种分解来源于之前比较优秀的分类结构:如AlexNet和VGGNet么,他们由两个子网组成,一个是以空间池化层(spatial pooling layer)结束的卷积子网,一个是若干个全连接层(fully-connected layers)。因此,在图像分类任务中最后的空间池化层(spatial pooling layer)被自然而然地变成了目标检测网络的感兴趣区域推荐池化层(ROI pooling layer)。
但是目前最好的图像分类网络,例如残差网络(ResNets)和GoogleNets都是用fully convolutional设计的。通过类推,采用所有的卷积层去构建一个目标检测结构中共享的卷积子网络是自然而然的,这样ROI-wise子网络就不存在隐藏层了。然而,通过实验考察这个工作,这个天真的想法被展现出相当差的检测精度(inferior detection accuracy)与网络较高的分类精度(superior classification accuracy)是不匹配的。为了解决这个问题,在ResNet论文汇总 Faster RCNN的检测器ROI Pooling Layer被不自然地插入在两组卷积层之间-这创建了一个更深的ROI-wise子网络,来提升精度。由于每个ROI的计算不共享,导致速度比原来更慢。
我们认为上述的不自然设计主要是为了解决图片分类的平移不变性(translation invariance)与物体检测之间的平移变换性(translation variance)之间的矛盾。一方面,图像级别的分类任务侧重于平移不变性(在一幅图片中平移一个物体是不会改变它的判别结果的),因此深度全卷积网络结构很适合平移不变形的这类问题,这一点可以从ImgNet分类上的领先结果得到证实。另一方面,目标检测任务需要定位表示,这在一定程度上是需要平移变换性的。例如,把目标平移进候选框的过程中应该产生有意义的响应,以便于描述候选框和目标的重叠程度。我们假设在图像分类网络中更深的卷积层对平移是不那么敏感的。为了解决这一困难,ResNet的检测通道中插入了ROI pooling layer近卷积-这个特点的区域操作打破了平移不变性,且当在不同的区域评价,后面的ROI卷积层不再具有平移不变性。然而,这个设计由于引入了大量的Region-Wise layers,牺牲了训练和测试的效率。
本文针对目标检测开发了一种基于区域(Region-based)的全卷积网络R-FCN。我们的网络包括共享的全卷积结构,就像FCN一样[15]。为了把平移变换特性融合进FCN中,我们创建了一个位置敏感得分图(position-sensitive score maps)来编码位置信息,从而表征相关的空间位置。在FCN的顶层,我们附加了一个position-sensitive ROI pooling layer 从这些得分图(score maps)获取信息,这些得分图不带任何权重层。整个结构是端对端(end-to-end)的学习。所有可学习的层在整幅图片中都是可卷积的并且可共享的,并且可以编码用于物体检测的空间信息。图 1说明了这个关键的思路),表1比较了区域检测的各种算法。
Alt text
Alt text
采用101层的残差网络作为骨架,我们的R-FCN在PASCAL VOC2007数据集上达到了83.%的mAP,在2012数据集上达到了82.0%。同时我们的结果采用ResNet-101获得了每张图170ms的测试时速度,其是2.5x到20x快的比较于FasterRCNN +ResNet-101。这些实验验证了我们的方法能够解决平移不变性和变换性之间的两难困境,并且像ResNets的图像级全卷积分类器可以非常有效的转变成全卷积目标检测器。

2.方法

概览

跟随R-CNN,我们采用了流行的两级目标检测策略(two-stage object detection strategy)包括(1)区域推荐(region proposal)(2)区域分类(region classification。尽管不依赖Region Proposal的方法存在,但是Region-Based系统仍然在各种基准上保持精度领先。我们采用RPN(Region Proposal Network)提取候选区域,其本身是一个全卷积的结构,接下来我们共享了R-FCN和RPN的特征。图2展示了整个系统的概览。
Alt text
考虑到proposal regions (RoIs),R-FCN结构被设计来分类ROIS为目标类别和背景。在R-FCN中,所有可学习的权重层都是可卷积的并且是在整幅图片中进行计算。最后一个卷积层针对于每一个物体类别产生一堆$k^2$个position-sensitive score maps 。因此,C个目标类别和1个背景类有$k^2(C+1)$通道的输出层。这堆$k^2$个score maps对应着$k \times k$空间网购描述的相对位置。例如$k \times k=3 \times 3$,每个目标分类就有9 score maps编码目标实例{top-left,top-center,top-right,…,boottom-right}。
R-FCN采用一个位置敏感感兴趣区域池化层(position-sensitive ROI pooling layer)结束。该层聚合了最后一层卷积的输出,并且为每个ROI生成了一个评分。不像[8][6],我们的position-sensitive RoI层产生的是selective pooling,并且每个$k \times k$箱子仅仅聚集来自$k \times k$得分图堆里面的一个得分图。采用端到端的训练,ROI layer引导足后的卷积层去学习专门的position-sensitive score maps。图1展示了我们的思路,图3和4可视化了样本,细节将会在下面介绍到。
Alt text
Alt text
主干结构(Backbone architecture):虽然其他网络[10, 23]也被采用,R-FCN的化身是基于ResNet-101的[9],ResNet-101有100个带全局平局池化(global average pooling)的卷积层和1000类的全连接层。我们已出了平均池化层和全连接层,并且只采用这些卷积层来计算feature maps。我们使用[9]作者在ImageNet[20]上预训练,发布的ResNet-101,ResNet-101最后的卷积块是2048维的,我们附加了一个随机初始化的1024维 1x1据那几层用来降维(更精确的说,我们增加了表1中的深度),然后我们采用了一个$k^2(C+1)$通道的卷积层来生成score maps,下面将进行介绍。
位置敏感得分图 & 位置敏感感兴趣区域池化(Position-sensitive score maps&Position-sensitive RoI pooling):为了明确地编码每个RoI的位置信息,我们采用规格网格划分每个RoI矩形到$kxk$个bins。对于每个$wxh$尺寸的RoI矩形,一个bin的尺寸为 $\approx \frac{w}{k} \times \frac {h}{k}$。在我们的方法里,最后的卷积层为每个类别产生$k^2$个score maps。在第(i,j)个bin$(0 \leq i, j\leq k-1)$里,我们定义了只在第(i,j)个score map上池化的一个位置敏感感兴趣区域池化操作(position-sensitive RoI pooling):

这里$r_c(i,j)$是第c类第$(i,j)$个bin的池化响应,$z_{i,j,c}$是$k^2 (C+1)$ score maps里的一个score map, $(x_0,y_0)$ 标记了RoI的左上角,n是bin的像素数,$\Theta$标记了这个网络所有的学习参数。第$(i,j)$个bin的跨度是 $\lfloor i \frac{w} {k} \rfloor \leq x < \lceil (i+1) \frac {w} {k} \rceil$ 和 $\lfloor j \frac{h}{k}\rfloor \leq y < \lceil (j+1) \frac {h}{k} \rceil$ ,该等式的操作在图1中进行了展示,其中一个颜色表示了一对(i,j),上述等式执行了average pooling平均池化(正如在本文中我们的使用的那样),但是max pooling最大池化也可以进行。
我们然后在RoI上对这$k^2$个position-sensitive scores投票。在本文中我们通过平均得分,为每个RoI禅师C+1维向量:$r_c(\Theta)=\sum_{i,j} r_c(i,j|\Theta)$来简化投票。然后我们计算了所有类别的softmax响应:$s_c(\Theta) = e^{r_c(\Theta)}/\sum^C_{c^{‘}=0}e^r c^{‘}(\Theta)$ 。它们备用来在训练期间评估交叉熵损失,在推断过程中对RoIs进行排名。
我们更进一步采用类似的方法解决了边界盒回归问题(bounding box regression)。除了上面的$k^2(C+1)$维卷积层,我们添加了一个兄弟$4k^2$维的卷积层用来解决边界盒回归(bounding box regression)。position-sensitive RoI pooling在$4k^2$的maps堆上被执行,为每个RoI产生了一个$4k^2$维的向量。然后通过平均投票被聚合到一个4维的向量。这个4-d向量采用了[6]中的参数化方式参数阿虎了一个边界盒$t=(t_x,t_y,t_w,t_h)$。我们注意到,为了简单起见我们采用了class-agnostic(类不可知)边界盒回归,但对于特定类的部分(如$4k^2C$维输出层)是可以采用的。
position-sensitive score maps理论的部分灵感是来自实例级的语义分割FCNs。我们进一步引入了position-sensitive RoI pooling layer 来引导目标检测得分图的学习。在RoI层之后是没有学习层的,能够获得几乎cost-free的region-wise计算代价并且加速训练和推断过程。
Training
采用预计算的Region Proposal是,端到端的训练R-FCN是比较容易的。接下来[6],我们的对于每一个RoI的损失函数是交叉熵损失和盒回归损失的求和: 。这里 是RoI的ground-truth标签(表示背景)。是分类交叉熵损失函数。Lreg是盒回归损失函数在[6]中给出了定义,表示ground truth box。是一个指标,如果如果为真其等于1,反之为0.按照[6]中的做法设置均衡权值$ \lambda$ = 1 ,当RoI与实际边框的重叠部分至少有0.5,那么我们认为是positive examples(正样本),否则是negative example(负样本)。在我们训练期间,采用在线难分样本挖掘是非常容易的(OHEM)。每个RoI区域的计算是可以忽略的,从而使样本挖掘近乎cost-free。假设在前向传播过程中每张图有N个Proposals,我们对所有的N个Proposals计算损失。然后我们通过损失排序了所有的RoIs(正和负)并且选择了损失比较高的B个RoIs。反向传播[11]是基于选择的样本执行的。。因为我们的每个ROI的计算都是近似可以忽略的,所以前向时间基本上不会受N的影响。而OHEM Fast R-CNN可能是会花费双倍的时间。在下表3中,我们提供了一个详细的时间数据。
Alt text
我们使用了0.0005的权重衰减系数和0.9的动量。缺省情况下,我们使用单尺度(single-scale)的训练:图片被统一调整为600个像素的大小。每个GPU处理1张图片,选取B=128 ROI来用于反向传播。我们使用了8个GPU来训练模型(所以有效的小批量(mini-batch)大小是8×)。对于20k个mini-batches我们使用了0.001的学习速率;而对于10k个mini-batches,我们使用了0.0001的学习速率。为了让R-FCN拥有带RPN的特征,我们采用了4步交替训练,在RPN和R-FCN中交替训练。
Inference
像图二展示的,在RPN和R-FCN计算(采用每张图单一尺寸600)的feature maps被共享。然后RPN部分处理RoIs,R-FCNb部分对category-wise scores和regresses bounding boxes进行评估。在推论阶段,我们计算了300个ROI区域。结果通过非极大值意志(non-maximum suppression,NMS)来进行后处理,使用了0.3IoU的阈值,作为standard practice。
À trous and stride
我们的全卷积网络结构是在广泛应用的语义分割[15,2]的FCNs的基础上进行修改的。特别的,我们将ResNet-101的有效stride从32像素减少到16像素,从而增加了得分图的分辨率。conv4级9的所有层没有改变。第一个conv5块的stride2操作被修改为stride=1,并且在conv5级的所有卷积滤波器采用“hole algorithm”[15,2] 修改,来补偿减少的stride。为了进行公平比较,RPN的计算和R-FCN在conv4级以上的部分进行共享,像[9]中的Faster RCNN那样,RPN是不受这种trous trick的影响。下表表明R-FCN的ablation 结果($k\times k = 7\times 7$,无难分样本挖掘),trous trick提升了2.6点的mAP。
Alt text
Visualization
在图 3和图 4我们可视化了通过R-FCN学习到的position-sensitive score maps,$k\times k = 3\times 3$。这些特定的map竟会在目标相关的特定位置尝试较强的激活。例如,“top=center=sensitive” score map在大致靠近目标的top-center位置时现实出高分数。如果一个候选框与真实物体精确的重合(图 3),那么 $k^2$个bins的大多数会被产生较强的激活,然后会得到较高的分数。相反的,如果候选边框与真实物体并没有完全准确的重合(图 4)那么$k^2$个bins中的s不会被激活,从而导致得分很低。

3.相关工作

RCNN[7]已经验证了采用Region Proposals[27,28]的深度网络的有效性,RCNN在裁剪和变形区域评估了卷积神经网络,并且计算不在区域间共享(表1)。SPPnet[8],Fast RCNN[6],Faster RCNN[18]是半卷积的(semi-convolutional)在整张图的卷积子网络是采用共享计算的并且另一个子网络各自计算独立的区域。
目标检测器可以被认为是“全卷积”模型。OverFeat[21]通过在共享卷积feature maps的基础上滑动多尺寸窗口检测目标;类似的,在Fast RCNN[6][12]中,研究了采用Region Proposal取代滑动窗口。在这些情况下,可以采用单尺寸的欢动窗口改造成一个单一的卷积层。Faster RCNN[18]中的RPN组件是一个全卷积检测器,可以采用多种尺寸的参考盒(anchors)来预测边界盒(bounding boxes)。原始的RPN是类无关的(class-agnostic),但对应的类依赖(class-specific)部分是可以被应用的[12],在我们接下来的评估中可以看到。
Alt text

4.实验

4.1 Experiments on PASCAL VOC

我们在20个目标类别的PASCAL VOC上施行了我们的誓言。在VOC2007 trainval和VOC2012 trianval(“07+12”)联合数据集上训练了我们的模型,并在VOC 2007测试集上进行评估。目标检测精度采用mean Average Precision(mAP)测量。
Comparisons with Other Fully Convolutional Strategies
尽管全卷积检测器是可用的,实验表明对于其来说获得好的精确度是非平凡的。我们使用ResNet-101验证了下面的全卷积策略(或者几乎全卷积策略,其每个RoI只有一个分类全连接fc层):
朴素Faster RCNN:正如引言中讨论的那样,一个或许ResNet-101中的所有卷积层来计算共享feature maps,然后在最后一层卷积层(conv5)后面使用RoI Pooling。在每个RoI上评价低成本的21类全连接层(所以这个变体是几乎全卷积的)。这个trous trick被用来公平的比较。
类依赖RPN(Class-specific RPN):RPN采用[18]中方法进行训练,除了2类(目标与否)卷积分类层用来取代21类卷积分类层。为了公平的比较,class-specific RPN采用了trous trick来使用ResNet-101的conv5层。
R-FCN without position-sensitivity:通过设置k=1,我们移除了R-FCN的position-sensitivity。这相当于在每个RoI内采用全局池化(global pooling)。
分析:表2展示了这个结果。我们注意到在ResNet论文中标准的(非朴素)Faster RCNN使用ResNet-101获得了76.4%的mAP(可以在表3看到),其在conv4和conv5之间插入了RoI pooling layer。作为一个比较,朴素Faster RCNN(在conv5之后采用RoI Pooling)大幅度降低到68.8%(表2)。这个比较凭经验证明了通过在Faster RCNN系统层之间插入RoI Pooling Layer关于空间信息的重要性。相似的观察报告可以在[19]中看到。
另一方面,我们的R-FCN系统有很好的精度(表2)。它的mAP(76.6%)和标准Faster RCNN(76.4%,表3)相当。这个结果表明我们的位置敏感(position-sensitive)策略能够对定位目标的空间信息进行有效编码,在没有在RoI pooling层后面采用任何学习层的情况下。
位置灵敏度(position-sensitive)的重要性通过设定k = 1来进一步证明,通过这个操作R-FCN无法收敛。在这种恶化的情况下,在一个RoI里面没有空间信息能够被明确的捕获。同时我们报告了朴素Faster RCNN如果它的RoI Pooling输出分辨率是1x1的情况下是能够收敛的,但是其mAP进一步大幅下降到61.7%(表2)。
Alt text
Comparisons with Faster R-CNN Using ResNet-101
接下来我们和PASCAL VOC、MS COCO、ImageNet基准上表现很强的竞争者标准“Faster RCNN +ResNet-101”进行了对比。接下来我们采用了kxk=7x7。表3展示了相关的比较。Faster RCNN评估得出一个10层的子网络可以为每个RoI获取好的精确度,而R-FCN每个区域的计算代价几乎没有。在测试时采用300RoIs,Faster RCNN每张图花费0.42s,比较于我们的R-FCN每张图0.17s(在K40 GPU上,在Titan X GPU上是0.1s)是2.5x慢点,R-FCN比Faster RCNN训练的更快。难分样本挖掘对R-FCN的训练(表3)没有增加任何代价。当从2000RoIs中挖掘训练R-FCN是可行的,在这种情形下Faster RCNN是6x慢(2.9s vs 0.46s)。实验表明从更大的候选集合(如2000)对于挖掘没有任何受益。所以在这片文章的其他部分,我们采用300哥RoIs来训练和推断。
表4展示了更多的比较,在[8]中高的多尺度训练以后,我们在每次训练迭代如尺寸是来自(400.500,600,700,800)中随机采样。我们仍然测试了600像素的单尺寸,所有没有添加任何计算时测试。mAP是80 .5%。同时,我们在MS COCO[13]trainval 数据集上训练了我们的模型,并且在PASCAL VOC数据集上进行了微调。 R-FCN获得了83.6%的mAP(表4),接近“Faster RCNN +++”系统[9]其也采用ResNet-101.我们注意到我们非常有竞争力的结果包括了在每张图测试速度0.17s,20x快于Faster RCNN +++ 花费了3.36s,其进一步包含迭代盒回归、上下文和多尺度测试。这些比在PASCAL VOC 2012测试集上观察到(表5)。
Alt text
Alt text
深度的影响(On the Impact of Depth)
Alt text
Region Proposals的影响
Alt text

4.2在MS COCO数据集上的实验

我们在有60个目标类别的MS COCO数据集上进行了评估。我们的实验包括80k 训练集,40k验证集,20k测试集。我们在90k迭代次数情况下设置学习率0.001,30k迭代次数设置学习率0.0001,才有一个有效的mini-batch尺寸8.我们对[18]中的交替训练 第四步和第五步(即在一个RPN训练步骤之后停止),当这些特征共享的时候这个操作在这个数据集上的精度获得轻微的提升;同时我们也报告了在特征没有共享的情况下这两部训练法也能够获得相当好的精确度。
结构在表6中可以看到。我们采用孤单尺寸的R-FCN训练超级准有48.9%/27.6%的验证结果。其和Faster RCNN的基准结果(48.4%/27.2%)是相当的,但我们的方法在测试时是2.5倍更快。值得注意的是我们采用的方法在小尺寸(被定义在[13])上执行的更好。我们的多尺寸训练R-FCN(单尺寸测试)在验证集上有49.1%/27.8%的结果,在测试集上有51.5%/29.2%。考虑到COCO的目标尺寸的广阔的范围,我们在接下来[9]进一步的对多尺寸测试变化进行了评估,且采用的测试尺寸有{200,400,600,800,1000}。mAP为55.3%/31.5%。该结果非常接近于在MS COCO2015的比赛中第一名的结果(采用ResNet-101的Faster RCNN+++,55.7%/34.9%)。不过,我们额方法是更简单,且并没有[9]采用增加上下文或者迭代盒回归这样的策略,并且在测试和训练上更快。
Alt text

5.总结和未来工作

我们提出了Region-based Fully Convolutional Networks(基于区域的全卷积网络),一个简单但精度和效率都非常高的目标检测框架。我们的系统自然的采用了state-of-the-art的图像分类主干,如ResNets,其采用全卷积设计。我们的方法获得了对比Faster RCNN非常有竞争力的结果,但在训练和推断过程中都表现的更快。我们有意的保持我们在这篇文章中提出的R-FCN系统尽可能简单。针对语义分割(如[2]所见)已经有一系列的其他关于FCNs的拓展被研究出来,也有一些关于目标检测的Region-based的方法拓展(如[9,1,22]所见)。我们希望我们的系统能够有利于这一领域的进步。
Alt text
Alt text
Alt text
Alt text

本文标题:R-FCN论文阅读笔记

文章作者:Y.G Ren

发布时间:2018年01月09日 - 18:01

最后更新:2018年01月09日 - 20:01

原始链接:https://ygren.github.io/2018/01/09/R-FCN论文阅读笔记/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。