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

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

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

学习视频:Faster RCNN理论合集

Fast RCNN

在这里插入图片描述

概念辨析

1. RoI

在Fast R-CNN中,RoI(Region of Interest,感兴趣区域) 是指在图像中提取的候选区域或者候选框,这些区域被认为可能包含目标物体。RoI是由候选框生成器(例如Selective Search或者Region Proposal Network)生成的,通常通过在图像上滑动窗口或者其他区域生成方法获得。

2. RoI池化

RoI池化(RoI Pooling) 是指将不同尺寸的RoI映射到相同大小的特征图上,从而能够将RoI中的特征提取出来用于后续的分类和定位。在Fast R-CNN中,RoI池化层将每个RoI划分成固定大小的子区域,并对每个子区域进行最大池化操作,最终将每个RoI映射为固定长度的特征向量。

RoI是Fast R-CNN中的关键组成部分,它通过提取候选区域的特征,为后续的分类器提供输入,从而实现目标检测任务。RoI池化操作使得Fast R-CNN能够处理不同大小和形状的候选区域,并且减少了特征提取的计算量,提高了检测速度。

框架结构

1. 实现步骤

  1. 将图片输入Deep ConvNet中进行特征图的提取
  2. 通过RoI projection获取到候选框的特征图
  3. 通过RoI pooling layer将候选框的特征图都缩放到7*7大小
  4. 链接两个全连接层后进行特征的展平,获得RoI feature vector
  5. RoI feature vector后并连两个网络:分类器和回归器,分类器负责对候选框中的目标进行分类,回归框负责对候选框的位置进行调整
    在这里插入图片描述

2. 框架图

Fast R-CNN的框架图如下所示:

  1. Region proposal:通过区域选择SS算法生成候选框;
  2. 通过CNN网络把特征提取、分类和边界框回归都集成到了一起,只使用一个网络就可以完成。
    在这里插入图片描述
    Fast R-CNN和RCNN比较可以看到,RCNN需要单独训练4个部分,而Fast R-CNN只有两个部分,更加简洁并且快速。

具体实现

1. 计算整张图片的特征并通过投影获得候选框的特征

在这里插入图片描述

  • RCNN:生成了2000个候选框,都要传入神经网络中,所以需要进行2000次的网络计算得到2000个特征,计算量极大且会存在大量冗余计算;

  • Fast-RCNN:直接将整张图片输入神经网络获得该图片的特征图,通过每个候选框与该张特征图的映射关系,就可以得到每个候选框的特征图,从而无需输入神经网络进行大量冗余计算,大幅提升计算效率。

2 随机采样 Sampling

在训练过程中,我们并不使用SS算法生成的全部候选框(约2000个),而是从中随机采样一部分候选框进行使用。

2.1 正样本和负样本

  • 正样本: 正样本是指与真实目标(如物体、目标物体的边界框等)高度重叠或包含真实目标的候选区域或者候选框。 在目标检测中,正样本通常被用于训练模型来识别和定位目标物体。

  • 负样本: 负样本是指与真实目标无关或者与真实目标重叠度较低的候选区域或者候选框。 在目标检测中,负样本通常被用于训练模型来识别背景,即图像中不含目标物体的区域。

2.2 为什么要存在正负样本?

  1. 训练模型: 正样本提供了目标物体的信息,有助于模型学习正确地识别和定位目标。负样本则提供了背景信息,有助于模型学习如何区分目标物体和背景。

  2. 防止过拟合: 过拟合是指模型在训练数据上表现很好,但在新数据上表现较差的现象。通过使用负样本,可以使模型学习更好地区分目标物体和背景,从而减少过拟合的风险。

  3. 平衡数据: 在目标检测任务中,正样本(包含目标物体的候选区域)通常远远少于负样本(不包含目标物体的候选区域)。因此,使用负样本可以平衡训练数据,使得模型更好地学习目标物体和背景之间的差异。

2.3 论文中如何定义正负样本

论文中从2000个候选框中选择64个候选框进行训练使用,其中如果与真实目标边界框的IOU值>0.5,则被认定为正样本,负样本则是与真实候选框的IOU值最大的且在(0.1 , 0.5]范围内的。

3 RoI Pooling层

在这里插入图片描述

通过pooling层把候选框产生的特征图都缩放到统一的尺寸(7*7)。

  • 优点:无需限制输入图片的尺寸。RCNN则需要输入的图片尺寸为227*227才行。

如何实现?

RoI Pooling Layer通过maxpooling方法把候选框的特征图都统一缩放到7*7的大小的特征矩阵。
在这里插入图片描述

4. 分类器和回归器

4.1 分类器classification

预测N+1个类别概率,全连接层需要N+1个节点,概率值都是经过softmax进行处理过的,相加为1。
在这里插入图片描述

4.2 边界框回归器regressor

每个候选框都有4个边界框回归参数:(dx,dy,dw,dh),因此对应N+1个类的全连接层需要的节点个数是(N+1)* 4.

  • d x d_x dx:调整中心点x坐标的回归参数
  • d y d_y dy:调整中心点y坐标的回归参数
  • d w d_w dw:调整边界框宽度的回归参数
  • d h d_h dh:调整边界框高度的回归参数

在这里插入图片描述

4.2.1 如何回归(公式)

根据如下的公式进行计算。可以将橙色的框回归调整到红色的框。

在这里插入图片描述

5. 损失函数

因为是主要了解算法流程,所以损失函数的具体计算方法暂时不详细展开介绍,大家可以去看视频。

在这里插入图片描述

6. 缺陷

  1. 候选框生成器瓶颈:Fast R-CNN仍然需要依赖于候选框生成器(如Selective Search或Region Proposal Network)来生成候选区域,这一过程仍然比较耗时,成为训练和推理的瓶颈之一。

  2. RoI池化固定尺寸的限制:Fast R-CNN中的RoI池化层将不同尺寸的RoI映射为固定长度的特征向量,这可能导致信息损失,尤其是对于不同大小的目标物体。

  3. 不支持端到端的训练:Fast R-CNN仍然需要多阶段的训练过程,包括候选框生成、特征提取和分类定位等,这种多阶段的训练过程不利于端到端的优化。

  4. RoI对齐:Fast R-CNN中的RoI池化操作存在位置量化的问题,可能导致特征偏移和信息损失。后续的一些方法(如RoI Align和RoI Transformer)对此进行了改进。

7. 改进

Faster R-CNN:

相关文章:

  • 走进网络世界 了解一些基础知识
  • rabbitmq-spring-boot-start配置使用手册
  • 数字孪生10个技术栈:数据清洗-数据的洗衣机
  • Qt+FFmpeg+opengl从零制作视频播放器-15.音视频一些知识
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Toggle)
  • VS 调试Hololens 2工程报错 有未经处理的异常: Microsoft C++ 异常:
  • 2115. 从给定原材料中找到所有可以做出的菜
  • 垃圾回收器介绍
  • FDU 2020 | 1. 食堂打饭
  • 基于SpringBoot的“智慧食堂”系统(源码+数据库+文档+PPT)
  • 突破编程_C++_设计模式(状态模式)
  • C语言分析基础排序算法——计数排序
  • 网络建设与运维培训介绍和能力介绍
  • Linux--搭建Zabbix监控系统
  • Vue3:ref和reactive实现响应式数据
  • [LeetCode] Wiggle Sort
  • Android组件 - 收藏集 - 掘金
  • angular组件开发
  • java第三方包学习之lombok
  • python 装饰器(一)
  • Vultr 教程目录
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 力扣(LeetCode)22
  • 实习面试笔记
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 数据可视化之 Sankey 桑基图的实现
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 微信小程序填坑清单
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #include
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (Git) gitignore基础使用
  • (LeetCode C++)盛最多水的容器
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (十一)图像的罗伯特梯度锐化
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)为C# Windows服务添加安装程序
  • (转载)虚函数剖析
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .gitignore文件---让git自动忽略指定文件
  • .net core 6 集成和使用 mongodb
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Micro Framework初体验
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @软考考生,这份软考高分攻略你须知道
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [C]整形提升(转载)
  • [CERC2017]Cumulative Code
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件