【目标检测/分割】Faster R-CNN NIPS'15/CVPR'16

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

作者:Shaoqing RenKaiming HeRoss GirshickJian Sun

故事:

    此前一段时间目标检测的发展得益于候选区域算法和R-CNN方法,且R-CNN的方法在Fast R-CNN等共享计算方法出现后,计算成本大幅下降。但候选区域算法还是耗费了大量计算资源。传统的候选框的方法,使用图像低级特征,计算量大,即使用GPU进行工程实现加速,但共享计算这一有利思想没有得到利用。

    本文提出Region Proposal Networks,在已训练好的卷积层后增加一些卷积层构建RPN网络,在固定网格中回归区域框和物体置信度。使测试时间降到10ms/张。

    本文还引入了anchor框方法作为多尺度和纵横比参照。他人的相似工作包括需要迭代操作的图像金字塔或滤波器金字塔。

    训练时,轮换微调目标检测任务和候选区域任务,最后只得到一个网络。

相关工作:

1. 传统object proposal大致分为聚合超像素(SS和CPMC都属于这一类,CPMC曾在R-CNN文章中用于分割任务的候选区域),或滑动窗口。传统的object proposal方法独立于检测器。

2. 深度神经网络在目标检测中的应用。

    R-CNN中深度网络主要被用作分类器,并在refine边界框时提供特征。该时期也有一些文章用深度网络来预测目标框。但这些方法,仅用于为后续的分类网络提供目标框,没有在object proposal网络和检测网络间共享权值。

    OverFeat方法中假设图中只有一个目标,使用全连接层预测框坐标。而后将全连接层改进为卷积层检测多个不同类别的目标。MultiBox方法中网络的最后一层同时预测多个无类别差别的框,是OverFeat的一种扩展。DeepMask方法为分割任务提供proposal。

3. 卷积网络的共享计算

    OverFeat利用图像金字塔计算卷积特征用于分类、定位和检测。SPP使用自适应大小的池化在共享的卷积特征图上做目标检测和分割。Fast R-CNN在共享卷积特征上训练目标检测器。

算法模型:

    Faster R-CNN网络主要分为两个部分,一部分是提供候选框的卷积网络,另一部分是一个Fast R-CNN检测器,两部分有机结合为一个统一的网络。

RPN网络结构示意图
RPN网络结构示意图

1. Region Proposal Networks

(1)结构:

    RPN网络实际上是在原Fast R-CNN结构上附加的一个分支网络,其输入为backbone最高卷积层的feature map,其输出为框的坐标和置信度。需要注意的是,该框坐标并非绝对值,而是在预设的k个不同大小的anchor box的框坐标的基础上的regression。为了达到减少参数、防止过拟合的目的,RPN网络的输入部分采用了一个n×n的滑动窗口在上一feature map上分次取特征值,对每个滑动窗口位置,预测k组框属性。对于一个W×H大小的feature map,共有W×H×k个anchor。框属性中包括4个坐标属性和2个置信度表征(softmax分两类,也可以用logistic regression)。如此一来,测试时RPN网络的输入为 n×n×#上一feature map的通道数 ,输出为#上一层通道数×(4+2)×k

    实现时,RPN网络的构成为一层卷积层,两个并行的全连接层分别输出框属性reg和置信度属性cls,输出维度为6k,代表k个anchor分别对应的4个框属性和2个置信度表征。

    本文中n=3,k=9。

    与本文同期的MultiBox方法并未采用滑动窗口在每个位置预测k个框,而是用k-means聚类得到了800个框,该方法参数量较大。

(2)数据集的构建:

    选择与真框IoU大于0.7的anchor box或与真框IoU最高的anchor box作为正例通常第一个条件足以得到一个正例,但少数情况下需要第二个条件才能得到一个对应的正例。此时每个真框可能对应着多个正例。选择与真框IoU小于0.3的anchor box作为负例。其他anchors不用于构建数据集。

(3)损失函数:

    L({p_i}, {t_i})=\frac{1}{N_{cls}}\sum_{i}L_{cls}(p_i, p_i^*)+\lambda \frac{1}{N_{reg}} \sum_{i} p_i^* L_{reg} (t_i, t_i^*)

    其中i代表mini-batch中的第i个候选anchor,左上角带*代表gound truth,p标量代表置信度,t向量代表四个框属性。

    L_{cls}是log loss,L_{reg}是Fast R-CNN中定义的smooth L1损失。注意到只有正例anchor会传回框损失。

    N_{cls}N_{reg}\lambda为归一化系数,使得置信度和框位置损失被相同程度地惩罚。但后面的实验证明该系数的选择比较宽松。

   对于t向量中的4个框属性,这样做使输出值大致介于(0,1)内:

    t_{x}=(x-x_{a})/w_{a}t_y=(y-y_a)/h_at_w=log(w/w_a)t_h=log(h/h_a)

    t_x^*=(x^*-x_a)/w_at_y^*=(y^*-y_a)/h_at_w^*=log(w^*/w_a)t_h^*=log(h^*/h_a)

    其中,x, y代表框的中心坐标,w, h分别代表框的宽和高。

(4)不同于Fast R-CNN中的RoI Pooling对给出的proposal的regression

    Fast中的RoI Pooling是在feature map上任意尺寸大小区域的pooling,用于regression的全连接网络在所有尺寸的框预测中被共享。而Faster中设计了anchor,RPN是在固定尺寸的feature map的各个子区域上分别对各种尺寸的anchor进行regression,各个尺度的框之间权值不共享。

    此处可以设计面试问题:Fast R-CNN中的RoI Pooling和Faster R-CNN中的RPN都是对给定的框进行回归,两者的区别在哪里?

    回答要点:(1)候选框的来源不同,一个是独立的目标框算法,一个是聚类得到的anchor;(2)RPN采用滑动窗口,有固定大小的feature map子区域,而Fast R-CNN中的RoI Pooling对任意大小的feature map子区域进行pooling;(3)RPN有k组输出,RoI Pooling只有1组输出,其本质是,前者对不同尺度的目标不共享权重,后者对不同尺度的目标共享权重。

(5)训练细节:

    mini-batch的构建,延续Fast R-CNN中的image-centric方法,每个mini-batch中是一幅图像的多个有标记anchor。本文中一个mini-batch包含256个有标记anchor,随机挑选正例128个,负例128个;如果正例不够128个,则用负例padding到总数为256个。

    本文使用caffe框架实现。backbone使用ImageNet预训练的权重,后续的检测层使用N(0, 0.01)的高斯分布初始化。ZF net的所有层均被fine tune,VGG的cnv3_1及以上均被fine tune。

    学习率:前60k个mini-batch学习率为0.001,后20k个mini-batch学习率为0.0001.

    优化器:momentum=0.9,weight_decay=0.0005。

2. 联合训练RPN和后续的detection网络,得到共享的backbone权重。

    本文提出三种实现方式:第一种迭代优化RPN和Fast R-CNN网络;第二种近似联合训练,同时使用两个分支的损失,在前面的卷积层“combine”起来然后back propogate。第三种是非近似的联合训练,直接引用了其他论文的方法。第二种称为严格来说,这种联合训练还需要用后面分类层传过来的损失去优化RPN网络。

3. 四步法训练:

(1)用ImageNet预训练好的权重初始化卷积层,训练RPN网络,此前的卷积层随RPN一起被finetune。

(2)用ImageNet预训练好的权重初始化detection网络,使用(1)中训练出的RPN生成的候选RoI训练分类层。

(3)使用(2)中的网络参数来初始化共享的卷积层并冻结,用detector tuned features微调只与RPN网络有关的层。

(4)依然使用(2)中的网络参数初始化共享的卷积层并冻结,冻结RPN网络的层,训练detection网络。

4. 实现细节:

(1)输入图像短边s=600,未使用多尺度特征提取,因为speed-accuracy trade-off不好。

(2)最后一个卷积层的total stride=16

(3)anchors使用3种scale×3种aspect ratio,训练好后,初始anchor的平均size有所改变。

(4)超出图像边界的边框在训练时被忽略(不回传loss),测试时被clip到图像边界。

(5)延续使用NMS抑制重复框,NMS后使用置信度Top-N的ROI进行detection。训练时用2000个RPN proposal,测试时使用300个。

 

实验设计:

1. 采用不同的ROI proposal方法,检测部分采用Fast R-CNN。

2. 针对RPN设计剥离实验。

(1)RPN和Fast R-CNN不共用卷积基,但Fast R-CNN在RPN生成的proposal上进行训练。

(2)RPN和Fast R-CNN不共用卷积基,且Fast R-CNN在SS生成的proposal上进行训练。

   以上两个实验结果对比发现RPN作为ROI proposal算法不非常好于SS。

(3)cls和reg的作用:在测试时去掉cls,则只剩下无评分的一系列候选框,随机选择N个ROI proposal进行检测,此时小N会造成mAP的大幅下降。在测试时去掉reg,发现mAP没掉多少,说明检测网络中对边框的regression非常重要。

(4)更强大的卷积基,使得RPN+VGG比SS性能更好。

3. 对超参数的敏感度。

(1)anchor参数的设定,不非常敏感。

(2)公式(1)中\lambda的设定,不敏感。

4. Recall-to-IoU曲线。

    Recall-to-IoU曲线与任务的优化目标是松弛相关的,应作为对模型的diagnose而非评估。

    RPN网络的cls输出使得在RPN的proposal较少时模型效果下降更少。

5. 一步法vs两步法——OverFeat vs. Faster R-CNN

(1)滑动窗口的输出

    OverFeat中从多尺度的特征图中使用滑动窗口法得到region-wise特征。region-wise的特征被同时用于分类和定位。

    Faster R-CNN中region-wise的特征来自滑动窗口,定位是设置的anchor的函数。

    作者认为Faster R-CNN中的RoI pooling得到的特征能够提供更准确的检测性能。

(2)Faster R-CNN模拟one stage

    改动:在五个尺度上用滑动窗口提取各anchor size的特征。原来RPN的cls、reg输出改为直接输出类别和reg。mAP下降了5%。

    结论:目标检测中级联的特征proposal方式更有效。

(3)速度:RPN首先对proposals进行了筛选,第二部中需要处理的proposals更少。

6. MS COCO数据集上的实验。

    由于MS COCO相对于PASCAL,数据集更大,类别更多,而且有更多的小物体。作者在训练时对模型和数据集构建改动如下:

    使用8-GPU,RPN的batch为8,Fast R-CNN的batch为16。batch改变后,初始学习率从0.00调整到0.003,80k轮后学习率为0.0003。anchor设置为3种纵横比、4种尺度,增加对小目标的考量。负例IoU改为[0, 0.5),而非Fast中的[0.1, 0.5),加上后mAP提高了0.5。

7. 更深的网络,更好的结果。

8. 在更大的检测数据集上训练得到的模型fine tune到较小数据集上,会比在小数据集上训练得到更好的效果。显示出这种方法在预训练模型上的潜在意义。

 

    

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值