Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)

文章目录

  • 前言
  • 论文结构
    • Abstract
    • Introduction
    • Related Work
    • Region Proposal Network
    • Experiments
    • Conclusion
  • 网络架构
    • 以VGG网络为例:
      • 共享卷积层
      • Conv layers
  • 网络细节具体实现
    • Anchors
      • 1.特点:
      • 2.细节:
      • 3.计算:
      • 4.标签:
    • Region Proposal Networks
      • 1.结构:
      • 2.cls layer——分类
      • 3.Bounding Box Regression(reg layer——回归)
        • 偏移值计算公式:(即Anchor box与predicated box之间的差距)
        • 为什么要除以Wa,ha?
        • Bounding Box回归(即Anchor box与ground truth之间的差距)
    • Proposal Layer
    • RoI pooling
    • 分类——classification
  • Faster RCNN的训练
    • 训练过程
    • 训练RPN
    • 其他训练方式
  • 网络总结


前言

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

  • 若大家没有目标检测评价指标基础可参考这篇文章。《目标检测基础(TP,recall,PR曲线,mAP,NMS)》
  • 【建议先读】若大家没有Faster RCNN设计的背景基础可参考这篇文章。《Faster RCNN超详细入门 01-准备篇-背景 RCNN,SPPnet,Fast RCNN,RoI Pooling》

论文结构

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

网络架构

整体框架如下:
Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第1张图片

  • 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网络为例:

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第2张图片

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

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第3张图片

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)大小,再做33卷积后输出M x N。
3.pooling层均为: kernel_size = 2, pad = 0, stride = 2。经过Pooling层的M
N矩阵,都会变成(M/2)x(N/2)大小。
4.因此,一个MN大小的矩阵经过Conv layers固定变为(M/16)(M/16)。

网络细节具体实现

Anchors

1.特点:

4个值表矩阵左上和右下角点的坐标:(x1,y1,x2,y2)。
9个矩形共有3种形状,长宽比大约为:{1:1,1:2,2:1}。
为每一个点都配备这9种anchors作为初始的检测框。

2.细节:

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第4张图片

  • 原文使用的是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 4kregression坐标回归特征矩阵

3.计算:

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第5张图片

  • 原图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.结构:

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第6张图片

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

2.cls layer——分类

在这里插入图片描述

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

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

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第7张图片

  • (M/16)x(N/16)x256的特征通过1x1卷积得到(M/16)x(N/16)x4k的输出,因为这里是生成每个anchor的坐标偏移量(用于修正anchor),[tx,ty,tw,th]共4个所以是4k。
    **输出的是坐标偏移量,不是坐标本身,要得到修正后的anchor还要用原坐标和这个偏移量运算一下才行。**

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

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第8张图片

为什么要除以Wa,ha?

如果以绝对坐标误差去代表其偏移量,则模型对数据库依赖性强,泛化能力弱。若训练数据库与测试数据库相差较大,则效果较差。
因此如果除以Wa,ha,则起到了Normalize的作用,提高模型泛化能力。

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

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第9张图片

**[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

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第10张图片

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》

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第11张图片

  • 目前的proposals还没有具体的物体信息。
  • 因此需要从已有的bounding boxes中提取特征
  • 采用SPP-net原理。

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第12张图片

  • 由于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

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第13张图片

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

Faster RCNN的训练

Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第14张图片

训练过程

1.训练RPN,该网络用ImageNet预训练的模型初始化。
2.我们利用第一步的RPN生成的建议框,由Fast RCNN训练一个单独的检测网络,这个检测网络同样由ImageNet初始化而来的。
3.我们用检测网络初始化RPN训练,但我们固定共享的卷积层,并且只微调RPN独有的层,现在两个网络共享卷积层了。
4.保持共享的卷积层固定,微调Fast R-CNN的fc层。这样,两个网络共享相同的卷积层,构成一个统一的网络。

训练RPN

总体的Loss:
Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第15张图片
参数含义如下:
Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第16张图片

cls loss:用于分类网络训练,采用的是los loss。
reg loss:用于bounding box regression网络训练。注意其中乘了pi*,表示只关心positive anchors的回归。
Faster RCNN超详细入门 02网络细节与训练方法 (anchors,RPN,bbox,bounding box,Region proposal layer……)_第17张图片

其他训练方式

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区分。

你可能感兴趣的:(计算机视觉,目标检测,网络,目标检测,计算机视觉,cnn,深度学习)