在上一篇博文中,笔者写到了对Roi Pooling和Roi Align的区别的理解,当时不禁觉得Mask rcnn引入了Roi Align操作,进一步优化了目标检测任务的定位精度,然后在想,如果想继续优化,又有什么可供优化的方向呢,百思不得其解。后来又一次跟同事交流这个问题,然后无意间了解到凯明大神后面又联合提出了R-FCN。然后笔者查阅了一些资料和原论文,有了自己的一些理解和体会,故这里记录下来,也希望对大家能有所帮助。
1 动机
R-FCN,全称为“Region-based fully convolutional network”,该文章的发表时间可以参见下图,
作为Two-stage的目标检测算法,它是对Faster R-CNN所做的优化。大家可能会比较好奇,Faster R-CNN是凯明大神提出来的,检测精度已经很好了,还有什么可选的优化点呢,R-FCN关注点并不是检测精度,而是检测速度。可以参见下面的图来理解这个问题,
由图可见,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点不同,
(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”,翻译过来为“位置敏感打分图”,从名字上就可以看出,该