本文介绍深度学习目标检测系列论文《 R-FCN: Object Detection via Region-based Fully Convolutional Networks 》,简称R-FCN。笔者用了较长的时间来理解本文,一直纠结于position-sensitive score maps中的位置信息(top-left、top-center等),最后结合github上的prototxt和代码才逐渐明朗。
该文也是在faster-rcnn的基础上进行改进的,我们先来回忆一下faster-rcnn。如上图,我们把faster-rcnn分成1、2、3三个部分。1和2组成了RPN网络结构,1和3(需要2的输出)组成了RCNN网络结构,1是共享计算的部分。由于论文中选取的实验网络是大名鼎鼎的ResNet-101,所以在步骤3中,有10个卷积层,也就是说在faster-rcnn中,每个roi区域要单独经过这10个卷积层的处理。那么问题来了,这10个卷积层不能全图计算么?(笔者认为即使采用faster-rcnn结构,也是可以全图共享计算这10个卷积层的,如果笔者说的不对希望有读者指出来)。本文采用了一种position-sensitive roi pooling (PS-roi pooling)的结构,该方式对目标的位置信息更敏感,其结构如下图。
同faster-rcnn结构类似,我们把R-FCN同样也分成三部分。该文与faster-rcnn的不同之处就在于第3部分。下面本文以分类为例(对应还有坐标回归),结合下图,详细介绍一下R-FCN的网络结构。
如上图,我们从1处的feature map开始看起,1之前就是全卷积的操作,假设1处featureMap的宽和高分别是W和H。在1之后,接着个数为K^2*(c+1),卷积核大小为1*1的卷积层,卷积之后的score maps的channels是K^2*(C+1),C是类别数(K类似与sppnet中的参数,后续将roi区域分成K*K块),宽和高分别是W和H。得到了score maps,然后就是PS-roi pooling操作。为了方便理解,我们先把score maps中的(C+1)* W * H当做一个整体,即有K^2=9(K=3)个这样的特征块,分别记编号为0到8,其中每一块对应一个指定位置,第0块对应左上,1对应中上、2对应右上以此类推。我们取每个块的roi位置,把其均分到K*K个区域,在第0块上,我们取图像的左上区域,计算每一类的均值(共C+1类);第1块取中上区域,计算每一类的均值。处理完后每个roi得到K*K*(C+1)维度大小,在此基础上进行全局avg pooling,得到了C+1类的平均得分(每一类计算其K*K个得分的平均值)。所以本文中的位置信息是在前向处理的时候,只计算指定区域(人工赋予其物理意义),而并非训练阶段有不同位置信息的groundtruth(笔者一度以为,不同位置块的类别信息在训练的时候有label体现)。
本文的训练和测试过程和faster-rcnn是完全一样的,笔者就不在详细介绍。在反复阅读文献中,笔者发现对faster-rcnn这一结构介绍的不够具体,近期笔者将结合训练和测试,详细介绍faster-rcnn。
本文暂时没有评论,来添加一个吧(●'◡'●)