Faster RCNN 学习与研究

22 篇文章 0 订阅
7 篇文章 0 订阅

Faster RCNN

一些术语翻译:

region proposal:区域候选框

region:

proposal:

bounding box:


相关参考文献:

1、https://blog.csdn.net/shenxiaolu1984/article/details/51152614

2、 https://blog.csdn.net/sloanqin/article/details/51545125

3、http://www.360doc.com/content/17/0809/10/10408243_677742029.shtml#


综述

Faster rcnn第一次完成了目标检测的端到端训练,将region proposal 和 object detection结合到一起。

在这以前,rcnn通过selective search等计算出region proposal,保存到本地,然后输入到卷积网络中进行计算,进行分类和回归。

fast rcnn认为卷积网络在计算region proposal特征时存在大量重复,于是将原始图像输入到网络中进行卷积特征提起,然后通过ROI层映射到每个region proposal,这样只需计算一次。

faster rcnn将开始的region proposal通过一个RPN网络进行计算,然后对RPN和fast rcnn网络进行交替训练,达到目标检测的端到端训练。

总结如下图:

这里写图片描述

具体介绍

整个网络如图:

这里写图片描述

所以流程是,

  • 先采用CNN进行特征提取,生成features map,
  • 然后利用RPN网络生成region proposal,
  • 在ROI层将feature map和proposal进行特征映射,
  • 进行分类和回归:利用proposal feature map输入到全连接、softmax进行分类,另一个分支利用bounding box regression进行预测框位置大小修订。

特征提取

这里写图片描述

如图,采用VGG16结构,一共13卷积层、13relu层和4个池化层,这里的卷积操作时,padding采用填充方式,卷积核大小都为3x3,所以卷积操作后,不会改变feature map的大小,池化核采用2x2,步长都是2,所以每经过一次池化后,feature map的大小都会由先前的NxM变为N/2 x M/2。

然后就进入RPN网络中。

Region Proposal Network

这里写图片描述

得到feature map后,会对feature map中每一个位置求出K个anchor,一般k=9,即取三种大小,这里写图片描述,如下图:

这里写图片描述

图中RPN共有两个分支,上面一个分支用来分类前景和后景,即用来分类是否为目标,下面那个分支用来回归bounding box,进行微调,获取精确的proposal,然后proposal操作是综合这两个操作获取最后的proposal,然后输入到ROI层中。

对每个像素点,都会有2k个分类结果(是或不是目标),4k回归结果(位置坐标)。

分类和回归

损失函数由分类误差和回归误差组成。

这里写图片描述

分类

如何判断一个ancho是否包含目标呢?

对于训练anchor,作者对每个anchor设计了一个二分类标签(是目标或不是目标)。给以下两种anchor分配一个正标签:(1)与ground truth最高交并比重叠的anchor或anchors;(2)与任何ground truth交并比重叠超过0.7的的anchor。通常第二个条件对于决定正样本来说足够了;但我们仍要采用第一个条件的原因是在一些罕见的情况下,第二种情况可能找不到正样本。我们将一个负样本赋给一个anchor,如果它对任何ground truth的交并比都低于0.3。那些既不是正样本也不是负样本的对训练目标没有任何帮助,不参与运算。

回归

对于窗口一般使用四维向量(x, y, w, h)表示,分别表示窗口的中心点坐标和宽高。下图中,红色的框A代表原始的Foreground Anchors,绿色的框G代表目标的GT,我们的目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口G’,即:给定A=(Ax, Ay, Aw, Ah),寻找一种映射f,使得f(Ax, Ay, Aw, Ah)=(G’x, G’y, G’w, G’h),其中(G’x, G’y, G’w, G’h)≈(Gx, Gy, Gw, Gh)。

这里写图片描述

可以用线性回归来做。

这里写图片描述

其中,x,x_a,x_*分别代表predict box(G’)、anchor box(A)、groundtruth box(G)。

如何训练

论文中介绍了三种训练方式:交替训练、联合训练、非联合训练。

一般采用四步训练法,进行交替训练。

下面参考于博客:https://blog.csdn.net/hunterlew/article/details/71075925

  1. 单独训练RPN网络,网络参数由ImageNet预训练模型初始化;

  2. 单独训练Fast-RCNN网络,将第一步RPN的输出的region proposal作为检测网络的输入。具体而言,RPN输出一个region proposal,通过region proposal映射到原图像,将映射后截取的图像通过几次conv-pool,然后再通过roi-pooling和fc再输出两条支路,一条是目标分类softmax,另一条是bbox回归。此时,两个网络并没有共享参数,只是分开训练;

  3. 再次训练RPN,此时固定网络公共部分的参数,只训练RPN独有部分的参数;

  4. 用RPN的结果再次微调Fast-RCNN网络,固定网络公共部分的参数,只训练Fast-RCNN独有部分的参数。

有一些实现细节,比如RPN网络得到的大约2万个anchor不是都直接给Fast-RCNN,因为有很多重叠的框。文章通过非极大值抑制的方法,设定IoU为0.7的阈值,即仅保留覆盖率不超过0.7的局部最大分数的box(粗筛)。最后留下大约2000个anchor,然后再取前N个box(比如300个)给Fast-RCNN。Fast-RCNN将输出300个判定类别及其box,对类别分数采用阈值为0.3的非极大值抑制(精筛),并仅取分数大于某个分数的目标结果(比如,只取分数60分以上的结果)


原文部分翻译

摘要

SPPnet和fast rcnn 已经减少了检测网络的运行时间、打破了region proposal计算的瓶颈。在这篇论文中,作者提出region proposal network,检测网络共享全图的卷积特征,几乎是自动计算region proposal。RPN可以同时预测目标框和目标分数。RPN是一个端到端的训练,可以产生高质量的region proposal。作者进一步将RPN和fast RCNN放在一个网络中共享卷积特征,并且使用attention机制,让RPN告诉网络需要关注哪里。在VGG16上,这个检测系统在GPU上的帧率是5fps。

1、Intruduction

region proposal的计算限制了检测的效率,这在检测中花费了大量的运行时间。虽然可以在GPU上计算region proposal,但是这无法与下游的检测网络共享计算。

作者提出使用深度卷积神经网络来计算region proposal,与检测网络共享卷积层,因此可以减少在region proposal计算上的大量时间(每张图10ms)。

作者认为,基于region的检测器,例如fast rcnn,使用的卷积feature map也可以用来生成region proposal。在所有的卷积层之后,添加了额外的卷积层来构建RPN,可以同时在规则网格的每个位置回归区域边界和目标分数。RPN是一个完全的卷积网络FCN,可以端到端的训练来产生检测区域(detection proposal)。

RPN设计用来有效预测不同尺寸和高宽比的候选框。与之前使用图像金字塔或者filter金字塔的方法相比,作者引入anchor box,可以认为是多尺度和高宽比的参考。这个计划可以认为是回归参考的金字塔,可以避免枚举图像或者滤波器。这个模型在单尺度图像上训练和测试表现的很好,可以提高运行速度。

为了统一RPN和fast RCNN目标检测网络,作者提出一个训练方案,在微调好的region proposal任务和目标检测任务之间交替训练,可以保持候选框固定。这种方案收敛很快并且可以使用统一的网络在两个任务中共享卷积特征。

faster RCNN在ImageNet detection, ImageNet
localization, COCO detection, and COCO segmentation都获得了冠军。

2、Related work

分了目标候选框和目标检测两部分讲,暂不关注。

3、Faster RCNN

Faster RCNN 分为两个模块,一个是深度全卷积网络用来选出候选框,另一个是fast rcnn检测器,使用选出的候选框区域。整个系统对于目标检测来说是一个简单统一的网络。使用最近比较流行的attention机制,RPN模块告诉Fast RCNN模块去看哪里。

3.1 介绍region proposal网络的设计和性能,3.2 设计算法同时训练两个模块,共享特征。

3.1 Region proposal Networks

RPN将任何大小的图像作为输入,输出一组目标区域的矩形框和目标分数。作者使用全卷积网络来训练这个过程。因为最终目标是与fast rcnn目标检测网络共享计算,假定两个网络共享一组卷积层。作者调研了Zeiler and Fergus模型,有5个卷积层,Simonyan and Zisserman 模型(VGG16)有13个卷积层。

为了生成region proposal,作者在最后一个共享卷积层的输出卷积feature map上滑动一个小的网络。这个网络将输入的卷积feature map的n x n空间窗口作为输入。每个滑动窗口都映射一个低维的feature(对于ZF是256维,对于VGG是512维,后面都有relu)。这个特征输入到两个全连接层,一个box-regression layer的回归层,一个box-classification的分类层。这里n=3,使得输入图像的有效感受野很大(ZF 178像素,VGG 228像素)。迷你网络在单个位置上构建。注意由于迷你网络是在单个窗口上操作,全连接层共享所有的空间定位。这个网络有一个n x n的卷积层和两个1 x 1的卷积层组成(分别对应分类和回归)。

3.1.1 Anchors

在每个滑动窗口的位置,同时预测多个候选框,对每个位置候选框的最大数量记为k。因此,回归层对应k个候选框有4k个坐标的输出编码,分类层输出2k个分数来评估每个proposal是目标或不是目标的可能性。这k个proposal参数化为k个参考框,我们称之为anchor。anchor是滑动窗口的中心,与尺寸和宽高比相关。默认使用scale=3,aspect ratio=3,因此,每个滑动窗口位置有k=9个anchor。对于W X H的卷积feature map,总共有WHK个anchor。

Translation-Invariant Anchors平移不变

这个方法的一大属性就是平移不变性,就anchor和以anchor计算proposal的function而言。如果平移图像中的一个目标,proposal也被平移,同一个function应该在任何位置都预测出proposal。这个方法具有平移不变性,作为对比,multi-box使用k-means产生800个anchor,它不具备平移不变性,如果目标被平移,它不能保证产生同一个proposal。

平移不变性也减少了模型的大小。multi-box有(4 + 1) * 800维度的全连接输出层,此论文中的方法,当k=9anchor时,只有(4 + 2) * 9维度的卷积输出层,输出层只有2.8 * 10^4参数(对于VGG来说,有512 * (4 + 2) * 9),这两种都比multi-box少很多,它的输出层参数是6.1 * 10 ^ 6(对于Googlenet来说,是1536 * (4 + 1) * 800)。作者期待这个模型在小型数据集上不会发生过拟合。

ps:Considering the feature projection layers, our proposal layers’
parameter count is 3 * 3 * 512 * 512 + 512 * 6 * 9 = 2.4 * 106;
MultiBox’s proposal layers’ parameter count is 7 * 7 * (64 + 96 +
64 + 64) * 1536 + 1536 * 5 * 800 = 27 * 106.

Multi-Scale Anchors as Regression References

作者对anchor的设计提出一个创新的机制,可以寻址多尺度、多宽高比。如图1中所示,两种计算多尺寸比较流行的方法。第一种方法基于图像/特征金字塔,在DPM和基于CNN的方法中。图像被resize成不同的尺寸,然后计算每个尺寸的feature map(HOG或者是深度卷积特征)。这个方法比较有用但是花费时间。第二种方法是在feature map上使用多尺寸的滑动窗口。例如,在DPM中,不同宽高比的模型使用不同大小的filter(例如5x7、7x5)训练。如果这种方法来处理多尺寸,就是金字塔filter(图1b)。第二种方法通常与第一种方法共同使用。

作为对比,论文中基于anchor的方法也建立了anchor金字塔,这会更有效率。作者方法参考多尺度和多宽高比的anchor来分类和回归bounding box。这仅仅依赖于单一尺寸的image和feature map,单个大小的filter(在feature map上的滑动窗口)。通过实验展示了多尺寸多大小这种机制的有效性(表8)。

基于多尺寸设计的anchor,我们可以仅仅使用单个尺寸图像计算的卷积特征,这也同样适应于fast rcnn检测器。多尺寸anchor的设计是关键步骤,由于共享特征不会对寻址尺寸浪费额外成本。

3.1.2 Loss Function

对于训练anchor,作者对每个anchor设计了一个二分类标签(是目标或不是目标)。给以下两种anchor分配一个正标签:(1)与ground truth最高交并比重叠的anchor或anchors;(2)与任何ground truth交并比重叠超过0.7的的anchor。通常第二个条件对于决定正样本来说足够了;但我们仍要采用第一个条件的原因是在一些罕见的情况下,第二种情况可能找不到正样本。我们将一个负样本赋给一个anchor,如果它对任何ground truth的交并比都低于0.3。那些既不是正样本也不是负样本的对训练目标没有任何帮助。

根据这些定义,我们将Fast R-CNN中的多任务损失的目标函数最小化。对于一个图像的损失函数定义为:

这里写图片描述

这里,i是一个anchor在mini-batch的下标,Pi是anchor i是一个目标的预测可能性。如果anchor是正,则ground truth的标签pi*是1,如果是负,则是0。ti是一个向量,表示预测的bounding box的4个坐标参数,ti*是与正anchor相关的ground truth box。分类损失函数是L_cls是一个二分类(目标或不是目标)的log损失,对于回归损失,使用这里写图片描述

其中R是鲁棒损失函数((smooth L1)。pi * Lreg表示只有在正anchor(pi
= 1)下,回归损失才会被激活,其他情况(pi
= 0)下会失效。分类层和回归层的输出分别由fpig
and ftig组成。

通过平衡参数来初始化为N_cls和N_reg,….

3.1.3 Training RPNs

RPN可以使用反向传播算法和SGD进行端到端的训练,作者遵循image-centric采样原则,训练网络,每个mini-batch都是从一个image中产生,包含很多正anchor和负anchor的例子。这样优化损失函数是可能的,但是由于负anchor按主导地位,可能会产生偏差。因此,一个mini-batch中随机抽选了一个image中的256个anchor来计算损失函数,其中正负比为1:1,如果一个image中正样本少于128,则使用负样本补足。

新的层权重都使用均值0,标准差0.01的高斯分布初始化,其它层(共享卷积)使用在ImageNet上预训练的网络进行初始化。

3.2 Sharing Features for RPN and Fast RCNN

如何使RPN和fast RCNN共享卷积层,一起训练。文中讨论了三种方法:

  1. 交替训练:首先训练RPN,然后使用proposal训练fast rcnn。然后用fast rcnn微调好的网络来初始化RPN,重复进行这个过程。论文中的实验也是采用这个方法。
  2. 近似联合训练:RPN和fast rcnn合并到一个网络中训练。在每个SGD迭代中,前向传播产生region proposal,然后用来训练fast rcnn。反向传播则跟以前一样,在fast rcnn和RPN的共享卷积层的损失中传播信号。
  3. 非近似联合训练:上述讨论的RPN预测的bounding box也是输入函数。fast rcnn中的RoI pooling层接收这些卷积层,将预测的bounding box作为输入。

4-Step Alternating Training 实际采用4步训练算法,通过交替优化学习共享特征。第一步,训练RPN,由ImageNet预训练的模型初始化,由端到端训练的网络微调。第二步,使用第一步中的region proposal训练一个单独的fast rcnn检测网络。目前为止这两个网络并没有共享卷积层。第三步,使用检测网络来初始化RPN训练,但是冻结共享卷积层,只训练RPN中独有的层。现在这两个网络共享卷积层,第四步,冻结共享卷积层,微调fast rcnn中独有的层。如此,两个网络来自一个统一的网络,并且共享卷积层。

3.3 Implementation Details

主要是anchor的设置等。

4、Experiments

4.1 Experiments on PASCAL VOC

4.2 Experiments on MS COCO

4.3 From MS COCO to PASCAL VOC

5、Conclusion

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值