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

news2024/11/7 13:55:50

1.Fast-RCNN论文背景
2. Fast-RCNN算法流程
3.Fast R-CNN 问题和缺点

这篇以对比RCNN来说明,如果你对RCNN网络没太熟悉,可访问这链接,快速了解,点下面链接

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

一、Fast-RCNN论文背景

论文地址https://arxiv.org/abs/1504.08083

  Fast R-CNN 是一篇由Ross Girshick 在 2015 年发表的论文,题为 “Fast R-CNN”。这篇论文旨在解决目标检测领域中的一些问题,特别是传统目标检测方法中存在的速度和准确性之间的矛盾。

  论文摘要:本文提出了一种基于快速区域的卷积网络方法来处理目标检测。快速 R-CNN 建立在以前的工作,有效地分类目标建议使用深卷积网络。与以往的工作相比,快速 R-CNN 采用了一些创新,以提高训练和测试速度,同时也提高了检测的准确性。快速 Fast 训练非常深的 VGG16网络比 R-CNN 快9倍,测试速度快213倍,并在 PASCAL VOC 2012上获得更高的 mAP。与 SPPnet 相比,Fast R-CNN 训练 VGG16的速度快3倍,测试速度快10倍,而且更准确。

二、Fast-RCNN算法流程

1.RCNN算法流程4个步骤:

(1)获取候选区域:对于一张输入的图像,首先使用selective search算法获取2000个左右的候选区域,由于selective search生成的候选区域是大小不一致的区域,而后续的卷积神经网络中的全连接层需要保证固定大小的输入,因此在输入卷积网络之后将其缩放至固定大小的图像;

(2)获取图像特征:将图像输入到卷积神经网络中获取图像特征,这一部分可以采用常用的图像卷积神经网络如VGGNet,AlexNet等。

(3)获取区域类别:在初步获得目标的位置之后,需要获取目标的类别,这一步采用SVM分类器来判断当前区域属于哪个类别。

(4)微调区域位置:尽管候选区域已经初步目标的位置,但是这个区域比较粗糙,因此使用回归器对区域位置进行微调

2.Fast-RCNN算法流程:

在这里插入图片描述

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

3.Fast RCNN相比于RCNN改进

(1)Fast RCNN仍然使用selective search选取2000个建议框,但是这里不是将这么多建议框都输入卷积网络中,而是将原始图片输入卷积网络中得到特征图,再使用建议框对特征图提取特征框。这样做的好处是,原来建议框重合部分非常多,卷积重复计算严重,而这里每个位置都只计算了一次卷积,大大减少了计算量
(2)由于建议框大小不一,得到的特征框需要转化为相同大小,这一步是通过ROI池化层来实现的(ROI表示region of interest即目标)
(3)Fast RCNN里没有SVM分类器和回归器了,分类和预测框的位置大小都是通过卷积神经网络输出的
(4)为了提高计算速度,网络最后使用SVD代替全连接层

4.ROI Pooling(Region of Interest)

  它的输入是特征图,输出则是大小固定的channel x H x W的vector。ROI Pooling是将一个个大小不同的region proposals,映射成大小固定的(W x H)的矩形框。它的作用是根据region proposals的位置坐标在特征图中将相应区域池化为固定尺寸的特征图,以便进行后续的分类和输出回归框操作。它可以加速处理速度。

ROI Pooling有两个输入,一个是图片进入CNN后的特征图,另一个是区域的边框。ROI 的输出是一个region_nums x channels x W x H的向量。

  RoI可以看成是SPP的简化版本,原版SPP是多尺度池化后进行concat组成新特征,而RoI只使用一个尺度,可以将任意维度的特征矩阵缩放成固定维度。论文中的具体做法是,把高和宽都平均分为7*7的小块,然后在每一个小块做max pooling操作,channel维度不变,这样做能使输出维度固定,同时RoI Pooling不是多尺度的池化,梯度回传非常方便,为fine-tune卷积层提供了条件。(SPP Net不能fine-tune卷积层)

在这里插入图片描述

5.SPP Net
  在RCNN中,使用selective search方法在原始图像上生成近2000个Region Proposal,然后resize到固定尺寸,输入到CNN网络中,也就是说一张原始图片要进行2000次前向推理计算,存在着大量的重复冗余计算
  SPP Net的主要贡献在于:共享卷积计算和Spatial Pyramid Pooling(空间金字塔池化),使得每张图片只需要进行一次CNN网络的前向推理计算。在RCNN中需要图像块resize到固定大小,难免会有变形和失真

图中第一行是RCNN的流程,需要将每一个图像块输入到网络中。
第二行是SPP方法,大大减小了计算量。具体实现方法和过程下面将进行详细阐述。

在这里插入图片描述
在这里插入图片描述
训练过程:使用ImageNet预训练的AlexNet模型,输入图片进行前向推理,获得conv5特征,同时使用selective search算法在原图上获得候选框,然后将这些候选框映射在conv5特征图上提取到相应的SPP特征,接着将SPP特征fine-tune全连接层(卷积层不fine-tune),得到全连接层的特征。之后和RCNN一致了,将全连接层的特征输入到SVM分类器中进行分类,用SPP特征训练Bounding Box的LR模型来修正候选框的位置。
推理过程:与训练过程一致,原始图片输入到CNN网络中,经过selective search后映射获取到SPP特征,然后经过全连接层获取到分类特征,输入到SVM分类器中,同时SPP特征输入到Bounding Box的LR模型中

6.多任务损失函数

在这里插入图片描述
其中p是分类器预测的softmax概率分布p=(p0, p1, …),
u对应目标真实类别标签,tu对应边界框回归器预测的对应类别u的回归参数,v对应真实目标框的回归参数。

分类损失函数为Negative Log Likelyhood Loss:(考虑到p使用softmax算出来的,相当于分类是用CrossEntropyLoss算出来的)

在这里插入图片描述

三、Fast R-CNN 问题和缺点

1.训练和推断时间较长:Fast R-CNN 的训练过程相对较慢,需要先训练候选区域生成网络(RPN),然后再训练目标分类网络。此外,在推断阶段,需要对整个图像进行前向传播,计算较为耗时。

2.ROI Pooling 的固定大小:ROI Pooling 操作将不同大小的候选区域映射到固定大小的特征图上。这种固定大小的映射可能导致信息的损失或扭曲,特别是对于较小或较大的目标区域。

3.候选区域生成器的质量:Fast R-CNN 使用候选区域生成网络(RPN)生成候选区域,而候选区域生成器的质量直接影响到目标检测的准确性。如果候选区域生成器无法准确地提供包含目标的候选区域,那么最终的检测结果可能会受到影响。

4.依赖预训练模型:Fast R-CNN 通常需要在预训练的卷积神经网络(CNN)模型上进行微调。这意味着它对于预训练模型的选择和质量有一定的依赖性,如果预训练模型不够准确或不适用于特定的任务,可能会影响 Fast R-CNN 的性能。

5.基于滑动窗口的候选区域生成:Fast R-CNN 仍然采用了基于滑动窗口的候选区域生成方法,这可能导致在大规模图像上的计算量较大。尽管 RPN 可以减少滑动窗口的数量,但仍需要对整个图像进行扫描。

  GPU上Fast RCNN跑网络推理只需要0.32s,但是跑selective search就需要2s,也就是说selective search严重制约了Fast RCNN的速度,成为了主要瓶颈。(后面Faster RCNN提出了RPN网络解决了这个问题)

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

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

相关文章

合宙Air724UG Cat.1模块硬件设计指南--原理图设计注意事项

在设计原理时注意以下几点: 严格按照模块硬件手册设计原理图 1.调试接口: 调试务必留出usb(烧录脚本,升级用) ,1.8v(开机标志),uboot(强制烧录用)测试点&…

软件测试面试,大厂上岸究竟有什么秘诀?

最后,总结一下个人认为比较重要的知识点:接口自动化测试 :测试框架,多个有关联的接口的用例编写,用例的组织及存储,接口测试的覆盖率,RESTAssured 的封装等。UI 自动化测试 :iOS 和 …

Web自动化测试之滑动验证码的解决方案

目录 滑动验证破解思路 案例讲解 实现代码 运行效果: 根据传入滑块,和背景的节点,计算滑块的距离 滑动滑块进行验证 总结: 在Web自动化测试的过程中,经常会被登录的验证码给卡住,不知道如何去通过验证…

Prompt不等于编程,“提示词工程师”淘汰程序员也是伪命题

Original 李建忠 李建忠研思 最近ChatGPT及基于大语言模型(Large Language Model,以下简写为LLM)的Github Copilot等工具出来之后,在软件开发领域也带来了非常大的震撼。著名的观点有Fixie创始人、前Google工程总监Matt Welsh在AC…

解决onblur()失去焦点事件在刚登陆页面(尚未有任何操作)时就触发的问题

文章目录 一、原始错误:1.1 原始代码1.2 访问页面(仅访问页面,不进行任何操作) 二、解决错误2.1 解决办法2.2 再次访问页面2.2.1 输入错误格式2.2.2 输入正确格式 最近笔者在编写代码时遇到刚访问页面,什么都没有操作&…

JavaWeb学习笔记-1

学习路线 Web开发–介绍(画大饼) 什么是Web? Web:全球广域网,也成为万维网,能通过浏览器访问的网站 Web网站的工作流程 网站大致是由三个部分组成的 第一部分就是我们能看到的网页程序,也叫做…

React 组件中怎么做事件代理

React 并不会把所有的处理函数直接绑定在真实的dom节点上,而是把所有的事件绑定到结构的最外层(合成事件层),使用一个统一的事件监听器,这个事件监听器上维持了一个映射来保存所有组件内部的事件监听和处理函数。 当组…

哈工大计算机网络课程网络层协议详解之:网络地址转换NAT

哈工大计算机网络课程网络层协议详解之:网络地址转换NAT 文章目录 哈工大计算机网络课程网络层协议详解之:网络地址转换NAT网络地址转换(NAT)NAT实现原理NAT穿透问题NAT穿透问题的解决方案 上一节中,我们在DHCP协议中介…

K 个一组翻转链表

反转链表是比较常出的一种题目,我们有简单难度的一整个链表翻转: private ListNode reverse(ListNode head){ListNode pre null;ListNode cur head;while(cur ! null){ListNode next cur.next;cur.next pre;pre cur;cur next;}return pre;}从第一…

GC说明与介绍,GC的垃圾回收算法有哪些

1、GC是什么 2、GC算法概述 JVM在进行GC时,并非每次都对上面三个内存区域一起回收的,大部分时候回收的都是指新生代。 因此GC按照回收的区域又分了两种类型,一种是普通GC(minor GC),一种是全局GC&#xff0…

【算法】行星碰撞机器人碰撞(栈的使用)

文章目录 行星碰撞机器人碰撞参考资料 本文记录了两个使用栈来处理碰撞问题的算法题目。 行星碰撞 https://leetcode.cn/problems/asteroid-collision/ 对于这种题目,各个元素分别会向左或向右移动,可以使用栈模拟碰撞的过程。 由于从左往右进行遍历…

Argis通过Python的Arcpy第三方库进行字段计算、批量将mxd导出为jpg图片、合并数据库

前言 近来公司有开发Arcgis脚本工具的需求,我就去学了一下用Arcpy来操作Arcgis的数据,今天学习了字段计算,将学习成果记录如下。 arcpy帮助文档传送门:https://resources.arcgis.com/zh-cn/help/main/10.2/ 一、字段计算 1、…

Linux学习之内核升级

wget --no-check-certificate https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.1.14.tar.xz下载源代码。 yum install -y gcc gcc-c make ncurses-devel openssl-devel elfutils-libelf-devel安装必要的依赖包。 完成之后,显示如下: …

openEuler操作系统和openGauss数据库

文章目录 1. openEuler操作系统2. openGauss数据库2.1 系统自带库2.1.1 允许所有地址访问端口2.1.2 创建远程登录用户 2.2 安装5.0 版本2.2.1 下载2.2.2 安装2.2.3 测试 1. openEuler操作系统 镜像下载地址 https://www.openeuler.org/zh/download 选一个下载 安装 按提示安…

【kubernetes系列】Kubernetes中的重要概念(三)

在实际的工作中,我们使用Kubernetes 通常不会直接创建 Pod,而是通过 各种 Controller 来管理 Pod 的。Controller 中定义了 Pod 的部署特性,比如有几个副本,在什么样的 Node 上运行等。为了满足不同的业务场景,Kuberne…

VMware Workstation 17 的安装

一、简介 VMware Workstation 17.0是一款功能非常强大的虚拟机,可以帮助用户在Windows系统上同时开启多个系统,不仅能在虚拟机上安装上不同的操作系统,比如Mac、Linux以及Windows10/11等,还能与云技术和容器技术(如 D…

【金融量化】ETF基金是什么?有什么特点?

1 含义 ETF(交易型开放式指数基金)是以某一选定的指数所包含的成分证券或商品为投资对象,依据构成指数的证券或商品的种类和比例,采取完全复制或抽样复制,进行被动投资的指数基金。ETF不但具有传统指数基金的全部特色…

vue导出excle单sheet文字居中表头加粗显示

效果图: 首先下载依赖 npm install xlsx --save npm install xlsx-style --save在需要导出excle的vue文件中导入依赖 import XLSX from "xlsx" import XLSXStyle from xlsx-style在method中定义 methods:{// 格式化formatJson(filterVal, jsonData)…

月近万次发布,故障率<4‰如何做到?去哪儿测试左移重难点揭秘!

一分钟精华速览 去哪儿发布的数据显示,在过去一年中,其发布故障率始终保持在 4‰ 以下并不断降低。作为一家出行旅游服务平台,去哪儿网如何在复杂的业务场景下,仍能保持如此低的故障率?其中功能测试左移功不可没。 本…

高质量编程-编码规范之代码格式和注释

前言: \textcolor{Green}{前言:} 前言: 💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营 💞从这个专栏里面可以迅速获得Go的知识 本次文章不仅仅是在 go 中主要注意,在编写其他语言中也同样重要…