Fast-RCNN基本实现端对端(除了proposal阶段外),下一步自然就是要把proposal阶段也用CNN实现(放到GPU上)。这就出现了Faster-RCNN,一个完全end-to-end的CNN对象检测模型。
本文是继RCNN,fast RCNN之后,目标检测界的领军人物Ross Girshick团队在2015年的又一力作。简单网络目标检测速度达到17fps,在PASCAL VOC上准确率为59.9%;复杂网络达到5fps,准确率78.8%。
作者在github上给出了基于matlab和python的源码。
本文参考网络博客及论文资料(详见:参考)对Faster RCNN算法架构进行梳理,并对其中的关键点进行解析,留作笔记并拿来共享。
1.基本思想、算法架构及其创新点
基本思想:
网络中的各个卷积层特征(feature map)也可以用来预测类别相关的region proposal(不需要事先执行诸如selective search之类的算法),但是如果简单的在前面增加一个专门提取proposal的网络又显得不够优雅,所以最终把region proposal提取和Fast-RCNN部分融合进了一个网络模型 (区域生成网络 RPN层),虽然训练阶段仍然要分多步,但是检测阶段非常方便快捷,准确率也与原来的Fast-RCNN相差不多,从此,再也不用担心region proposal提取耗时比实际对象检测还多这种尴尬场景了。
(faster RCNN可以大致看做“区域生成网络RPN+fast RCNN”的系统,用区域生成网络代替fast RCNN中的Selective Search方法)
注意:上图Fast R-CNN中含特有卷积层,不是所有卷积层都参与共享。
首先向CNN网络【ZF或VGG-16】输入任意大小图片;
经过CNN网络前向传播至最后共享的卷积层,一方面得到供RPN网络输入的特征图,另一方面继续前向传播至特有卷积层,产生更高维特征图;
供RPN网络输入的特征图经过RPN网络得到区域建议和区域得分,并对区域得分采用非极大值抑制【阈值为0.7】,输出其Top-N【文中为300】得分的区域建议给RoI池化层;
第2步得到的高维特征图和第3步输出的区域建议同时输入RoI池化层,提取对应区域建议的特征;
第4步得到的区域建议特征通过全连接层后,输出该区域的分类得分以及回归后的bounding-box。
从RCNN到fast RCNN,再到本文的faster RCNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。所有计算没有重复,完全在GPU中完成,大大提高了运行速度。
算法架构:
创新点:
设计Region Proposal Networks【RPN】,利用CNN卷积操作后的特征图生成region proposals,代替了Selective Search、EdgeBoxes等方法,速度上提升明显;
训练Region Proposal Networks与检测网络【Fast R-CNN】共享卷积层,大幅提高网络的检测速度。
关键点:区域建议网络(Region Proposal Network, RPN)
RPN和检测网络共享全图的卷积特征,使得计算区域建议框几乎不花时间(例如每个图像10ms)。
- RPN是一个全卷积网络,在每个位置同时预测目标边界和objectness得分。
- RPN是端到端训练的,生成高质量区域建议框,用于Fast R-CNN来检测。
- 通过一种简单的交替运行优化方法,RPN和Fast R-CNN可以在训练时共享卷积特征。
2.区域推荐网络RPN
2.1RPN结构
单个RPN网络结构如下图:注意:上图中卷积层/全连接层表示卷积层或者全连接层,作者在论文中表示这两层实际上是全连接层,但是网络在所有滑窗位置共享全连接层,可以很自然地用n×n卷积核【论文中设计为3×3】跟随两个并行的1×1卷积核实现。
如何训练出一个网络来替代selective search相类似的功能呢?论文借鉴SPP和ROI中的思想 在feature map中提取proposal。 先通过对应关系把feature map的点映射回原图,在每一个对应的原图设计不同的固定尺度窗口(bbox),根据该窗口与ground truth的IOU给它正负标签,让它学习里面是否有object,这样就训练一个网络(Region Proposal Network)。
由于我们只需要找出大致的地方,无论是精确定位位置还是尺寸,后面的工作都可以完成,作者对bbox做了三个固定:固定尺度变化(三种尺度),固定scale ratio变化(三种ratio),固定采样方式(只在feature map的每个点在原图中的对应ROI上采样,反正后面的工作能进行调整) 。如此就可以降低任务复杂度。
原始特征提取(下图灰色方框)包含若干层conv+relu,直接套用ImageNet上常见的分类网络即可。本文试验了两种网络:5层的ZF,16层的VGG-16,具体结构不再赘述。
额外添加一个conv+relu层,输出51*39*256维特征(feature)。
可以在特征图上提取proposal之后,网络前面就可以共享卷积计算结果(SPP减少计算量的思想)。这个网络的结果就是卷积层的每个点都有有关于k个achor boxes的输出,包括是不是物体,调整box相应的位置。
2.2RPN功能及具体实现
功能:
实现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个区域建议为前景或者背景的概率。
2.3Anchors定义及其作用
Anchors是一组大小固定的参考窗口:三种尺度{128^2,256^2,512^2}×三种长宽比{1:1,1:2,2:1},如下图所示,表示RPN网络中对特征图滑窗时每个滑窗位置所对应的原图区域中9种可能的大小,相当于模板,对任意图像任意滑窗位置都是这9中模板。继而根据图像大小计算滑窗中心点对应原图区域的中心点,通过中心点和size就可以得到滑窗位置和原图位置的映射关系,由此原图位置并根据与Ground Truth重复率贴上正负标签,让RPN学习该Anchors是否有物体即可。下图示出51*39个anchor中心,以及9种anchor示例。
关于anchor的问题,这里在详细解释一下:
- 首先按照尺度和长宽比生成9种anchor,这9个anchor的意思是conv5 feature map 3x3的滑窗对应原图区域的大小.这9个anchor对于任意输入的图像都是一样的,所以只需要计算一次. 既然大小对应关系有了,下一步就是中心点对应关系。
- 对于每张输入图像,根据图像大小计算conv5 3x3滑窗对应原图的中心点. 有了中心点对应关系和大小对应关系,映射就显而易见了.
下图显示anchor的作用:直接根据滑动窗口换算回原图存在一个 bug。试想一下,如果 ground truth 只占这个滑动窗口的一部分(也就是说二者的 IoU 不满足筛选条件),但这一部分又刚好是物体的重要部位,那我们应该认为这个窗口有物体还是没物体呢?anchor多尺度和多长宽比解决了这个问题。
需要注意的是: 在整个faster RCNN算法中,有三种尺度。
- 原图尺度:原始输入的大小。不受任何限制,不影响性能。
- 归一化尺度:输入特征提取网络的大小,在测试时设置,源码中opts.test_scale=600。anchor在这个尺度上设定。这个参数和anchor的相对大小决定了想要检测的目标范围。
- 网络输入尺度:输入特征检测网络的大小,在训练时设置,源码中为224*224。
作者在文中表示采用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%概率】,还不如用深度网络【还可以实现卷积共享】,固定尺度变化,固定长宽比变化,固定采样方式来大致判断是否是物体以及所对应的位置并降低任务复杂度。
2.4 Proposal
该步骤用于获取最后的候选框(Proposal),形如[y1,x1,y2,x2]。
使用通过anchors机制获取的,和通过RPN网络获取的rpn_probs[bg_prob,fg_prob]、rpn_bbox[dy,dx,log(dh),log(dw)]作为输入数据,获取最终的候选框,但求得的候选框会超过2万+,可以通过以下三种方式将候选框的数量固定在一定范围。
1)top-N
rpn_probs用于标记某个候选框为前景和背景的概率值,通过top-N可以筛选出概率最后的前N个候选框。
2)去掉超出图片范围候选框
3)非极大值抑制(NMS算法)
如上图(左)中,虽然几个框都检测到了人脸,但是我不需要这么多的框,我需要找到一个最能表达人脸的框。通过NMS算法能够实现。
先假设有6个矩形框,根据分类器类别分类概率做排序,从小到大分别属于人脸的概率分别为A、B、C、D、E、F。
①从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;
②假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的
③从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。
④就这样一直重复,找到所有被保留下来的矩形框。
2.5 正负样本的划分
关于正负样本的划分: 考察训练集中的每张图像(含有人工标定的ground true box) 的所有anchor(N*M*k)
a. 对每个标定的ground true box区域,与其重叠比例最大的anchor记为正样本 (保证每个ground true 至少对应一个正样本anchor)b. 对a)剩余的anchor,如果其与某个标定区域重叠比例大于0.7,记为正样本(每个ground true box可能会对应多个正样本anchor。但每个正样本anchor 只可能对应一个grand true box);如果其与任意一个标定的重叠比例都小于0.3,记为负样本。
2.6 窗口分类和位置精修
分类层(cls_score)输出每一个位置上,9个anchor属于前景和背景的概率;窗口回归层(bbox_pred)输出每一个位置上,9个anchor对应窗口应该平移缩放的参数。
对于每一个位置来说:
- 分类层从256维特征中输出属于前景和背景的概率;
- 窗口回归层从256维特征中输出4个平移缩放参数。
需要注意的是:并没有显式地提取任何候选窗口,完全使用网络自身完成判断和修正。
2.7 损失函数
遵循Fast R-CNN中的多任务损失,最小化目标函数。对一个图像的损失函数定义为
说明:
(1)i 是一个mini-batch中anchor的索引,Pi表示anchor i是目标的预测概率。如果anchor为正,GT标签 Pi* 就是1,如果anchor为负,Pi* 就是0(由此可以看出回归损失项仅在anchor为正样本情况下才被**)。
(2)ti 是一个向量,表示正样本anchor到预测区域的4个平移缩放参数【以anchor为基准的变换】,ti* 表示正样本anchor到Ground Truth的4个平移缩放参数【以anchor为基准的变换】。
(3)分类损失 Lcls 是两个类别(目标vs.非目标)的对数损失(二值【是物体或者不是物体】分类器):
(4)回归损失函数Lreg:
其中R是鲁棒的损失函数(smooth L1):
(5)Pi* Lreg这一项意味着只有正anchor(Pi* =1)才有回归损失,其他情况就没有(Pi* =0)。
(6)cls层和reg层的输出分别由{pi}和{ti}组成,这两项分别由 Ncls 和 Nreg 以及一个平衡权重 λ 归一化 (早期实现及公开的代码中,λ=10,cls项的归一化值为mini-batch的大小,即Ncls=256,reg项的归一化值为anchor位置的数量,即Nreg~2,400,这样cls和reg项差不多是等权重的。)
(7)对于回归,采用4个坐标:
x,y,w,h指的是包围盒中心的(x, y)坐标、宽、高。变量x,xa,x*分别指预测的包围盒、anchor的包围盒、GT的包围盒(对y,w,h也是一样)的x坐标。可以理解为从anchor包围盒到附近的GT包围盒的包围盒回归。
RPN网络中bounding-box回归的实质其实就是计算出预测窗口。这里以anchor窗口为基准,计算Ground Truth对其的平移缩放变化参数,以及预测窗口【可能第一次迭代就是anchor】对其的平移缩放参数,因为是以anchor窗口为基准,所以只要使这两组参数越接近,以此构建目标函数求最小值,那预测窗口就越接近Ground Truth,达到回归的目的。
与Fast RCNN的区别:
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的窗口。
3.训练过程
3.1Sharing Features for RPN and Fast R-CNN
前面已经讨论如何训练提取proposal的RPN,分类采用Fast R-CNN。如何把这两者放在同一个网络结构中训练出一个共享卷积的Multi-task网络模型。我们知道,如果是分别训练两种不同任务的网络模型,即使它们的结构、参数完全一致,但各自的卷积层内的卷积核也会向着不同的方向改变,导致无法共享网络权重,论文作者提出了三种可能的方式:
(1)Alternating training:此方法其实就是一个不断迭代的训练过程,既然分别训练RPN和Fast-RCNN可能让网络朝不同的方向收敛。a)那么我们可以先独立训练RPN,然后用这个RPN的网络权重对Fast-RCNN网络进行初始化,并且用之前RPN输出proposal作为此时Fast-RCNN的输入,训练Fast R-CNN。
b) 用Fast R-CNN的网络参数去初始化RPN。之后不断迭代这个过程,即循环训练RPN、Fast-RCNN。
(2)Approximate joint training:这里与前一种方法不同,不再是串行训练RPN和Fast-RCNN,而是尝试把二者融入到一个网络内,具体融合的网络结构如下图所示。可以看到,proposals是由中间的RPN层输出的,而不是从网络外部得到。需要注意的一点,名字中的"approximate"是因为反向传播阶段RPN产生的cls score能够获得梯度用以更新参数,但是proposal的坐标预测则直接把梯度舍弃了,这个设置可以使backward时该网络层能得到一个解析解(closed results),并且相对于Alternating traing减少了25-50%的训练时间。
(3)Non-approximate training:上面的Approximate joint training把proposal的坐标预测梯度直接舍弃,所以被称作approximate,那么理论上如果不舍弃是不是能更好的提升RPN部分网络的性能呢?作者把这种训练方式称为“ Non-approximate joint training”,但是此方法在paper中只是一笔带过,表示“This is a nontrivial problem and a solution can be given by an “RoI warping” layer as developed in [15], which is beyond the scope of this paper”.
3.2 训练过程:4-Step Alternating Training
上面说完了三种可能的训练方法,可非常神奇的是作者发布的源代码里却用了另外一种叫做4-Step Alternating Training的方法,思路和迭代的Alternating training有点类似,但是细节有点差别:
- 第一步:用ImageNet模型初始化,独立训练一个RPN网络;
- 第二步:仍然用ImageNet模型初始化,但是使用第一步RPN网络产生的proposal作为输入,训练一个Fast-RCNN网络,至此,两个网络每一层的参数完全不共享;
- 第三步:使用第二步的Fast-RCNN网络参数初始化一个新的RPN网络,但是把RPN、Fast-RCNN共享的那些卷积层的learning rate设置为0,也就是不更新,仅仅更新RPN特有的那些网络层,重新训练,此时,两个网络已经共享了所有公共的卷积层;
- 第四步:仍然固定共享的那些网络层,把Fast-RCNN特有的网络层也加入进来,形成一个unified network,继续训练,fine tune Fast-RCNN特有的网络层。此时,该网络已经实现我们设想的目标,即网络内部预测proposal并实现检测的功能。
四个过程具体来讲:
(1)RPN网络预训练
| 样本 | 来源 |
| 正样本 | ILSVRC20XX |
| 负样本 | ILSVRC20XX |
文中一带而过RPN网络被ImageNet网络【ZF或VGG-16】进行了有监督预训练,利用其训练好的网络参数初始化;
用标准差0.01均值为0的高斯分布对新增的层随机初始化。
| 样本 | 来源 |
| 正样本 | ILSVRC20XX |
| 负样本 | ILSVRC20XX |
文中一带而过Fast R-CNN网络被ImageNet网络【ZF或VGG-16】进行了有监督预训练,利用其训练好的网络参数初始化。
(3) RPN网络微调训练
| RPN网络样本 | 来源 |
| 正样本 | 与Ground Truth相交IoU最大的anchors【以防后一种方式下没有正样本】+与Ground Truth相交IoU>0.7的anchors |
| 负样本 | 与Ground Truth相交IoU<0.3的anchors |
正样本仅表示前景,负样本仅表示背景;
回归操作仅针对正样本进行;
训练时弃用所有超出图像边界的anchors,否则在训练过程中会产生较大难以处理的修正误差项,导致训练过程无法收敛;
对去掉超出边界后的anchors集采用非极大值抑制,最终一张图有2000个anchors用于训练;
对于ZF网络微调所有层,对VGG-16网络仅微调conv3_1及conv3_1以上的层,以便节省内存。
(4)Fast R-CNN网络微调训练
| Fast R-CNN网络样本 | 来源 |
| 正样本 | Ground Truth +与Ground Truth相交IoU>阈值的区域建议 |
| 负样本 | 与Ground Truth相交IoU<阈值的区域建议 |
正样本表示每类物品的Ground Truth以及与Ground Truth重叠度超过某一阈值的区域建议,负样本表示同Ground Truth重叠度小于某一阈值的区域建议;
回归操作仅针对正样本进行。
4.实验结果
作者进行了多组对比实验,现总结如下:
-
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. 验证大数据量下训练是否有助于提高mAP
由于Microsoft COCO数据集种类包含PASCAL VOC数据集种类,文中在Microsoft COCO数据集上训练,在PASCAL VOC数据集上测试。
采用VGG-16模型,当仅仅利用Microsoft COCO数据集训练时,PASCAL VOC 2007测试集上mAP达到76.1%【泛化能力强,未过拟合】;
当利用Microsoft COCO数据集训练的模型初始化,PASCAL VOC 2007+2012训练集进行微调,PASCAL VOC 2007测试集上mAP达到78.8%,此时每一个单体类别的AP较其它样本训练的都达到最高,而每张图测试时间仍然约为200ms。
5.几个问题
1)理清文中anchors的数目。
文中提到对于1000×600的一张图像,大约有20000(~60×40×9)个anchors,忽略超出边界的anchors剩下6000个anchors,利用非极大值抑制去掉重叠区域,剩2000个区域建议用于训练。
测试时在2000个区域建议中选择Top-N【文中为300】个区域建议用于Fast R-CNN检测。
2)为什么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))
6.展望
采用VGG-16模型,可以达到5fps,这个速度并没有完全达到实时性,还有继续提升的空间,这将在YOLO模型中得以改进。
参考:
1.Faster R-CNN
https://zhuanlan.zhihu.com/p/24916624
2.【目标检测】Faster RCNN算法详解
https://blog.csdn.net/shenxiaolu1984/article/details/51152614
3.RCNN学习笔记(3):《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》
https://blog.csdn.net/wonder233/article/details/53837680
4.Faster R-CNN论文详解
https://blog.csdn.net/wopawn/article/details/52223282
5.RCNN学习笔记(5):faster rcnn
https://blog.csdn.net/u011534057/article/details/51247371
6.RCNN学习笔记(7):Faster R-CNN 英文论文翻译笔记
https://blog.csdn.net/u011534057/article/details/51259812
7.论文笔记:Fast(er) RCNN
http://jermmy.xyz/2018/01/15/2018-1-15-paper-notes-fast-er-rcnn/