深度学习之目标检测Faster RCNN模型算法流程详解说明(超详细理论篇)

news2024/9/21 16:22:58

1.Faster RCNN论文背景
2. Faster-RCNN算法流程
(1)Fast-RCNN算法流程
(2)特征提取conv layers
(3)Region Proposal Networks(RPN)
(4)ROI Pooling作用
(5)Classification
3.Faster RCNN问题和优缺点

本篇还有细节原理部分没有解释清楚,如有不懂可查看之前更详细部分文章

一、Faster RCNN论文背景

  在目标检测领域,传统的方法通常分为两个阶段:生成候选区域和对这些区域进行分类。然而,这些方法的处理速度较慢,限制了实时应用的可能性。在此之前,有两个重要的工作推动了目标检测领域的发展。第一个是R-CNN(Region-based Convolutional Neural Networks)方法,它首次将卷积神经网络(CNN)应用于目标检测中。R-CNN通过在图像中提取固定大小的候选区域,然后对每个候选区域进行分类,从而实现目标检测。尽管R-CNN在准确性上表现出色,但其处理速度非常慢。第二个工作是SPP-net(Spatial Pyramid Pooling Network),它引入了空间金字塔池化层来提高处理速度,但其仍然需要在每个候选区域上运行CNN。

论文链接https://arxiv.org/pdf/1506.01497.pdf

  “Faster R-CNN” 是一篇于2015年发布的论文,题为 “Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks”。该论文由Shaoqing Ren、Kaiming He、Ross Girshick和Jian Sun等人共同撰写,发表在IEEE Transactions on Pattern Analysis and Machine Intelligence (PAMI)期刊上。

  该论文提出了一个包含共享卷积层和RPN的网络结构。共享卷积层用于提取图像的特征表示,RPN则通过滑动窗口在特征图上生成候选区域,并预测每个窗口是否包含目标以及目标的边界框。生成的候选区域经过候选区域池化层提取特征向量,并输入到后续的分类器进行目标分类

  “Faster R-CNN” 的创新点在于将候选区域生成和目标分类集成到一个网络中,实现了端到端的目标检测,并取得了较高的准确性和较快的处理速度

二、Faster-RCNN算法流程

1.Fast-RCNN算法流程:

(1)输入图像;
(2)通过深度网络中的卷积层(VGG、Alexnet、Resnet等中的卷积层)对图像进行特征提取,得到图片的特征图;
(3)通过选择性搜索算法得到图像的感兴趣区域(通常取2000个);
(4)对得到的感兴趣区域进行ROI pooling(感兴趣区域池化):即通过坐标投影的方法,在特征图上得到输入图像中的感兴趣区域对应的特征区域,并对该区域进行最大值池化,这样就得到了感兴趣区域的特征,并且统一了特征大小,如图2所示;
(5)对ROI pooling层的输出(及感兴趣区域对应的特征图最大值池化后的特征)作为每个感兴趣区域的特征向量;
(6)将感兴趣区域的特征向量与全连接层相连,并定义了多任务损失函数,分别与softmax分类器和boxbounding回归器相连,分别得到当前感兴趣区域的类别及坐标包围框;
(7)对所有得到的包围框进行非极大值抑制(NMS),得到最终的检测结果。
在这里插入图片描述

2.Faster-RCNN算法流程:

(1)conv layers:即特征提取网络,用于提取特征。通过一组conv+relu+pooling层来提取图像的feature maps,用于后续的RPN层和取proposal。
(2)RPN(Region Proposal Network):即区域候选网络,该网络替代了之前RCNN版本的Selective Search,用于生成候选框。这里任务有两部分,一个是分类:判断所有预设anchor是属于positive还是negative(即anchor内是否有目标,二分类);还有一个bounding box regression:修正anchors得到较为准确的proposals。因此,RPN网络相当于提前做了一部分检测,即判断是否有目标(具体什么类别这里不判),以及修正anchor使框的更准一些。
(3)RoI Pooling即兴趣域池化(SPP net中的空间金字塔池化):用于收集RPN生成的proposals(每个框的坐标),并从(1)中的feature maps中提取出来(从对应位置扣出来),生成proposals feature maps送入后续全连接层继续做分类(具体是哪一类别)和回归。
(4)Classification and Regression:利用proposals feature maps计算出具体类别,同时再做一次bounding box regression获得检测框最终的精确位置。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三个图同时参考好思考更多细节部分,每一个步骤展开说明

3.特征提取conv layers

Conv layers包含了conv,pooling,relu三种层。以VGG16模型中的faster_rcnn_test.pt的网络结构为例上图,有13个conv层,13个relu层,4个pooling层。还可以用ResNet、Inception等。
conv层都是:kernel_size=3,pad=1,stride=1
pooling层都是:kernel_size=2,pad=0,stride=2
经过每个conv层后,feature map大小都不变;经过每个pooling层后,feature map的宽高变为之前的一半

4.Region Proposal Networks(RPN)

  提取前景(本文称为提取proposal)的方法是Selective Search,简称SS法,通过比较相邻区域的相似度来把相似的区域合并到一起,反复这个过程,最终就得到目标区域,这种方法相当耗时以至于提取proposal的过程比分类的过程还要慢,完全达不到实时的目的。而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度,把提取proposal的过程也通过网络训练来完成,部分网络还可以和分类过程共用,新的方法称为Reginal Proposal Network(RPN),速度大大提升。
在这里插入图片描述

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

RPN作用
(1)把feature map分割成多个小区域,识别出哪些小区域是前景,哪些是背景,简称RPN Classification.
(2)获取前景区域的大致坐标,简称RPN bounding box regression。

anchors
  anchors是一组预定义的矩形,论文中设置了3种形状,3种比例,一共9个预定义的anchors。需要注意anchors是针对哪个图像设置的!这样做获得检测框很不准确,但是后面还有2次bounding box regression修正检测框位置。Fast R-CNN以及SPP-net使用的BBR的输入是从任意大小的RoI上池化得到的(RoI pooling),同时回归权重在所有RoI上共享,而Faster R-CNN使用的BBR的输入是固定大小的3 x 3 RoI(3 x 3 convolution),同时不同尺度和长宽比的anchor使用不同的回归器,k个回归器之间并不共享权重。

在这里插入图片描述

[[ -84.  -40.   99.   55.]
 [-176.  -88.  191.  103.]
 [-360. -184.  375.  199.]
 [ -56.  -56.   71.   71.]
 [-120. -120.  135.  135.]
 [-248. -248.  263.  263.]
 [ -36.  -80.   51.   95.]
 [ -80. -168.   95.  183.]
 [-168. -344.  183.  359.]]

其中每行的4个值 表矩形左上和右下角点坐标。9个矩形共有3种形状,长宽比为大约为 三种

特征图上每个像素都对应了k个anchors,会产生大量anchors,在实际训练RPN时,程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练。
在这里插入图片描述
(1)在原文中使用的是ZF model中,其Conv Layers中最后的conv5层num_output=256,对应生成256张特征图,所以相当于feature map每个点都是256-dimensions
(2)在conv5之后,做了rpn_conv/3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息
(3)假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分positive和negative,所以每个点由256d feature转化为cls=2•k scores;而每个anchor都有(x, y, w, h)对应4个偏移量,所以reg=4•k coordinates

RPN Classification:这是个二分类的过程。先要在feature map上均匀的划分出KxHxW个区域(称为anchor,默认K=9,H是feature map的高度,W是宽度),通过比较这些anchor和ground truth间的重叠情况来决定哪些anchor是前景,哪些是背景,也就是给每一个anchor都打上前景或背景的label。有了labels,你就可以对RPN进行训练使它对任意输入都具备识别前景、背景的能力。
RPN bounding box regression:用于得出前景的大致位置,要注意这个位置并不精确,准确位置的提取在后面的Proposal Layer bounding box regression。
  RPN训练时要把RPN classification和RPN bounding box regression的loss加到一起来实现联合训练。
如图9所示绿色框为飞机的Ground Truth(GT),红色为提取的positive anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对红色的框进行微调,使得positive anchors和GT更加接近。
在这里插入图片描述

Proposal Layer顺序依次处理
(1)生成anchors,利用【dx dy dw dh】对所有的anchors做bbox regression回归(这里的anchors生成和训练时完全一致)
(2)按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors,即提取修正位置后的positive anchors
(3)限定超出图像边界的positive anchors为图像边界,防止后续roi pooling时proposal超出图像边界(见文章底部QA部分图21)
(4)剔除尺寸非常小的positive anchors
(5)对剩余的positive anchors进行NMS(nonmaximum suppression)
(6)Proposal Layer有3个输入:positive和negative anchors分类器结果rpn_cls_prob_reshape,对应的bbox reg的(e.g. 300)结果作为proposal输出[x1, y1, x2, y2]。

5.ROI Pooling作用

1、从feature maps中“抠出”proposals(大小、位置由RPN生成)区域;
2、把“抠出”的区域pooling成固定长度的输出

(1)由于proposals坐标是基于MxN尺度的,先映射回(M/16)x(N/16)尺度
(2)再将每个proposal对应的feature map区域分为pooled_w x pooled_h的网格
(3)对网格的每一部分做max pooling
(4)这样处理后,即使大小不同的proposal输出结果都是pooled_w x pooled_h固定大小,实现了固定长度输出,

在这里插入图片描述
  feature map中有两个不同尺寸的proposals,但pooling后都是7x7=49个输出,这样就能为后面的全连接层提供固定长度的输入。RPN网络提取出的proposal大小是会变化的,而分类用的全连接层输入必须固定长度,所以必须有个从可变尺寸变换成固定尺寸输入的过程。在较早的R-CNN和Fast R-CNN结构中都通过对proposal进行拉升(warp)或裁减(crop)到固定尺寸来实现,拉升、裁减的副作用就是原始的输入发生变形或信息量丢失(图7),以致分类不准确。而ROI Pooling就完全规避掉了这个问题,proposal能完整的pooling成全连接的输入,而且没有变形,长度也固定。

6.Classification

  Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。RPN中只是二分类,区分目标还是背景;这里的分类是要对之前的所有positive anchors识别其具体属于哪一类。
在这里插入图片描述
(1)通过全连接层和softmax对所有proposals进行具体类别的分类(通常为多分类)
(2)再次对proposals进行bounding box regression,获取更高精度的最终的predicted box

三、Faster RCNN问题和优缺点

1.问题:

(1)计算复杂度较高:相对于传统的目标检测方法,“Faster R-CNN” 的计算复杂度更高。由于需要进行区域生成网络(RPN)的预测和候选区域的分类,整个网络的计算成本较大。

(2)训练和调参困难:“Faster R-CNN” 模型的训练和调参需要一定的技术和计算资源。要获得最佳的检测性能,需要仔细调整网络的超参数和训练策略。

2.优点:

(1)端到端目标检测:与传统的两阶段目标检测方法相比,“Faster R-CNN” 提供了一个端到端的目标检测框架。通过引入区域生成网络(RPN),候选区域的生成和目标分类可以在同一个网络中进行,使得整个目标检测过程更加简洁和高效。

(2)较高的准确性:“Faster R-CNN” 在目标检测任务中表现出较高的准确性。通过利用深度卷积神经网络(CNN)进行特征提取和候选区域分类,可以获得更准确的目标定位和分类结果。

(3)实时性能改进:相较于传统的方法,“Faster R-CNN” 在实时目标检测方面取得了显著的改进。引入区域生成网络(RPN)的设计使得整个检测过程更加高效,从而实现了更快的检测速度。

参考链接:
1.https://www.jianshu.com/p/ab1ebddf58b1
2.https://zhuanlan.zhihu.com/p/31426458
3.https://zhuanlan.zhihu.com/p/82185598
4.https://zhuanlan.zhihu.com/p/145842317

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

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

相关文章

Spring定时器调度实现的原理

1、使用Spring定时器任务实现 package com.suyun.modules.vehicle.timetask;import com.alibaba.schedulerx.worker.domain.JobContext; import com.alibaba.schedulerx.worker.processor.JavaProcessor; import com.alibaba.schedulerx.worker.processor.ProcessResult; impo…

arm学习cortex-A7中断按键控制led灯亮灭

main.c #include "key.h" extern void printf(const char *fmt, ...); void delay_ms(int ms) {int i,j;for(i 0; i < ms;i)for (j 0; j < 1800; j); } int main() {//rcc初始化 RCC->MP_AHB4ENSETR | (0x3 << 4);//初始化按键GPIOF模式为输入模式…

cyclo(-D-Ala-Val),15136-27-3,可以通过肽筛选发现的多肽

&#xff08;文章资料汇总来源于&#xff1a;陕西新研博美生物科技有限公司小编MISSwu&#xff09;​ 为大家介绍&#xff08;CAS&#xff1a;15136-27-3&#xff09;,试剂仅用于科学研究&#xff0c;不可用于人类&#xff0c;非药用&#xff0c;非食用。 英文名称&#xff1a…

从刷题到解决问题再到研究创新

题记&#xff1a;死的知识学再多也没大用。 明明自觉学会了不少知识&#xff0c;可真正开始做题时&#xff0c;却还是出现了“一支笔&#xff0c;一双手&#xff0c;一道力扣&#xff08;Leetcode&#xff09;做一宿”的窘境&#xff1f;你是否也有过这样的经历&#xff0c;题…

移动端H5页面引入高德地图的一些问题记录

web端显示 移动端显示 移动端和web端显示的地图范围一样大&#xff0c;并且在移动端地图的zoom和web端一致 这个问题是在公司开发邀请函的时候碰到的&#xff0c;因为要在移动端显示的范围足够大&#xff0c;使用zoom并不能满足需求了&#xff0c;例如如下代码 amap new AMa…

Sqlserver 中nchar(n)、varchar(n)、nvarchar(n)和nvarchar(max)的区别

nchar(n): 固定大小字符串数据。 n 用于定义字符串大小&#xff08;以双字节为单位&#xff09;&#xff0c;并且它必须是 1 到 4,000 之间的值。 存储大小为 n 字节的两倍。 varchar(n): 长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间…

解决Rstudio server is taking longer than usual.

经常用Rstudio server访问服务器&#xff0c;但长时间使用未清理缓存时出现了以下界面&#xff1a; 点任何一个键都无法解决&#xff0c;查询了一下原因是由于当使用RStudio Server处理占内存极大的数据后&#xff0c;长时间不清理内存&#xff0c;当再次打开rstudio&#xff0…

IPC-核间通讯

1. IPC通讯是AUTOSAR体系结构中的核心组成部分&#xff0c;它使得不同的软件组件可以相互通信、协同工作&#xff0c;从而实现整车系统的功能。IPC可以理解为核间通讯&#xff0c;就是一个芯片有多个核&#xff0c;现在想让多核之间通信&#xff0c;达到下面几个目的&#xff1…

Docker自学记录笔记

安装联系Docker命令 1. 搜索镜像 docker search nagin 2. 下载镜像 3. 启动nginx 强调文本 强调文本 加粗文本 加粗文本 标记文本 删除文本 引用文本 H2O is是液体。 210 运算结果是 1024. 插入链接与图片 链接: link. 图片: 带尺寸的图片: 居中的图片: 居中并…

初识win32

很多人都说windows编程凉了&#xff0c;实则不然&#xff0c;因为微软不倒&#xff0c;我们还在使用微软提供的winddows操作系统&#xff0c;windows编程就不会消亡&#xff0c;MFC也是一样&#xff0c;不可否认其他编程语言的方便&#xff0c;强大&#xff0c;但是windows编程…

深入理解linux物理内存

目录 物理内存热插拔 从 CPU 角度看物理内存架构 内核如何管理 NUMA 节点 NUMA 节点物理内存区域的划分 NUMA 节点的状态 node_states 物理内存区域中的水位线 物理内存区域中的冷热页 内核如何描述物理内存页 匿名页的反向映射 物理内存热插拔 物理热插拔阶段&#xff…

『赠书活动 | 第十四期』《Spring Cloud Alibaba核心技术与实战案例》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第十四期』 本期书籍&#xff1a;《Spring Cloud Alibaba核心技术与实战案例》 公众号赠书&#xff1a;第五期 参与方式&#xff1a;关注公…

【Linux 驱动篇(四)】设备树

文章目录 一、什么是设备树二、DTS、 DTB 和 DTC三、DTS 语法1. .dtsi 头文件2. 设备节点3. 标准属性3.1 compatible 属性3.2 model 属性3.3 status 属性3.4 #address-cells 和#size-cells 属性3.5 reg 属性 ...... 一、什么是设备树 设备树(Device Tree)&#xff0c;将这个词分…

为什么不建议企业用薪资系统来跟踪项目时间?

身处在一个每分钟都很重要的世界里&#xff0c;企业必须勤于管理时间和工资。 虽然使用薪资系统进行时间跟踪似乎是一个实用的解决方案&#xff0c;但这种方法可能导致许多问题。 本文将讨论专用的时间跟踪软件对任何组织都必不可少的原因&#xff0c;以及依靠薪资系统进行时…

推特、微博对手Threads软件的下载、注册、使用最新超详细教程

经过马斯克不断折腾&#xff0c;推特面临用户大量流失的风险&#xff0c;尤其近期限制推文阅读量&#xff0c;更是导致大量用户出走。 于是乎&#xff0c;Meta公司7月6日正式发布对标推特的新社交平台 Threads&#xff0c;当前Threads只能在 iOS、Android 平台上安装 APP 使用&…

【JAVA】爱心代码--java特供(可直接复制,亲测有效)

个人主页&#xff1a;【&#x1f60a;个人主页】 文章目录 前言爱心的数学原理爱心代码基本版本带二种 前言 回看过去我发现我的第一篇博客竟然是一篇关于C语言爱心代码的博客&#xff08;真是个奇怪的开始&#xff09;&#xff0c;不过这么长时间过去了&#xff0c;我的编程语…

软件设计模式与体系结构-设计模式-行为型软件设计模式-策略模式

目录 四、策略模式类图代码实例使用策略模式对中国的十二属相&#xff08;Chinese Zodiac&#xff09;设计查询系统。策略模式与状态模式课程作业 四、策略模式 类图 代码 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算…

【Django】Django框架使用指南

Django使用指南 作者简介&#xff1a;嗨~博主目前是长安大学软件工程专硕在读&#x1f4d8;&#xff0c;喜欢钻研一些自己感兴趣的计算机技术&#xff0c;求关注&#x1f609;&#xff01; 框架简介&#xff1a;Django是一个基于Python语言的开源Web应用框架&#xff0c;采用 M…

路径规划算法:基于学生心理学优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于学生心理学优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于学生心理学优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能…

Django框架-11

聚合查询 1.聚合函数 使用aggregate()过滤器调用聚合函数。聚合函数包括&#xff1a;Avg 平均&#xff0c;Count 数量&#xff0c;Max 最大&#xff0c;Min 最 小&#xff0c;Sum 求和&#xff0c;被定义在django.db.models中。 例&#xff1a;查询图书的总阅读量。 from mo…