理解目标检测算法之R-FCN

文章目录

    • 1 动机
    • 2 R-FCN网络结构
      • 2.1 position-sensitive score maps
      • 2.2 RoI-wise subnetwork
    • 3 R-FCN网络存在的问题


在上一篇博文中,笔者写到了对Roi Pooling和Roi Align的区别的理解,当时不禁觉得Mask rcnn引入了Roi Align操作,进一步优化了目标检测任务的定位精度,然后在想,如果想继续优化,又有什么可供优化的方向呢,百思不得其解。后来又一次跟同事交流这个问题,然后无意间了解到凯明大神后面又联合提出了R-FCN。然后笔者查阅了一些资料和原论文,有了自己的一些理解和体会,故这里记录下来,也希望对大家能有所帮助。

1 动机

R-FCN,全称为“Region-based fully convolutional network”,该文章的发表时间可以参见下图,理解目标检测算法之R-FCN_第1张图片
作为Two-stage的目标检测算法,它是对Faster R-CNN所做的优化。大家可能会比较好奇,Faster R-CNN是凯明大神提出来的,检测精度已经很好了,还有什么可选的优化点呢,R-FCN关注点并不是检测精度,而是检测速度。可以参见下面的图来理解这个问题,理解目标检测算法之R-FCN_第2张图片
由图可见,Faster RCNN对每一个Roi区域,分别经过一个subnetwork,这个subnetwork包含了一次global average pool操作,两次FC操作。因为每一个Roi的计算并没有共享,所以这种网络结构是比较耗时的。

为了解决这个问题,比较直接的想法是,把这两层FC操作放到Roi pooling前面,这样的话,每一个Roi区域只需要经过global average pool操作即可,节约了计算量。但是,这样做带来了另外一个问题,由于global average pool操作得到的特征缺失了很多的空间域信息,如果直接用来回归坐标会导致定位精度不准。为了保留更多的空间域位置信息,R-FCN中提出了“position-sensitive score map”的概念。

2 R-FCN网络结构

R-FCN的网络结构如下图,同Faster RCNN比起来,它有2点不同,理解目标检测算法之R-FCN_第3张图片
(1)Shared convolutional subnetwork不同。Faster RCNN是把RPN得到的RoI直接映射到Resnet101的最后一个卷积层(2048个channels),而R-FCN将Resnet101的最后一个卷积层映射到具有 p 2 ( C + 1 ) p^{2}(C+1) p2(C+1) 个channels的特征层,作者将该特征层称之为"position-sensitive score maps",然后把RoI映射到该特征层;

(2)RoI-wise subnetwork不同。Faster RCNN的subnetwork经过了全连接层做特征组合,然后执行分类和坐标回归的双任务,R-FCN基于pool和vote操作后得到的特征向量,执行分类任务。

具体的参数对比如下表,在这里插入图片描述
下面分别解释这两点,

2.1 position-sensitive score maps

“position-sensitive score maps”,翻译过来为“位置敏感打分图”,从名字上就可以看出,该层feature maps是对位置信息具有敏感性的,有助于后面的定位任务。那么如何得到位置敏感的feature maps呢,可以参见下图,理解目标检测算法之R-FCN_第4张图片
若一个RoI的尺寸为 w × h w\times h w×h,为了对该RoI的信息进行编码,作者将其划分成大小为 k × k k\times k k×k的bins,因此每个bin的尺寸为 w k × h k \frac{w}{k}\times \frac{h}{k} kw×kh,图中3x3 的网格立方体表示编码后的RoI投影到该位置敏感feature maps上的位置,不同颜色代表不同位置的信息,从黄色到浅蓝色依次为top-left、top-center、bottom-right。假设我们想得到当前RoI预测为“人”的概率,要先从top-left、、、bottom-right中分别挑选出预测为人的不同部位的概率值,然后将这些概率值拼接成 k × k k \times k k×k的feature map,若总共有C个类别,则得到的热力图维度为 ( C + 1 ) × k × k (C+1)\times k \times k (C+1)×k×k

2.2 RoI-wise subnetwork

关于分类任务,对于每一个RoI区域,得到了热力图尺寸为 k × k × ( C + 1 ) k\times k \times (C+1) k×k×(C+1),对于每一个channel,使用average pooling操作得到总的打分,从而得到了维度为 C + 1 C+1 C+1的特征向量,然后使用softmax函数对特征值进行归一化操作,从而得到当前RoI属于所有类别的scores。

关于回归任务,同上,对于每一个RoI区域,得到了热力图,区别在于该热力图的尺寸为 k × k × 4 k\times k \times4 k×k×4

3 R-FCN网络存在的问题

网络中的"position-sensitive score maps"的维度较大,比如当k=7,类别数为80(coco数据集)时,该打分图的channels维度为 7 × 7 × ( 80 + 1 ) = 3969 7\times 7 \times (80+1)=3969 7×7×(80+1)=3969,所以该卷积层占用了较多的参数和内存,导致推理速度变慢,然后,有学者就在想,能否减少该打分图的channels维度呢,于是催生了另一篇目标检测文章“Light-Head R-CNN: In Defense of Two-Stage Object Detector”,感兴趣的读者可以参见下一篇博文。




参考资料:

https://towardsdatascience.com/review-r-fcn-positive-sensitive-score-maps-object-detection-91cd2389345c

https://medium.com/@jonathan_hui/understanding-region-based-fully-convolutional-networks-r-fcn-for-object-detection-828316f07c99

https://www.robots.ox.ac.uk/~vgg/rg/papers/dai16nips.pdf

https://zhuanlan.zhihu.com/p/30867916

你可能感兴趣的:(深度学习算法)