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.rhkb.cn/news/369229.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

狂赚三个亿,百亿医用耗材上市公司重金押注老人轮椅

布局海外市场&#xff0c;轮椅销量翻两番 作者 | 艾米莉 排版 | 张思琪 抛砖引玉 1.年销售60万台轮椅&#xff0c;英科医疗如何做到&#xff1f; 2.老年人轮椅是出海&#xff0c;还是深耕国内市场&#xff1f; 3.2022年全球轮椅市场规模为48亿美元&#xff0c;谁在喝汤&…

一文讲解Docker入门到精通

一、引入 1、什么是虚拟化 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;它允许在一台物理机上创建多个独立的虚拟环境&#xff0c;这些环境被称为虚拟机&#xff08;VM&#xff09;。每个虚拟机都可以…

Node.js的下载、安装和配置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

vue 组件el-tree添加结构指示线条

效果展示: 注意&#xff1a;组件中需要添加:indent"0" 进行子级缩进处理&#xff0c;否则会出现子级缩进逐级递增 :expand-on-click-node"false" 设置点击箭头图标才会展开或者收起 代码&#xff1a; <el-tree class"tree filter-tree" :da…

【解码现代 C++】:实现自己的智能 【String 类】

目录 1. 经典的String类问题 1.1 构造函数 小李的理解 1.2 析构函数 小李的理解 1.3 测试函数 小李的理解 1.4 需要记住的知识点 2. 浅拷贝 2.1 什么是浅拷贝 小李的理解 2.2 需要记住的知识点 3. 深拷贝 3.1 传统版写法的String类 3.1.1 拷贝构造函数 小李的理…

入门PHP就来我这(纯干货)08

~~~~ 有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 ~~~~ 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 1 PHP对象的高级应用 1.1 final关键字 final 最终的、最后的。被final修饰过的类…

LabVIEW汽车ECU测试系统

开发了一个基于LabVIEW开发的汽车发动机控制单元&#xff08;ECU&#xff09;测试系统。该系统使用了NI的硬件和LabVIEW软件&#xff0c;能够自动执行ECU的功能测试和性能测试&#xff0c;确保其在不同工作条件下的可靠性和功能性。通过自动化测试系统&#xff0c;大大提高了测…

【docker nvidia/cuda】ubuntu20.04安装docker踩坑记录

docker nvidia 1.遇到这个错误&#xff0c;直接上魔法(科学上网) OpenSSL SSL_connect: Could not connect to nvidia.github.io:443 这个error是运行 NVIDIA官方docker安装教程 第一个 curl 命令是遇到的 2. apt-get 更新 sudo apt update遇到 error https://download.do…

CDC实时同步进行时遇到不可抗力中断了怎么办?

目录 一、CDC技术的概念 二、CDC技术的应用场景 1.数据复制和同步 2.实时数据仓库 3.业务过程监控和审计 4.ETL 进程优化 三、CDC与数据管道的关系 1.区别 CDC&#xff08;Change Data Capture&#xff09; 数据管道&#xff08;Data Pipeline&#xff09; 2.联系 CDC是数据管道…

4面体空间5点结构种类与占比

在30个点的4面体中取5个点&#xff0c;有30*29*28*27*26/(5*4*3*2)142506种取法&#xff0c; 这里要求5个点必须是直链或支链。共有496个组合符合要求&#xff0c;按平移对称性可分成181个不同的结构 结构 数量 结构 数量 结构 数量 结构 数量 结构 数量 结构 数量 …

深入分析 Android BroadcastReceiver (九)

文章目录 深入分析 Android BroadcastReceiver (九)1. Android 广播机制的扩展应用与高级优化1.1 广播机制的扩展应用1.1.1 示例&#xff1a;有序广播1.1.2 示例&#xff1a;粘性广播1.1.3 示例&#xff1a;局部广播 1.2 广播机制的高级优化1.2.1 示例&#xff1a;使用 Pending…

【C++】 解决 C++ 语言报错:Double Free or Corruption

文章目录 引言 双重释放或内存破坏&#xff08;Double Free or Corruption&#xff09;是 C 编程中常见且严重的内存管理问题。当程序尝试多次释放同一块内存或对已经释放的内存进行操作时&#xff0c;就会导致双重释放或内存破坏错误。这种错误不仅会导致程序崩溃&#xff0c…

跑腿平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;基础数据管理&#xff0c;管理员管理&#xff0c;接单详情管理&#xff0c;跑腿员管理&#xff0c;跑腿任务管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;跑腿任务&#xff0c;接单员&…

HTML如何在图片上添加文字

HTML如何在图片上添加文字 当我们开发一个页面&#xff0c;插入图片时&#xff0c;需要有一组文字对图片进行描述。那么HTML中如何在图片上添加文字呢&#xff1f;这篇文章告诉你。 先让我们来看下效果图&#xff1a; 句子“这是一张夜空图片”被放置在了图片的左下角。 那么…

Wing FTP Server

文章目录 1.Wing FTP Server简介1.1主要特点1.2使用教程 2.高级用法2.1Lua脚本,案例1 1.Wing FTP Server简介 Wing FTP Server&#xff0c;是一个专业的跨平台FTP服务器端&#xff0c;它拥有不错的速度、可靠性和一个友好的配置界面。它除了能提供FTP的基本服务功能以外&#…

空调计费系统是什么,你知道吗

空调计费系统是一种通过对使用空调的时间和能源消耗进行监测和计量来进行费用计算的系统。它广泛应用于各种场所&#xff0c;如家庭、办公室、商场等&#xff0c;为用户提供了方便、准确的能源使用管理和费用控制。 可实现功能 智能计费&#xff1a;中央空调分户计费系统通过智…

【yolov8系列】ubuntu上yolov8的开启训练的简单记录

前言 yolov8的广泛使用&#xff0c;拉取yolov8源码工程&#xff0c;然后配置环境后直接运行&#xff0c;初步验证自己数据的检测效果&#xff0c;在数据集准备OK的情况下 需要信手拈来&#xff0c;以保证开发过程的高效进行。 本篇博客更注意为了方便自己使用时参考。顺便也记录…

Nginx 常用配置与应用

Nginx 常用配置与应用 官网地址&#xff1a;https://nginx.org/en/docs/ 目录 Nginx 常用配置与应用 Nginx总架构 正向代理 反向代理 Nginx 基本配置反向代理案例 负载均衡 Nginx总架构 进程模型 正向代理 反向代理 Nginx 基本配置反向代理案例 负载均衡 Nginx 基本配置…

Linux启动elasticsearch,提示权限不够

Linux启动elasticsearch&#xff0c;提示权限不够&#xff0c;如下图所示&#xff1a; 解决办法&#xff1a; 设置文件所有者&#xff0c;即使用户由权限访问文件 sudo chown -R 用户名[:新组] ./elasticsearch-8.10.4 //切换到elasticsearch-8.10.4目录同级 chown详细格式…

基于SpringBoot的就业信息管理系统

你好&#xff0c;我是计算机学姐码农小野&#xff01;如果你对就业信息管理系统感兴趣或有相关需求&#xff0c;欢迎私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; SpringBootMySql 工具&#xff1a; MyEclipse、Tomcat 系统展示…