Object Detection网络框架学习:Faster-RCNN

2023-11-09

经过RCNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。

 

Faster R-CNN

       从RCNN到Fast R-CNN,再到本文的Faster R-CNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。剔除了大部分的计算冗余,大部分训练过程在GPU中完成,进一步提高了运行速度。

Faster R-CNN主要用两个模块组成:

  • 第一个模块是深层的全卷积网络用于区域推荐
  • 第二个模块是Fast R-CNN detector.

Faster R-CNN可以看做”区域生成网络+fast R-CNN”的系统,用区域生成网络代替Fast-RCNN中的Selective Search方法,来产生一堆候选区域。

论文中着重解决了下面问题:

  1. 如何设计/训练 区域生成网络
  2. 如何整合区域生成网络和Fast R-CNN网络共享特征提取网络

 

侯选区域生成网络

 

当前检测网络最耗时的地方在proposals选取。现在用的最多的时Selective Search,这在测试过程中会耗费较多的时间。

论文提出了使用CNN来推荐候选区域,称之为RPNs(Region Proposal Networks)。作者观察到区域检测器(例如Fast R-CNN)的卷积层后的特征映射(feature map)可用户RPNs生成侯选区域.在特征映射的基础上向后添加几层卷积层构成区域推荐网络。这是一个FCN(fully convolutional network,全卷积网络).

 RPN网络主要用于生成region proposals,首先生成一堆Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景(foreground)或者后景(background),即是物体or不是物体,所以这是一个二分类;同时,另一分支bounding box regression修正anchor box,形成较精确的proposal(注:这里的较精确是相对于后面全连接层的再一次box regression而言)

侯选区域生成网络架构

RPN网络基本设想是:在提取好的特征图上,通过一个滑动窗口获取特征向量,然后输出到两个全连接层:

  • 一个是box-regression layer(reg)
  • 另一个是 box-classification layer(cls).

 

 

下图中可以看到,在feature map上会有一个sliding window,这个sliding window会遍历feature map上的每一个点,并且在每个点上配置k个anchor boxes。这k个anchor boxes就是用于提取feature map上的特征,但是这样提取出来效果不是很好,所以后面会接一个分类器和一个bbox回归,这样就能修正检测位置了。

侯选区域生成网络(Region Proposal Networks,RPN),RPN网络接收任意大小的图片作为输入,输出一组目标侯选矩形框,并带有目标分数.

 

Anchors

在每一个滑动窗口的位置,我们同时预测k个推荐区域,故reg层有4k个输出(每个侯选区域是一个元素个数为4的元组)。cls层输出2k个得分(即对每个推荐区域是目标/非目标的估计概率)

k个推荐区域对应着k个参考框的参数形式,我们称之为anchors.每个anchor以当前滑动窗口的中心为中心,并与尺度和长宽比相关。默认地我们使用3种尺度和3种长宽比,对于每个滑动位置就有k=9个anchor。对于大小为W×H(例如2,400)的卷积特征映射,总共有W*H*k个anchor。

特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{128**2,256**2,512**2}× 三种长宽比例{1:1,1:2,2:1},下图示出51*39个anchor中心,以及9种anchor示例。

 

è¿éåå¾çæè¿°


分类层(cls_score)输出每一个位置上,9个anchor属于前景和背景的概率;窗口回归层(bbox_pred)输出每一个位置上,9个anchor对应窗口应该平移缩放的参数。对于每一个位置来说,分类层从256维特征中输出属于前景和背景的概率;窗口回归层从256维特征中输出4个平移缩放参数。

就局部来说,这两层是全连接网络;就全局来说,由于网络在所有位置(共51*39个)的参数相同,所以实际用尺寸为1×1的卷积网络实现。需要注意的是:并没有显式地提取任何候选窗口,完全使用网络自身完成判断和修正。

 

侯选区域生成网络的训练

训练数据

对每个anchor给定标签选项,认定两种anchors为正样本:

  • anchor/anchors与ground-truth box有着最高的IoU记为正样本
  • 剩下的anchor/anchors与任何ground-truth box的IoU大于0.7记为正样本,IoU小于0.3,记为负样本
  • 剩下的anchor/anchors记为非正样本,对训练没有贡献,不使用

同一个ground-truth可以确定多个anchors.

 

损失函数

这里使用的损失函数和Fast R-CNN内的损失函数原理类似,同时最小化两种代价:

  • RPN可以BP算法和SGD算法完成end-to-end训练。每个mini-batch的数据包含着一张图片上的多个正样本和负样本。
  • 在网络参数初始化上,前面的卷积层使用预训练的ImageNet的网络参数,新添加的层使用随机的高斯分布初始化权重.
  • 在前60K的mini-batch上我们使用0.001的学习率,后20K的mini-batch上我们使用0.0001的学习率,同时使用全职衰减,momentum=0.9,weight decay=0.0005.

共享特征

RPN和Fast R-CNN都需要一个原始特征提取网络(下图灰色方框)。这个网络使用ImageNet的分类库得到初始参数W0,但要如何精调参数,使其同时满足两方的需求呢?本文讲解了三种方法。

 

 

Alternating training(轮流训练)

  • 先独立训练RPN,然后用这个RPN的网络权重对Fast-RCNN网络进行初始化并且用之前RPN输出proposal作为此时Fast-RCNN的输入训练Fast R-CNN
  • 用Fast R-CNN的网络参数去初始化RPN
  • 交换a,b训练过程即可

具体操作时,仅执行两次迭代(后面再迭代,效果没啥大的提升),并在训练时冻结了部分层。

 

Approximate joint training(近似联合训练) 

直接在上图结构上训练。proposals是由中间的RPN层输出的,而不是从网络外部得到。需要注意的一点,名字中的”approximate”是因为反向传播阶段RPN产生的cls score能够获得梯度用以更新参数,但是proposal的坐标预测则直接把梯度舍弃了,这个设置可以使backward时该网络层能得到一个解析解,能将训练时间减少20%-25%。

Non-approximate training(联合训练)

直接在上图结构上训练,上面的Approximate joint training把proposal的坐标预测梯度直接舍弃,所以被称作approximate,那么理论上如果不舍弃是不是能更好的提升RPN部分网络的性能呢?作者把这种训练方式称为“ Non-approximate joint training”,论文没有对这个方法进行讨论。
 

参考链接:

https://blog.csdn.net/u011974639/article/details/78053203#faster-r-cnn

https://www.cnblogs.com/wangyong/p/8513563.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Object Detection网络框架学习:Faster-RCNN 的相关文章

  • 五彩斑斓的黑

  • c++操作sqllite

    项目中需要使用的sqllite 有想过使用内存的结果 好像都不大使用 最接近的算是vector了 但是查询方式不大好 而且数据有好几个字段 所以考虑了数据库 sqllite目前已经到了3了 好快 好像这个数据库也不弱 就先用着吧 其实挺简单
  • FPGA—串口RS232(附实现代码)

    目录 1 理论 1 1 串口简介 1 2 RS232信号线 1 3 RS232通信协议简介 2 实操 2 1 硬件资源 2 2 顶层模块 2 2 1 模块说明 2 2 2 RTL 代码 2 2 3 仿真验证 2 3 串口数据接收模块 2 3
  • PyCharm集成SVN,检出、提交代码

    工作需要 使用PyCharm集成SVN 进行代码管理 搜索网上资料 没有讲的很清楚的 自己动手摸索 大致了解了使用方法 遂记录下来 希望他人少走些弯路
  • 比较Opencv自带的frontface检测器

    CascadeClassifier haarcascade frontalface alt new CascadeClassifier xml haarcascade frontalface alt xml CascadeClassifie
  • 【Linux】Linux服务器解决python3.7与openssl的低版本不兼容的问题

    安装了Python3 7之后 遇到的一个很麻烦的坑就是与系统自带的ssl版本不兼容 Python3 7需要的openssl的版本为1 0 2或者1 1 x 这个requirements在config Python3 7的时候使用 with
  • c++栈实现表达式求值

    文章目录 前言 一 思想分析 二 具体实现 前言 后缀表达式的算法思想与具体实现 一 思想分析 设定两个栈 操作数栈 OPND 操作符栈 OPTR 栈初始化 置操作数栈 OPND 为空 操作符栈 OPTR 中预设一个优先级最低的操作符 自左
  • Shell Expect 命令

    expect可以实现shell实现不了的用户交互的需求 expect可以将交互写在一个脚本上 完成很多自动化的动作 比如ssh ftp登陆等 都是需要交互需求的 expect是需要安装的 直接yum y install expect安装即可
  • Class 00 - 学习编程的方法&不同职业所使用的编程语言

    Class 00 学习编程的方法 不同职业所使用的编程语言 学习编程的方法 什么是编程 不同职业所使用的编程语言 数据分析 网页设计 移动应用开发 Web应用开发 游戏开发 Tips 学习编程语言的技巧 从电子表格到 SQL 再到 R 电子
  • threejs学习01-环境搭建+简单示例

    threejs学习 环境搭建 简单示例 环境搭建 node js vite js three js 轻量级的环境 先安装配置好node 在cmd中输入 node v 来查看node版本 node 配置好后就可以创建一个vite的项目了 先调
  • Vuforia Ground Plane 平面识别

    首先弄出这几个组件 如图 还有 再然后 然后就是关键了 如果Vuforia版本低于8 5 8 就得导入ARcore的arr 也就是这个 这个可以在 https dl google com dl android maven2 com goog
  • createBean方法详解

    前言 createBean是创建Bean的主要方法 该方法位于 AbstractBeanFactory的doGetBean方法中的createBean调用 createBean方法流程图 createBean源码解析 protected O
  • Zabbix监控MongoDB、Nignx、Redis、Php-fpm、SNMP(如打印机)

    Zabbix v3 4 MongoDB v3 4 MongoDB模板 感谢大神 MongoDB for Zabbix https share zabbix com databases mongodb mongodb for zabbix 3
  • better mybatis generator 使用详情

    1 在idea中plugins市场中下载better mybatis generator 安装 2 在idea中打开database 3 添加数据库 连接数据库 4 连接成功之后 如果如下图所示 可以看到schemas下边有连接好的数据库b
  • RoI Pooling 和 RoI Align

    RoI Pooling 和 RoI Align 一 背景和基本概念 1 背景 2 基本概念 二 RoI Pooling原理 1 目的 2 步骤 以输出RoI feature大小为2 2 5为例 Step1 Step2 Step3 Step4
  • python画饼图加牵引线_python-Matplotlib绘制分列式饼图并添加表格

    import matplotlib pyplot as plt import numpy as np import matplotlib as mpl 解决中文乱码和正负号问题 mpl rcParams font sans serif Si
  • 计算机汉字的输入和编辑教案,计算机汉字录入教案.doc

    教育局教研室学科教案纸 授课时间 年 月 日 星期 课 题上期总结与本期计划课 型新授本期总第 1 节教 学 目 标 知识与技能 过程与方法 情感态度与价值观 层 次 要 求了解认识理解应用经历体验反应领悟课 时 教 学 目 标 归纳总结上
  • 包教包会:本地推送 & 远程推送

    什么是推送 注意 和我们常用的抽象通知不同 NSNotification 可以让不在前台运行的app 告知用户app内部发生了什么事情 或者没有运行的app接收到服务器发来的通知 比如离线QQ接受消息 网上商城的打折通知 游戏的版本更新通知
  • 管理后台项目-06-用户管理角色管理模块

    目录 1 路由信息搭建和api文件信息创建 2 用户管理模块 2 1 列表数据获取以及动态渲染 2 2 添加 修改 用户 2 3 删除 批量删除用户 2 4 分配角色 3 角色管理 3 1 修改角色 3 2 分配权限 1 路由信息搭建和ap

随机推荐

  • vue $nextTick()方法实现原理

    什么是 nextTick 在下次 DOM 更新循环结束之后执行延迟回调 简单的理解是 当数据更新了 在dom中渲染后 自动执行该函数 原理 1 nextTick就是一个异步方法 nextTick 方法主要是使用了宏任务或微任务 事件循环机制
  • C++ 特化与重载(12)---《C++ Templates》

    目前为止 我们已经学习了C 如何使一个泛型定义被展开为一族系相关的classes或者function 但是这远远不够 以一个特定替换物取代泛华的templates parameters远远达不到优化的要求 因此 本片中我们将介绍两种机制 用
  • 伺服电机三环(电流环、速度环、位置环)控制原理及参数调节

    原文 https blog csdn net sunjiajiang article details 8252026 运动伺服一般都是三环控制系统 从内到外依次是电流环 速度环 位置环 1 电流环 电流环的输入是速度环PID调节后的输出 我
  • 设计模式(四) 建造者模式

    建造者模式和工厂模式类似 也是一种创建型模式 它们的主要区别在于 工厂模式需要提供一些信息 而对象在最后一步才创建 而建造者模式则是一步一步的创建对象 一个非常典型的建造者的例子是Java中的StringBuilder 通过一步一步的添加字
  • Journal of Proteome Research

    期刊名 Journal of Proteome Research 发表时间 2019年9月 IF 3 78 2018 单位 巴塞尔大学 瑞士 物种 人细胞系 技术 冷冻电子显微镜 Cryo EM 单粒子电子显微镜 一 概述 本文描述了一种
  • C语言的字符串查找函数

    C C string库 string h 提供了几个字符串查找函数 如下 memchr 在指定内存里定位给定字符 strchr 在指定字符串里定位给定字符 strcspn 返回在字符串str1里找到字符串str2里的任意一个字符之前已查找的
  • arma模型matlab代码_时间序列分析ARMA模型(金融计量一)

    以下内容为原创 如有错误请联系纠正 联系作者方式 微信公众号 计量文学 公众号会发布计量学相关文章 软件安装教程 公众号刚起步 希望多多支持 作业说明 1 给出原序列折线图 并加以文字描述 2 给出原序列或差分序列 如果有需要 的自相关函数
  • 深入剖析Kubernetes之声明式 API

    文章目录 声明式 API 编写自定义控制器 声明式 API 到底什么才是 声明式 API 呢 kubectl apply 命令 kubectl replace 的执行过程 是使用新的 YAML 文件中的 API 对象 替换原有的 API 对
  • Vue-Router总结

    路由三大组成部分 router link 导航 link 标签 router view 路由视图 路由页面呈现的地方 new VueRouter 路由配置 routes router link属性 1 to进行页面跳转 更改路径 2 tag
  • 着手MQTT.fx软件应用,利于深入了解MQTT协议数据连接、传递、订阅/发布流程

    第一步 Extras gt Edit connection 第二步 添加连接信息 第三步 选择连接的服务器 第四步 点击连接 成功就变为绿色 第五步 订阅 第六步 发布 第七步 查看订阅数据 这大致就是一个基本的使用过程 MQTT fx的下
  • 软件工程毕业设计题目合集【含源码+论文】

    文章目录 前言 题目1 基于SSM的房屋出租出售系统 br 题目2 基于SSM的房屋租赁系统 br 题目3 基于SSM的个人健康信息管理系统 br 题目4 基于SSM的共享充电宝管理系统 br 题目5 基于SSM的即动运动网站 br 前言
  • 操作系统期末整理!!!重要!!

    操作系统 期末可以过啦 第一章 操作系统引论 1 操作系统的定义 2 操作系统的作用 3 操作系统发展过程 4 各类型操作系统的特点 5 操作系统的基本特征 6 操作系统的基本功能 7 异常和中断的区别 8 为什么说中断是操作系统的核心技术
  • Keil报: warning: #223-D: function “某某某“ declared implicitly 的警告,三个解决方法

    原因 找不到 某某某 函数 解决 看有没有 include 相关头文件 看函数定义有没有出错 函数定义有一点不同就会出现上述原因 我个人遇到的比较奇葩的原因 emmm 人比较奇葩吧 在两个不同的 h文件中写了相同的 ifndef INA H
  • led灯条串联图_三分钟学会DIY个性LED灯

    上篇文章介绍了LED光源 主要介绍LED结构 常用参数 型号 常见品牌等内容 回看的小伙伴请点击照明灯饰专栏 今天主要介绍LED灯的工作原理与常见的LED灯 明白之后DIY自己的个性LED毫无压力 先别跳过下面有干货 一 LED驱动 上篇文
  • GoogLeNet论文阅读笔记

    目录 前言 GoogLeNet论文阅读笔记 Abstract 1 Introduction 2 Related Work 3 Motivation and High Level Considerations 4 Architectural
  • 上升沿_输入输出的上升沿和下降沿是怎么来的,一起看看

    高电平 低电平 上升沿和下降沿的区别 数字电路中 电平从低电平 逻辑信号为0 变为高电平 逻辑信号为1 的那一瞬间叫作上升沿 电平从高电平 逻辑信号为1 变为低电平 逻辑信号为0 的那一瞬间叫作下降沿 高电平触发 是指I O口电平为高电平时
  • Java实现给定两个 int 变量, 交换变量的值

    给定两个 int 变量 交换变量的值 1 创建变量i实现交换 2 不创建临时变量利用加减法实现 public class Solution public static void main String args int a 10 int b
  • C++ C2460 error

    关于该错误的官方说明 https msdn microsoft com en us library 1kf0205c aspx 结构形如 identifier1 uses identifier2 类或结构 identifier2 被声明为其
  • django中的跨域问题以及解决策略

    目录 跨域请求 同源策略 CORS 跨域资源共享 简介 CORS基本流程 解决跨域问题的方法 CORS两种请求详解 预检 解决跨域问题 服务端 简单请求 非简单请求 解决跨域问题 第三方 后端配置 解决跨域问题 前端 跨域请求 跨域是指浏览
  • Object Detection网络框架学习:Faster-RCNN

    经过RCNN和Fast RCNN的积淀 Ross B Girshick在2016年提出了新的Faster RCNN 在结构上 Faster RCN已经将特征抽取 feature extraction proposal提取 bounding