MXNet的Faster R-CNN(基于区域提议网络的实时目标检测)《2》

news2024/9/25 9:32:31

上一篇文章 是对这个模型做个测试,效果很不错,然后这节,我们来关注下论文中的一些知识点 

原论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

本文不是按照原论文的顺序一路下来讲解,按照自己对其的理解做说明,希望能够帮到大家的更进一步的理解

这个模型既然是基于区域提议网络(Region Proposal Network (RPN)),那这个RPN的方法在这个模型中起到什么作用呢?
作用:可以训练出一个判断图片中是否有对象以及是否生成边界框的区域方案的网络,也就是说可以判别出图片中包含哪些对象,还可以通过锚框给标注出来。我们先来看下论文中的一张图:

左边:在卷积特征图上面有一个sliding window滑动窗口,在它的中心位置点叫,在滑动的时候会预测多个区域提议(锚框),而且这个锚是不变的,始终保持在中心位置。这个锚框数的数量在这里默认是9,是3个尺度和3个纵横比的组合,3*3=9
右边:是VOC数据集的测试效果,可以看到图片中的各种对象都识别出来了,且生成了锚框标注。
我们的锚点设计提出了一种解决多尺度(和纵横比)的新方案。由于这种基于锚点的多尺度设计,我们可以简单地使用在单尺度图像上计算的卷积特征,正如Fast R-CNN检测器所做的那样。多尺度锚点的设计是共享特征而无需额外寻址尺度成本的关键组件。

平移不变锚

我们的RPN方法的一个重要特性是,它是平移不变的,无论是就锚点而言,还是就相对于锚点计算提议的函数而言。
平移不变的属性还可以减小模型的大小。
如,在MultiBox有一个(4 + 1)×800=4000维全连接输出层,且不是平移不变,而我们的方法在k = 9个锚点的情况下是一个(4 + 2)×9=54维卷积输出层。可以看出在使用RPN方法,这个参数量就小很多了。

多尺度预测

对于多尺度的预测,除了我们这里说到的移动滑窗的方法,还有就是常见的基于图像和特征金字塔,图像在多个比例尺上调整大小,并为每个比例尺计算特征图。这种方法通常很有用,但很耗时,所以我们使用这种在特征图上运用滑动窗口的办法。

例如,在DPM和基于CNN的方法,使用不同的过滤器大小(如5×7和7×5)分别训练不同纵横比的模型。如果使用这种方式来处理多个尺度,则可以将其视为“过滤器金字塔”,第二种方式通常与第一种方式一起采用,如下图: 

(a)构建图像和特征图的金字塔,并在所有尺度上运行分类器。
(b)在特征图上运行多个比例尺度/大小的过滤器金字塔。
(c)我们在回归函数中使用金字塔的参考框。

损失函数

两部分组成,分类损失和回归损失,直接上公式看下损失函数,是归一化的分类log损失+λ*回归log损失,其中的回归损失有一个超参数λ,从后面实验的参数比对,设置成10的效果最好,也是默认值

p_{i}:预测锚是一个物体的概率,p_{i}^{*}:正类锚框1与负类锚框0,N_{cls}:迷你批处理大小256

t_{i}:预测边界框(4个参数化坐标的向量),t_{i}^{*}:正类锚框相关的基本真实方框的情况,N_{reg}:锚点数量2400

回归损失可以看到乘以一个p_{i}^{*},说明只跟正类锚框有关,因为负类锚框为0

边界框回归

对于边界框回归,我们采用如下4个坐标的参数化

x、y、w、h:预测框
x_{a}y_{a}w_{a}h_{a}:锚框
x*、y*、w*、h*:真实框
这样就可以认为是从锚框到附近真实框的边界框回归。

共享特征训练网络 

有三种共享特征的训练网络的方法:

1、Alternating training交替训练。在这个解决方案中,我们首先进行训练RPN,并使用RPN的这些建议来训练Fast R-CNN。然后使用Fast R-CNN调优的网络初始化RPN,并迭代此过程。这是本文所有实验中使用的方法

2、Approximate joint training近似联合训练。RPN网络和Fast R-CNN网络在训练过程中合并为一个网络,在每个SGD迭代中,前向传递生成区域建议,这些建议在训练Fast R-CNN检测器时被视为固定的预先计算的建议。反向传播照常进行,其中对于共享层,来自RPN损失和Fast R-CNN损失的反向传播信号被组合在一起。这个解决方案很容易实现。但是这个解决方案忽略了w.r.t.的导数,提议框的坐标也是网络响应,所以叫做近似。在我们的实验中,我们经验地发现该求解器产生了接近的结果,但与交替训练相比,训练时间减少了约25-50%。

3、Non-approximate joint training非近似联合训练。RPN预测的边界框也是输入的函数。在Fast R-CNN中的RoI池化层接受卷积特征和预测的边界框作为输入,因此理论上有效的反向传播求解器也应该涉及到框坐标w.r.t.的梯度,这些梯度在近似联合训练中被忽略,在非近似联合训练解决方案中,我们需要一个RoI池化层,该层可微于框坐标。这不是一个简单的问题,可以通过“RoI翘曲”层给出解决方案,但这超出了本文的讨论范围

交替优化来学习共享特征

第一步,训练RPN,使用ImageNet预训练的模型初始化该网络,并对区域建议任务进行端到端微调

第二步,我们使用第一步RPN生成的建议,用Fast R-CNN训练一个单独的检测网络,该检测网络也由ImageNet预训练模型初始化。在这一点上,两个网络不共享卷积层

第三步,我们使用检测器网络初始化RPN训练,但我们修复了共享的卷积层,只对RPN特有的层进行微调。现在两个网络共享卷积层。

第四步,保持共享卷积层固定,我们微调Fast R-CNN的独特层。因此,两个网络共享相同的卷积层,形成一个统一的网络。类似的交替训练可以进行更多的迭代,但我们观察到可以忽略不计的改进

注意事项

另外需要注意的是,在训练过程中,我们忽略了所有跨界锚点,它们不会造成损失。对于典型的1000 × 600图像,总共大约有20000个(≈60 × 40 × 9)锚点。在忽略跨界锚点的情况下,每张图像大约有6000个锚点用于训练。如果训练中不忽略边界异常值,则在目标中引入较大的、难以修正的误差项,训练不收敛。

其余部分主要就是小结和一些不同模型不同数据集下的实验数据的对比,这里就忽略不赘述了。在最后,论文也再次说明了使用这种方法可以探测到尺度和纵横比范围很广的物体。每个输出框都与一个类别标签和softmax[0,1]产生的分数阈值相关联着。而且利用下游检测网络的特点,区域提议的步骤几乎是零成本的。我们的方法使统一的、基于深度学习的对象检测系统能够以接近实时的帧速率运行。学习的RPN还提高了区域提议的质量,从而提高了整体目标检测精度。

这几天羊了,反复发烧,还好白天又好了,喉咙太痛,还是坚持先把论文过一遍,由于水平有限所以其中的错误之处或不全面在所难免,有错误望伙伴们指正,一起交流进步。 

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

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

相关文章

Python基础语法(三)

Python基础语法(三) 列表和元组 列表是什么, 元组是什么 编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可 num1 10 num2 20 num3 30 ......但是有的时候, 代码中需要表示的数据特别多…

小程序:后台交互-个人中心

目录 获取用户昵称头像和昵称 wx.getUserProfile bindgetuserinfo oa-mini 登录过程 登录-小程序 wx.checkSession wx.login wx.request 后台 准备数据表 反向生成工具生成 准备封装前端传过来的数据 小程序服器配置 导入微信小程序SDK application.yml WxPro…

我眼中的Java内存模型

一.JVM内存结构 (1)方法区只是一种概念上的区域,并说明了其应该具有什么功能,但是没有规定这个区域到底应该处于何处,不同版本的方法区所处位置不同,并不是绝对意义上的物理区域。 (2&#xff0…

CSRF攻击方式及预防准则

跨站点请求伪造(CSRF) 是一种攻击类型,当恶意网站、电子邮件、博客、即时消息或程序导致用户的Web浏览器在用户通过身份验证后对受信任的站点执行不需要的操作时,就会发生这种攻击。CSRF攻击之所以有效,是因为浏览器请…

OpenHarmony#深入浅出学习eTs#(二)拖拽式UI

本项目Gitee仓地址:深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com) 一、创建支持Super Visual的工程 在这里选择直尺Super Visual的选项,调整当前路径,进入绘制界面 二、UI设计界面介绍 在左侧是路径(即文件管理器&#x…

3.我们一起来学习Linux 安装

Linux 安装 本章节我们将为大家介绍 Linux 的安装,安装步骤比较繁琐,现在其实云服务器挺普遍的,价格也便宜,如果自己不想搭建,也可以直接买一台学习用用。 本章节以 centos6.4 为例。 可以去官网下载最新版本&…

【C语言进阶】通讯录再优化?学会文件操作,没有数据库也能保存和管理本地数据

目录 🥝前言🥝: 一、🍓文件概述🍓: 1.为什么使用文件: 2.什么是文件: ①.程序文件: ②.数据文件: ③.文件名: 二、🍊文件顺序读写&…

JAVA集成阿里云OSS对象存储

JAVA集成阿里云OSS对象存储1 : 配置集成1.1、对象存储OSS2 : 代码配置2.1、说明2.2、配置文件2.3、加载配置文件代码2.4、封装统一的DTO2.5、OSS上传Controller2.6、OSS上传Service2.7、OSS上传ServiceImpl3 : 测试3.1、文件上传3.2、文件迁移4 : 总结4.1、参考资料4.2、注意事…

浅谈 C++ 字符串:std::string 与它的替身们

浅谈 C 字符串:std::string 与它的替身们 文章目录浅谈 C 字符串:std::string 与它的替身们零、前言一、前辈:C 风格的字符串1.1 什么是 C 风格的字符串1.2 C 风格的字符串有什么缺陷1.2.1 以 \0 作为结尾,没有直接指明长度1.2.2 …

Android技术分享——APT实现ButterKnife【实战学习】

APT APT (Annotation Processing Tool) 是一种处理注释的工具,它对源代码文件进行检测并找出其中的 Annotation,根据注解自动生成代码,如果想要自定义的注解处理器能够运行,必须要通过 APT 工具来处理。 …

Python实现FA萤火虫优化算法优化支持向量机分类模型(SVC算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法(Fire-fly algorithm,FA)由剑桥大学Yang于2009年提出 , 作…

maven第一篇:安装maven以及配置

本篇就是聊如何在电脑上安装maven,以及简单的配置基础环境。 首先需要了解什么适合maven,对于这个理论知识,还是老规矩直接复制一下; Maven 是一款基于 Java 平台的项目管理和整合工具,它将项目的开发和管理过程抽象…

提速300%,PaddleSpeech语音识别高性能部署方案重磅来袭!

在人机交互的过程中,语音是重要的信息载体,而语音交互技术离不开语音识别与语音合成技术。飞桨语音模型库PaddleSpeech为开发者们使用这些技术提供了便捷的环境。本次PaddleSpeech迎来重大更新——1.3版本正式发布。让我们一起看看,这次Paddl…

这样实操一下 JVM 调优,面试超加分

1.写在前面 前段时间一位读者面了阿里,在二面中被问到 GC 日志分析,感觉回答的不是很好,过来找我复盘,大致听了他的回答,虽然回答出了部分,但是没抓到重点。 GC 日志分析算是 JVM 调优中比较难的部分&…

【XR】如何提高追踪保真度,确保内向外追踪系统性能

Constellation是Oculus研发的追踪系统。日前,负责AR/VR设备输入追踪的Facebook工程经理安德鲁梅利姆撰文介绍了他们是如何用基于Constellation追踪的控制器来提高交互保真度。具体整理如下: 我们的计算机视觉工程师团队一直在努力为Oculus Quest和Rift …

【再学Tensorflow2】TensorFlow2的模型训练组件(1)

TensorFlow2的模型训练组件(1)数据管道构建数据通道应用数据转换提升管道性能特征列特征列用法简介特征列使用示例激活函数常用激活函数激活函数使用示例Tensorflow模型中的层内置的层自定义模型中的层参考资料Tensorflow中与模型训练相关的组件主要包括…

图像采样与量化

数字图像有两个重要属性:空间位置(x,y)以及响应值I(x,y)。数字图像中像素的空间位置及响应值都是离散值,传感器输出连续电压信号。为了产生数字图像,需要把连续的数据转换为离散的数字化形式。采用的方式是图像量化与采样。 图像采样 图像量化…

【数据结构】(初阶):二叉搜索树

​ ✨前言✨ 🎓作者:【 教主 】 📜文章推荐: ☕博主水平有限,如有错误,恳请斧正。 📌机会总是留给有准备的人,越努力,越幸运! 💦导航助手&#x…

Docker+Selenium Grid运行UI自动化

简介 使用Selenium Grid可以分布式运行UI自动化测试,可以同时启动多个不同的浏览器,也可以同时启动同一个浏览器的多个session。这里使用Docker Compose来同时启动不同浏览器的容器和Selenium Grid,只需一条命令就把自动化运行环境部署好了。…

verilog仿真技巧与bug集合

文章目录赋值语句想法一些建议时钟信号关于异步fifo写入数据时wp1,读出数据时rp1一些自己的bug关于操作符&关于if-else关于modelsim使用1.初学者不建议在设计文件中加入仿真语句; 2.初学者也不会在tb里使用类似always一样的设计。 对于1.因为把仿真…