文章目录

  • 前言
  • 论文结构
    • 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

网络架构

整体框架如下:

  • 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)大小,再做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.细节:

  • 原文使用的是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 2kpositive/negative softmax分类特征矩阵
    • 50 x 38 x 4kregression坐标回归特征矩阵

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)即为2x9。
  • Reshape层是技术细节问题,对feature map进行维度变换,使得有一个单独的维度为2,方便在该维度上进行softmax操作,之后再- Reshape恢复原状。
  • softmax进行分类,分出positive和negative的anchors。

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

  • (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之间的差距)

为什么要除以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区分。

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

  1. YOLO 超详细入门02 v2 (含代码及原文)

    文章目录 前言 背景 总结 一.YOLOv2改进之框架 1.1 网络架构 1.2 Batch Normalization 二.YOLOv2改进方法之尺寸相关 2.1 High Resolution C ...

  2. YOLO 超详细入门(含开源代码)——网络结构、细节、目标损失函数、优点

    文章目录 前言 背景 一.YOLO的核心原理预览 二.网络结构 为什么每个网格有固定的B个Bounding Boes?(即B=2) 三.网络细节 3.1 网络单元(grid) 3.1.1 作用 3.1 ...

  3. 目标检测经典论文——Faster R-CNN论文翻译(纯中文版):Faster R-CNN:通过Region Proposal网络实现实时目标检测

    目标检测经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为纯中文版,中英文对照版请稳步:[Faster R-CNN中英文对照版] Faster R-CNN:通过Region Pr ...

  4. TypeScript超详细入门教程(上)

    TypeScript超详细入门教程(上) 01 开篇词:Hello~TypeScript 01 开篇词:Hello~TypeScript 更新时间:2019-10-30 13:49:46 既然我已经踏 ...

  5. mask rcnn 超详细代码解读(一)

    mask r-cnn 代码解读(一) 文章目录 1 代码架构 2 model.py 的结构 3 train过程代码解析 3.1 Resnet Graph 3.2 Region Proposal Net ...

  6. GoJS超详细入门(插件使用无非:引包、初始化、配参数(json)、引数据(json)四步)...

    GoJS超详细入门(插件使用无非:引包.初始化.配参数(json).引数据(json)四步) 一.总结 一句话总结:插件使用无非:引包.初始化.配参数(json).引数据(json)四步. 1.goj ...

  7. arcgis 地图_ArcGIS超详细入门操作:ArcGIS矢量化地图详细步骤

    今天给大家带来的干货是[ArcGIS超详细入门操作:ArcGIS矢量化地图详细步骤],欢迎大家收藏查阅! 在桌面上新建一个文件夹,打开ArcCatalog, "文件"--" ...

  8. 自学前端设计——【开源骚客】FPGA超详细入门视频教程

    前言 本文基于[开源骚客]FPGA超详细入门视频教程,简单做个笔记 00. FPGA开发软件的安装 Quartus II 13.1 Modelsim Notepad++ Vim 01. 我的第一个FP ...

  9. Swig超详细入门教程(Java调用C/C++, CMake)——更新于2021.12

    目录 相关教程 环境配置 0基础上手例子(C/C++) 使用CMake的例子(C语言) 使用CMake的例子(C++) 本文主要是手把手教萌新们如何用官方用例构建(有许多本人亲身踩坑血泪史) 相关教程 ...

最新文章

  1. linux之父密码,Linux之父十大名言
  2. 优化网站设计(七):避免在CSS中使用表达式
  3. ITK:使用曲率流平滑RGB图像
  4. JVM之垃圾收集器回收种类
  5. 限制EditText只能输入小数点后两位
  6. 李彦宏说互联网思维已过时,AI可以根本上变革交通、城市、农业和医疗
  7. 让系统在内存中高速运行
  8. Linux杀100个进程,在linux bash中杀死一个进程子树
  9. nginx报错unknown directive 锘? in D:\nginx/conf/nginx.conf:3
  10. 图解机器学习:分类模型性能评估指标
  11. STM32HAL库使用RX8025
  12. 恒生电子软件工程师面试
  13. 餐饮行业为什么要开发点餐app?
  14. 探究:Adobe Premiere Pro CC 2018 导入SRT字幕显示不全问题
  15. 【配送路径规划】基于matlab蚁群算法求解配送路径最短问题【含Matlab源码 2222期】
  16. UT-Exynos4412开发板三星ARM四核旗舰开发平台android4.0体验-7GPS功能调试支持
  17. 已知一点经纬度和距离,计算另一点的经纬度
  18. Apollo Planning决策规划算法代码详细解析 (5):规划算法流程介绍
  19. Android 实现通知栏通知APP版本更新
  20. 用Java实现定义一个大写字母,把它转换为小写字母后显示出来

热门文章

  1. 外部无法连接部署在linux上的MongoDB
  2. 女性比男性更聪明、更会投资、事业心更重、对自己更严格?揭秘女性价值崛起的数据真相!...
  3. 我的世界java版变形模组下载_我的世界变形模组
  4. 华为Ascend昇腾计算产业介绍
  5. CF1503D Flip the Cards(思维题)
  6. 如何使用计算机网络打印机,电脑重新连接网络打印机的操作方法-电脑自学网...
  7. P1:选 7-15 群发邮件
  8. 【JAVA】TCP通信——发弹幕案例
  9. 解决VC中编译出现”SHSQ.dll This required file cannot be loaded. Please re-install Microsoft Visual C++“方法之一
  10. 学python编程能做什么项目_十个Python练手的实战项目,学会这些Python就基本没问题了...