当前位置: 首页 > news >正文

【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列一:R-CNN图文详解

学习视频:Faster-RCNN理论合集

概念辨析

在目标检测中,proposals和anchors都是用于生成候选区域的概念,但它们在实现上有些许不同。

  • Anchors(锚框): 锚框是在图像中预定义的一组框,它们通常以不同的尺度和长宽比分布在图像的每个位置。锚框的目的是覆盖图像中可能出现的各种目标形状和尺寸,以便在后续的目标检测过程中进行检测。在训练过程中,通过将锚框与真实目标框进行匹配,以确定哪些锚框包含目标,以及它们与目标的重叠程度。

  • Proposals(提议): 提议是通过一种方法(如Selective Search或者Region Proposal Network)生成的候选区域。与锚框不同,提议的位置和形状不是预定义的,而是根据图像内容和算法生成的。提议通常是通过对图像进行分割、合并、过滤或其他技术来生成一组可能包含目标的区域。

总的来说,锚框是一种固定的形状和尺寸的预定义区域,而提议是根据图像内容和算法生成的候选区域。在训练和测试目标检测模型时,通常会使用锚框或提议来生成候选区域,并进一步对这些区域进行分类和定位。

R-CNN

R-CNN(Region-based Convolutional Neural Network) 是一种经典的目标检测方法,它将目标检测任务分解为两个子任务:1)生成候选区域(region proposals);2)对每个候选区域进行分类和位置回归。

  • backbone : VGG16

在这里插入图片描述

R-CNN框架

R-CNN的模型框架总体分为四个部分:

  1. Region proposal: Selective Search算法生成大量候选框
  2. Feacure extraction :神经网络对候选框进行特征提取
  3. Classification: 分类器对候选框内的物体进行分类
  4. Bounding-box regression: 回归器对候选框位置进行修正

在这里插入图片描述

1. 候选框生成(使用SS算法)

在这里插入图片描述

什么是目标检测中的Selective Search (SS) 算法

Selective Search是一种常用于目标检测的候选区域生成方法。在传统的目标检测算法中,需要对图像中的每个可能包含目标的区域进行检测,但这样做会导致计算量巨大,尤其是在图像具有大量区域时。Selective Search的目标是通过一种高效的方式生成一组可能包含目标的区域,以减少后续目标检测算法的计算复杂度。

Selective Search算法的核心思想是通过结合不同的图像特征(如颜色、纹理、大小等)来生成候选区域。具体来说,该算法首先将图像分割成多个小的超像素,然后利用这些超像素之间的相似性进行合并,生成不同大小和形状的候选区域。最终,Selective Search输出一组具有多样性和丰富性的候选区域,其中有些可能包含真实目标。

这些生成的候选区域可以用作后续目标检测算法的输入,从而减少了需要检测的区域数量,提高了检测的效率。Selective Search已经成为了目标检测领域中的经典方法之一,在许多基于深度学习的目标检测算法中仍然被广泛使用。

2. 使用神经网络提取每个候选框的特征

在这里插入图片描述

由2000个候选框输入神经网络中,获取4096维的特征,变为2000*4096的矩阵。特征矩阵如下所示。

在这里插入图片描述

3. 分类器判定候选框所选物体的类别

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

NMS非极大值抑制

计算两个候选框(A和B)的IOU值,如果A和B两个候选框所计算的IOU计算结果都大于设定的阈值,则说明这两个候选框代表的是同一个物体,就把预测概率更低的候选框(B)删除,保留A,如此循环操作。

目的:剔除掉多个重复的候选框,只保留每个类中得分最高的候选框。

在这里插入图片描述

具体流程如下所示。

在这里插入图片描述

4. 回归器修正候选框位置

在这里插入图片描述
因为候选框位置可能不够精确,所以使用回归器对NMS剩下的候选框进行进一步的位置修正,从而得到每个类别得分最高的bounding box。

5. RCNN缺陷

  1. 计算量大:R-CNN需要在图像中生成大量的候选区域,并对每个候选区域进行CNN特征提取和分类,这导致了大量的重复计算,计算量巨大,使得其在实时性上受限。

  2. 训练和推理速度慢:由于R-CNN需要对每个候选区域进行独立的CNN前向传播,因此其训练和推理速度较慢,尤其是在大规模数据集上。

  3. 空间利用率低:R-CNN在生成候选区域时会产生大量的重叠区域,而且需要每个候选区域都要进行独立的CNN特征提取,这导致了空间利用率较低,计算资源的浪费。

  4. 不可端到端训练:R-CNN是一种多阶段的目标检测方法,需要分别训练生成候选区域的模块和分类位置回归的模块,这种多阶段的训练过程不利于端到端的优化。

  5. 感兴趣区域池化(RoI Pooling)的固定大小:R-CNN中的RoI Pooling操作将不同尺寸的候选区域映射到相同大小的特征图上,这会造成信息损失,尤其是对于较小的目标。

6. 改进

详见下篇:
【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列二:Fast R-CNN图文详解

相关文章:

  • Django验证码(二)
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的自动驾驶目标检测系统详解(深度学习+Python代码+PySide6界面+训练数据集)
  • GAMES104-现代游戏引擎 1
  • 用 Visual Studio 调试器中查看内存中图像
  • LeetCode 395. 至少有K个重复字符的最长子串
  • 在Linux/Ubuntu/Debian中使用windows应用程序/软件
  • 实战:django项目环境搭建(pycharm,virtualBox)
  • Jenkins: 配置自动化发布脚本
  • 蓝桥杯2022年第十三届省赛真题-GCD
  • CSS3病毒病原体图形特效
  • iOS 开发 block 等待 block 或 block 等待
  • 基于opencv的图像处理系统的设计与实现
  • 如何在“Microsoft Visual Studio”中使用OpenCV编译应用程序
  • spring boot-操作excel(EasyExcel 快速开始)/ spring boot接受文件参数 File
  • 如何在Windows系统搭建Emby影音平台并实现远程访问本地文件【内网穿透】
  • Cumulo 的 ClojureScript 模块已经成型
  • javascript面向对象之创建对象
  • Nacos系列:Nacos的Java SDK使用
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • php ci框架整合银盛支付
  • PHP CLI应用的调试原理
  • Python打包系统简单入门
  • SQLServer之索引简介
  • vue-router的history模式发布配置
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Xmanager 远程桌面 CentOS 7
  • 阿里云购买磁盘后挂载
  • 检测对象或数组
  • 精彩代码 vue.js
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端面试总结(at, md)
  • 系统认识JavaScript正则表达式
  • 小程序button引导用户授权
  • 怎样选择前端框架
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​香农与信息论三大定律
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #微信小程序:微信小程序常见的配置传旨
  • (4)(4.6) Triducer
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (差分)胡桃爱原石
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)正点原子I.MX6ULL u-boot移植
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (已解决)什么是vue导航守卫
  • (转)Oracle存储过程编写经验和优化措施
  • (转载)利用webkit抓取动态网页和链接
  • *上位机的定义
  • .NET Core 2.1路线图
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net 获取url的方法