Faster R-CNN论文翻译和PPT讲解

本论文是目标检测领域必看的一篇论文,论文下载地址点这里,2015年发表,任少卿,何凯明,RBG,孙剑,响当当的大佬

对Faster RCNN的损失函数的一些具体讨论我在https://blog.csdn.net/u012925946/article/details/103883410博客链接中有详细描述

Faster RCNN的一个PPT详细步骤 讲解:

链接:https://pan.baidu.com/s/1YdSBv7e8UuyY1WJCkzRq9A 
提取码:kacp

摘要:

先进的目标检测网络需要依赖region proposal区域提议来假设目标的位置。

Fast RCNN 中region proposal成为瓶颈,我们引入RPN共享全图的卷积特征,计算成本几乎为0

RPN与Fast RCNN检测器共享卷积特征,合并为单一网络,使用“注意力”机制,由RPN指导网络检测位置

使用VGG模型,可达到GPU上,5fps,200ms,ILSVRC2015竞赛第一。

一、引言

Fast RCNN 除去区域提取,接近实时

区域提议通常采用廉价的特征,经济的推理方案,

如选择搜索(贪婪的合并低级特征像素块)CPU中2秒一张,还是慢

EageBox,每张图2.0秒

区域推荐在GPU上工程化重现,也容易忽略和下游检测网络共享计算的机会

RPN每张10ms,是全卷积网络可以end-end训练; 同时在网格上回归位置和目标分数

不同于图像金字塔,滤波器金字塔(多尺寸,多比例),我们是回归参考金字塔(在此3*3上还原出原图中的对应大小区域)

二、相关工作

用于目标检测的深度网络:R-CNN端到端训练CNN来对提议的区域(proposal regions)进行分类。只分类,不预测目标边界。

在OverFeat方法中,从图像金字塔计算卷积特征来分类、定位、检测。假定单一目标,用全连接层预测包围框边界,全连接层再变成卷积层检测多类目标。

SPP网络自适应大小池化,共享卷积

三、Faster

由两部分模型组成:CNN区域推荐、Fast 目标检测器。整体是单个的同一的网络。

3.1RPN

输入尺寸任意,输出一系列object proposals和scores(前景的分数)

ZFmodel有5个共享卷积层,VGG16有13个共享卷积层

为了region proposals , 我们在feature map上滑动一个小网络,小网络输入大feature mao 上的n*n的空间窗口。每次滑动映射到低维特征图上,ZFmodel是256维,VGG是512维,然后ReLU

然后到2个全连接层,reg,cls  论文中n=3。输入图像的有效感受野是很大的(ZF171个,VGG228个)

这种架构通过一个n*n卷积层,后面是两个1*1卷积层(reg\cls)来实现

3.1.1Anchors

每个滑动窗口同时预测k个proposals,因而reg层有4k个输出来编码k个方框;cls输出2k个分数来评估是前景的概率

k个proposals是参数化的,anchor在滑动窗口的中心,与一个尺度和长宽比相关。W*H的卷积特征图(通常2400)共有W*H*k个anchors

平移不变的锚点 translation invariant

我们的方法一个重要特性就是平移不变性,无论是锚点还是计算锚点的区域。如果目标平移,proposal也应该平移并且在任意位置可以预测出proposal。作为比较,MultiBox方法使用k-means方法产生800个锚点,但是这并不是平移不变性。

平移不变性也减少了模型的大小。MultiBox方法有(4+1)*800维的全连接层,我们的方法有(4+2)*9维的卷积层输出(如果k=9个anchors的话),因此,对于VGG16来说,我们有28000个参数,也就是512*(4+2)*9个参数。MUltiBox中,6100000个参数,是1536*(4+1)*800,对于GoogleNet来说。考虑到特征投影层,我们的方法仍然有少一个数量级的参数量。我们期待在PASCAL这样的小数据集上能介绍过拟合风险。

多尺度锚点作为回归参考 Multi-Scale Anchors as Regression References

我们设计的锚点方法提出了一个新方案来解决多尺度多长宽比,如图1

Faster R-CNN论文翻译和PPT讲解_第1张图片

a图像金字塔(DPM使用),b滤波器金字塔(CNN方法使用),a方法如HOG,深度卷积特征等,有用,但耗时。方法二就是在特征图上滑动一个多尺度长宽比的滤波器。

方法b中,如在DPM中,使用不同大小的5*7和7*5的滤波器,分别对模型进行训练,叫滤波器金字塔。ab方法常联合采用

作为比较,方法c,我们的方法叫锚点金字塔, a pyramid of anchors,计算成本更低,方法引入多尺度多比例的分类和回归。这只依赖单一尺度的图像和特征图,使用单一尺寸的滤波器,在特征图上滑窗。(个人:单一尺度指的默认3*3尺度,然后以不同大小长款的9中anchor映射回原图,来作为region proposal),效果如表8

Faster R-CNN论文翻译和PPT讲解_第2张图片

基于这种设计,我们可以简单的在单一尺度的图像上计算卷积特征,这也是Fast RCNN这样做的。多尺度anchors是共享卷积特征的关键组件,且在处理多尺度时不带来额外的计算成本

3.1.2 损失函数

在训练RPNs时,我们给每个anchors设计一种二分类结果,判断是否是目标。我们给两种锚点分类正标签:1,anchors和真实BBox有最高IOU的锚点 或者2,与BBox的IOU超过0.7的锚点。这种情况下,一个BBox可能给多个anchors分配正标签。通常条件2可以确定正样本,但是少数情况下找不到正样本,所以需要条件1 

我们给IOU和所有BBox低于0.3的anchors负标签。那些不是正也不是负的anchors对训练没有帮助,舍弃。

根据这些定义,我们最小化Fast RCNN的多任务损失函数。损失函数定义为:

 

Faster R-CNN论文翻译和PPT讲解_第3张图片

i是每个mini-batch中anchor的索引,Pi是预测它是目标的概率,锚点Ground True时Pi*为1,否则为0

ti是向量,代表bounding box四个参数化坐标的向量,ti*代表Ground Ture的真实边框的坐标向量。

Nreg是anchor位置的个数 比如40x60=2400 , 而不是anchor的个数

分类loss , Lcls是两个类别上的对数损失log loss。

回归loss, Lreg = R(ti - ti*)代表R论文[2]中定义的鲁棒损失函数robust loss,(smooth  L1)。

pi*Lreg标识的回归loss只是在正例anchors即pi*=1被激活,否则被禁用。

cls和reg层的输出分别有pi和ti组成

Faster R-CNN论文翻译和PPT讲解_第4张图片

这两项分别由Ncls和Nreg进行标准化normalized,权重由λ平衡。在现有的实现中,cls由方程1中通过最小批量数据mini-batch的大小Ncls=256来进行归一化。reg由anchor位置的数量(VGG大约2400个)来归一化。默认λ=10,因此cls和reg的权重大致相等。

表9中,实验显示,实验结果对λ不敏感,注意到上面的归一化normalization也是不必要的,可以简化。

前者是1/256  λ=10时,后者是10/2400 = 1/240和1/256几乎一样,pytorch官方代码里二者都用的1/256了就

Faster R-CNN论文翻译和PPT讲解_第5张图片

对于边框的回归,我们采用四个坐标的参数化:

Faster R-CNN论文翻译和PPT讲解_第6张图片

x,y,w,h是box的中心位置、高、宽。变量 x 是预测的框, xa 是anchor box , x*是Ground Box

这可以被认为是从anchor到接近ground-truth的回归。

然而,我们的方法与之前基于RoI的方法不同,在[1][2]中对任意大小RoI池化的特征进行边框回归,回归权重被所有区域共享。

我们的公式中,用于回归的特征再特征映射上具有相同的空间大小3*3,。为了应对变化的尺寸,k个bounding box回归器需要被学习,每个回归器所代表的一种尺寸及一种比例,k个回归器不共享权重。这样,由于锚点的设计,及时具有固定的anchors,仍然可以预测不同尺寸的边框。

(个人:Fast中使用RoI, 现在不用了)

3.1.3 训练RPNs

RPN可以被反向传播和随机梯度下降SGD端到端的训练,我们遵循以图像为中心的采样策略来训练网络。每个mini-batch从一张图像中产生,包含多个正例和负例anchor样本。对所有锚点的损失函数会偏向负样本,因为他们占主导地位。因而我们从一张图中随机采样256个样本来计算损失函数,政府锚点比例1:1,如果正样本不够则负样本补充。

所有的共享卷积层由ImageNet分类预训练得来。随机初始化所有的新层,以0均值,0.01方差高斯分布。调整ZF模型所有的层,以及VGG网络conv3_1及之上的层以节约内存,使用0.001学习率,20K个mini-batch,在PASCAL_VOC上。使用momentum=0.9,权重衰减0.0005,使用caffe平台。

3.2 RPN和Fast R-CNN共享卷积

目前为止,我们描述了训练RPN网络,还没考虑到利用这些利用这些区域来检测的CNN网络。对检测检测网络来说,我们使用Fast R-CNN。图2将展示如何共享卷积

Faster R-CNN论文翻译和PPT讲解_第7张图片

RPN和Fast R-CNN是单独训练的,我们需要一种技术让两个网络之间共享卷积。我们有三种方法

一,交替训练。

二,近似联合训练。二者训练时合并成一个网络,如图2,每次SGD迭代是,前向传播产生一些region proposals,在训练Fast R-CNN时将proposals看做固定的。反向传播向往常一样进行。对于共享层,反向传播信号从RPN loss和Fast R-CNN loss二者的组合来进行。这个解决方案很容易实现,但是忽略了关于proposal边界框的导数,也就是网络的响应,因而是近似的。在试验中,这个方法产生了近似的结果,且与交替训练比节约了25%-50%的训练时间

三,非近似的联合训练。RPN预测的边界框也是输入函数。Fast R-CNN中RoI Pooling层接受卷积特征以及预测的边界框 作为输入,理论上有效的反向传播其也应该包括关于边界坐标的梯度。在近似联合训练中这些梯度被忽视。在非近似联合训练中,我们需要一个可微的RoI Pooling层,这是一个很重要的问题,可以通过[15]提出的ROI 扭曲层给出解决方案。这不在本文范围中。

4步交替训练

RPN中256维度是怎么来的 呢,是因为ZF模型在这一层channel数是256    VGG在这一层的channel是512 , 所以这个一维的特征向量长度是256维度

另外,特征图上滑到这个点时,是在原图上生成对应的anchor!! 对应位置是stride  X   anchor的坐标

本文中采用四步交替训练,交替优化学习共享特征。首先按照3.1.3中训练RPN,网络被ImageNet初始化,在端到端的region proposal任务中fine-tune。第二步,使用第一步中的RPN对Fast R-CNN进行单独训练。这个检测网络也由ImageNet初始化,此时两个网络不共享卷积层。在第三步中,我们使用检测器网络来初始化RPN训练,但是我们修正共享的卷积层,并且只对RPN特有的层进行微调。现在这两个网络共享卷积层。最后,保持共享卷积层的固定,我们对Fast R-CNN的独有层进行微调。因此,两个网络共享相同的卷积层并形成统一的网络。类似的交替训练可以运行更多的迭代,但是我们只观察到可以忽略的改进。

 

detail

Faster R-CNN论文翻译和PPT讲解_第8张图片

RPN中256维度是怎么来的 呢,是因为ZF模型在这一层channel数是256    VGG在这一层的channel是512 , 所以这个一维的特征向量长度是256维度

另外,特征图上滑到这个点时,是在原图上生成对应的anchor!! 对应位置是stride  X   anchor的坐标

Faster R-CNN论文翻译和PPT讲解_第9张图片

k个anchor  我们生成2k个scores   4k个reg

 

Faster R-CNN论文翻译和PPT讲解_第10张图片

2k个scores,每一对分别是对应该anchor是不是前景的得分,因而这每对相加和为1,softmax嘛

reg每4个一组,k个anchor一共4k个

三种尺度128方,256方,512方,  1:1 , 1:2, 2:1

1:2的面积是256的话,短边就会小于256,长边大于256, 1:1的话长短边都是256

 

3x3滑动窗口的感受野 问题

ZF网络感受野是171

VGG是228

VGG的228x228如何预测256甚至512的边界框呢?

Faster R-CNN论文翻译和PPT讲解_第11张图片

作者认为这是有可能的,经验上来说,看到目标的一部分,也可以猜到目标的大小

ZF网络感受野及网络结构

Faster R-CNN论文翻译和PPT讲解_第12张图片

1000x600x3的图片,大概得到60x40的特征图,那么就是60x40x9个anchor,即2W个anchor,忽略跨边界的anchor,还剩6k个    先求得cls得分,再NMS,IOU为0.7时也就2k个候选框

anchor与proposal是有区别的(被调整过嘛)

Faster R-CNN论文翻译和PPT讲解_第13张图片

RPN的实现部分:

feature map经过3x3卷积之后,pad=1,stride=1, 得到相同大小的feature map,长宽深度都一样,即上图中每个像素都有自己对应的红点

然后可以使用1x1的卷积,数量为2k个,得到cls

(并联)同时使用1x1的卷积,数量为4k个,得到reg部分

 

 

3.3 实现细节

我们在单尺度图像上训练和测试区域提议和目标检测网络[1],[2]。我们重新缩放图像,使得它们的短边是s=600像素。多尺度特征提取(使用图像金字塔)可能会提高精度,但不会表现出速度与精度的良好折中。在重新缩放的图像上,最后卷积层上的ZF和VGG网络的总步长为16个像素,因此在调整大小(500×375)之前,典型的PASCAL图像上的总步长为10个像素。即使如此大的步长也能提供良好的效果,尽管步幅更小,精度可能会进一步提高。

对于锚点,我们使用了3个尺度,边界框面积分别为128^2,256^2和512^2个像素,以及1:1,1:2和2:1的长宽比。这些超参数不是针对特定数据集仔细选择的,我们将在下一节中提供有关其作用的消融实验()。如上所述,我们的解决方案不需要图像金字塔或滤波器金字塔来预测多个尺度的区域,节省了大量的运行时间。图3(右)显示了我们的方法在广泛的尺度和长宽比方面的能力。表1显示了使用ZF网络的每个锚点学习到的平均提议大小。我们注意到,我们的算法允许预测比基础感受野更大。这样的预测是有可能的——如果只有目标的中间部分是可见的,那么仍然可以粗略地推断出目标的范围。

Faster R-CNN论文翻译和PPT讲解_第14张图片

跨越图像边界的anchors boxes需要小心处理,训练时我们忽略跨越边界的 anchors,所以他们对loss没有贡献。对典型的1000*600的图像来说,一共大约有20000(60*40*9)个anchors.忽略跨越边界的anchots,每张图大约剩下6000个可以训练,如果这些跨边界的不忽略,则会在目标函数总引入大的且难以纠正的误差项,且训练不会收敛。但在测试时,我们仍然将全卷积RPN应用于整张图,这可能产生超过边界的proposal region,我们裁剪到图像边界。

有些RPN proposals互相高度重合,为了减少冗余,我们在proposal region中使用cls scores来使用NMS。我们固定NMS的阈值为0.7,每张图大约剩下2000个proposal regions,NMS并不会损害最终的检测精确性,但是可以大大减少proposals数量。NMS之后,我们使用前N个proposal regions来进行检测。接下来,我们使用2000个RPN的proposals来训练Fast R-CNN,但是在测试时评估不同数量的proposals

4 实验

4.1 PASCAL VOC上的实验

在检测基准数据集VOC2007上全面评估了模型。PASCALVOC2007有大约5000张训练图片,20类,5000张测试图像,还提供了了VOC2012的测试结果。对于ImageNet预训练网络,我们使用5个卷积层3个全连接的"快速版本"ZF模型以及13个卷积层,3个全连接的VGG16,主要评估检测的检测精度mean Average Precision(mAP),以内这是检测目标的实际指标(而不是关注目标proposal代理度的量)

Faster R-CNN论文翻译和PPT讲解_第15张图片

表2顶部展示了使用各种区域推荐方法进行训练和测试Fast R-CNN的结果,这些方法使用ZF网络。对于选择性搜做SS,我们通过快速模式生成2000个proposals,对于EdgeBoxes,我们通过默认EB设置0.7的IOU来生成proposals。SS精度mAP58.7%,EB的 map是58.6%,RPN使用 300个proposals时是59.9%,效果最好。由于共享卷积计算,使用RPN比SS或者EB更快,较少的proposals也减少了区域方面全连接的成本,如表5

Faster R-CNN论文翻译和PPT讲解_第16张图片

RPN的消融实验(Ablation Experiments)为了研究RPNs作为区域推荐的性能,进行消融实验。首先,显示了在RPN,和Fast R-CNN监测网络共享卷积层的效果。为此,我们在四步训练的第二步停止训练。使用单独的挽留过将结果略微减少到58.7%,(使用表2中RPN+ZF,不共享卷积),观察到,由于第三步训练中,使用检测器调整的特征来微调RPN才使得proposals质量得到了改善。

接下来,我们分析RPN对训练Fast R-CNN造成的影响。为此,我们使用2000peoposals的SS方法和ZF模型来训练Fast R-CNN。固定检测器,通过改变测试时使用的proposals来评估检测的mAP,在这些消融试验中,RPN不与检测器共享卷积

测试阶段使用300个RPN提议来替换SS,得到56.8%的mAP , 这个损失是因为训练测试时的不一致。这个结果作为之后比较的baseline基准

令人惊讶的是,RPN测试时使用排名最高的100个peoposals仍然很准,55.1%,表明排名靠前的RPN很准。相反的,使用前6000个RPN(无NMS)具有相当的mAP,55.2%,说明NMS不会损害检测到的mAP , 且可以减少误报。

接下来,我们在测试时分别关闭cls和reg的输出来分析RPN的作用。cls层在测试时被移除,(因此没有NMS可用了),我们从没有得分的一堆regions中随机采样N个proposals,在N= 1000时,55.8%,但是当N=100时,44.6%。这表明cls考虑了排名最高的peoposals的准确性。

另一方面,测试时移除reg层时,(proposals变成了anchor boxes),52.1%,这表明高质量的proposal主要是由于回归的边界框,anchors boxes虽然有多个尺度长宽比,但是不足以进行准确的检测。

我们还评估backbone对RPN的影响,使用VGG16来训练,但是仍使用SS+ZF检测器。mAP(RPN+ZF)从56.8%升至(RPN+VGG)59.2%,由于RPN+ZF与SS具有竞争性,(当一只用于训练和测试时都是58.7%),所以我们预期RPN+VGG比SS更好,以下实验验证了这个假设

VGG16的性能

表3显示了VGG16的proposal和检测结果。使用RPN+VGG,不同享特征是68.5%,比SS高一点。SS是预先定义的,而RPN是主动训练的并且更好的从网络中收益。对于特征共享的变种,69.9%,效果更好,且proposals的成本几乎为0。我们在VOC2007和2012的训练评估trainval上结果是73.2%,图5展示了VOC2007测试集的结果。在表4的VOC2012测试集中,VOC2007的trainval+test和VOC2012的trainval联合训练上取得70.4%的mAP ,表6,表7是详细数字

Faster R-CNN论文翻译和PPT讲解_第17张图片

表5中总结了整个检测系统的运行时间。根据内容,SS花1-2秒,平均1.5秒。VGG-16的Fast R-CNN在2000个SS上需要320ms,如果在全连接层上使用SVD(???)则需要223ms。women de VGG16 在 proposal和检测上共需要198ms。在共享卷积特征的情况下,单独RPN只需要10ms计算附加层,我们的region-wise计算也较低,这要归功于较少的proposal,一张图300个。ZF模型时帧率17fps

Faster R-CNN论文翻译和PPT讲解_第18张图片

对超参的敏感度

在表8中,我们调查anchors的设置。3长款3比例时69.9%,每个位置只一个anchor时mAP下降是3%到4%,仅使用3个尺度(仅变长款或比例)mAP会更高些,表明多尺寸是作为回归参考是有效的解决方案。在这里,仅1个长宽比3个尺寸与3个尺寸3个长宽比效果一样,表明尺寸和长宽比不是解决检测准确度的解决维度。但是仍采用这两个维度来保持系统灵活性。

Faster R-CNN论文翻译和PPT讲解_第19张图片

表9中我们比较了公式1中λ的不同,默认λ=10,使得两个项目在归一化之后大致相等的加权。表9展示,lambda大学在1-100范围内,我们的结果只受到1%的影响,说明结果对宽范围内的λ不敏感。

分析IOU召回率。使用实际边界框来计算不同IOU时的召回率。值得注意的是,Recall-to-IoU度量与最终的检测精度质检的相关性是松散的。使用这个指标来诊断proposal方法比评估proposal方法更合适。

图4中,我们显示了,使用300,1000,2000个proposals,与SS和EB进行比较,根据这些方法产生的置信度,采用top-N作为N个proposals,图现实proposals从2000减少到300时,RPN方法更"优雅"。这就解释了为什么RPN在使用300个proposals时仍然有较好的mAP了。这个属性主要归因于RPN中的cls项,proposals较少时,SS和EB下降比RPN快

Faster R-CNN论文翻译和PPT讲解_第20张图片

one-stage和two-stage对比。OverFeat提出一种在卷积特征映射的滑动窗口上使用回归器和分类器的检测方法。是一种one-stage,类别判定的检测流程。而我们是two-stage级联方法,包括不知类别的proposals提议和特定类别的检测。在OverFeat中,区域特征来自一个在尺度金字塔上滑动的固定长宽比的滑动窗口。这些特征用于同时确定目标的位置和类别。在RPN中,这些特征来自3*3的滑窗,预测不同尺度长宽比的proposals。虽然两种方法都是滑窗,region proposal只是Fast R-CNN的第一阶段,下游检测器致力于对proposal进行细化。在级联的第二阶段,区域的特征被自适应的 pool,我们相信这些功能会带来更准确的检测结果。

为了对比两种系统的差异,我们通过一阶段Fast R-CNN老模拟OverFeat系统,从而避免实现细节的其他差异。proposal有三个尺度,128,256,512,三个长宽比,进行密集的滑窗。训练Fast R-CNN来预测特定类别的分数,并从滑窗中回归box的位置。由于OverFeat采用图像金字塔,我们也从5个尺度中进行特征提取。

表10比较了one-stage的两个变种以及two-stage,使用ZF模型,一阶段系统53.9%   二阶段系统58.7%, 一阶段低了4.8。实验炎症梨级联区域和目标检测有效。一阶段更慢,因为有更多proposal

Faster R-CNN论文翻译和PPT讲解_第21张图片

4.2 MS COCO的实验

80类,8万张训练图片,4万张验证图片,2万张测试,我们评估了IOU从[0.5  : 0.05  : 0.95]的mAP,简称[.5 , .95]

8个GPU训练,RPN每个GPU一个,Fast R-CNN每个GPU2个,有效mini-batch=8, 24万次迭代训练learning rate=0.003,8万次learning rate=0.0003.三个长宽比,四个尺度(64^2),为了数据集中的小目标而添加的64^2.除此之外,Fast R-CNN步骤中,负样本定义为与Ground truth 的IOU在(0,0.5)质检,而不是[0.1,0.5)之间。Fast R-CNN中[0,0.5)中的负样本与SPPnet中[0.1,0.5)不同,0-0.5部分在SVM中会被访问,但是Fast中不用SVM 了,因此改进了[email protected]

Faster R-CNN论文翻译和PPT讲解_第22张图片

表11是在VGG16的COC上的结果

ILSVRC和COCO2015比赛中的Faster R-CNN 我们已经证明,RPN通过神经网络完全学习了区域推荐,且特征提取的越好效果越好。深度增加到100层也有效,使用ResNet-101代替VGG16,COCO验证集效果41.5提升至48.4,ILSVRC2015第一名,超过第二8.5%,, RPN也是分割任务获胜的基石。

4.3 从MS COCO 到PASCALVOC

大规模数据对改善性能至关重要。COCO数据集帮助VOC上的检测结果的提升。COCO训完,在VOC上评估(由于coco80类包含voc20类),voc2007上mAP76.1, 即使没有VOC 数据,效果也比VOC07+12训练的73.2好。我们在VOC上fine-tune,coco替代了ImageNet预训练模型,voc2007可达78.8% 额外增加了5.6% ,表6显示,VOC2007上,COCO+VOC训练,效果最好,每张图仍然200ms

5 结论

我们已经提出了RPN来生成高效、准确的region proposal区域推荐,通过下游检测网络共享卷积特征,区域推荐几乎是零成本的。我们的方法使统一的,基于深度学习的目标检测,来进行接近实时的帧率。学习到的RPN也提高了区域推荐的质量,从而提高了整体的目标检测的精度

 

 

 

你可能感兴趣的:(深度学习,论文笔记)