目标检测论文笔记:R-FCN

Abstract

  • 提出了一个region-based, fully convolutional的网络来准确高效的进行物体检测。
  • 不同于Fast/Faster R-CNN,其应用了计算成本很高的每个区域子网络数百次,本论文的region-based detector是完全卷积化的,几乎一张图像上所有的计算都是共享的。
  • 为了实现这一目标,我们提出position-sensitive score maps,以解决在图像分类的平移不变性(translation-invariance)和物体检测中的平移可变性(translation-variance)之间的困境。

Introduction

  • 最近流行的用于目标检测的深度学习框架依据RoI层的不同可以分为两大subnetworks:
    • 一类是独立于RoIs的、共享的、fully convolutional的subnetwork。
    • 另一类是RoI-wise的subnetwork,不共享计算。
  • 在图像分类网络中,一个convolutional subnetwork会以一个sptial pooling layer跟随着几个fully-connected layer最为结尾,所以图像分类中的sptial pooling layer自然转化为目标检测中的RoI pooling layer。
  • ResNet和GoogleLeNets都被设计成fully convolutional的。
  • 在ResNet论文中,Faster R-CNN中的RoI pooling layer被不自然的插入到两个卷积层集之间,带来了准确率的提升,但是速度由于unshared per-RoI计算降低。
  • 对于图像分类任务来说:更倾向于平移不变性。对于图像检测任务来说:更倾向于平移变换性
  • 假设图像分类网络中更深层的卷积层对translation不敏感,所以为了解决translation invariance和translation variance之间的困难,ResNet将RoI pooling layer插入到了卷积神经网络之间。这个区域特定的操作打破了平移不变性,并且在不同区域之间进行评估时,RoI之后的卷积层不再是平移不变的。
  • 为了将translation variance结合到FCN中,我们通过使用一组专用卷积层作为FCN输出来构造一组位置敏感得分图(position-sensitive score maps)。每一个得分图将相对于相对空间位置(例如,“在对象的左边”)的位置信息进行编码。在这个FCN之上,我们附加一个位置敏感的RoI池层(position-sensitive RoI pooling layer),从这些得分图中获取信息,没有跟随的权重的(卷积/ fc)层。

Our approach

  • 本论文的方法参考R-CNN,也是使用two-stage的目标检测策略。

    • region proposal
    • region classification
  • 虽然不依赖于region proposal的目标检测方法确实存在,如SSD何YOLO,但是region-based system依旧在几个基准上保持领先的准确性。

  • Overall architecture of R-FCN:

    用RPN来提出candidate RoIs,然后这些RoIs被应用到score maps,在RPN和R-FCN之间共享特征。

    给定一个RoI,R-FCN架构对RoI进行分类(分为物体类别或者背景)。所有可学习权值的层都是卷积层,并且是在整张图片上计算得到的权重。最后卷积层为每个类别产生一个$k^2$个position-sensitive score maps,因此具有带有C个对象类别(背景为+1)的$k^2(C + 1)$通道的输出层。

    每一个category有一个$k^2$的score map,对于这里来说k=3,所以最后RoI pooling层产生3x3x(C+1)维的feature map。

  • RPN以一个position-sensitive RoI pooling layer结束,该层聚合最后卷积层的输出并产生每个RoI的分数。我们的位置敏感的RoI pooling layer进行选择性合并,each of the k × k bin aggregates responses from only one score map out of the bank of k × k score maps。利用端到端训练,这个RoI层管理最后的卷积层以学习专门的position-sensitive score maps。

Backbone architecture

  • 本论文R-FCN基于ResNet-101。
  • ResNet-101具有100个卷积层,后面是global average pooling和一个1000-class的fc层。我们移去了average pooling layer and the fc layer,仅使用convolutional layer来计算feature maps。
  • 我们使用ResNet-101,在ImageNet上进行预训练,ResNet-101中的最后一个卷积块是2048-d,并且我们附加随机初始化的1024-d 1×1卷积层以减小尺寸。然后,我们应用$k^2(C + 1)$通道卷积层来生成分数图,如下所述。

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

  • 为了将位置信息显式编码到每个RoI中,我们将RoI矩形划分为k x k个bins。

  • 最后的卷积层为每个类别产生的$k^2$个分数图。在第(i, j)个bin内,我们定义了一个位置敏感的RoI池化操作,从而只在第(i, j)个score map上进行池化:

    • 其中$r_c(i, j)$表示从c-th类别中得到的(i,j)-th bin的池化响应。
    • $z_{i,j,c}$是$k^2(C+1)$个score maps中的一个score map。
    • $(x_0,y_0)$表示一个RoI的左上角。
    • $n$表示这个bin中的像素的数量。
    • $\theta$表示这个网络中所有的可学习权重。
    • 该pooling属于AVE,也可以用MAX。
  • 对每个类别k*k的score map进行平均,最后每个RoI得到一个C+1维的向量。然后求loss,它们用于评估训练期间的交叉熵损失和推理期间的RoIs排名。

  • bounding boxes regression。对每个RoI产生一个$4k^2$维的向量。然后通过average voting将其聚合成4维向量。

  • 在RoI层之后没有可学习的层次,实现了几乎无成本地区的计算、加速训练和推理。

Training

  • 利用提前计算好的region proposal,很容易来端到端的R-FCN架构训练。

  • loss function:

  • 本框架很容易在训练的时候使用online hard example mining (OHEM)。

    • 我们的per-RoI计算可以进行几乎cost-free的example mining。
    • 在前向传播中:假设每张图片N个proposals。我们计算所有N个proposal的loss,排序,选择最高的B个RoIs。然后在选中的proposal上进行反向传播。
  • decay:0.0005

  • momentum:0.9

  • single-scale training。

  • B=128

  • lr = 0.001 ~20k, 0.0001 ~ 10k

  • 同Faster R-CNN一趟,使用4步alternating training,在训练RPN和训练R-FCN之间。

Inference

  • 为公平期间,在300个RoIs上进行评估,结果之后用NMS进行处理,IoU阈值0.3

À trous and stride

  • 将ResNet-10的有效stride从32减为16像素,提高了score map的分辨率。
  • conv4阶段之前(stride=16)的所有层都没有改变。
  • 第一个conv5块儿的stride从2改为1,并且conv5阶段的卷积核都被改为hole algorithm,(Algorithme à trous)以补偿减少的步幅。
  • 为了公平比较,RPN在conv4之上进行计算。从而RPN不被à trous影响。

R-CNN已经说明了带深度网络的区域候选的有效性。R-CNN计算那些关于裁剪不正常的覆盖区域的卷积网络,并且计算在区域直接是不共享的。SPPnet,Fast R-CNN和Faster R-CNN是半卷积的(semi-convolutional),在卷积子网络中是计算共享的,在另一个子网络是各自计算独立的区域。

物体检测器可以被认为是全卷积模型。OverFeat 检测物体通过在convolutional feature maps上进行多尺度的窗口滑动。 在某些情况下,可以将单精度的滑动窗口改造成一个单层的卷积层。在Faster R-CNN中的RPN组件是一个全卷积检测器,用来预测是一个关于多尺寸的参考边框的实际边框。原始的RPN是class-agnostic(class无关的)。但是对应的class-specific是可应用的。

另一个用于物体检测的是fc layer(fully-connected)用来基于整幅图片的完整物体检测。