R-FCN: Object Detection via Region-based Fully Convolutional Networks
背景介绍
R-CNN 系列的方法,如 SPPnet、Fast R-CNN、Faster R-CNN 等方法在 Object Detection 上取得了很大的成功。这些方法的网络结构被 RoI pooling 层分成两个子网络:共享的全卷积子网,RoI-wise 的子网络。这样设计的一个主要的原因是,借鉴自那些经典的分类网络结构,如 AlexNet、VGG Nets 等,这些网络结构都是卷积子网络,再接一个 pooling层,之后再接几个全连接层。很容易将分类网络的 spatial pooling 层对应到 RoI pooling,将分类网络转化成一个用于 detection 的网络。
当前 state-of-art 的分类网络,如 ResNet、GoogleNet,都是全卷积网络。很自然地将这样的分类的全卷积网络的结构应用到 Detection 网络上。ResNet 的论文中提出了,一种使用 ResNet 作为特征引擎的 Faster R-CNN 方法,将 RoI pooling 层插在两个卷积子网络之间。RoI-wise 子网络越深,那么对于有 N 个 Proposal 的图像,那么子网络就需要重复计算
该文的出发点就是为了减少重复计算,尽可能地共享网络,因此对这种结构,提出了更深层次的理解:分类问题,具有平移不变性(translation invariance);检测 (Detection) 问题,在一定程度上具有平移敏感性 ( translation variance)。前面提到的 将 RoI pooling 层插入到两个卷积子网路之间,就是为了打破 translation invariance,使用这种 region-specific 操作也就是为了尽可能的捕捉检测的 translation variance特性。
该论文巧妙地同时考虑这两种相互矛盾的特性,设计了一个用于 Detection 的共享的全卷积网络结构。
论文概要
为了将 translation variance 引入到全卷积网络中,论文中设计了一种特殊的卷积层作为全卷积网络的输出,该卷积层输出 position-sensitive 的 score map,每个 score map 引入了位置的信息,如 物体的顶部。在网络的最后一层,再接一个 position-sensitive RoI pooling 层,完成对物体的检测。在整个网络框架中,所有可学习的层,都是卷积层,同时把空间位置信息引入特征学习中,使得整个网络可以进行 end-to-end 的学习。
该论文也采用 R-CNN 方法经典检测步骤:生成 region proposal, region 分类。使用 RPN 来生成 proposal,类似于 Faster R-CNN,R-FCN 和 RPN 是特征共享的。在给定 Proposal Region(RoIs) 之后,R-FCN 将 RoIs 分类成目标物体或者背景。在 R-FCN 的网络中,所有可学习的网络都是卷积层,都是在全图上进行操作的,最后一个卷积层为每个类别(包括背景)生成 k2 个 position-sensitive 的 score map,也就是总共 k2(C+1) 个通道的输出。这个 k2 个 score map 对应描述一个 k*k 的网格的空间信息。例如,k*k = 3*3,那么这 9 个 score map,分别对应 {top-left, top-center, top-right, …, bottom-right} 位置的目标分类。R-FCN 的最后一层是一个 position-sensitive 的 RoI pooling 层,对于每个 RoI 从 k*k 的 bins 生成一个值,用于类别的分类。
该论文的方法采用 ResNet-101 的网络结构,去掉最后的 average pooling 层和全连接层,只使用其中的卷积层。ResNet-101 的最后一个卷积层的 feature map 的维度是 2048,新增加了一个卷积层,将维度降成 1024维,这样共享的卷积层也就是 101层。最后再接上生成 k2(C+1) 个通道 position-sensitive score map 的卷积层。
为了将位置信息引入到 position-sensitive 的 feature map 中,对于每个 RoI,将其分割成 k*k 个 bins,每个 bin 的大小 ≈wk∗hk 。最后一个卷积层,为每个类别生成