#目标检测#对R-FCN网络以及position-sensitive score map的理解

转载请注明出处:https://blog.csdn.net/blateyang/article/details/78697350

引言

R-FCN网络是Faster R-CNN之后又一个比较著名的基于Region Proposal的目标检测网络,它可以达到与Faster R-CNN相近的mAP,且速度要快好几倍。
R-FCN论文原文:R-fcn: Object detection via region-based fully convolutional networks
R-FCN论文译文:基于R-FCN的物体检测——知乎专栏

整体理解

在介绍R-FCN之前,先简单介绍一下全卷积网络FCN。FCN是基于CNN发展而来的,它将 CNN 的全连接层变成了FCN 的反卷积层,输出由单一的分类结果变成了像素级别的分类结果,每个像素都有对应的类别概率,取最大的为其分类结果,常用在图像语义分割中。

R-FCN针对ResNet版的Faster R-CNN对于每个由区域生成网络RPN生成的ROI的后续计算无法共享导致速度仍然不够快的问题,借鉴全卷积网络FCN的思想,通过将Faster R-CNN中用于目标分类和边框回归的Fast R-CNN部分(图1)换成共享的全卷积结构(图2),使得所有可学习的层都是可卷积和可共享的,从而加快了目标检测的速度。此外,为了将平移变换特性(即网络对目标的位置变化会做出相应的响应)融合进FCN中,作者借鉴了文献[1]中instance-sensitive score maps的思想,通过利用一堆对目标相对位置敏感的卷积特征图作为FCN的输出来创建position-sensitive score maps(位置敏感得分图,图2中),每个得分图对相对空间位置信息进行编码,最后由positon-sensitive ROI pooling layer(图2右)整合得分图的信息进行后续的分类。
#目标检测#对R-FCN网络以及position-sensitive score map的理解_第1张图片
图1
#目标检测#对R-FCN网络以及position-sensitive score map的理解_第2张图片
图2

对于Position-sensitive score maps(位置敏感得分图)的理解

在看R-FCN相关的介绍时,对position-sensitive score maps始终不是很理解(这些卷积特征图怎么就会对位置敏感了呢)。直到看了参考资料[1],才弄清了个大概。
参考资料[1]主要是讲多个实例的语义分割的。FCN一般只能产生一个实例掩模(Mask),而图像中如果存在多个目标实例,很难将它们单独分割出来。而文献[1]的作者提出了InstanceFCN方法,将相对位置(如在目标的左边或右边)的概念引入FCN,详见下图(摘自参考资料[1])。
对比原始FCN的每一个输出像素是一个是否为目标类目的分类器,InstanceFCN每个输出像素则是判断相对于目标实例相对位置的分类器。比如下图bottom中第2行第1列的instance-sensitive score map(可以称为left-middle)的每个像素就是一个判断是否在目标实例(两个人)左中部的分类器,颜色越红代表置信度越高。其它得分图也类似,分别对相对于目标实例的不同位置敏感。将这些得分图相应位置的子块组合起来就能分割出单个目标实例。
#目标检测#对R-FCN网络以及position-sensitive score map的理解_第3张图片

R-FCN的position-sensitive score maps正是借鉴了这一思想,只不过它的目的不是分割出目标实例,而是对ROI区域内的得分图进行组合(针对某类(如人),将属于该类的各得分图中橙色的粗线框部分average pool后再求和)得到属于某类的一个投票分数用于后续分类(见下图), k 2 ∗ ( C + 1 ) k^2*(C+1) k2(C+1)张位置敏感分数图最终可以得到C+1个类别分数,再进行Softmax就可以计算分类损失了。
#目标检测#对R-FCN网络以及position-sensitive score map的理解_第4张图片

至于如何训练得到那些position-sensitive score maps?
R-FCN原文中说通过端到端学习,R-FCN最后的位置敏感RoI池化层指导最后一个卷积层学习对相对位置敏感的分数图。位置敏感RoI池化层聚集最后一个卷积层的输出并为每个RoI产生一个分数,其执行的是区域选择性的池化,正是这一策略使得最后一个卷积层能通过学习得到对相对位置敏感的分数图。以分类部分为例(边框回归部分类似,只不过相应的位置敏感分数图变为 k 2 ∗ 4 k^2*4 k24),对于每一类,池化后k*k bin中的每一个bin都只从k*k分数图中的一个分数特征图(对应的bin区域)聚集响应(参考上图2和figure3,figure4以及下面的公式1)。而RoI(由训练好的RPN生成)的正负样本标定则是根据RoI与Ground Truth bbox的IoU判断的(IoU>0.5为positive,否则为negative)。有了正负样本,有了每个RoI属于各类的分数(C+1维向量),就可以对最后一个卷积层(position-sensitive score maps)进行监督训练,使之最终能产生对相对位置敏感的分数图(热度图)。
#目标检测#对R-FCN网络以及position-sensitive score map的理解_第5张图片

参考资料:
[1] Instance-Sensitive Fully Convolutional Networks

你可能感兴趣的:(计算机视觉,深度学习)