原文链接:http://blog.csdn.net/u014696921/article/details/52824107
paper链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
&创新点
设计Region Proposal Networks【RPN】,利用CNN卷积操作后的特征图生成region proposals,代替了Selective Search、EdgeBoxes等方法,速度上提升明显;
训练Region Proposal Networks与检测网络【Fast R-CNN】共享卷积层,大幅提高网络的检测速度。
&问题是什么
继Fast R-CNN后,在CPU上实现的区域建议算法Selective Search【2s/image】、EdgeBoxes【0.2s/image】等成了物体检测速度提升上的最大瓶颈。
&如何解决问题
。测试过程
Faster R-CNN统一的网络结构如下图所示,可以简单看作RPN网络+Fast R-CNN网络。
注意:上图Fast R-CNN中含特有卷积层,博主认为不是所有卷积层都参与共享。
首先向CNN网络【ZF或VGG-16】输入任意大小图片;
经过CNN网络前向传播至最后共享的卷积层,一方面得到供RPN网络输入的特征图,另一方面继续前向传播至特有卷积层,产生更高维特征图;
供RPN网络输入的特征图经过RPN网络得到区域建议和区域得分,并对区域得分采用非极大值抑制【阈值为0.7】,输出其Top-N【文中为300】得分的区域建议给RoI池化层;
第2步得到的高维特征图和第3步输出的区域建议同时输入RoI池化层,提取对应区域建议的特征;
第4步得到的区域建议特征通过全连接层后,输出该区域的分类得分以及回归后的bounding-box。
。解释分析
RPN网络结构是什么?实现什么功能?具体如何实现?
单个RPN网络结构如下图:
注意:上图中卷积层/全连接层表示卷积层或者全连接层,作者在论文中表示这两层实际上是全连接层,但是网络在所有滑窗位置共享全连接层,可以很自然地用n×n卷积核【论文中设计为3×3】跟随两个并行的1×1卷积核实现,文中这么解释的,博主并不是很懂,尴尬。
功能:实现attention机制,如图所示,RPN在CNN卷积层后增加滑动窗口操作以及两个卷积层完成区域建议功能,第一个卷积层将特征图每个滑窗位置编码成一个特征向量,第二个卷积层对应每个滑窗位置输出k个区域得分和k个回归后的区域建议,并对得分区域进行非极大值抑制后输出得分Top-N【文中为300】区域,告诉检测网络应该注意哪些区域,本质上实现了Selective Search、EdgeBoxes等方法的功能。
具体实现:
①首先套用ImageNet上常用的图像分类网络,本文中试验了两种网络:ZF或VGG-16,利用这两种网络的部分卷积层产生原始图像的特征图;
② 对于①中特征图,用n×n【论文中设计为3×3,n=3看起来很小,但是要考虑到这是非常高层的feature map,其size本身也没有多大,因此9个矩形中,每个矩形窗框都是可以感知到很大范围的】的滑动窗口在特征图上滑动扫描【代替了从原始图滑窗获取特征】,每个滑窗位置通过卷积层1映射到一个低维的特征向量【ZF网络:256维;VGG-16网络:512维,低维是相对于特征图大小W×H,typically~60×40=2400】后采用ReLU,并为每个滑窗位置考虑k种【论文中k=9】可能的参考窗口【论文中称为anchors,见下解释】,这就意味着每个滑窗位置会同时预测最多9个区域建议【超出边界的不考虑】,对于一个W×H的特征图,就会产生W×H×k个区域建议;
③步骤②中的低维特征向量输入两个并行连接的卷积层2:reg窗口回归层【位置精修】和cls窗口分类层,分别用于回归区域建议产生bounding-box【超出图像边界的裁剪到图像边缘位置】和对区域建议是否为前景或背景打分,这里由于每个滑窗位置产生k个区域建议,所以reg层有4k个输出来编码【平移缩放参数】k个区域建议的坐标,cls层有2k个得分估计k个区域建议为前景或者背景的概率
Anchors是什么?有什么用?
Anchors是一组大小固定的参考窗口:三种尺度{128^2,256^2,512^2}×三种长宽比{1:1,1:2,2:1},如下图所示,表示RPN网络中对特征图滑窗时每个滑窗位置所对应的原图区域中9种可能的大小,相当于模板,对任意图像任意滑窗位置都是这9中模板。继而根据图像大小计算滑窗中心点对应原图区域的中心点,通过中心点和size就可以得到滑窗位置和原图位置的映射关系,由此原图位置并根据与Ground Truth重复率贴上正负标签,让RPN学习该Anchors是否有物体即可。
作者在文中表示采用Anchors这种方法具有平移不变性,就是说在图像中平移了物体,窗口建议也会跟着平移。同时这种方式也减少了整个模型的size,输出层512×(4+2)×9=2.8×10^4个参数【512是前一层特征维度,(4+2)×9是9个Anchors的前景背景得分和平移缩放参数】,而MultiBox有1536×(4+1)×800=6.1×10^6个参数,而较小的参数可以在小数据集上减少过拟合风险。
当然,在RPN网络中我们只需要找到大致的地方,无论是位置还是尺寸,后面的工作都可以完成,这样的话采用小网络进行简单的学习【估计和猜差不多,反正有50%概率】,还不如用深度网络【还可以实现卷积共享】,固定尺度变化,固定长宽比变化,固定采样方式来大致判断是否是物体以及所对应的位置并降低任务复杂度。
Anchors为什么考虑以上三种尺度和长宽比?
文中对Anchors的尺度以及长宽比选取进行了实验,如下图所示:
实验实在VGG-16模型下,采用PASCAL VOC 2007训练集和PASCAL VOC 2007测试集得到。相比于只采用单一尺度和长宽比,单尺度多长宽比和多尺度单长宽比都能提升mAP,表明多size的anchors可以提高mAP,作者在这里选取了最高mAP的3种尺度和3种长宽比。
如何处理多尺度多长宽比问题?即如何使24×24和1080×720的车辆同时在一个训练好的网络中都能正确识别?
文中展示了两种解决多尺度多长宽比问题:一种是使用图像金字塔,对伸缩到不同size的输入图像进行特征提取,虽然有效但是费时;
另一种是使用滤波器金字塔或者滑动窗口金字塔,对输入图像采用不同size的滤波器分别进行卷积操作,这两种方式都需要枚举图像或者滤波器size;
作者提出了一种叫Anchors金字塔的方法来解决多尺度多长宽比的问题,在RPN网络中对特征图滑窗时,对滑窗位置中心进行多尺度多长宽比的采样,并对多尺度多长宽比的anchor boxes区域进行回归和分类,利用Anchors金字塔就仅仅依赖于单一尺度的图像和特征图和单一大小的卷积核,就可以解决多尺度多长宽比问题,这种对推荐区域采样的模型不管是速度还是准确率都能取得很好的性能。
同传统滑窗方法提取区域建议方法相比,RPN网络有什么优势?
传统方法是训练一个能检测物体的网络,然后对整张图片进行滑窗判断,由于无法判断区域建议的尺度和长宽比,所以需要多次缩放,这样找出一张图片有物体的区域就会很慢;
虽然RPN网络也是用滑动窗口策略,但是滑动窗口实在卷积层特征图上进行的,维度较原始图像降低了很多倍【中间进行了多次max pooling 操作】,RPN采取了9种不同尺度不同长宽比的anchors,同时最后进行了bounding-box回归,即使是这9种anchors外的区域也能得到一个跟目标比较接近的区域建议。
。训练过程
RPN网络预训练
样本 | 来源 |
---|---|
正样本 | ILSVRC20XX |
负样本 | ILSVRC20XX |
样本中只有类别标签;
文中一带而过RPN网络被ImageNet网络【ZF或VGG-16】进行了有监督预训练,利用其训练好的网络参数初始化;
用标准差0.01均值为0的高斯分布对新增的层随机初始化。
Fast R-CNN网络预训练
样本 | 来源 |
---|---|
正样本 | ILSVRC20XX |
负样本 | ILSVRC20XX |
样本中只有类别标签;
文中一带而过Fast R-CNN网络被ImageNet网络【ZF或VGG-16】进行了有监督预训练,利用其训练好的网络参数初始化。
RPN网络微调训练
RPN网络样本 | 来源 |
---|---|
正样本 | 与Ground Truth相交IoU最大的anchors【以防后一种方式下没有正样本】+与Ground Truth相交IoU>0.7的anchors |
负样本 | 与Ground Truth相交IoU<0.3的anchors |
PASCAL VOC 数据集中既有物体类别标签,也有物体位置标签;
正样本仅表示前景,负样本仅表示背景;
回归操作仅针对正样本进行;
训练时弃用所有超出图像边界的anchors,否则在训练过程中会产生较大难以处理的修正误差项,导致训练过程无法收敛;
对去掉超出边界后的anchors集采用非极大值抑制,最终一张图有2000个anchors用于训练【详细见下】;
对于ZF网络微调所有层,对VGG-16网络仅微调conv3_1及conv3_1以上的层,以便节省内存。
SGD mini-batch采样方式:同Fast R-CNN网络,采取”image-centric”方式采样,即采用层次采样,先对图像取样,再对anchors取样,同一图像的anchors共享计算和内存。每个mini-batch包含从一张图中随机提取的256个anchors,正负样本比例为1:1【当然可以对一张图所有anchors进行优化,但由于负样本过多最终模型会对正样本预测准确率很低】来计算一个mini-batch的损失函数,如果一张图中不够128个正样本,拿负样本补凑齐。
训练超参数选择:在PASCAL VOC数据集上前60k次迭代学习率为0.001,后20k次迭代学习率为0.0001;动量设置为0.9,权重衰减设置为0.0005。
一张图片多任务目标函数【分类损失+回归损失】具体如下:
其中,i表示一个mini-batch中某个anchor的下标, pi 表示anchor i预测为物体的概率;当anchor为正样本时, p∗i=1 ,当anchor为负样本时 p∗i=0 ,由此可以看出回归损失项仅在anchor为正样本情况下才被激活;
ti 表示正样本anchor到预测区域的4个平移缩放参数【以anchor为基准的变换】; t∗i 表示正样本anchor到Ground Truth的4个平移缩放参数【以anchor为基准的变换】;
分类损失函数 Lcls 是一个二值【是物体或者不是物体】分类器, Lcls(pi,p∗i)=−log[p∗ipi+(1−p∗i)(1−pi)] ;
归回损失函数 Lreg(ti,t∗i)=R(ti−t∗i) 【两种变换之差越小越好】,R函数定义如下:
λ 参数用来权衡分类损失 Lcls 和回归损失 Lreg ,默认值 λ=10 【文中实验表明 λ 从1变化到100对mAP影响不超过1%】;
Ncls 和 Nreg 分别用来标准化分类损失项 Lcls 和回归损失项 Lreg ,默认用mini-batch size=256设置 Ncls ,用anchor位置数目~2400初始化 Nreg ,文中也说明标准化操作并不是必须的,可以简化省略。
Fast R-CNN网络微调训练
Fast R-CNN网络样本 | 来源 |
---|---|
正样本 | Ground Truth +与Ground Truth相交IoU>阈值的区域建议 |
负样本 | 与Ground Truth相交IoU<阈值的区域建议 |
PASCAL VOC 数据集中既有物体类别标签,也有物体位置标签;
正样本表示每类物品的Ground Truth以及与Ground Truth重叠度超过某一阈值的区域建议,负样本表示同Ground Truth重叠度小于某一阈值的区域建议;
回归操作仅针对正样本进行。
RPN网络、Fast R-CNN网络联合训练
训练网络结构示意图如下所示:
如上图所示,RPN网络、Fast R-CNN网络联合训练是为了让两个网络共享卷积层,降低计算量。
文中通过4步训练算法,交替优化学习至共享特征:
① 进行上面RPN网络预训练,和以区域建议为目的的RPN网络end-to-end微调训练;
② 进行上面Fast R-CNN网络预训练,用第①步中得到的区域建议进行以检测为目的的Fast R-CNN网络end-to-end微调训练【此时无共享卷积层】;
③ 使用第②步中微调后的Fast R-CNN网络重新初始化RPN网络,固定共享卷积层【即设置学习率为0,不更新】,仅微调RPN网络独有的层【此时共享卷积层】;
④ 固定第③步中共享卷积层,利用第③步中得到的区域建议,仅微调Fast R-CNN独有的层,至此形成统一网络如上图所示。
。解释分析
RPN网络中bounding-box回归怎么理解?同Fast R-CNN中的bounding-box回归相比有什么区别?
对于bounding-box回归,采用以下公式:
其中,x,y,w,h表示窗口中心坐标和窗口的宽度和高度,变量 x , xa 和 x∗ 分别表示预测窗口、anchor窗口和Ground Truth的坐标【y,w,h同理】,因此这可以被认为是一个从anchor窗口到附近Ground Truth的bounding-box 回归;
RPN网络中bounding-box回归的实质其实就是计算出预测窗口。这里以anchor窗口为基准,计算Ground Truth对其的平移缩放变化参数,以及预测窗口【可能第一次迭代就是anchor】对其的平移缩放参数,因为是以anchor窗口为基准,所以只要使这两组参数越接近,以此构建目标函数求最小值,那预测窗口就越接近Ground Truth,达到回归的目的;
文中提到, Fast R-CNN中基于RoI的bounding-box回归所输入的特征是在特征图上对任意size的RoIs进行Pool操作提取的,所有size RoI共享回归参数,而在Faster R-CNN中,用来bounding-box回归所输入的特征是在特征图上相同的空间size【3×3】上提取的,为了解决不同尺度变化的问题,同时训练和学习了k个不同的回归器,依次对应为上述9种anchors,这k个回归量并不分享权重。因此尽管特征提取上空间是固定的【3×3】,但由于anchors的设计,仍能够预测不同size的窗口。
文中提到了三种共享特征网络的训练方式?
① 交替训练
训练RPN,得到的区域建议来训练Fast R-CNN网络进行微调;此时网络用来初始化RPN网络,迭代此过程【文中所有实验采用】;
② 近似联合训练
如上图所示,合并两个网络进行训练,前向计算产生的区域建议被固定以训练Fast R-CNN;反向计算到共享卷积层时RPN网络损失和Fast R-CNN网络损失叠加进行优化,但此时把区域建议【Fast R-CNN输入,需要计算梯度并更新】当成固定值看待,忽视了Fast R-CNN一个输入:区域建议的导数,则无法更新训练,所以称之为近似联合训练。实验发现,这种方法得到和交替训练相近的结果,还能减少20%~25%的训练时间,公开的python代码中使用这种方法;
③ 联合训练
需要RoI池化层对区域建议可微,需要RoI变形层实现,具体请参考这片paper:Instance-aware Semantic Segmentation via Multi-task Network Cascades。
图像Scale细节问题?
文中提到训练和检测RPN、Fast R-CNN都使用单一尺度,统一缩放图像短边至600像素;
在缩放的图像上,对于ZF网络和VGG-16网络的最后卷积层总共的步长是16像素,因此在缩放前典型的PASCAL图像上大约是10像素【~500×375;600/16=375/10】。
网上关于Faster R-CNN中三种尺度这么解释:
原始尺度:原始输入的大小,不受任何限制,不影响性能;
归一化尺度:输入特征提取网络的大小,在测试时设置,源码中opts.test_scale=600。anchor在这个尺度上设定,这个参数和anchor的相对大小决定了想要检测的目标范围;
网络输入尺度:输入特征检测网络的大小,在训练时设置,源码中为224×224。
以上6行博主并不懂,还需要仔细研究源码。
理清文中anchors的数目。
文中提到对于1000×600的一张图像,大约有20000(~60×40×9)个anchors,忽略超出边界的anchors剩下6000个anchors,利用非极大值抑制去掉重叠区域,剩2000个区域建议用于训练;
测试时在2000个区域建议中选择Top-N【文中为300】个区域建议用于Fast R-CNN检测。
&结果怎么样
PASCAL VOC实验【使用ZF网络】
属性 | 数目 |
---|---|
目标类别 | 20 |
PASCAL VOC 2007训练集 | 5k |
PASCAL VOC 2007测试集 | 5k |
a.第1组实验
目的:验证RPN方法的有效性;
做法:ZF检测网络训练和测试时分别使用Selective Search、EdgeBoxes和RPN+ZF【共享】方法,Selective Search、EdgeBoxes测试时使用2000窗口建议,RPN+ZF测试时采用300窗口建议;
结果:RPN+ZF方法获得59.9%的mAP,由于卷积层共享并且只有300个候选窗口,RPN+ZF方法检测速度更快;
b.第2组实验
目的:验证RPN和ZF检测网络共享卷积层的影响;
做法:在之前所述4步训练算法进行到第2步后停止;
结果:未实现卷积层共享的RPN+ZF的方法获得58.7%的mAP,这由于4步训练算法的第3步使用了微调后检测器特征来微调RPN网络,使得建议窗口质量得到提高;
c.第3组实验
目的:使用不同RPN候选窗数目下,评估其对检测网络mAP的影响;
做法:使用Selective Search方法训练检测网络ZF并固定不变【RPN与ZF没有共享卷积层】,测试时采用不同RPN候选窗数目进行;
结果:测试时300候选窗RPN获得56.8%的mAP,这是由于训练和测试的区域建议方法不一致造成;使用Top-100窗口建议仍然有55.1%的mAP,说明Top-100结果比较准确;未使用非极大值抑制的6000个区域建议全部使用进行检测获得55.2%的mAP,说明非极大值抑制并未损坏精度,反而可能减少了误报;
d.第4组实验
目的:验证RPN网络cls窗口分类层影响;
做法:使用Selective Search方法训练检测网络ZF并固定不变【RPN与ZF没有共享卷积层】,移除RPN网络中cls窗口分类层【缺少分数就没有了非极大值抑制和Top排名】,从未评分的窗口建议中随机采用N个 ;
结果:N=1000时,mAP为55.8%影响不大,但N=100时mAP为44.6%,说明cls窗口分类层的评分准确度高,影响检测结果精度;
e.第5组实验
目的:验证RPN网络reg窗口回归层影响;
做法:使用Selective Search方法训练检测网络ZF并固定不变【RPN与ZF没有共享卷积层】,移除RPN网络reg窗口回归层【候选区域直接变成没有回归的anchor boxes】;
结果:选择Top-300进行实验,mAP掉到了52.1%,说明窗口回归提高了区域建议的质量,虽然说anchor boxes能应对不同尺度和宽高比,但是对于精确检测远远不够;
f.第6组实验
目的:验证优质量网络对RPN产生区域建议的影响;
做法:使用Selective Search方法训练检测网络ZF并固定不变【RPN与ZF没有共享卷积层】,采用VGG-16网络训练RPN提供候选区域;
结果:与第3组实验测试时300候选窗RPN获得56.8%的mAP相比,采用VGG-16训练RPN使得mAP达到59.2%,表明VGG-16+RPN提供区域建议质量更高【不像死板板的Selective Search,RPN可以从更好的网络中获利进行变化】,因此RPN和检测网络同时采用VGG-16并共享卷积层会如何呢?结果见下。
RPN网络和检测网络同时采用VGG-16并共享卷积层,在PASCAL VOC 2007训练集上训练,测试集上获得69.9%的mAP;在联合数据集如PASCAL VOC 2007和2012训练集上训练RPN网络和检测网络,PASCAL VOC 2007测试集上mAP会更高。
对于检测速度而言,采用ZF模型,可以达到17fps;采用VGG-16模型,可以达到5fps,由于卷积共享,RPN网络仅仅花10ms计算额外的层,而且,由于仅仅选取Top-N【文中为300】进行检测,检测网络中的非极大值抑制、池化、全连接以及softmax层花费时间是极短的。
召回率分析。所谓召回率即区域建议网络找出的为真的窗口与Ground Truth的比值【IoU大于阈值即为真】,文中实验表明Selective Search、EdgeBoxes方法从Top-2000、Top-1000到Top-300的召回率下降明显,区域建议越少下降越明显,而RPN网络召回率下降很少,说明RPN网络Top-300区域建议已经同Ground Truth相差无己,目的性更明确。
MS COCO实验【使用VGG-16网络】
属性 | 数目 |
---|---|
目标类别 | 80 |
Microsoft COCO训练集 | 80k |
Microsoft COCO验证集 | 40k |
Microsoft COCO测试集 | 20k |
采用8-GPU并行训练,则RPN有效mini-batch 为8张图,Fast R-CNN有效mini-batch为16张图;
RPN和Fast R-CNN以0.003【由0.001改为0.003,由于有效mini-batch被改变了】的学习率迭代240k次,以0.0003的学习率迭代80k次;
对于anchors,在三种尺度三种长宽比基础上增加了64^2的尺度,这是为了处理Microsoft COCO数据集上的小目标【新数据集上不直接套用这一点值得学习】;
增加定义负样本IoU,重叠阈值由[0.1,0.5) 到[0,0.5),这能提升COOC数据集上mAP;
使用COCO训练集训练,COCO测试集上获得42.1%的mAP @0.5 和21.5%的mAP @[.5,.95]。
6.与VGG-16相比,利用ResNet-101网络,在COCO验证集上mAP从41.5%/21.2%(@0.5/@[.5,.95])变化到48.4%/27.2%,归功于RPN网络可以从更好的特征提取网络中学到更好的区域建议。
7.由于Microsoft COCO数据集种类包含PASCAL VOC数据集种类,文中在Microsoft COCO数据集上训练,在PASCAL VOC数据集上测试,验证大数据量下训练是否有助于提高mAP?
采用VGG-16模型,当仅仅利用Microsoft COCO数据集训练时,PASCAL VOC 2007测试集上mAP达到76.1%【泛化能力强,未过拟合】;当利用Microsoft COCO数据集训练的模型初始化,PASCAL VOC 2007+2012训练集进行微调,PASCAL VOC 2007测试集上mAP达到78.8%,此时每一个单体类别的AP较其它样本训练的都达到最高,而每张图测试时间仍然约为200ms。
&还存在什么问题
采用VGG-16模型,可以达到5fps,这个速度并没有完全达到实时性,还有继续提升的空间,这将在YOLO模型中得以改进。
版权声明:本文为博主原创文章,未经博主允许不得转载
从RCNN到fast RCNN,再到本文的faster RCNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。所有计算没有重复,完全在GPU中完成,大大提高了运行速度。
faster RCNN可以简单地看做“区域生成网络+fast RCNN“的系统,用区域生成网络代替fast RCNN中的Selective Search方法。本篇论文着重解决了这个系统中的三个问题:
1. 如何设计区域生成网络
2. 如何训练区域生成网络
3. 如何让区域生成网络和fast RCNN网络共享特征提取网络
基本设想是:在提取好的特征图上,对所有可能的候选框进行判别。由于后续还有位置精修步骤,所以候选框实际比较稀疏。
原始特征提取(上图灰色方框)包含若干层conv+relu,直接套用ImageNet上常见的分类网络即可。本文试验了两种网络:5层的ZF[3],16层的VGG-16[4],具体结构不再赘述。
额外添加一个conv+relu层,输出51*39*256维特征(feature)。
Region Proposal Networks的设计和训练思路
上图是RPN的网络流程图,即也是利用了SPP的映射机制,从conv5上进行滑窗来替代从原图滑窗。
不过,要如何训练出一个网络来替代selective search相类似的功能呢?
实际上思路很简单,就是先通过SPP根据一一对应的点从conv5映射回原图,根据设计不同的固定初始尺度训练一个网络,就是给它大小不同(但设计固定)的region图,然后根据与ground truth的覆盖率给它正负标签,让它学习里面是否有object即可。
这就又变成介绍RCNN之前提出的traditional method,训练出一个能检测物体的网络,然后对整张图片进行滑窗判断,不过这样子的话由于无法判断region的尺度和scale ratio,故需要多次放缩,这样子测试,估计判断一张图片是否有物体就需要很久。(传统hog+svm->dpm)
如何降低这一部分的复杂度?
要知道我们只需要找出大致的地方,无论是精确定位位置还是尺寸,后面的工作都可以完成,这样子的话,与其说用小网络,简单的学习(这样子估计和蒙差不多了,反正有无物体也就50%的概率),还不如用深的网络,固定尺度变化,固定scale ratio变化,固定采样方式(反正后面的工作能进行调整,更何况它本身就可以对box的位置进行调整)这样子来降低任务复杂度呢。
这里有个很不错的地方就是在前面可以共享卷积计算结果,这也算是用深度网络的另一个原因吧。而这三个固定,我估计也就是为什么文章叫这些proposal为anchor的原因了。这个网络的结果就是卷积层的每个点都有有关于k个achor boxes的输出,包括是不是物体,调整box相应的位置。这相当于给了比较死的初始位置(三个固定),然后来大致判断是否是物体以及所对应的位置.
这样子的话RPN所要做的也就完成了,这个网络也就完成了它应该完成的使命,剩下的交给其他部分完成。
特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积 {1282,2562,5122}× 三种比例 {1:1,1:2,2:1} 。
这些候选窗口称为anchors。
下图示出51*39个anchor中心,以及9种anchor示例。
关于anchor的问题:
这里在详细解释一下:(1)首先按照尺度和长宽比生成9种anchor,这9个anchor的意思是conv5 feature map 3x3的滑窗对应原图区域的大小.这9个anchor对于任意输入的图像都是一样的,所以只需要计算一次. 既然大小对应关系有了,下一步就是中心点对应关系,接下来(2)对于每张输入图像,根据图像大小计算conv5 3x3滑窗对应原图的中心点. 有了中心点对应关系和大小对应关系,映射就显而易见了.
在整个faster RCNN算法中,有三种尺度。
原图尺度:原始输入的大小。不受任何限制,不影响性能。
归一化尺度:输入特征提取网络的大小,在测试时设置,源码中opts.test_scale=600。anchor在这个尺度上设定。这个参数和anchor的相对大小决定了想要检测的目标范围。
网络输入尺度:输入特征检测网络的大小,在训练时设置,源码中为224*224。
RPN的目的是实现"attention"机制,告诉后续的扮演检测\识别\分类角色的Fast-RCNN应该注意哪些区域,它从任意尺寸的图片中得到一系列的带有 objectness score 的 object proposals。
具体流程是:使用一个小的网络在已经进行通过卷积计算得到的feature map上进行滑动扫描,这个小的网络每次在一个feature map上的一个窗口进行滑动(这个窗口大小为n*n----在这里,再次看到神经网络中用于缩减网络训练参数的局部感知策略receptive field,通常n=228在VGG-16,而作者论文使用n=3),滑动操作后映射到一个低维向量(例如256D或512D,这里说256或512是低维,Q:n=3,n*n=9,为什么256是低维呢?那么解释一下:低维相对不是指窗口大小,窗口是用来滑动的!256相对的是a convolutional feature map of a size W × H (typically ∼2,400),而2400这个特征数很大,所以说256是低维.另外需要明白的是:这里的256维里的每一个数都是一个Anchor(由2400的特征数滑动后操作后,再进行压缩))最后将这个低维向量送入到两个独立\平行的全连接层:box回归层(a box-regression layer (reg))和box分类层(a box-classification layer (cls))
在计算机视觉中的一个挑战就是平移不变性:比如人脸识别任务中,小的人脸(24*24的分辨率)和大的人脸(1080*720)如何在同一个训练好权值的网络中都能正确识别. 传统有两种主流的解决方式:
第一:对图像或feature map层进行尺度\宽高的采样;
第二,对滤波器进行尺度\宽高的采样(或可以认为是滑动窗口).
但作者的解决该问题的具体实现是:通过卷积核中心(用来生成推荐窗口的Anchor)进行尺度、宽高比的采样。如上图右边,文中使用了3 scales and 3 aspect ratios (1:1,1:2,2:1), 就产生了 k = 9 anchors at each sliding position.
分类层(cls_score)输出每一个位置上,9个anchor属于前景和背景的概率;窗口回归层(bbox_pred)输出每一个位置上,9个anchor对应窗口应该平移缩放的参数。
对于每一个位置来说,分类层从256维特征中输出属于前景和背景的概率;窗口回归层从256维特征中输出4个平移缩放参数。
就局部来说,这两层是全连接网络;就全局来说,由于网络在所有位置(共51*39个)的参数相同,所以实际用尺寸为1×1的卷积网络实现。
需要注意的是:并没有显式地提取任何候选窗口,完全使用网络自身完成判断和修正。
考察训练集中的每张图像:
a. 对每个标定的真值候选区域,与其重叠比例最大的anchor记为前景样本
b. 对a)剩余的anchor,如果其与某个标定重叠比例大于0.7,记为前景样本;如果其与任意一个标定的重叠比例都小于0.3,记为背景样本
c. 对a),b)剩余的anchor,弃去不用。
d. 跨越图像边界的anchor弃去不用
同时最小化两种代价:
a. 分类误差
b. 前景样本的窗口位置偏差
原始特征提取网络使用ImageNet的分类样本初始化,其余新增层随机初始化。
每个mini-batch包含从一张图像中提取的256个anchor,前景背景样本1:1.
前60K迭代,学习率0.001,后20K迭代,学习率0.0001。
momentum设置为0.9,weight decay设置为0.0005。[5]
区域生成网络(RPN)和fast RCNN都需要一个原始特征提取网络(下图灰色方框)。这个网络使用ImageNet的分类库得到初始参数 W0 ,但要如何精调参数,使其同时满足两方的需求呢?本文讲解了三种方法。
a. 从 W0 开始,训练RPN。用RPN提取训练集上的候选区域
b. 从 W0 开始,用候选区域训练Fast RCNN,参数记为 W1
c. 从 W1 开始,训练RPN…
具体操作时,仅执行两次迭代,并在训练时冻结了部分层。论文中的实验使用此方法。
如Ross Girshick在ICCV 15年的讲座Training R-CNNs of various velocities中所述,采用此方法没有什么根本原因,主要是因为”实现问题,以及截稿日期“。
直接在上图结构上训练。在backward计算梯度时,把提取的ROI区域当做固定值看待;在backward更新参数时,来自RPN和来自Fast RCNN的增量合并输入原始特征提取层。
此方法和前方法效果类似,但能将训练时间减少20%-25%。公布的python代码中包含此方法。
直接在上图结构上训练。但在backward计算梯度时,要考虑ROI区域的变化的影响。推导超出本文范畴,请参看15年NIP论文[6]。
除了开篇提到的基本性能外,还有一些值得注意的结论
与Selective Search方法(黑)相比,当每张图生成的候选区域从2000减少到300时,本文RPN方法(红蓝)的召回率下降不大。说明RPN方法的目的性更明确。
使用更大的Microsoft COCO库[7]训练,直接在PASCAL VOC上测试,准确率提升6%。说明faster RCNN迁移性良好,没有over fitting。