16_更快的速度与精度:Faster R-CNN

回顾R-CNN:链接

回顾Fast R-CNN:链接

1.1 简介

Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16作推理速度在GPU上达到5fps(包括候选区域的生成),准确率为网络的backbone,也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中获得多个项目的第一名。

Faster R-CNN是在Fast R-CNN基础上进一步改进的目标检测框架,旨在提高目标提议生成的效率,进而加速整个检测过程。Faster R-CNN主要通过引入一个新的组件——区域生成网络(Region Proposal Network, RPN)来实现这一目标。以下是Faster R-CNN的关键特点和工作流程:

关键组成部分

  1. 特征提取器(Feature Extractor):与Fast R-CNN类似,Faster R-CNN首先使用一个深度卷积神经网络(如VGG、ResNet等)作为特征提取器,从输入图像中提取丰富的特征图。

  2. 区域提议网络(RPN):这是Faster R-CNN的核心创新点。RPN直接在最后一个卷积层的特征图上滑动,使用小的卷积核(例如3x3)来预测每个位置的多个可能的物体边界框(称为anchors)及其对应的objectness得分。这个分数衡量了该区域包含对象的概率。RPN的设计允许它在提出区域提议的同时进行背景与前景的初步区分,从而替代了之前需要单独运行的选择性搜索或其它启发式方法。

  3. 分类器:基于RPN提出的区域提议,Faster R-CNN会进一步细化这些提议,使用RoI Pooling层将不同大小的提议映射到固定大小的特征图块上,然后送入一个或多个全连接层进行分类和边框回归。这一步骤与Fast R-CNN相似,但其输入现在来自于RPN而非外部区域提议方法。

训练流程

  1. RPN网络训练:首先,使用一个预训练的ImageNet模型(如VGG16)初始化网络,并仅训练RPN部分,目的是让RPN学会生成高质量的区域提议。这一步骤产出模型M1。

  2. 生成提案并训练检测网络:利用训练好的RPN模型M1,从训练图像中生成提案P1。然后,使用这些提案训练Faster R-CNN的分类器和边框回归部分,这一步通常会微调特征提取器的参数,以适应检测任务。

  3. 端到端训练:在RPN和检测网络的参数都经过初步优化后,整个Faster R-CNN系统(包括RPN和后续的分类回归部分)可以进行端到端的微调,以最小化分类错误和边界框回归误差,进一步提升整体性能。

优势

  • 速度快:由于RPN直接在特征图上操作,省去了耗时的区域提议生成步骤,使得整个检测流程更加高效,接近实时处理。
  • 精度高:结合了深度学习的强大分类与回归能力,Faster R-CNN在多个数据集上展示了优越的检测精度。
  • 端到端可训练:整个系统可以作为一个统一的模型进行训练,促进了参数间的协同优化,提升了模型的泛化能力。

Faster R-CNN通过整合区域提议和目标检测到一个统一的网络结构中,不仅大幅提高了目标检测的速度,同时也保持了较高的检测精度,是目标检测领域的一个重要里程碑。

该模型出自论文《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》下面我们来学习一下。

1.2 Faster R-CNN整体流程

Faster主要是用RPN替代了之前的SelectiveSearch算法,使得速度大幅上升,其余部分和fast基本相同。

 1.输入图像

  • 输入一张待检测的图像。

2. 特征提取

  • 整张图像通过一个预训练的卷积神经网络(Backbone,如VGG16、ResNet等)进行前向传播,提取出特征图(Feature Map)。这个特征图保留了原始图像的空间信息,同时蕴含了丰富的视觉特征。

3. 区域提议网络(RPN)

  • 生成Anchors:在特征图的每个位置上,预先定义一组不同尺度和长宽比的参考框(称为Anchors)。这些Anchors覆盖了图像中可能出现的各种大小和形状的目标。

  • 滑动窗口预测:RPN在网络的最后一个卷积层特征图上滑动,对每个位置上的Anchors进行分类(前景/背景)和边界框回归(调整Anchors以更好地拟合目标)。

    • 分类任务:使用小的卷积核(如3x3)后接一个1x1卷积层,预测每个Anchor属于目标(前景)还是背景的概率(2k)。

    • 回归任务:同样使用1x1卷积层预测每个Anchor的边界框调整参数(4k),以便更精确地定位目标。

  • 非极大值抑制(NMS):根据分类得分筛选出一定数量的高质量区域提议,并通过NMS去除高度重叠的提议,最终保留一定数量的候选框进入下一阶段。

4. 区域兴趣池化(RoI Pooling)

  • 对于RPN生成的每个候选区域,应用RoI Pooling层将其映射到固定大小(如7x7)的特征图块。RoI Pooling确保不同大小的区域在进入全连接层之前能够被统一处理。

5. 目标分类与精确定位

  • 将RoI Pooling后的特征输入到一系列全连接层,进行两部分处理:

    • 分类:判断每个候选框内的物体属于哪一类,通常使用softmax函数输出每类的概率。

    • 边框回归:进一步细化候选框的位置,通过回归预测更精确的边界框坐标。

6. 训练流程

Faster R-CNN的训练通常分为多个步骤,包括先训练RPN,然后使用RPN产生的提议训练Fast R-CNN部分,最后进行端到端的微调。训练过程中涉及损失函数的联合优化,包括RPN的分类和回归损失,以及Fast R-CNN部分的分类和回归损失。

7. 测试推理

  • 在测试阶段,输入图像经过上述流程,RPN生成区域提议,然后对这些提议进行分类和精确定位,输出最终的检测结果,包括每个检测框的类别标签、置信度得分和精确位置。

通过这样的流程,Faster R-CNN能够在保证较高检测精度的同时,显著加快检测速度,成为当时目标检测领域的先进算法之一。

1.3 RPN结构

RPN整体流程

区域提议网络(Region Proposal Network, RPN)是Faster R-CNN中的一个核心组件,它负责高效地生成大量可能包含目标对象的候选区域(Region Proposals)。以下是RPN的具体工作流程:

1. 输入特征图:RPN基于特征提取网络(如VGG、ResNet)的最后一个卷积层的输出特征图进行操作。这个特征图不仅保留了图像的空间结构信息,还包含了丰富的高层语义特征。

2. Anchor生成:在特征图的每个位置上,预先定义一组不同尺度和纵横比的矩形框,称为Anchors。这些Anchors覆盖了多种大小和形状,旨在捕捉不同尺寸和长宽比的目标。Anchor的配置(如尺度、纵横比)是预先设定的,并在整个图像上均匀分布。

3. 滑动窗口:RPN在网络的特征图上采用滑动窗口(padding=1)的方式,对每个位置的多个Anchors进行处理。这意味着对于特征图上的每个像素位置,都会有一组固定的Anchors与其对应。

4. 特征提取:在每个Anchor对应的特征图位置上,使用小的卷积核(例如3x3)来提取特征,或者直接利用该位置的特征图值,这一步是为了为后续的分类和回归任务准备特征。

5. 分类与回归分支:对于每个Anchor,RPN同时执行两项任务:分类任务:通过一个全连接层(通常是1x1卷积层)预测每个Anchor是否包含目标(前景)或为背景。这通常使用softmax函数输出概率。回归任务:另一个全连接层(也是1x1卷积层)预测如何调整Anchor的边界框以更好地匹配潜在目标的真实边界。这通常输出四个坐标偏移量(dx, dy, dw, dh)。

6. 输出:RPN输出两组数据:一组是每个Anchor属于前景(目标)的概率分数。另一组是针对每个Anchor的边界框回归参数。

7. 非极大值抑制(NMS):基于分类得分,选择得分较高的Anchor,并通过NMS去除高度重叠的候选框,以减少冗余并提高检测效率。通常会设置一个阈值来控制保留的候选框数量。

8. 输出区域提议:经过NMS处理后,保留下来的候选框作为高质量的区域提议,供后续的Fast R-CNN部分进行精细的分类和定位。

参数解释

对于下图的参数,首先介绍一下各个量的意义:k是指anchor的数量,那么2k是指针对每个anchor生成了两个概率,一个是它为背景的概率,一个是它为前景的概率。4k是指每个anchor的4个回归参数。256是指将ZFnet作为backbone(骨干网络)生成的特征图的深度(channel)(如果骨干网络是VGG16,那么256就应当变成512)。

原图像素定位

对于下图,我们首先计算它在特征图的中心点在原图上对应的位置:以X轴为例(注意像素坐标系的XY轴,Y轴是垂直向下的),首先我们将原图的宽度除以特征图的宽度,然后取整得到一个步距stirde。假设我们在特征图的X为3,那么在原图的对应就是步距乘以特征图的位置。Y轴同理。

然后我们再以这个点为中心去计算K个anchor box。每个anchorbox都是给定的大小以及长宽比例。


Anchor

三种尺度,三种比例,一共有3x3=9个anchor,那么我们会生成9x2=18个目标概率和9x4=36个边界框回归参数。

通过一个小的感受野去预测比它大的目标是有可能的。

拓展:感受野

感受野描述了网络中某一层的神经元对输入图像响应的区域大小,即该神经元“看到”或“感受到”的输入空间区域。这个概念有助于理解网络如何逐步构建对输入数据的高级抽象表示,以及网络如何在空间上捕捉和整合信息。

举个例子:当某一层神经网络的感受野为5时,这意味着该层中的每个神经元或特征图上的每个元素,其所依赖并响应的输入图像区域大小为5x5(假设是二维卷积且感受野为正方形)。换句话说,这一层中的每个输出特征是通过考虑输入图像中一个5x5像素的局部区域计算得来的。

计算公式如下:(默认padding为0)

1.4 正负样本

正负样本采用1:1分配,加入有256个样本,那么正负样本各占128个,如果正样本少于128就用负样本来填充。例如正样本只有100个,那么负样本个数就是256-100=156个。

如何定义正负样本?

对于正样本有两种方式:(1)给出的anchor与GT有最大的IOU(2)某个anchor与GT的IOU>0.7,那么这个anchor就是一个正样本

负样本:与GT的IOU<0.3。

1.5 RPN的多任务损失函数

注意:这不是Faster的损失函数,Faster的损失函数和Fast是一样的。

1.6 Faster R-CNN 如何进行训练

1.7 总结

2. pytorch复现

待更新。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开放式运动耳机推荐的品牌都有哪些?五款2024靠谱机型推荐!

​作为一位耳机领域的资深数码评测师&#xff0c;我极力推荐开放式耳机作为日常佩戴之选。这款耳机凭借其创新的非入耳设计&#xff0c;有效避免了传统入耳式耳机长时间佩戴导致的耳道不适和感染风险&#xff0c;同时提供了稳固舒适的佩戴体验&#xff0c;特别适合运动爱好者如…

Android network - NUD检测机制(Android 14)

Android network - NUD检测机制 1. 前言2. 源码分析2.1 ClientModeImpl2.2 IpClient2.3 IpReachabilityMonitor 1. 前言 在Android系统中&#xff0c;NUD&#xff08;Neighbor Unreachable Detection&#xff09;指的是网络中的邻居不可达检测机制&#xff0c;它用于检测设备是…

LVS FILTER UNUSED OPTION

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 过滤一些版图与spice网表对不上的器件。 一般后端遇不到这个问题,因为通常是需要写到网表中的decap没有写出来造成的,如下图。

ceph-volume inventory KeyError: ‘TYPE‘ 处理

是否有人跟我一样碰到这样的情况 执行ceph-volume inventory报错 还好有错误日志可以看 [2024-07-05 11:40:40,540][ceph_volume.process][INFO ] Running command: /usr/sbin/blkid -c /dev/null -p /dev/ceph-c5fd6684-3851-49ab-bd44-f6743a79e24f/osd-block-42d41cd1-82…

半导体切割研磨废水的处理技术

半导体切割研磨废水处理是一个复杂而关键的过程&#xff0c;其废水主要来源于切割、研磨等工艺环节&#xff0c;这些过程中使用的化学品、冷却水、洗涤水等会产生含有重金属、有机物、酸碱度不稳定以及高浓度硅化合物等污染物的废水。针对这些废水的特性&#xff0c;半导体行业…

2025深圳国际消费电子展览会

2025深圳国际消费电子展览会 时间&#xff1a;2025年06月25-27日 地点&#xff1a;深圳国际会展中心(新馆) 详询主办方陆先生 I38&#xff08;前三位&#xff09; I82I&#xff08;中间四位&#xff09; 9I72&#xff08;后面四位&#xff09; 展会介绍&#xff1a; 20…

SRC实战:无中生有的接口和参数

今天分享的这个漏洞怎么说呢&#xff0c;虽然也是个高危&#xff0c;但是其实挺简单的&#xff0c;一个很eazy的越权&#xff0c;但是我觉得多多少少还是有点意思吧。 0x00 这是一个移动端的应用程序&#xff0c;前面比较常规&#xff0c;模拟器 BP&#xff0c;跑了一下所有…

你的机器人购物新体验——安全、高效、无忧

如果你跟我一样&#xff0c;对找到那些“恰到好处”的商品充满渴望&#xff0c;那么&#xff0c;让我来告诉你为什么BFT会成为你的下一个购物“心头好”。 BFT的优势 高效安全的支付体系&#xff1a;BFT交易系统保障了交易的安全性和透明性&#xff0c;让你的每一笔消费都安全…

python解析Linux top 系统信息并生成动态图表(pandas和matplotlib)

文章目录 0. 引言1. 功能2.使用步骤3. 程序架构流程图结构图 4. 数据解析模块5. 图表绘制模块6. 主程序入口7. 总结8. 附录完整代码 0. 引言 在性能调优和系统监控中&#xff0c;top 命令是一种重要工具&#xff0c;提供了实时的系统状态信息&#xff0c;如 CPU 使用率、内存使…

我爱服务器——LVM实战学习

后来呀&#xff0c;天亮之前毕业后踏入服务器领域了。。。。。。 LVM&#xff08;Logical Volume Manager&#xff09;是一个高级的磁盘管理框架&#xff0c;它允许用户将多个物理硬盘组合成一个逻辑卷&#xff0c;从而提供更大的存储空间、更高的灵活性和更好的数据管理能力。…

创业新选择:乐财业,让财税事业更简!

在市场需求和国家政策的双重驱动之下&#xff0c;【乐财业智慧财税赋能平台】基于鹦鹉智能财税系统、完善的税务资源供应链&#xff0c;财税专家团等&#xff0c;首创为企业提供“业财税”一体化的一站式财税解决方案&#xff0c;让财税生意更好做。 乐财业通过全国布局线下渠道…

Windows中Git的使用(2024最新版)

Windows中Git的使用 获取ssh keys本地绑定邮箱初始化本地仓库添加到本地缓存区提交到本地缓存区切换本地分支为main关联远程分支推送到GitHub查看推送日志 Git 2020年发布了新的默认分支名称"main"&#xff0c;取代了"master"作为主分支的名称。操作有了些…

MySQL数据库主从复制+mycat读写分离+MHA实操

目录 一、主从复制 1.1 主从复制简介 1.2 MySQL支持的复制类型 1.3 主从复制的工作过程 1.4 主从复制的同步模式 1.4.1 异步复制&#xff08;Asynchronous replication&#xff09; 1.4.2 全同步复制&#xff08;Fully synchronous replication&#xff09; 1.4.3 半同…

React+TS前台项目实战(二十三)-- 基于属性自定义数值显示组件Decimal封装

文章目录 前言Decimal组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天要封装的Decimal 组件&#xff0c;是通过传入的属性进行定制化显示数值&#xff0c;在渲染时&#xff0c;会根据不同的情况显示整数部分、小数部分和单位&#xff0c;支持自定义样式…

Go源码--context包

简介 Context 是go语言比较重要的且也是比较复杂的一个结构体&#xff0c;Context主要有两种功能: 取消信号&#xff1a;包括直接取消&#xff08;涉及的结构体&#xff1a;cancelCtx ; 涉及函数&#xff1a;WithCancel&#xff09;和携带截止日期的取消&#xff08;涉及结构…

【Java安装】windows10+JDK21+IDEA

文章目录 一、JDK安装1. 下载完成后按照自己需要的位置安装2. 配置环境变量2.1 JAVA_HOME变量2.2 PATH配置 3. 验证4. helloworld 二、IDEA安装三、IDEA-HelloWorld 一、JDK安装 JDK安装链接 1. 下载完成后按照自己需要的位置安装 2. 配置环境变量 2.1 JAVA_HOME变量 安装…

JVM原理(三):JVM对象回收判定机制与回收算法

如何判断一个对象是否存活(即是否还分配在堆中)&#xff0c;那看他是否还在用。 1. 引用计数算法 这是一种判断方式&#xff0c;相应的方法就是&#xff1a;如果一个对象被引用&#xff0c;那将被引用的对象中的一个计数器加一&#xff0c;引用失效就减一。在任何时刻引用计数…

QT实现GIF动图显示(小白版,可直接copy使用)

需要你自己提前设置好动图的位置&#xff0c;本例中存放于"/Users/PLA/PLA/PLA.gif widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie> #include <QLabel>class Widget : public QWidget {Q_OBJECTpublic:explicit Wid…

mssql查询历史执行过的语句日志

SELECT deqs.creation_time,dest.text AS [SQL Text],deqs.execution_count,deqs.total_elapsed_time,deqs.total_worker_time FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest--where dest.text like %这个是我的条件&#…

基于Springboot的智慧养老中心管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Springboot的智慧养老中心管理系统,…