Faster RCNN超详细入门 02 网络细节与训练方法

  • Post author:
  • Post category:其他





前言

目标检测入门三大RCNN是必读的经典论文模型,而我本人在阅读论文及学习时,通过论文原文,代码上手复现难度极大,而许多博客均默认大家有目标检测基础,因此本文从笔者本人的学习感悟出发进行总结,写出这篇《Faster RCNN超详细入门》,方便大家进行参考。



论文结构



Abstract

提出RPN用于候选区域提取,并与Fast RCNN实现共享特征计算,克服实时性瓶颈


摘要核心:



  • 候选区域提取(SS-Selective Search)


    是已有检测方法实时性低的主要瓶颈
  • 提出了

    候选区域网络(RPN-Region Proposal Network),通过共享特征,提取候选区域,极大提升了计算效率,可以

    端到端训练

  • Fast RCNN和VGG通过迭代优化可以实现特征共享
  • Faster RCNN是一个实用系统,在单GPU上达5fps
  • 在Pascal Voc2012上达 70.4% mAP



Introduction

对于RCNN系列的进一步改进,提出RPN网络,在实时性和准确率满足实际应用需求



Related Work

OverFeat和Fast RCNN的介绍



Region Proposal Network

RPN网络架构及设计原理,Anchor的定义,多任务损失函数设计



Experiments

基于Pascal Voc,COCO数据集,实验验证,消融实验及对比试验



Conclusion



网络架构

整体框架如下:

在这里插入图片描述



  • VGG16网络进行特征提取


    ,生成特征图大小变为原图1/16(4次max pooling,缩小2^4)。


  • anchors处理:


    在每一个像素点上人为的放上一些长宽大小均不同的框,找到潜在的目标检测物体存在区域。


  • RPN:


    输入为Feature maps和acnhors。

    • 分类:将anchors分为两类,包含物体的为前景正样本,否则为背景负样本。
    • 回归:将包含有物体的anchors位置进行微调,使其较为精确地抓取物体。


  • ROI Pooling:


    首先进行特征提取,然后不同图像的输入,造成feature maps的大小不一致,该层接收不同大小的feature map以后,可以得到固定的size输出。
  • 再次放入Fast-RCNN:进行多分类任务;进行回归得到


    更精确的物体识别





    Bounding Boxes


    的位置。



以VGG网络为例:

在这里插入图片描述

1.首先缩放

至固定大小 M*N



2.放入

共享Conv layers



3.RPN计算proposals。

4**.RoI Pooling

层则利用proposals从feature maps中

提取proposal features**。

5.送入后续全连接和softmax网络作classification。



共享卷积层

共享的意思是,Conv layers部分提取的feature既可以用作RPN网络,又可以用作后面的Fast RCNN部分。



Conv layers

在这里插入图片描述

1.conv layers部分有13个conv层,13个relu层,4个pooling层。

  • conv层均为:kernel_size = 3, pad = 3, stride = 1。
  • pooling层均为: kernel_size = 2, pad = 0, stride = 2。

2.Faster RCNN conv layers 对所有卷积层都做了padding处理(pad = 1,即外周填充一圈0),导致原图变为(M+2)x(N+2)大小,再做3

3卷积后输出M x N。

3.pooling层均为: kernel_size = 2, pad = 0, stride = 2。经过Pooling层的M

N矩阵,都会变成(M/2)x(N/2)大小。

4.因此,一个M

N大小的矩阵经过Conv layers固定变为(M/16)

(M/16)。



网络细节具体实现



Anchors



1.特点:

4个值表矩阵左上和右下角点的坐标:(x1,y1,x2,y2)。

9个矩形共有3种形状,长宽比大约为:{1:1,1:2,2:1}。

为每一个点都配备这9种anchors作为初始的检测框。



2.细节:

在这里插入图片描述

  • 原文使用的是ZF model,其中Conv layers中最后的conv5层 num_output = 256,对应生成256特征图,所以相当于feature map每个点都是256-dimensions。
  • 训练程序会在合适的anchors中随机选取128个positive anchors + 128negative anchors进行训练。
  • VGG输出 :50 x 38 x 512,对应50 x 38 x k个anchors。
  • RPN输出:

    • 50 x 38 x


      2k





      positive/negative softmax分类特征矩阵


    • 50 x 38 x


      4k





      regression坐标回归特征矩阵




3.计算:

在这里插入图片描述

  • 原图800*600,VGG下采样16倍,feature map每个点设置9个anchor,所以:Ceo(800/16)x Ceil(600/16)x9 = 50 x 38 x 9 = 17100。

    **其中ceil()表示向上取整,是因为VGG输出的feature map size = 50 x 38.**



4.标签:



  • 区分前景与背景Anchor


    ,标记标签(1 正例, -1 负例, 0 忽略)



    • 正例:


      对于每一个 gt box,交并比最大的anchor,与任一 gt box交并比超过一定阈值(0.7)。


    • 负例:


      与所有gt boxes交并比小于一定阈值(0.3)其他。


  • 对每一前景anchor,根据对应的gt box计算回归值。



Region Proposal Networks

目的:判定哪些anchors有可能包含物体。

输入:

  • cls层生成的(M/16) x (N/16) x 2k向量
  • reg层生成的(M/16) x (N/16) x 4k向量
  • im_info=[M, N,scale_factor]

输出:(1)包含物体的概率 (2)调整anchors的位置的偏移量。



1.结构:

在这里插入图片描述

  • 上面一条用softmax分类anchors获得positive和negtive。
  • 下面一条用于计算分类anchors的bounding box regression偏移量。
  • 最后的proposal获取positive anchors 的正确proposal,剔除大小和超出边界的proposal。



2.cls layer——分类

在这里插入图片描述

  • 输入为18,因为每一个像素点的anchors为9,正负样本判定(positive or negative)即为2×9。
  • Reshape层是技术细节问题,对feature map进行维度变换,使得有一个单独的维度为2,方便在该维度上进行softmax操作,之后再- Reshape恢复原状。
  • softmax进行分类,分出positive和negative的anchors。



3.Bounding Box Regression(reg layer——回归)

在这里插入图片描述



  • (M/16)x(N/16)x256的特征通过1×1卷积得到(M/16)x(N/16)x4k的输出


    ,因为这里是生成每个anchor的坐标偏移量(用于修正anchor),[tx,ty,tw,th]共4个所以是4k。

    **

    输出的是坐标偏移量,不是坐标本身,要得到修正后的anchor还要用原坐标和这个偏移量运算一下才行。

    **



偏移值计算公式:(即Anchor box与predicated box之间的差距)

在这里插入图片描述



为什么要除以Wa,ha?

如果以绝对坐标误差去代表其偏移量,则模型对数据库依赖性强,泛化能力弱。若训练数据库与测试数据库相差较大,则效果较差。

因此如果除以Wa,ha,则起到了Normalize的作用,提高模型泛化能力。



Bounding Box回归(即Anchor box与ground truth之间的差距)

在这里插入图片描述

**[px,py,pw,ph]表示原始anchor的坐标

[dx,dy,dw,dh]表示RPN网络预测的坐标偏移

[Gx,Gy,Gw,Gh]表示修正后的anchor坐标**

  • 我们的目标是寻找一种关系,使得输入原始的anchor P经过映射得到一个跟真实窗口G更接近的回归窗口G‘。
  • Anchor box(G’)与predicated box(P),ground truth(G)之间的平移量如图。



Proposal Layer

在这里插入图片描述

1.作用及输入:

  • proposal layer负责

    综合变换量positive anchors,计算出精确的proposal。
  • 3个输入:

    anchors分类结果



    对应bbox的变换量



    缩放信息。
  • 缩放信息:若经过4次pooling后W x H =(M/16)x (N/16),则

    缩放量为16。

2.处理流程:

a.

生成anchors

,依据变换量对所有的anchors做bbox regression回归。

b.

按照输入的positive softmax scores 由大到小排序anchors

,提取前pre_nms_topN(e.g.6000)个anchors。

c.

限定超出图像边界的positive anchors为图像边界

,防止后续roi pooling时proposal超出图像边界。

d.

剔除尺寸非常小的positive anchors。


e.

对剩余的positive anchors进行NMS。


f.之后输出proposal = [x1, y1, x2, y2],对应的是M x N的图像尺度。



生成anchors -> softmax分类提取positive anchors -> bbox reg回归positive anchors -> Proposal Layer生成proposals



RoI pooling

详情请查看

《Faster RCNN超详细入门 01-准备篇-背景 RCNN,SPPnet,Fast RCNN,RoI Pooling》

在这里插入图片描述

  • 目前的proposals还没有具体的物体信息。
  • 因此需要从

    已有的bounding boxes中提取特征

  • 采用SPP-net原理。

在这里插入图片描述

  • 由于proposal对应的M x N尺度的,所以首先使用spatial_scale参数将其映射回 (M/16) x (N/16)大小的feature map尺度。
  • 再将每个proposal对应的feature map区域都水平分为pooled_w X pooled_h的网络。
  • 对网格的每一份都进行max pooling处理。
  • 这样处理后,即使大小不同的proposal输出结果都是pooled_w X pooled_h固定大小。



分类——classification

在这里插入图片描述

  • 通过全连接和softmax对proposals进行分类
  • 再次对proposals进行bounding box regression,获得更高精度的bbox。



Faster RCNN的训练

在这里插入图片描述



训练过程

1.训练RPN,该网络用ImageNet预训练的模型初始化。

2.我们利用第一步的RPN生成的建议框,由Fast RCNN训练一个单独的检测网络,这个检测网络同样由ImageNet初始化而来的。

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

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



训练RPN

总体的Loss:

在这里插入图片描述

参数含义如下:

在这里插入图片描述

cls loss:用于分类网络训练,采用的是los loss。

reg loss:用于bounding box regression网络训练。注意其中乘了pi*,表示只关心positive anchors的回归。

在这里插入图片描述



其他训练方式

1.Approximate joint training:

  • RPN和Fast RCNN合为一个网络。
  • 前向传播时,proposal由RPN层输出。
  • 反向传播时,共享层的传播误差等于RPN loss和Fast RCNN loss之和。
  • 注意这种方法里proposal的坐标预测的梯度被忽略。
  • 能够缩减25-50%的训练时间。

2.Non-approximate joint training:不舍弃proposal的坐标梯度。



网络总结

step_0:基于ZF或

VGG16提取输入图像特征



step_1:

生成anchors



step_2:

RPN计算:

特征图feature map通过

RPN预测anchor参数



置信度(foreground)



转化为预测框的坐标系数



step_3:

根据anchors和RPN预测的anchors参数,计算预测框的坐标系数,并得到每一个预测框的所属类别labels。


step_4:

RoI Pooling

把目标

转化为统一的固定尺寸



step_5:

Fast RCNN预测预测框的类别

,和

转为目标框的平移缩放系数

。注意:这里要与RPN区分。



版权声明:本文为IanYue原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。