Faster-RCNN论文详解

Faster-RCNN

提出了Region Proposal Network(RPN)一个全连接的卷积层可以同时预测目标边界和目标分数(物体)

把RPN和Fast-RCNN合并为一个网络通过共享他们的卷积特征——使用带有"attention"机制的神经网络

联合网络unified networks


1、introduction

Region porposal mathod:

Selective Search:基于人工特征的贪婪进行超级像素合并

EdgeBoxes在速度和质量方面都权衡得很好

上面的方法都是在CPU计算的,当重新实现为GPU计算的时候,就忽略了下游的检测网络,错失共享计算的机会

改进:使用了深度卷积网络来计算proposals——基本零花费

——即使用convolutional feature maps来计算proposals

RPN可以有效预测大范围的尺度和长宽比

——不同于图像金字塔和图像特征金字塔(过滤器),使用的是( We use pyramids of reference boxes in the regression functions)

——pyramid of regression reference,避免了枚举(enumerate)所有尺度和长宽比的图像和过滤器

训练:在region proposal task 和object detection 之间交替fine-tune——共享卷积特征

2 相关工作

别人的工作:

OverFeat方法:一个全连接网络用来预测盒子box的坐标(只针对一个物体),之后全连接层被换成卷积层用来检测多个类别的物体。

MultiBox方法:从一个网络(最后一层同时可以预测box)产生proposal

但是,MultiBox的方法没有共享在proposal和detection network 之间的features。

DeepMask method:用于学习segmentation proposals

3 Faster RCNN

整体架构:

 

由两部分组成:

1> deep convolutional network:产生region————————RPN候选区域提取模块,是全卷积神经网络

2> fast RCNN detector:使用proposed regions————————fast RCNN检测模块,基于RPN提取的proposal检测并识别proposal中的目标

3.1 Region proposal networks(介绍它的设计和属性)

RPN:输入一张任意尺度的图片,输出一系列矩形proposals(with objectness score)

RPN的具体流程:

在convolutional feature map上slide a small network,这个small network选择feature map上的nxn的空间窗口作为输入(全连接) ,每个窗口映射到(map)一个低维(256d)的feature。之后feed给两个姐妹全连接层(reg 和 cls)

论文中,作者使用n=3,实际上有效的感受野很大(171或228像素)

博客: RPN的具体流程如下:使用一个小网络在最后卷积得到的特征图上进行滑动扫描,这个滑动网络每次与特征图上n*n(论文中n=3)的窗口全连接(图像的有效感受野很大,ZF是171像素,VGG是228像素),然后映射到一个低维向量(256d for ZF / 512d for VGG),最后将这个低维向量送入到两个全连接层,即bbox回归层(reg)和box分类层(cls)。sliding window的处理方式保证reg-layer和cls-layer关联了conv5-3的全部特征空间。

3.1.1 anchors

每个位置最大有k个可能的proposal,reg层有4k个输出(位置),cls层有2k输出(是目标的概率或者不是目标的概率)。即k个anchors,与尺度和长宽比有关。

anchor:

位于滑动窗口的中心,与尺度和长宽比有关,默认:3个scales和3个aspect ratios,每个sliding position 产生了k=9个anchors

三种尺度(面积){128*128,256*256,512*512},三种比例{1:1,1:2,2:1}所以每一个位置有3*3=9个anchor

对于一个WxH大小的feature map,共有WHk个anchors

translation-invariant anchors

论文的方法一个重要的特征就是拥有translation-invariant(旋转不变性)

旋转不变性—— both in terms of the anchors and the functions that compute proposals relative to the anchors.

即:如果一张图片中的一个目标发生了旋转,proposal也会发生旋转,同样的function也能预测 出proposal

使用我们的方法这是能够得到保证的

旋转不变性减少了model size,k=9时,只有(4+2)x9的卷积输出层

Multi-Scale anchors as regression references

传统有两种方法:

1> 基于图像/特征金字塔(pyramid of anchors)——图像被resized成多个尺度,每个尺度计算出feature maps——有用但是耗时(对图像或者feature map层进行尺度/宽高的采样)

2> 在feature map上使用多尺度的滑动窗口——使用不同的过滤器大小单独训练不同的aspect ratio模型,可以理解为一个过滤金字塔pyramid of filters(对滤波器进行尺度/宽高的采样)

faster RCNN的解决方法:(multi-scale anchors)通过卷积核中心(用来生成推荐窗口的anchor)进行尺度、宽高的采样,使用3种尺度和3种比例来产生9种anchor(more cost-efficient),只依赖于一个尺度的图像和feature map

3.1.2 损失函数loss function

训练RPN,我们需要给每个anchor贴上二分类标签——目标和非目标(positive label 和)

positive label定义:(两种情况之一即可)

(i) the anchor/anchors with the highest Intersection-over Union(IoU) overlap with a ground-truth box,or

(ii) an anchor that has an IoU overlap higher than 0.7 with any ground-truth box.

注意,一个GT包围盒可以对应多个anchor,这样一个GT包围盒就可以有多个正标签

采用第二个规则基本上可以找到足够的正样本,但是对于一些极端情况,所有的anchor对应的anchor box与ground truth的IOU小于0.7,就可以不存在正样本,所以需要采取第一种规则。

negative label定义:

与所有的GT包围盒的IOU都小于0.3的anchor

既不是正标签又不是负标签的不参与训练

损失函数为:

i是mini-batch中anchor的索引

pi是anchor i 成为一个目标的预测概率

The ground-truth label p∗i is 1 if the anchor is positive, and is 0 if the anchor is negative

ti是预测的bounding box 的四个位置参数向量

t*i是正标签的ground-truth box

Lcls是两个类别的分类损失函数——log函数

Lreg是fast-RCNN里定义的smooth函数

pi*表明只有在正样本的情况下才会激活,负样本pi*=0不激活

两部分通过Ncls 和Nreg归一化,通过 λ控制权重来平衡

Ncls=256——mini-batch size

Nreg~2400——number ofanchor locations

为了cls和reg项大体上权重相等,我们令 λ=10

bounding box regression位置回归:

x是预测盒子即proposal(通过RPN网络预测出的proposal),

xa是anchor box(40*60*9个),

x*是ground-truth box

可以理解为从anchor box到nearby ground-truth box的bounding-box regression

3.1.3训练RPN

后馈传播(BP,back-propagation)+随机梯度下降法(SGD,stochastic gradient descent)

依照fast RCNN中的“image-centric”采样策略训练这个网络

采样:在一张图片中随机选择256个anchors去计算损失函数(正负样本1:1)(若没有128个正样本,用负样本代替)

初始化:新增的2层参数用均值为0,标准差为0.01的高斯分布来进行初始化,其余层(都是共享的卷积层,与VGG共有的层)参数用ImageNet分类预测训练模型初始化。

参数化设置:

60k mini-batches使用0.001学习率

next 20k mini-batches on the PASCAL VOCdataset使用0.0001学习率

设置动量momentum=0.9,权重衰减weighted decay=0.0005

3.2 sharing features for RPN and Fast RCNN

faster RCNN由两大模块组成——RPN候选框模块,fast RCNN检测模块

上面是如何为生成区域建议框训练网络,而没有考虑基于区域的目标检测CNN如何利用这些建议框。对于检测网络,我们采用fast RCNN,下面描述算法——如何学习一个统一的网络(由RPN和Fast RCNN共享卷积层组成)/学习由RPN和Fast-RCNN之间共享的卷积层。

RPN和Fast RCNN都是独立训练的,要用不同的方式修改他们的卷积层,因此需要一种允许两个网络间共享卷积层的技术,而非分别学习

两个网络。注意到这不是仅仅定义一个包含RPN和Fast RCNN的单独网络,然后用反向传播优化它那么简单,原因是Fast RCNN训练依赖于固定的目标建议框,而且并不清楚当同时改变建议机制时,学习Fast RCNN会不会收敛。

论文中讨论了三种方法来训练有共享特征的网络:

第一种,作者用的方法:

RPN和FAST RCNN公用了13个VGG的卷积层,孤立的进行训练是一个不明智的选择,作者采用交替训练Alternating training方法 (RPN提取得到proposals,再使用Fast RCNN实现最终目标的检测和识别)

1> 首先依上述训练RPN,该网络用ImageNet预训练的模型初始化,并端到端微调用于区域建议任务。

2> 我们利用第一步的RPN生成的建议框,由Fast RCNN训练一个独立的检测网络,这个检测网络同样是ImageNet预训练的模型初始化的,这时候两个网络还没有共享卷积层

3> 我们用检测网络(detector network)初始化RPN训练,但我们固定共享的卷积层,并且只微调RPN独有的层,现在两个网络共享卷积层了。

4> 保持共享的卷积层固定,微调Fast RCNN的fc层,这样两个网络共享相同的卷积层,构成一个统一的网络。

3.3 implementation details实现细节 / 核心思想

https://github.com/rbgirshick/py-faster-rcnn/blob/master/models/pascal_voc/VGG16/faster_rcnn_end2end/train.prototxt

可以看出VGG16用于特征提取的部分是13个卷积层(conv1_1---->conv5_3),不包括pool5以及其后的网络层次结构

因为我们的最终目标是和Fast RCNN目标检测网络共享计算,所以假设这两个网络共享一系列卷积层,在论文的实验中,ZF有5个共享的卷积层,VGG有13个共享的卷积层。

具体流程:前面有解释

博客:(重述)

使用一个小网络在最后卷积得到的特征图上进行滑动扫描,这个滑动网络每次与特征图上n*n(论文中n=3)的窗口全连接(图像的有效感受野很大,ZF是171像素,VGG是228像素),然后映射到一个低维向量(256d for ZF / 512d for VGG),最后将这个低维向量送入到两个全连接层,即bbox回归层(reg)和box分类层(cls)。sliding window的处理方式保证reg-layer和cls-layer关联了conv5-3的全部特征空间。

3*3卷积核的中心点对应原图(re-scale为600*1000)上的位置(点),将该点作为anchor的中心点,在原图中框出多尺度、多种长宽比的anchors。所以,anchor不在conv特征图上,而在原图上,对于一个大小为H*W的特征层,它上面的每一个像素点对应9个anchor,这里有一个重要的参数feat_stride=16,它表示特征层上移动一个点,对应原图移动16个像素点。把这9个anchor的坐标进行平移操作,获得在原图上的坐标。之后根据ground truth label和这些anchor之间的关系生成RPN_labels(根据overlap计算)。生成的RPN_labels中,positive的位置被设置为1,negative的位置被设置为0,其他的位置被设置为-1。

faster RCNN卷积流程图:

conv5得到的是40*60大小的特征图,对应论文中的2400。anchor的个数为40*60*9~2k个

猜你喜欢

转载自blog.csdn.net/qq_30468133/article/details/81147042