目标检测——R-FCN(五)

简介
R-FCN是NIPS 2016的best paper,主要贡献在于解决了“分类网络的位置不敏感性”与“检测网络的位置敏感性”之间的矛盾,利用“position-sensitive score maps”,在提升精度的同时也提升了检测速度。
原论文地址:https://arxiv.org/abs/1605.06409

一、整体框架

目标检测——R-FCN(五)_第1张图片
从上图可以看出,整个网络的组成为:一个CNN特征提取器(如ResNet101), 一个RPN(Faster RCNN来的),一个position sensitive的prediction层,最后的ROI pooling+投票的决策层。

二、原理
Faster R-CNN系列的网络都可以分成2个部分:一是用CNN提取共享特征,然后一个RoI Pooling在最后一张特征图上进行提取针对各个RoIs的特征向量,然后将所有RoIs的特征向量都交由第2部分来处理(分类和回归),而第二部分一般都是一些全连接层,在最后有2个并行的loss函数:softmax和smoothL1,分别用来对每一个RoI进行分类和回归,这样就可以得到每个RoI的真实类别和较为精确的坐标和长宽了。
这一做就会有一个问题:分类需要特征具有平移不变性,检测则要求对目标的平移做出准确响应。因此,R-FCN想提出来的position sensitive score map这个概念是能把目标的位置信息融合进ROI pooling。
目标检测——R-FCN(五)_第2张图片
ResNet 101——去掉原始ResNet101的最后一层全连接层,保留前100层,再接一个1×1×1024的全卷积层(100层输出是2048,为了降维,再引入了一个1×1的卷积层)。
ResNet101的输出是W×H×1024,用K ^2(C+1)个1024×1×1的卷积核去卷积即可得到K ^2(C+1)个大小为W×H的position sensitive的score map。这步的卷积操作就是在做prediction。k = 3,表示把一个ROI划分成3×3,对应的9个位置分别是:上左(左上角),上中,上右,中左,中中,中右,下左,下中,下右(右下角),如上图。
共有k×k = 9个颜色,每个颜色的立体块(W×H×(C+1))表示的是不同位置存在目标的概率值(第一块黄色表示的是左上角位置,最后一块淡蓝色表示的是右下角位置)。共有k^2×(C+1)个feature map。每个feature map,z(i,j,c)是第i+k(j-1)个立体块上的第c个map(1<= i,j <=3)。(i,j)决定了9种位置的某一种位置,假设为左上角位置(i=j=1),c决定了哪一类,假设为person类。在z(i,j,c)这个feature map上的某一个像素的位置是(x,y),像素值是value,则value表示的是原图对应的(x,y)这个位置上可能是人(c=‘person’)且是人的左上部位(i=j=1)的概率值。
目标检测——R-FCN(五)_第3张图片
ROI pooling操作的输入(对于C+1个类)是k ^2×(C+1)×W’ ×H’(W’和H’是ROI的宽度和高度)的score map上某ROI对应的那个立体块,且该立体块组成一个新的k ^2×(C+1)×W’ ×H’的立体块:每个颜色的立体块(C+1)都只抠出对应位置的一个bin,把这k×k个bin组成新的立体块,大小为(C+1)×W’×H’。例如,下图中的第一块黄色只取左上角的bin,最后一块淡蓝色只取右下角的bin。所有的bin重新组合后就变成了类似右图的那个薄的立体块(图中的这个是池化后的输出,即每个面上的每个bin上已经是一个像素。池化前这个bin对应的是一个区域,是多个像素)。ROI pooling的输出为为一个(C+1)×k×k的立体块,如上图。
最后k×k个bin直接进行求和(每个类单独做)得到每一类的score,并进行softmax得到每类的最终得分,并用于计算损失。

你可能感兴趣的:(人工智能)