《R-FCN: Object Detection via Region-based Fully Convolutional Networks》
目录:
0. 模型总结
1. 模型结构分析
2. 创新点解读
3. 实验结果分析
4. 优缺点分析
----------------------------------------------------------------
0. 模型总结(精炼)
R-FCN是一种两阶段的目标检测模型,从Faster R-CNN发展而来,改进灵感来源于全卷积神经网络FCN。改进的地方在于位置敏感得分图机制,以及RoI Pooling在网络中的位置。在检测准确率方面和检测速度方面相较于Faster R-CNN均有提升。在检测准确率方面,该提升可以归咎于对RoI Pooling之后的敏感得分图机制,解决了目标检测需要对目标平移敏感而目标区域分类需要目标平移不变性(平移不敏感)之间的矛盾,而Faster R-CNN不具备这点;在速度方面的提升在于RoI位置的变化,原来的Faster R-CNN在RoI Pooling之后还有10层卷积,用于对提取的感兴趣区域特征进行进一步的特征提取,我们知道,一张图片的感兴趣区域是很多的,这意味着有这个10层的子网络,会跑很多遍,时间成本就高了,R-FCN的做法是,将RoI Pooing移到这10层卷积之后,然后后面就用位置敏感得分图机制,保证特征性能,却又不需要每一个感兴趣区域都跑一遍10层的卷积网络,节省的运行时间成本。效率方面的提升,相当于将整个卷积网络都共享了,也就是只跑一次。
1.模型结构
图1 R-FCN模型结构视角1
图2 R-FCN模型结构视角2
模型视角1是着重体现了位置敏感得分图机制,视角2是R-FCN的全结构,也就是RPN也画进去了。Faster R-CNN的网络可以划分为3个子网络,而R-FCN只需要划分为两个。Faster R-CNN的子网络包括:RPN之前的全图特征提取、RPN的前景和背景的分类和位置回归网络、RoI Pooling之后的感兴趣区域特征提取网络。现在,R-FCN将RoI移到了最后,那么RoI Pooling之后的子网络其实是没有了,被用基于投票的位置敏感得分图机制替换掉了。下面我们再根据模型结构解析一下创新点。
3. 创新点解析
全卷积体现在哪?
RoI Pooling之后没有了卷积层,也没有全连接层。原来的Faster R-CNN在RoI Pooling之后通过几层卷积核全连接层,实现位置回归预测,再加上Softmax实现分类。现在用投票机制代替了,并且只进行了分类,回归过程全依赖于RPN时的位置回归预测。这里RoI Pooling位置的移动以及后面的卷积层和全连接层位置的取消,使得网络变成了全卷积。
为什么RoI Pooling 位置移动之后变成了全共享卷积?
RPN之后会输出很多的RoIs,Faster R-CNN对于这些RoIs的处理是都用RoI Pooling之后的子网络跑一遍,而R-FCN不跑了,直接用前面跑好的特征图,所以这里就变成了全共享了。
为什么说解决了提高平移不变性和平移敏感性之间的矛盾?
目标检测是从原始图像中找到包含目标的子区域,所以对目标的位置变化应该需要敏感一点,也就是平移敏感性。在目前的目标检测模型中,必须要对目标区域进行分类,而分类任务侧重的是平移不变形,不管翻转还是如何,都应该能分类正确,也就是关注区域的类别语义。这两者显然有一定程度的矛盾。
R-FCN的作者认为,Faster R-CNN之所有将RoI Pooling插入到卷积层中间,把网络硬是划分为了两个子网络,是为了保证目标检测的平移敏感性,同时保证区域分类的平移不变形,所以插在中间。也就是说,如果Faster R-CNN也像R-FCN一样把RoI Pooling插入到最后,那么模型对目标区域的分类模块就不再具有平移不变形,效果会不好,所以Faster R-CNN才插在中间。于是,作者认为,目标检测的平移敏感性必要要保证,目标检测模型中的分类器所需要的平移不变性也需要得到保证,才能保证性能。但Faster R-CNN的保证这一点的方式是牺牲了计算速度的,因为插在中间就不是完全共享的卷积神经网络了。
所以,R-FCN作者其实想解决的,是在保证这两个性的情况下,让网络变成全共享,加快速度。于是位置敏感得分图机制就被提出来了,用来保证分类器的平移变换性。大家都知道,卷积层提取图像特征是具有平移不变形的,位置敏感得分图机制,其实就是一种保证‘“平移敏感性”的机制。这样一样,不用牺牲网络效率,也可以平衡这两者,这两性一旦平衡,也保证了性能。
结论,其实作者就是相对于Faster R-CNN换了一种平衡这两者的方式,并且R-FCN的平衡方式网络共享率更高,速度更快。
重点:位置敏感得分图机制和VOTE投票机制是怎么工作的?
图3 位置敏感得分图机制部分模型流程图
首先,这个机制的目的,就是将特征图映射为分类得分,再利用Softmax映射为分类概率。所以输入就是特征图。通过个通道的1x1卷积,进行通道变换,这个时候,特征图的通道数就是你们看到的了。先说C,C就是类别数,加1就是多加了背景作为一类,分类的时候也要区分背景。是位置数,既然是对位置敏感,那么对于任何一个目标,我总要定义它有几个位置吧?代码中k=7,也就是将一个目标从左上角到右下角,分成了7x7=49个位置。那么我们再来看这个,我们已经解释了为位置数,也解释了(c+1)为类别数,那么其实就是对于个位置中的每一个位置,有一个通道数为(c+1)的特征图。当RPN输入一个目标的坐标过来,可以计算得到这个目标区域的位置和宽度W以及高度H,那么这个时候对应下面这块特征图,其实一个RoI对应着一个【W*H*】的特征图。
图4
到这里,就是这个步骤生成的特征图的意义了。也就一共有k*k个位置被定义,对于每一个位置,有一组厚度为(c+1)的特征图。比如某个RoI映射到这个特征图上的宽度和高度为H、W,那么在这个特征图上就对应了一个【W*H*】的特征图,对应这个RoI的深度特征。
那么得分图机制对这个【W*H*】的特征图做了什么呢?首先,挑。一共有k*k组特征图对吧,每组特征图对应一个位置的特征,那么这个RoI的特征,我进行挑选,每个位置只留下对应这个位置的那个特征图。比如左上角,对应黄色,那么只留黄色,其他颜色的删掉,本来每个位置都有k*k组通道数为(c+1)的特征图,现在每一个位置挑完就只剩下一组,通道数为(c+1),那每一个位置对应的特征点未必只是一个值,应为这个RoI如果很大的话,那其实一个位置包含了好几个点,所以每一个位置都进行一下最大池化或者平均池化,每个位置就只包含一个点了,因为有c+1个通道,那么每一个位置其实就对应了一个向量,向量的维度是c+1维,就得到下面这个东西。
图5
每个位置对应着一个维度为c+1的向量,刚好跟类别数对应,发现没?其实就向量的每个值对应着这个位置的东西属于每个类的得分。再看看整体,也就是上图,每一个通道其实对应着k*k个得分。比如c+1个通道的第一个通道,有k*k个值。
投票其实就是一个平均值,对于c+1个通道的每一个通道,计算一下平均值,最后得到c+1个平均值,对应着每一类的得分。然后经过Softmax就得到了概率。也就是完成了如下过程。
图6
3. 实验结果分析
看原文
4. 优缺点分析
简洁,主要是两阶段目标检测结构方向的优化,相对于Faster R-CNN有一定优势,对于精度而言提升不是特别明显。
----------------------------------------------------------------------------------------