R-CNN是目标检测领域中十分经典的方法,相比于传统的手工特征,R-CNN将卷积神经网络引入,用于feature extraction,其后面接入一个分类器判断搜索区域是否包含目标及其置信度,取得了较为准确的结果。Fast R-CNN首先使用了Selective Search的方法提取图像的候选目标区域(Proposal)。

    经过R-CNN与Fast R-CNN的发展,Ross B.Girshick在2016年提出了Fater R-CNN的目标检测方法,他提出了RPN(Region Proposal Network)网络来代替Selective Search来进行候选区域提取,其在结构上将特征提取(feature extraction),Proposal Region提取、Bounding Box Regression与classfication都整合在一个网络,使得综合性能有较大提高,在检测速度方面有显著提高。

1 Faster R-CNN模型构造

    Faster R-CNN模型主要是由2个模块组成:RPN候选框提取模块以及Fast R-CNN检测模块,如下图所示:其又可以细分为4个部分:Conv Layer、Region Proposal NetWork(RPN)、ROI Pooling、Classification和Regression。

Faster R-CNN论文理解

1.1  Conv Layer

    卷积层包括一系列Conv+Activation、Pooling等操作,其用于提取图片的特征(Feature extraction),一般直接使用现在的ZF-NET、VGG16,而且卷积层的权重RPN与Fast R-CNN共享,这也能加快训练过程,提升模型的实时性效果。

1.2  RPN(Region Proposal Network)

    RPN网络主要用于生成区域候选框(Proposal),基于网络模型的引入的多尺度Anchor,通过SoftMax对anchors进行分类(是背景还是前景),并使用Bounding Box Regression对anchor进行回归预测,获取Proposal的精确位置,并用于后续的目标识别与检测。

1.3  ROI Pooling

    综合卷积层特征(feature maps)和候选框proposal的信息,将Proposal在输入图像中的坐标映射到最后一层的(feature maps(conv5-3))中,对feature map中的对应区域进行池化操作,得到固定大小(7*7)输出的池化结果,并与后面的全连接层相连。

1.4  Classification and Regression

    全连接层后接两个子连接层-分类层(cls)和回归层(reg),分类层用于判断Proposal的类别,回归层则通过Bounding box regression来预测出Proposal的准确位置。

2  Faster R-CNN测试网络结构

    下图是Faster R-CNN的测试网络结构,可以清晰地看到其前向传播的计算过程。

Faster R-CNN论文理解

    首先输入一张P*Q大小的图像(p*q即任意尺度),将其resize到M*N大小,然后将缩放后的图像送入卷积神经网络来提取特征(通用的网络结构是vgg、ZFNet),最后一个卷积层为conv5-3,特征数为512.

    将得到的feature map送入RPN网络中,首先执行3*3卷积操作,后面接一个512维的全连接层,全连接层有2个子连接层,分别用于anchors的分类与回归,再通过计算筛选得到Proposals。

    Rois Pooling层则利用Proposal从feature maps中提取Proposal feature进行池化操作,送入后续的Fast R-CNN网络做分类与回归。RPN网络和Fast R-CNN均有分类和回归,但两者是不同的,RPN中分类是判断conv5-3中对应的anchors属于背景还是前景的概率,并通过回归获取anchors的偏移和缩放尺度,根据目标的得分值筛选用于后续检测识别的Proposals;Fast R-CNN是对RPN网络提取的Proposal做分类识别,并通过回归参数调整得到目标(Object)的精确位置。

3  RPN网络(Region Proposal Networks)

    传统的目标检测方法中生成的候选框都比较耗时,例如使用滑动窗口加图像金字塔的方式遍历图像,获得多尺度的候选区域;以及R-CNN、Fast R-CNN中均使用到的Selective Search的方法生成候选框。而Faster R-CNN则直接使用RPN网络将检测框Proposal的提取嵌入到网络内部,通过共享卷积层参数的方式提升Proposal的生成速度。

3.1  Anchor

    Anchor是RPN网络中的一个较为重要的概念,传统的检测方法中为了能够得到多尺度的检测框,需要通过使用图像金字塔的方式对图像或者滤波器(滑动窗口)进行多尺度采样。RPN网络则是使用一个3*3的卷积核,在最后一个特征图上滑动,将卷积核中心对应位置映射回输入图像,生成3种尺度(scale){128,256,512},和3种长宽比(aspect ratio){1:1,1:2,2:1}共9种anchor,如下图所示,最后一个特征图每个位置都对应9个Anchors,如果feature map的大小为W*H,则一共有W*H*9个Anchors,滑动窗口的方式保证了能够关联conv5-3的全部特征空间,最后在原图上得到多尺度多长宽比的anchors。如下图所示:

Faster R-CNN论文理解

    最后一个feature map后面会接一个全连接层,如下图所示,全连接层的维数和feature map的特征数(channels)相同。对于原论文中采用的ZF模型,conv5的特征数为256,全连接层的维数也为256;对于VGG模型,conv5-3的特征数为512,全连接层的维数则为512,相当于feature map上的每个点都输出一个512维的特征向量。如下图所示:

Faster R-CNN论文理解

 

关于anchors的几点理解:

-conv5-3上使用了3*3的卷积核,每个点都可以关联局部领域的空间信息;

-conv5-3上每个点前向映射得到k个anchors,并且后向输出512维的特征向量,而anchors的作用是分类和回归得到Proposal,因此全连接层后面要接两个子连接层-分类层(cls)与回归层(reg),分类层来判断anchors是前景还是背景,向量维数为2k;回归层用于计算anchors的偏移量和缩放量,共4个参数[tx,ty,tw,th],向量维数为4k.

3.2  Bounding Box Regression原理

3.3  训练样本的生成

    一般来说feature map的大小是60*40,那么一共可以生成60*40*9大约为20k个anchor boxes,显然不会将所有的anchors用于训练,而是筛选出一定数量的正负样本。对于数据集中,包含GroundTruth的图像,要考虑一张图片中所有的anchors:

(1)首先过滤掉超过边界的anchors;(2)对于每个标定的Groundtruth,与其重叠比例IOU最大的anchor作为正样本,这样可以保证每一个groundtruth都对应一个正样本的anchor;(3)对于每个anchors,如果其与图像中任何一个groundtruth的IOU大于0.7,则记录为正样本,若IOU小于0.3,则记录为负样本;(4)再从正负样本中随机选取256个anchors组成一个minibatch进行训练,而且正负样本的比例是1:1;如果正样本不够,则补充一些负样本来满足256个训练样本的需要;

3.4  Multi-task Loss Function

    由于其涉及到分类与回归,所以需要定义一个多任务损失函数(Multi-task Loss Function),包括SoftMax Classification Loss和Bounding Box Regression Loss,公式定义如图所示:

Faster R-CNN论文理解

3.4.1  SoftMax Classification Loss

    对于RPN网络的分类层(cls),其向量的维度为2k=18,考虑整个特征图为W*H,即输出的大小为W*H*2k,正好对应conv-5-3上每个点有9个anchors,而每个anchor又有两个score(bg/fg)的输出,对于单个anchor的训练样本,其实是一个二分类的问题。在上式中,pi为样本的预测概率值,pi*为样本的标定值,anchor为正样本时,pi*=1,反之,anchor为负样本时,pi*为0,Lcls为两种类别的对数损失(log loss)。

3.4.2  BoundingBox Regression Loss

    RPN网络的回归层输出向量的维度为4*k=36,回归参数为每个样本坐标[x,y,w,h],分别为Box的中心以及宽和高,三组参数预测的box的坐标为[x,y,w,h],anchor的坐标[xa,ya,wa,ha],Groundtruth的坐标为[x*,y*,w*,h*],分别计算预测框相对于anchor中心位置的偏移量以及宽高的缩放量{t},groundtruth相对于anchor中心位置的偏移量以及宽高的缩放量,计算公式如图所示:

Faster R-CNN论文理解

回归目标就是让{t}更接近于{t*},所以真正预测出来的是{t},而训练样本的真值为{t*}。得到预测输出{t}后,通过上式反推即可获取预测框的真实坐标。在损失函数上,回归损失采用了Smooth L1函数:

Faster R-CNN论文理解

SmoothL1损失函数曲线如下图所示,相比于L2损失函数而言,其对离群点或异常值不敏感,可控制梯度的量级,使得训练更容易收敛。

Faster R-CNN论文理解

在损失函数中,pi*Lreg这一项表示只有anchor(pi*=1)才有回归损失,其他anchor不参与计算。这里需要注意的是,当样本bbox和ground truth比较接近的时候(IOU)大于某一阈值,可以认为回归为线性回归,否则当bbox与groundtruth离得较远时,就是非线性问题,用线性回归就不合理,会导致模型不work;分类loss与回归loss分别有Ncls与Nreg以及平衡权重λ归一化,分类损失的归一化值为minnibatch大小,即Ncls=256;回归损失的归一化值为anchor的位置的数量,Nreg约为2400,λ一般取值为10,这样分类损失和回归损失差不多是等权重的。

3.5  Proposal的生成

    Proposal的生成就是将图像送入到RPN网络中进行一次前向传播,处理流程:

(1)计算特征图映射到输入图像的所有anchors,并通过RPN计算anchor的IOU以及Bounding Box回归的参数;

(2)由anchors坐标和bbox回归参数来计算得到预测框proposal的坐标值;

(3)处理proposal超过图像边界的情况(使得坐标值最小为0,最大值为宽或者高)

(4)滤除掉尺寸小于给定阈值的proposal;

(5)对剩下的proposal按照目标得分进行进行排序,提取前pre_nms_topN个proposal;

(6)对提取的proposal进行非极大值抑制,再根据nms后的foreground score,筛选前post_nms_topN个proposal作为最后的输出;

 

 

 

 

 

相关文章: