Faster RCNN 论文阅读

news2024/12/24 2:32:49

1.网络架构

1677898772354

1677898794137

VGG16网络

anchors:人工放上去的

RPN对anchors进行二分类,正样本,负样本

RoIP:前面的框框已经圈出目标,但还不知道具体属于哪个类,它就是干这个工作的

2.VGG网络

VGG网络可以任意替换其他的任意神经网络,resnet等

以VGG网络为例:

  1. 首先缩放至固定大小MxN。VGG网络输出Feature Map
  2. 放入共享Conv layers
  3. RPN计算proposals
  4. Roi Pooling层则利用,proposals从feature maps中提取proposal features
  5. 送入后续全连接和softmax网络作classification。

1677898815454

3.共享卷积层

以VGG网络为例:

  • Conv layers部分共有13个conv层, 13个relu层,4个pooling层。
  • 所有的conv层都是:kernel_size=3,pad=1, stride=1
  • 所有的pooling层都是:kernel_size=2,pad=0, stride=2
  • 在Faster RCNN Conv layers中对所有的卷积都做了扩边处理( pad=1,即填充一圈0),导致原图变为 (M+2)x(N+2)大小,再做3x3卷积后输出MxN 。
  • pooling层kernel_size=2,stride=2。这样每个经过 pooling层的MxN矩阵,都会变为(M/2)x(N/2)大小。
  • 一个MxN大小的矩阵经过Conv layers固定变为 (M/16)xN/16) (注:有四层pooling,2^4=16)

1677898831882

图像的大小改变都是有pooling造成的

为什么叫共享?因为VGG产生的Feature Map用于RPN的训练,同时也用于RCNN的训练

4.Anchors

绿框框逐行的扫描

备选框:有一定的可能性包含物体在里面

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

1677898845416

对每一个点都生成这样的框框,量是非常巨大的

  • 原文中使用的是ZF model中,其 Conv Layers中最后的conv5层 num_output=256,对应生成256 张特征图,所以相当于feature map每个点都是256-dimensions.
  • 训练程序会在合适的anchors中随机选取128个postive anchors+128 个negative anchors进行训练

1677898857320

例如:1677898869043

一个feature map 就产生17100个anchors

4.1对Anchor分配标签

  • 区分前景与背景Anchor,标记标签(1 正例, -1 负例,0忽略)

    • 正例:对于每一gt box,交并比最大的 anchor、与任一 gt box交并比超过一定阈值(0.7)
    • 负例:与所有gt boxes交并比小于一定阈 值(0.3) 其他忽略
  • 对每一前景anchor,根据对应的gt box计算回归值

回归值的计算,使得框框的位置挪到一个更精确的位置

5.RPN(Region Proposal Network)

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

输入:所有的anchors (数量巨大)

输出:(1)包含物体的概率

(2)调整anchors的位置1677898889400

anchors人工标定的9种大小,RPN把背景区分出来

1677898905424

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

生成检测框是非常耗时的,例如使用SPP(金字塔特征获取)

6.正负样本的判定

1677898918631

9*2=18

7.Bounding Box Regression

  • 我们的目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口G’。
  • Anchor box与predicted box, ground truth之间的平移量:1677898933613
  1. VGG输出50x38x512, 对应50x38xk个anchors
  2. RPN输出:
    1. 50x38x2k的positive/negative softmax分类特征矩阵
    2. 50x38x4k的regression坐标回归特征矩阵

8.Proposal Layer

  1. Proposal Layer负责综合变换量和positive anchors, 计算出精准的proposal。
  2. 3个输入: anchors分类结果,对应bbox的变换量和缩放信息
  3. 缩放信息:若经过4次pooling后WxH=(M/16)x(N/16),则缩放量为16。

1677898950462

处理流程:

  1. 生成anchors,依据变换量对所有的anchors做bbox regression回归。
  2. 按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors。
  3. 限定超出图像边界的positive anchors为图像边界,防止后续roi pooling时proposal超出图像边界。
  4. 剔除尺寸非常小的positive anchors。
  5. 对剩余的positive anchors进行NMS。
  6. 之后输出proposal=[x1, y1, x2, y2],对应的是MxN的图像尺度。

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

9.Roi pooling

  • 目前的proposals还 没有具体的物体信息。
  • 因此需要从已有的 bounding boxes中 提取特征。1677898968374

两个输入:

  1. 原始的feature maps
  2. RPN输出的proposal boxes1677898978507

为何要RoI Pooling

  1. proposals大小形状各不相同
  2. 从Spatial Pyramid Pooling发展而来1677898989755

信息的丢失

图像的失真

处理步骤:1677899009637

1677899022369

10.分类

  1. 通过全连接和softmax对proposals进行分类
  2. 再次对proposals进行bounding box regression,获 取更高精度的bbox

1677899034734

11.Faster RCNN的训练

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

12.网络总结

  1. 基于ZF或VGG16提取输入图像特征
  2. 生成anchors
  3. RPN计算:特征图feature map通过RPN预测anchor参数:置信度 (foreground)和转为预测框的坐标系数
  4. 根据anchors和RPN预测的anchors参数,计算预测框的坐标系数, 并得到每个预测框的所属类别labels。
  5. ROI Pooling把目标转为统一的固定尺寸。
  6. Fast RCNN 预测预测框的类别,和转为目标框的平移缩放系数。注意:这里要与RPN区分.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/389453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring核心模块——Aware接口

Aware接口前言基本内容例子结尾前言 Spring的依赖注入最大亮点是所有的Bean对Spring容器对存在都是没有意识到,Spring容器中的Bean的耦合度是很低的,我们可以将Spring容器很容易换成其他的容器。 但是实际开发的时候,我们经常要用到Spring容…

虚拟机安装Windows 10

虚拟机安装Windows 10 镜像下载 方法一:下载我制作好的镜像文件->百度网盘链接 提取码:Chen 方法二:自己做一个 进入微软官网链接 下载"MediaCreationTool20H2" 运行该工具 点击下一步选择路径,等他下载好就欧克了…

我就不信你还不懂HashSet/HashMap的底层原理

💥注💥 💗阅读本博客需备的前置知识如下💗 🌟数据结构常识🌟👉1️⃣八种数据结构快速扫盲🌟Java集合常识🌟👉2️⃣Java单列集合扫盲 ⭐️本博客知识点收录于…

MicroBlaze系列教程(7):AXI_SPI的使用(M25P16)

文章目录 AXI_SPI简介MicroBlaze硬件配置常用函数使用示例波形实测参考资料工程下载本文是Xilinx MicroBlaze系列教程的第7篇文章。 AXI_SPI简介 Xilinx AXI-SPI IP共有两个:一个是标准的AXI_SPI,即4线制SPI,CS、SCLK、MOSI和MISO,另一个是AXI_Quad SPI,支持配置成标准SP…

pygame10 扫雷游戏3

上一节课我们完成了扫雷游戏地图中雷数量的显示,今天我们将把雷的生成做出来 一、地雷的生成 地图中有20*20共400个格子,我们可以设定一共可以生成40个地雷,为了使得每次生成的地图都不一样,可以使用随机数randint,每…

为什么使用Junit单元测试?Junit的详解

Hi I’m Shendi 为什么使用Junit单元测试?Junit的详解 Junit简介 Junit是一个Java语言的单元测试框架。 单元测试是一个对单一实体(类或方法)的测试 JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression test…

AUTOSAR FunctionalSafety

概述 随着汽车功能复杂度的急剧增加,功能安全作为一个系统特征开始被重视,影响着系统设计决策。软件作为一个因素影响着系统级的复杂度。新的技术和概念可以被用在软件开发中来减少复杂度,来实现功能安全。 AUTOSAR提供了一些安全措施和机制来支持安全系统开发,但是并不是…

MATLAB绘制椭圆形相关系矩阵图

数据/代码准备 数据及代码下载: 下载专区-《MATLAB统计分析与应用:40个案例分析》程序与数据 绘图函数: matrixplot(data, PARAM1,val1, PARAM2,val2, ...) 案例 数据如下: MATLAB代码如下: clc close all clear …

升级 vue3 常见问题总汇

Ⅰ、前言 虽然 vue3 是没有删除 vue2 的 选项式 API , 但是我们升级vue3 还是需要修改很多问题的下面来看看我们升级常见的一些问题 👇 文章目录Ⅰ、前言Ⅱ、解决兼容问题1、路由的创建方式2、路由的方法变化3、升级 vuex 到 4.x4、作用域 插槽语法修改…

Hyperf使用RabbitMQ消息队列

Hyperf连接使用RabbitMQ消息中间件 传送门 使用Docker部署RabbitMQ&#xff0c;->传送门<使用Docker部署Hyperf&#xff0c;->传送门-< 部署环境 安装amqp扩展 composer require hyperf/amqp安装command命令行扩展 composer require hyperf/command配置参数 假…

Windows+VS2019用vcpkg编译colmap以及用Cmake编译colmap源码

WindowsVS2019用vcpkg编译colmap以及用Cmake编译colmap源码 Window下官方建议用vcpkg安装。这里我已经安装好了VS2019以及cuda11.7。 1.安装vcpkg git clone https://github.com/microsoft/vcpkg cd vcpkg .\bootstrap-vcpkg.bat2. 使用vcpkg编译colmap .\vcpkg install co…

Java软件开发好学吗?学完好找工作吗?

互联网高速发展的当下&#xff0c;Java语言无处不在&#xff1a;手机APP、Java游戏、电脑应用&#xff0c;都有它的身影。作为最热门的开发语言之一&#xff0c;Java在编程圈的地位不可撼动。可是&#xff0c;听名字就很专业的样子。Java语言到底好学吗&#xff1f;刚入坑编程圈…

CAPL脚本要注意区分elcount和strlen求数组长度的区别,不然要吃大亏

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

【C++】AVL树,平衡二叉树详细解析

文章目录前言1.AVL树的概念2.AVL树节点的定义3.AVL树的插入4.AVL树的旋转左单旋右单旋左右双旋右左双旋AVL树的验证AVL树的删除AVL树的性能前言 前面对map/multimap/set/multiset进行了简单的介绍&#xff0c;在其文档介绍中发现&#xff0c;这几个容器有个共同点是&#xff1…

Linux基础命令-setfacl设置文件ACL策略规则

Setfacl 命令介绍 先查看文档中如何描述这个命令的NAME setfacl - set file access control lists setfacl&#xff08;Set file access control lists&#xff09;直译过来是设置文件访问控制列表 &#xff0c;其主要功能是用于设置文件ACL策略规则。FACL即文件访问控制列表…

GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序,开发板实现录音

GEC6818开发板JPG图像显示 | 开发板实现录音一.GEC6818开发板JPG图像显示1.jpg图片特性2.如何解压缩jpg图片1.对jpegsrc.v8c.tar.gz进行arm移植2.进入~/jpeg-8c对jpeg库进行配置3.编译4.安装&#xff0c;将动态库存放到 /home/gec/armJPegLib5.清空编译记录6.自己查看下 /home/…

C语言-基础了解-06-C存储类

C存储类 一、存储类 存储类定义 C 程序中变量/函数的的存储位置、生命周期和作用域。 这些说明符放置在它们所修饰的类型之前。 下面列出 C 程序中可用的存储类&#xff1a; auto register static extern auto 存储类 auto 存储类是所有局部变量默认的存储类。 定义在函数…

【IDEA】如何在Tomcat上创建部署第一个Web项目?

看了网上很多教程&#xff0c;发现或多或都缺失了一些关键步骤信息&#xff0c;对于新手小白很不友好&#xff0c;那么今天就教大家如何在Tomcat服务器&#xff08;本地&#xff09;上部署我们的第一个Web项目&#xff1a; 共分为三个部分&#xff1a; 1. IDEA创建Web项目&am…

【编程实践】简单是好软件的关键:Simplicity is key to good software

Simplicity is key to good software 简单是好软件的关键 目录 Simplicity is key to good software简单是好软件的关键 Complexity is tempting. 复杂性很诱人。 The smallest way to create value创造价值的最小方法 Simple 简单的 Complexity is tempting. 复杂性很诱人…

【Vue】Vue的简单介绍与基本使用

一、什么是VueVue是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。1.构建用户界面传统方…