Faster R-CNN

Faster R-CNN网络结构

目标检测4 - Faster RCNN

Faster RCNN = Fast R-CNN + RPN

faster-rcnn的网络结构如图,可以把faster-rcnn分成三个部分,分别称之为1、2、3。

1和2构成了RPN网络结构,1和3(需要2的输出)构成了RCNN网络结构,1是公用的提取特征的部分。

Faster R-CNN测试流程

目标检测4 - Faster RCNN

  1. 首先向CNN网络(ZF或VGG-16)输入任意大小图片;
  2. 经过CNN网络前向传播至最后共享的卷积层,一方面得到供RPN网络输入的特征图,另一方面继续前向传播至特有卷积层,产生更高维特征图;
  3. 供RPN网络输入的特征图经过RPN网络得到区域建议框区域得分,并对区域得分采用非极大值抑制(阈值为0.7),输出其Top-N(文中为300)得分的区域建议给RoI池化层;
  4. 第2步得到的高维特征图和第3步输出的区域建议框同时输入RoI池化层,提取对应区域建议框的特征;
  5. 第4步得到的区域建议特征通过全连接层后,输出该区域的分类得分以及回归后的bounding-box。

区域建议网络(Region Proposal Network,RPN)

如何训练出一个网络来替代selective search相类似的功能呢?论文借鉴SPP和RoI中的思想:在feature map中提取proposal。 先通过对应关系把feature map的点映射回原图,在每一个对应的原图设计不同的固定尺度窗口(bbox),根据该窗口与ground truth的IoU给它正负标签,让它学习里面是否有object,这样就训练一个网络(Region Proposal Network)。

由于我们只需要找出大致的地方,无论是精确定位位置还是尺寸,后面的工作都可以完成,作者对bbox做了三个固定:固定尺度变化(三种尺度),固定scale ratio变化(三种ratio),固定采样方式(只在feature map的每个点在原图中的对应RoI上采样,反正后面的工作能进行调整) 。如此就可以降低任务复杂度。

可以在特征图上提取proposal之后,网络前面就可以共享卷积计算结果(SPP减少计算量的思想)。这个网络的结果就是卷积层的每个点都有有关于k个achor boxes的输出,包括是不是物体,调整box相应的位置。

作者观察发现:基于区域的检测器例如Fast R-CNN使用的卷积(conv)特征映射,同样可以用于生成区域建议。因此,RPN和检测网络可以共享全图的卷积特征,使得计算区域建议框几乎不花时间(例如每个图像10ms)。在这些卷积特征后面增加两个的额外的卷积层,因此RPN是一种全卷积网络,在每个位置同时预测目标边界和objectness得分。

RPN具体流程

  1. 图片在输入网络后,依次经过一系列conv+relu (直接套用ImageNet上常见的分类网络即可,论文实验了5层的ZF,16层的VGG-16)得到的feature map,额外添加一个conv+relu层,输出 5139256 维特征(feature)。准备后续用来选取proposal,并且此时坐标依然可以映射回原图。

目标检测4 - Faster RCNN
2. 之后以 n×n 大小的滑动窗口在步骤1产生的feature map上滑动扫描(代替了从原始图滑窗获取特征),sliding window的处理方式保证reg-layer和cls-layer关联了conv5-3的全部特征空间。

文中 n 的取值为3(论文中设计为3×3,n=3看起来很小,但是要考虑到这是非常高层的feature map,其size本身也没有多大,因此9个矩形中,每个矩形窗框的感受野都可以覆盖很大范围),取值与具体网络结构有关,感受野的不同导致候选框的初始大小不同;

每个滑窗位置通过卷积层1(intermediate layer)映射到一个低维的特征向量(ZF网络:256维;VGG-16网络:512维,低维是相对于特征图大小 W×H,一般为 60×40=2400)后采用 ReLU,每做一次滑动窗口会生成k个初始候选框,初始候选框的大小与anchor有关(超出边界的不考虑),中心点为滑动窗口中心点,即对一次滑动窗口行为,所有利用anchor生成的候选框都有相同的中心点(下图中蓝点),一定注意:这里的anchor及利用它生成的候选框都是相对于原图的位置,对于一个 W×H 的特征图,就会产生 W×H×k 个区域建议(即以每个像素点为中心做一次)。

这里的256-d是num_anchors,即特征图上所有anchor的个数:卷积层1通过 11 的窗口在特征图上滑过,生成了num_anchors数量的channel,每个channel包含特征图(w*h)个sigmoid**值,表明该anchor是否可用(rpn_cls)。同样的方法,得到anchor回归参数(rpn_regr)。

目标检测4 - Faster RCNN

注意:图中卷积层/全连接层表示卷积层或者全连接层,作者在论文中表示这两层实际上是全连接层,但是网络在所有滑窗位置共享全连接层,可以很自然地用n×n卷积核(论文中设计为3×3)跟随两个并行的1×1卷积核实现。

因为全连接层本来就是特殊的卷积层,如果产生256或512维的fc特征,事实上可以用Num_out=256/512, kernel_size=3x3, stride=1的卷积层实现conv5-3到第一个全连接特征的映射,然后再用两个Num_out分别为2x9=18和4x9=36,kernel_size=1x1,stride=1的卷积层实现上一层特征到两个分支cls层和reg层的特征映射。

采用卷积的方式实现全连接处理并不会减少参数的数量,但是使得输入图像的尺寸可以更加灵活。

  1. 步骤②中的低维特征向量输入两个并行连接的卷积层2:

    • 卷积层2是两个 1×1 的卷积,两个sibling的分支

      • 一个分支的输出通道是 4kk 是anchor的数目,一般为9),4对应输出的是矩形框的offset (x,y,w,h)

      • 另一个分支输出通道为 2k,2代表的是分类值——是不是一个物体,共k组

      注意这里是判断的是:是否为物体,并没有具体判断是哪类物体,所以这里还是有改进的空间(YOLO)

    • 然后cls layer 和reg layer后面都会接到自己的损失函数上,给出损失函数的值,同时会根据求导的结果,给出反向传播的数据

目标检测4 - Faster RCNN
RPN keras源码详解

Translation-Invariant Anchors

如下图示,RPN网络中对特征图滑窗时每个滑窗位置所对应的原图区域中9种可能的大小(这9个anchor的意思是conv5 feature map 3x3的滑窗对应原图区域的大小),可以把它理解为生成候选框的模板,对任意图像任意滑窗位置都是这9种模板(所以在RPN里只需计算一次)。继而根据图像大小计算滑窗中心点对应原图区域的中心点,通过中心点和size就可以得到滑窗位置和原图位置的映射关系(有了中心点对应关系和大小对应关系,映射就显而易见了),由此原图位置并根据与Ground Truth的IoU重叠率贴上正负标签,让RPN学习该Anchors是否有物体即可。

【一句话总结】把feature map上每个特征点映射回原图的感受野的中心点当成一个基准点,然后围绕这个基准点选取 k 个不同scale、aspect ratio的 anchor 。(类似SPP-Net将原图的SS proposal映射到feature map的逆操作)

对于一个sliding window,我们可以同时预测多个proposal,假定有 k 个。 k 个proposal即 k 个reference boxes,每一个reference box又可以用一个scale ,一个 aspect_ratio 和 sliding window中的中心点唯一确定。所以,我们在后面说一个anchor,你就理解成一个anchor box 或一个reference box。作者在论文中定义 k=9 ,即3种 scales 和3种 aspect_ratio 确定出当前sliding window位置处对应的9个reference boxes, 4k 个reg-layer的输出和 2k 个cls-layer的score输出。对于一幅 WH 的feature map,对应 WHk 个anchor。所有的anchor都具有尺度不变性。

Anchor的思想也可以从逆SPP角度去理解,SPP可以把一个feature map通过多尺度变换为金字塔式的多个feature map,反过来任何一个feature map也可利用多尺度变成多个feature map,这么做的好处是压根儿不用在原图上做各种尺度缩放而只用在feature map上做就好。

每一个像素位置上会出 k=9 个参考框,offset是对这9个框的位置偏移的校正:

  • 3个尺度(128, 256, 512)
  • 3个宽高比(1:1, 1:2, 2:1)
  • box中心和卷积核中心一致

目标检测4 - Faster RCNN

Anchor的数目

文中提到对于1000×600的一张图像,大约有20000(~60×40×9)个anchors,忽略超出边界的anchors剩下6000个anchors,利用非极大值抑制去掉重叠区域,剩2000个区域建议用于训练;
测试时在2000个区域建议中选择Top-N(文中为300)个区域建议用于Fast R-CNN检测。

Q1:Anchor的平移不变性?

作者在文中表示采用Anchors这种方法具有平移不变性,就是说在图像中平移了物体,窗口建议也会跟着平移。候选框生成及其预测函数具有可复现性,例如通过Multi-Box方法采用k-means聚类得到800个anchor,如果重复做一次实验不一定还是原来那800个。

同时这种方式也减少了整个模型的size,输出层 512×(4+2)×9=2.8×104 个参数(512是前一层特征维度(ZF Net), (4+2)×9 是9个Anchors的前景背景得分和平移缩放参数)。而 MultiBox有 1536×(4+1)×800=6.1×106 个参数,而较小的参数可以在小数据集上减少过拟合风险。

Q2:Anchor为什么考虑以上三种尺度和长宽比?

文中对Anchors的尺度以及长宽比选取进行了实验,如下图所示:

目标检测4 - Faster RCNN

实验是在VGG-16模型下,采用PASCAL VOC 2007训练集和PASCAL VOC 2007测试集得到。
相比于只采用单一尺度和长宽比,单尺度多长宽比和多尺度单长宽比都能提升mAP,表明多size的anchors可以提高mAP,作者在这里选取了最高mAP的3种尺度和3种长宽比。

Q3:Anchor如何处理多尺度多长宽比问题?

即如何使24×24和1080×720的车辆同时在一个训练好的网络中都能正确识别?

文中展示了两种解决多尺度多长宽比问题:

一种是使用图像金字塔,对伸缩到不同size的输入图像进行特征提取,虽然有效但是费时;

另一种是使用滤波器金字塔或者滑动窗口金字塔,对输入图像采用不同size的滤波器分别进行卷积操作,这两种方式都需要枚举图像或者滤波器size;作者提出了一种叫Anchors金字塔的方法来解决多尺度多长宽比的问题,在RPN网络中对特征图滑窗时,对滑窗位置中心进行多尺度多长宽比的采样,并对多尺度多长宽比的anchor boxes区域进行回归和分类,利用Anchors金字塔就仅仅依赖于单一尺度的图像和特征图和单一大小的卷积核,就可以解决多尺度多长宽比问题,这种对推荐区域采样的模型不管是速度还是准确率都能取得很好的性能。

Q4:同传统滑窗方法提取区域建议方法相比,RPN网络有什么优势?

传统方法是训练一个能检测物体的网络,然后对整张图片进行滑窗判断,由于无法判断区域建议的尺度和长宽比,所以需要多次缩放,这样找出一张图片有物体的区域就会很慢;
虽然RPN网络也是用滑动窗口策略,但是滑动窗口是在卷积层特征图上进行的,维度较原始图像降低了很多倍(中间进行了多次max pooling 操作),RPN采取了9种不同尺度不同长宽比的anchors,同时最后进行了bounding box回归,即使是这9种anchors外的区域也能得到一个跟目标比较接近的区域建议。

RPN层fine-tune训练

Anchor box正负样本划分

关于正负样本的划分: 考察训练集中的每张图像(含有人工标定的ground truth) 的所有anchor(NMk

  1. 对每个标定的ground truth box区域,与其重叠比例最大的anchor记为正样本 (保证每个ground truth 至少对应一个正样本anchor)

  2. 对①剩余的anchor,如果其与某个标定区域重叠比例大于0.7,记为正样本(每个ground true box可能会对应多个正样本anchor。但每个正样本anchor 只可能对应一个ground truth box);如果其与任意一个标定的重叠比例都小于0.3,记为负样本

RPN样本 来源
正样本 与Ground Truth相交IoU最大的anchors+与Ground Truth相交IoU>0.7的anchors
负样本 与Ground Truth相交IoU<0.3的anchors

3. 对①②剩余的anchor,弃去不用

  1. 超出图像边界的anchor,弃去不用,否则在训练过程中会产生较大难以处理的offset误差项,导致训练过程无法收敛;

    • 正样本仅表示前景,负样本仅表示背景;
    • 回归操作仅针对正样本进行;
    • 对去掉超出边界后的anchors集采用非极大值抑制,最终一张图有2000个anchors用于训练。
    • 对于ZF网络微调所有层,对VGG-16网络仅微调 conv3_1及conv3_1以上的层,以便节省内存。

SGD mini-batch采样方式

同Fast R-CNN网络,采取”image-centric”方式采样,即采用层次采样,先对图像取样,再对anchors取样,同一图像的anchors共享计算和内存。

文中提到如果每幅图的所有anchor都去参与优化loss function,那么最终会因为负样本过多导致最终得到的模型对正样本预测准确率很低。因此,在每幅图像中随机采样256个anchors去参与计算一次mini-batch的损失。正负比例1:1(如果正样本少于128则补充采样负样本)。

训练超参数

在PASCAL VOC数据集上前60k次迭代学习率为0.001,后20k次迭代学习率为0.0001;动量设置为0.9,权重衰减设置为0.0005。

RPN loss

一张图片多任务目标函数(分类损失+回归损失)具体如下:

L({pi},{ti})=1NclsiLcls(pi,pi)+λ1NregipiLreg(ti,ti)

其中,i 表示一个mini-batch中某个anchor的下标,pi 表示anchor i 预测为 物体 (cls)的概率;当anchor为正样本时,pi=1 ,当anchor为负样本时 pi=0 ,由此可以看出回归损失项仅在anchor为正样本情况下才被**;

ti 表示正样本anchor到预测区域的4个平移缩放参数(以anchor为基准的变换);ti 表示正样本anchor到Ground Truth的4个平移缩放参数(以anchor为基准的变换);

分类损失函数 Lcls 是一个二值(是物体或者不是物体)分类器:

Lcls(pipi)=log[pipi+(1pi)(1pi)]

回归损失函数 Lreg(ti,ti)=R(titi)(两种变换之差越小越好),R 函数定义如下:

smoothL1(x)={0.5x2,if |x|<1|x|0.5otherwise

λ 参数用来权衡分类损失 Lcls 和回归损失 Lreg,默认值 λ=10 (文中实验表明 λ 从1变化到100对mAP影响不超过1%)。NclsNreg 分别用来标准化分类损失项 Lcls 和回归损失项 Lreg,默认用mini-batch size=256设置 Ncls,用anchor位置数目~2400初始化 Nreg,这样cls和reg项差不多是等权重的。文中也说明标准化操作并不是必须的,可以简化省略。

RPN的bounding box回归

对于RPN的bounding box回归,采用以下公式:

tx=(xxa)/waty=(yya)/hatw=log(w/wa)th=log(h/ha)tx=(xxa)/waty=(yya)/hatw=log(w/wa)th=log(h/ha)

其中,x,y,w,h 表示窗口中心 (Fast R-CNN是左上角)坐标和窗口的宽度和高度,变量 x,xax 分别表示预测窗口、anchor窗口和Ground Truth的坐标(y,w,h 同理),因此这可以被认为是一个从anchor窗口到附近Ground Truth的bounding-box 回归;

RPN网络中bounding-box回归的实质其实就是计算出预测窗口。这里以anchor窗口为基准,计算Ground Truth对其的平移缩放变化参数 ti ,以及预测窗口(可能第一次迭代就是anchor)对其的平移缩放参数 ti ,因为是以anchor窗口为基准,所以只要使这两组参数越接近,以此构建目标函数求最小值,那预测窗口就越接近Ground Truth,达到回归的目的(This can be thought of as bounding-box regression from an anchor box to a nearby ground-truth box);

文中提到, Fast R-CNN中基于RoI的bounding-box回归所输入的特征是在特征图上对 任意 size的RoIs进行Pool操作提取的,所有size的RoI共享regression weights,而在Faster R-CNN中,用来bounding-box回归所输入的特征是在特征图上相同的spatial size(3×3)上提取的,为了解决不同尺度变化的问题,同时训练和学习了 k 个不同的回归器,每个回归器都对应一个 scaleaspect ratio,即 k 个regressor分别对应9个anchor。这 k 个回归器并不共享regression weights。因此尽管特征提取上空间是固定的(3×3),但由于anchors的设计,仍能够预测不同size的窗口。

RPN、Fast R-CNN联合训练(joint optimizing)

区域生成网络(RPN)和fast RCNN都需要一个原始特征提取网络(下图灰色方框)。这个网络使用ImageNet的分类库得到初始参数 W0 ,如何把这两者放在同一个网络结构中训练出一个共享卷积的Multi-task网络模型?目标检测4 - Faster RCNN

我们知道,如果是分别训练两种不同任务的网络模型,即使它们的结构、参数完全一致,但各自的卷积层内的卷积核也会向着不同的方向改变,导致无法共享网络权重,为了让两个网络共享卷积层,降低计算量,论文作者提出了三种可能的方式:

  1. Alternating training(交替训练):此方法其实就是一个不断迭代的训练过程,既然分别训练RPN和Fast-RCNN可能让网络朝不同的方向收敛,那么我们可以:

    • 先独立训练RPN,然后用这个RPN的网络权重对Fast-RCNN网络进行初始化并且用之前RPN输出proposal作为此时Fast-RCNN的输入训练Fast R-CNN。
    • 用Fast R-CNN的网络参数去初始化RPN。之后不断迭代这个过程,即循环训练RPN、Fast-RCNN。

    具体操作时,仅执行两次迭代,并在训练时冻结了部分层。论文中的实验使用此方法。

    目标检测4 - Faster RCNN

  2. Approximate joint training(近似联合训练):这里与前一种方法不同,不再是串行训练RPN和Fast-RCNN,而是尝试把二者融入到一个网络内,具体融合的网络结构如下图所示。可以看到,proposals是由中间的RPN层输出的,而不是从网络外部得到。

    需要注意的一点,名字中的”approximate”是因为backward阶段RPN产生的cls score能够获得梯度用以更新参数,但是proposal的reg score则直接把proposal的梯度舍弃了,这个设置可以使backward时该网络层能得到一个解析解(closed results),并且相对于Alternating traing减少了25-50%的训练时间,公开的python代码中使用这种方法。

    合并两个网络进行训练,前向计算产生的区域建议被固定以训练Fast R-CNN;反向计算到共享卷积层时RPN网络损失和Fast R-CNN网络损失叠加进行优化,但此时把区域建议【Fast R-CNN输入,需要计算梯度并更新】当成固定值看待,忽视了Fast R-CNN一个输入:区域建议的导数,则无法更新训练,所以称之为近似联合训练。

    目标检测4 - Faster RCNN

  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”,

Faster RCNN训练流程

网络结构示意图如下:

目标检测4 - Faster RCNN

作者为了让RPN的网络和Fast R-CNN网络实现卷积层的权值共享采用了两组训练交替优化学习至共享特征:12步是无卷积层共享的训练,34步是卷积层共享的训练。

  1. 训练RPN网络
    • 使用ImageNet预训练模型权重初始化RPN,并fine-tune一个以区域建议为目的的RPN网络(end-to-end)
  2. 训练Fast R-CNN
    • 用ImageNet上pre-train的CNN的模型参数初始化Fast R-CNN
    • 将由第1步训练好的RPN生成的区域建议(proposal)作为输入训练独立的Fast R-CNN模型(无共享卷积层)
  3. fine-tune RPN
    • 用第2步训练好的Fast R-CNN的参数重新初始化RPN
    • 设置RPN、Fast-RCNN共享的那部分网络权重不做更新(固定卷积层,即设置学习率为0,不更新),只fine-tune训练RPN独有的网络层(剩余卷积层),达到两者共享用于提取特征的卷积层的目的
  4. fine-tune Fast R-CNN
    • 固定第3步中的共享卷积层的权重,利用由第3步训练好的RPN生成的区域建议,只训练Fast-RCNN独有的网络层

代码讲解

FASTER RCNN原理分析(四):FASTER RCNN训练过程

Faster R-CNN实验

  1. PASCAL VOC实验【使用ZF网络】
属性 数目
目标类别 20
PASCAL VOC 2007训练集 5k
PASCAL VOC 2007测试集 5k

- 第1组实验

目的:验证RPN方法的有效性;
做法:ZF检测网络训练和测试时分别使用Selective Search、EdgeBoxes和RPN+ZF(共享)方法,Selective Search、EdgeBoxes测试时使用2000窗口建议,RPN+ZF测试时采用300窗口建议;
结果:RPN+ZF方法获得59.9%的mAP,由于卷积层共享并且只有300个候选窗口,RPN+ZF方法检测速度更快;

  • 第2组实验

    目的:验证RPN和ZF检测网络共享卷积层的影响;
    做法:在之前所述4步训练算法进行到第2步后停止;
    结果:未实现卷积层共享的RPN+ZF的方法获得58.7%的mAP,这由于4步训练算法的第3步使用了微调后检测器特征来微调RPN网络,使得建议窗口质量得到提高;

  • 第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,说明非极大值抑制并未损坏精度,反而可能减少了误报;

  • 第4组实验

    目的:验证RPN网络cls窗口分类层影响;
    做法:使用Selective Search方法训练检测网络ZF并固定不变【RPN与ZF没有共享卷积层】,移除RPN网络中cls窗口分类层【缺少分数就没有了非极大值抑制和Top排名】,从未评分的窗口建议中随机采用N个 ;
    结果:N=1000时,mAP为55.8%影响不大,但N=100时mAP为44.6%,说明cls窗口分类层的评分准确度高,影响检测结果精度;

  • 第5组实验

    目的:验证RPN网络reg窗口回归层影响;
    做法:使用Selective Search方法训练检测网络ZF并固定不变【RPN与ZF没有共享卷积层】,移除RPN网络reg窗口回归层【候选区域直接变成没有回归的anchor boxes】;
    结果:选择Top-300进行实验,mAP掉到了52.1%,说明窗口回归提高了区域建议的质量,虽然说anchor boxes能应对不同尺度和宽高比,但是对于精确检测远远不够;

  • 第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并共享卷积层会如何呢?结果见下。

    1. RPN网络和检测网络同时采用VGG-16并共享卷积层,在PASCAL VOC 2007训练集上训练,测试集上获得69.9%的mAP;在联合数据集如PASCAL VOC 2007和2012训练集上训练RPN网络和检测网络,PASCAL VOC 2007测试集上mAP会更高。

    2. 对于检测速度而言,采用ZF模型,可以达到17fps;采用VGG-16模型,可以达到5fps,由于卷积共享,RPN网络仅仅花10ms计算额外的层,而且,由于仅仅选取Top-N(文中为300)进行检测,检测网络中的非极大值抑制、池化、全连接以及softmax层花费时间是极短的。

    3. 召回率分析。所谓召回率即区域建议网络找出的为真的窗口与Ground Truth的比值【IoU大于阈值即为真】,文中实验表明Selective Search、EdgeBoxes方法从Top-2000、Top-1000到Top-300的召回率下降明显,区域建议越少下降越明显,而RPN网络召回率下降很少,说明RPN网络Top-300区域建议已经同Ground Truth相差无己,目的性更明确。

    4. 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,在三种尺度三种长宽比基础上增加了 642的尺度,这是为了处理Microsoft COCO数据集上的小目标(新数据集上不直接套用这一点值得学习);
增加定义负样本IoU,重叠阈值由[0.1,0.5) 到[0,0.5),这能提升COOC数据集上mAP;
使用COCO训练集训练,COCO测试集上获得42.1%的mAP @0.5 和21.5%的mAP @[.5,.95]。

  1. 与VGG-16相比,利用ResNet-101网络,在COCO验证集上mAP从41.5%/21.2%(@0.5/@[.5,.95])变化到48.4%/27.2%,归功于RPN网络可以从更好的特征提取网络中学到更好的区域建议。

  2. 由于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。