一、前言
之前的Faster RCNN对Fast RCNN产生region porposal的问题给出了解决方案,并且在RPN和Fast RCNN网络中实现了卷积层共享。
但是这种共享仅仅停留在第一卷积部分,RoIpooling及之后的部分没有实现完全共享,可以当做是一种“部分共享”,这导致两个损失:1.信息损失,精度下降。2.由于后续网络部分不共享,导致重复计算全连接层等参数,时间代价过高。(另外还需要多说一句,全连接层计算量是要大于全卷积层的)
因此RFCN(Region-based fully convolutional network)试图以Faster RCNN和FCN为基础进行改进。
二、结构
2.1问题
第一个问题,如何改进不完全共享问题
FCN(Fully convolutional network)针对不完全共享问题进行了改进,即:将一般的backbone网络中用于分类的全连接层替换为全卷积层,这样一来整个网络结构均是由卷积层构成,因而称为全卷积网络。
第二个问题,目标检测的需求
很显然,目标检测问题包括两个子问题:第一是确定物体种类,第二是确定物体位置,确定物体种类时我们希望保持位置不敏感性(translation invariance也就是说不管物体出现在哪个位置都能正确分类)以及保持位置敏感性(translation variance我们当然希望不论物体发生怎样的位置变化都能确定物体位置)
这两个需求看起来比较矛盾,RFCN做出了一个折中,实际上也不算折中吧,就是这样一个问题:我们知道全卷积网络提取特征非常强,因此用于物体分类很nice,但是普通的卷积网络只关注特征,并不关注位置信息,不能直接用于检测。所以RFCN在FCN网络中引入了一个概念“position sensitive score map”位置敏感得分图,用来保证全卷积网络对物体位置的敏感性。
先接着说结构的问题,在结构当中继续解释这个position sensitive
2.2结构与流程
下图描述了RFCN的结构,物体检测流程如下:
原始图片经过conv卷积得到feature map1,其中一个subnetwork如同FastRCNN:使用RPN在featuremap1上滑动产生region proposal备用;另一个subnetwork则继续卷积,得到k^2(k=3)深度的featuremap2,根据RPN产生的RoI(region proposal)在这些featuremap2上进行池化和打分分类操作,得到最终的检测结果。
观察RFCN结构中的这个放大部分,此处是上文提到的position sensitive的关键。
下面这张figure3描述了一次成功的位置敏感性识别,figure3中间的九张featuremap实际上就是位置敏感结构图左侧的九层featuremap,每一层分别对应物体的一个感兴趣部位,就比如[2,2]这张图上中位置代表人体的头部。因而所有位置的响应经过一次池化都保存在figure3右侧33(C+1)的对应位置了(原来是上中现在还是上中,原来是左下现在还是左下),如此位置敏感性得到保留。
当poolingmap九个方框得分都超过一定阈值,我们可以相信这个region proposal中是存在物体的。
下图figure4展示了一次失败的检测:由于红框内的poolingmap得分过低。
三、总结
上述为RFCN阅读后的笔记,可以看见RFCN的贡献在于:1.引入FCN达成更多的网络参数和特征共享(相比于Faster RCNN)2.解决全卷积网络关于位置敏感性的不足问题(使用position sensitive score map)
其余结构与Faster RCNN相比没有很大的区别(保留RPN,共享第一层用于提取特征的con_Subnetwork)
这篇论文是在没有深入了解过FCN的情况下读的,下一步先读一下FCN以及MaskRCNN那么two stage detecion method可以先告一段落了。