2016_R-FCN_Object Detection via Region-based Fully Convolutional Networks(NIPS2016)Jifeng Dai

一、背景及意义(动机)

先前主流的目标检测方法,都是使用了一个全图片共享计算的全卷积子网和一个没有共享计算的ROI分类子网。这样的话没有共享计算的ROI分类子网往往比较耗时。最近最新的分类网络都被设计为全卷积网络的形式,比如resnet。那是不是在目标检测任务中也可以只使用全卷积网络进行共享计算来进行检测呢?作者发现如果直接运用全卷积网络来进行检测效果并不理想,这是因为分类任务是希望变化不敏感的,而检测任务则是希望变换敏感的,直接应用分类网络来进行检测效果不大理想。之前resnet作者为了获得比较好的准确率将ROIpooling插入到cov4和conv5卷积层之间,这样将网络变成了变换不敏感的全卷积子网和变换敏感的ROI子网,这样仍然与之前做法没区别,ROI子网仍然无法共享计算 。为此在这篇论文中,作者提出了基于区域的全卷积神经网络,用于更加准确,高效的目标检测任务。跟faster rcnn相比,RFCN不需要在每个区域运用一个子网络来对目标进行进一步的筛选,而是直接运用一个全图共享的全卷积神经网络直接得到结果,因此可以更快。为了达到这个目标,作者提出了一个位置敏感得分图,去解决在目标检测任务中,需要对变换敏感,而在分类任务中需要对变换不敏感这样一个两难的问题。该方法可以很自然地使用全卷积分类网络作为backbone。作者使用了resnet101,在PASCAL VOC数据集上达到了比较好的结果(在2007数据集上mAP为83.6%,在2012数据集上mAP为82.0%),并且速度比faster rcnn+resnet101快了2.5-20倍,平均每张图片只需170ms。

代码:https://github.com/daijifeng001/r-fcn

二、使用什么方法来解决问题(创新点)

为了解决分类网络对变换不敏感而检出任务则需要对变换敏感这个两难问题,作者使用一个指定通道数的卷积层作为全卷积网络的输出,该卷积层中每个通道都编码进了不同类型目标的位置信息,整个卷积层构成了位置敏感得分图。之后作者在该卷积层上面放置了位置敏感的池化层(RsROI pooling)去整合各个类型目标得分图的信息,这个操作并没有引入额外的参数。整个过程都是可以端到端训练并且是全卷积可共享计算的。
如Figure1所示,C为类别数,k为空间划分的粒度,也即将目标所在区域划分成$k \times k$的网格,则每个目标将会有$k^2$个得分图,每个得分图对目标的不同位置做出响应,最终将会有$(C+1) \times k \times k $个得分图,多加的一类为背景。最后在RPN网络获取到候选目标位置的时候,会利用RsROI pooling将各个类别的各个位置的得分进行融合,作者采用取平均的方式,最后再使用softmax得到最终目标的分类置信度。对于目标的定位,作者也采用类似的方式,加多一个得分图分支,不过这里作者采用的是类别无关的方式,也即得分图通道数为$4 \times k \times k$。

三、实现细节

作者采用了2阶段的目标检测策略,先利用RPN网络得到候选框,然后再利用R-FCN对候选目标进一步的筛选和定位,整个检出系统如Figure2所示。
给定一个候选的ROI区域,R-FCN主要去区分该区域目标的类别以及精确定位目标。在R-FCN中,所有的可学习到的权重层都是卷积层。最后的卷积层为每个类别生成一个k平方channel的位置敏感得分图。这个得分图编码了位置信息进去。在位置敏感得分图之后,作者使用了一个RsROI pooling层去整合各个类别的各个位置的得分信息,最后再使用softmax得到每个类别的置信度。

3.1 Backbone architeture

作者采用ResNet-101作为backbone。首先利用Imagenet对其进行预训练,然后将最后的global average pooling和1000类的fc层移除,并在最后一层2048-d卷积层后放置一个通道数为1024-d的1x1卷积层对最后一层进行降维,最后再放置$(c+1) \times k \times k$-d的得分图。

3.2 Position-sensitive score maps & Position-sensitive RoI pooling

为了编码位置信息到每个ROI区域,作者将ROI区域划分为$k x k$个网格。对于大小为$w x h$的ROI区域,每个网格大小约为为$(w/k) \times (h/k)$。对于每个类别的每个网格信息,作者通过以下的RsPooling操作得到其得分:

这里$Z_{i,j,c}$是每个channel的响应值,$x_0$和$y_0$是ROI区域左上角的位置。每个类别每个位置$(i,j)$的得分,是通过将该类别的对应位置的channel取出来,然后将与该位置相关的响应值求和取平均得到。在得到每个位置的得分之后,最后的结果通过对所有位置求平均得到。然后得到每个类别的score之后,再利用softmax得到最后每个类别的概率。loss采用交叉熵loss。
对于回归任务的处理,作者也采用了类似的方式,但是使用了一个类别无关的回归策略,当然也可以使用一个类别相关的。为此接入的一个卷积层的channel数为4乘以k的平方。然后通过聚合每个位置每个坐标的得分,得到一个4维的向量。这里位置的变换参考R. Girshick. Fast R-CNN. In ICCV, 2015.

3.3 孔洞卷积

在FCN中使用孔洞卷积可以提高语义分割的效果。由于现在模型也是全卷积的形式,也可以利用孔洞卷积带来的增益。另外作者也将resnet101的stride从原来的32变成16,以此来增加得分图的分辨率。在conv4 stage及之前的卷积作者保持不变,而conv5的第一个block作者将stride从原来的2调整为1,并将conv5 stage的所有的卷积滤波器变成了孔洞卷积。作者将RPN放在了conv4 stage上,这样做也方便与之前resnet101+faster rcnn比较。最后作者通过实验发现使用孔洞卷积,mAP可以提高2.6个点。

3.4 可视化

Figure3和Figure4给出了当目标在ROI区域内和不在ROI区域内得分图的情况.可以看到,当目标在ROI区域内时各个位置得分都比较高,最后融合后最终的得分相应的也高;而当目标偏离ROI区域的时候,有些位置的得分就偏低,最后融合后最终的得分相应的也低。

四、实验

4.1 PASCAL VOC目标检测任务

训练相关设置:

  • 目标函数:
    这里$c $ 为类别标签,$ c =0 $表示背景; $ t^* $为grouth truth box。分类损失函数为交叉熵;回归才是smooth-L1。
  • k * k = 7 x 7
  • 正负样本构建准则:
    正样本为与ground-truth box的IOU大于0.5的侯选框,其它为负样本。训练的时候选择128个候选框进行训练。
  • OHEM方式训练:训练的时候采用在线困难样本挖掘进行训练。该方法有个特别好的优势就是在困难样本挖掘的时候,基本不需要什么计算量。
  • 正则化:权重衰减系数为0.0005,动量为0.9
  • 预处理:将图片短边缩放为600,采用单尺度训练。多尺度训练使用的尺度为{400,500,600,700,800}
  • 学习率:在voc上,前20k次迭代学习率为0.001,后10k次迭代学习率为0.0001.
  • batch-size:8个gpu每个gpu一张图片
  • 采用faster rcnn提到的4-step交替训练,训练RPN和R-FCN。

推断相关设置:

  • 在短边为600的图片上获取300个候选,并使用IOU为0.3的NMS进行过滤

4.1.1 多种全卷积目标检测策略的比较

作者比较了多种全卷积的目标检测策略,发现提到的方法要远远优于其他策略。

4.1.2 faster R-CNN+Resnet101和RFCN+Resnet101的比较

从结果可以看出,R-FCN与faster rcnn效果差不多,但是速度要快上很多。

4.2 MS COCO目标检测任务

  • 数据集:80k训练集,40k验证集,20k测试集
  • 学习率:前90k次迭代为0.001,后30k次迭代为0.0001
  • batchsize:8
  • 交替训练方式:参考faster-rcnn

从结果可以看出,R-FCN与faster rcnn效果差不多,但是速度要快上很多。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 524813168@qq.com

文章标题:2016_R-FCN_Object Detection via Region-based Fully Convolutional Networks(NIPS2016)Jifeng Dai

文章字数:2.3k

本文作者:xieweihao

发布时间:2017-02-10, 13:16:44

最后更新:2020-01-23, 10:14:38

原始链接:http://weihaoxie.com/post/fe660c1.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏