第十七周:Fast R-CNN论文阅读

Fast R-CNN论文阅读

  • 摘要
  • Abstract
  • 文章简介
  • 1. 引言
  • 2. Fast R-CNN框架
    • 2.1 RoI位置信息映射
    • 2.2 RoI pooling
    • 2.3 分类器与边界框回归器
    • 2.4 以VGG16为backbone的Fast RCNN的网络结构
  • 3. 训练细节
    • 3.1 采样
    • 3.2 多任务损失
  • 4. 优缺点分析
  • 总结

摘要

这篇博客介绍了Fast R-CNN,这是一种双阶段的目标检测模型,是对RCNN的改进。RCNN由于对每个候选区域单独进行特征提取,导致了大量的重复计算。为了解决这一问题,Fast R-CNN引入了更为高效的策略。它首先对整张图片进行卷积操作,得到特征图,然后根据候选区域在原图中的空间位置信息,在特征图上进行RoI Pooling,从而避免了重复计算。RoI Pooling层根据预定义的网格尺寸对候选区域特征图进行划分,然后在每个网格内执行最大池化操作,最终生成固定尺寸的RoI特征向量。这种方法还确保了无论候选区域的大小如何变化,都能生成一致的特征表示。此外,Fast R-CNN采用多任务损失函数,对分类器和边界框回归器进行联合训练。这种设计不仅加快了训练和推理的速度,还通过学习两种任务之间的相互影响,提高了目标检测的准确度。与RCNN相比,Fast R-CNN实现了端到端的训练,减少了训练阶段的复杂性,从而提升了检测精度。但Fast R-CNN并未解决候选区域生成过程中的耗时问题。

Abstract

This blog introduces Fast R-CNN, a two-stage object detection model that improves upon RCNN. RCNN extracts features for each candidate region separately, leading to a significant amount of redundant computations. To address this, Fast R-CNN introduces a more efficient strategy. It first performs convolution on the entire image to obtain feature maps, then conducts RoI Pooling on these feature maps based on the spatial location information of the candidate regions, thus avoiding redundant computations. The RoI Pooling layer divides the feature maps of candidate regions according to predefined grid sizes and performs max pooling in each grid, ultimately generating fixed-size RoI feature vectors. This method also ensures that consistent feature representations are generated regardless of variations in the size of candidate regions. Additionally, Fast R-CNN employs a multi-task loss function to jointly train the classifier and bounding box regressor. This design not only accelerates training and inference speeds but also enhances detection accuracy by learning the interactions between the two tasks. Compared to RCNN, Fast R-CNN achieves end-to-end training, reducing the complexity of the training phase and thus improving detection accuracy. However, Fast R-CNN does not address the time-consuming issue of candidate region generation.


文章简介

Title:Fast R-CNN
Author:Ross Girshick ;Microsoft Research
WOS:https://arxiv.org/abs/1504.08083v2


1. 引言

在FastRCNN提出之前,目标检测算法都是采用的多阶段训练流程,如RCNN。
目标检测任务的复杂性是因为需要目标的精确定位,这就带来了两个主要的难点:需要处理大量的候选区域、需要对这些候选框进行调整以实现精确定位。
尽管RCNN在目标检测任务上达到了很高的准确率,但也具有明显的缺点:

  1. 训练过程是多阶段的流程:首先,需要对与训练好的CNN进行微调;然后将CNN提取到的特征用来训练SVM分类器;最后用CNN提取到的特征来训练边界框回归器。三个步骤依次执行。
  2. 训练在时间和空间上的开销很大:训练SVM分类器和边界框回归器的数据是由CNN提取出的候选框的特征,这些特征需要先存到磁盘,在训练SVM分类器和边界框回归器时再从磁盘取出使用。
  3. 目标检测的速度很慢:在测试时,从每个测试图像中的每个候选区域提取一次特征,非常耗时。

2. Fast R-CNN框架

Fast R-CNN框架如下图所示。与RCNN一样,Fast R-CNN采用 selective search 算法产生图像的2K个左右的候选框。与RCNN不同,Fast R-CNN的网络输入图像不是候选区域,而是整张图像,而且候选框的位置信息也作为网络输入。整张图像经过CNN(文中用的网络是VGG的最后一个卷积层之前的网络)提取特征后,得到图像的特征图。各种不同大小的候选区域对应的特征图经过 RoI pooling 层得到特定尺寸的特征图,这些特征图展平后经过两层全连接层得到RoI特征向量。每个 RoI 特征向量分别经过两个不同的全连接层,其中,一个最终经过softmax得到每个类别的概率,另一个最终经过边框回归器得到除背景外其他所有类别的边框调整信息。
在这里插入图片描述

2.1 RoI位置信息映射

Fast R-CNN的网络输入是整张图像和其中的候选区域的信息,候选区域的特征图是根据整张图像的特征图和候选区域在原图中的相对位置得到的,具体方式如下:
位置信息先不考虑通道
在这里插入图片描述
经过卷积后,RoI在原图和特征图中的相对位置不变。

2.2 RoI pooling

RoI pooling 的输入是原图像的特征图和 RoI 在特征图中的位置信息,输出是特定尺寸的 RoI 特征图。
RoI pooling 对特征图中的 RoI 的每个通道都进行最大池化,但 RoI pooling 需要根据 RoI 的尺寸来决定池化的尺寸,具体如下:
在这里插入图片描述
假设RoI层的输出为 k ∗ k k*k kk ,RoI 特征图区域尺寸为 H ∗ W H*W HW,则划分后的网格中每个格子的尺寸为 H k ∗ W k \frac{H}{k}*\frac{W}{k} kHkW。若网格的分界线落到非整数像素上,则可对像素采用四舍五入的方法确定其所属的网格,例如如果一个网格从(1.2, 3.3)到(2.8, 4.7),则此网格在实际中包括行1, 2, 3和列3, 4, 5的像素,另一种处理方法为填充,使得每个网格尺寸为整数。

2.3 分类器与边界框回归器

分类器的输出为 N + 1 N+1 N+1个类别的概率,其概率是经过softmax的,所以满足概率分布,即概率的和为1;边界框回归器的输出是目标类别的位置和大小调整信息,输出的节点数为 N ∗ 4 N*4 N4.其中N为目标类别的个数,不包括背景。

2.4 以VGG16为backbone的Fast RCNN的网络结构

Layer NameTypeParametersActivation Function
conv1_1Convolution3x3 filters, 64 channelsReLU
conv1_2Convolution3x3 filters, 64 channelsReLU
pool1Max Pooling2x2 pool, stride 2-
conv2_1Convolution3x3 filters, 128 channelsReLU
conv2_2Convolution3x3 filters, 128 channelsReLU
pool2Max Pooling2x2 pool, stride 2-
conv3_1Convolution3x3 filters, 256 channelsReLU
conv3_2Convolution3x3 filters, 256 channelsReLU
conv3_3Convolution3x3 filters, 256 channelsReLU
pool3Max Pooling2x2 pool, stride 2-
conv4_1Convolution3x3 filters, 512 channelsReLU
conv4_2Convolution3x3 filters, 512 channelsReLU
conv4_3Convolution3x3 filters, 512 channelsReLU
pool4Max Pooling2x2 pool, stride 2-
conv5_1Convolution3x3 filters, 512 channelsReLU
conv5_2Convolution3x3 filters, 512 channelsReLU
conv5_3Convolution3x3 filters, 512 channelsReLU
pool5Max Pooling2x2 pool, stride 2-
RoI PoolingRoI PoolingFixed-size pooling (e.g., 7x7)-
fc6Fully ConnectedWeights 25088x4096, bias 4096ReLU
fc7Fully ConnectedWeights 4096x4096, bias 4096ReLU
cls_scoreFully ConnectedWeights 4096xnum_classes, bias num_classes-
bbox_predFully ConnectedWeights 4096x4num_classes, bias 4num_classes-

其中,VGG16的pool5及其前面的层没有变动,后面依次加入了RoI pooling层、两个全连接层、分类器和边界框回归器。
由于在全连接层之前使用了RoI pooling层来得到固定尺寸的RoI 特征图,所以网络的图像输入可以是任意尺寸的,而不像RCNN那样在网络输入前对图像进行warp处理以得到相同尺寸的图像输入。这也是对RCNN的一大改进。

3. 训练细节

网络的预训练与CRNN类似,也是在图像分类数据集上来训练卷积网络(文中是VGG),预训练使得卷积网络能够有很好的图像特征提取能力。本小节主要说明微调训练时的关键细节。

3.1 采样

在微调时,使用mini-batch采样。采样方式为分层采样,先采集N个图像,再从N个图像中采集R/N个RoI,共R个样本。
训练时,不直接使用SS算法得到的所有候选区域,只需要使用其中的一小部分。从候选区域中采集25%的RoI,要求这些候选区域与GT(Ground Truth)的IoU至少为0.5,采集的到的RoI作为正样本,类别标记为正数;对于与所有GT的最大IoU在[0.1,0.5)上的候选框,从中采样得到负样本,就是背景类别,其类别标签为0;另外,对于与所有GT的最大IoU小于0.1上的候选区域,可以用于难例挖掘。在训练期间,图像以概率0.5水平翻转作为数据增强,不使用其他数据增强。

3.2 多任务损失

Fast RCNN 有两个平行的输出子层。其中一个输出子层输出当前RoI的类别概率分布 :
p = ( p 0 , p 1 , p 2 . . . . . . , p k ) p=(p_0,p_1,p_2......,p_k) p=(p0,p1,p2......,pk) p 0 p_0 p0为背景的概率;另一个输出子层输出边界框回归偏移信息, t k = ( t x k , t y k , t w k , t h k ) t^k=(t_x^k,t_y^k,t_w^k,t_h^k) tk=(txk,tyk,twk,thk)其中K是目标类别,输出的是所有目标类别的偏移信息。
对每个RoI都用多任务损失来联合训练分类器和边界框回归器,多任务损失函数为:
L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L(p,u,t^u,v)=L_{cls}(p,u)+\lambda[u\geq1]L_{loc}(t^u,v) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)其中, u u u是 RoI 的真实类别, v v v是真实的边界框偏移信息。
L c l s ( p , u ) L_{cls}(p,u) Lcls(p,u)是分类损失,真实类别的表示类似于独热编码,在对应的位置上的概率为1,其他位置都为0。所以在交叉熵损失实际为: L c l s ( p , u ) = − log ⁡ p u L_{cls}(p,u)=-\log p_u Lcls(p,u)=logpu.
L l o c ( t u , v ) = ∑ i ∈ { x , y , w , h } s m o o t h L 1 ( t i u − v i ) L_{loc}(t^u,v)=\sum_{i\in{\{x,y,w,h\}}}smooth_{L_1}(t_i^u-v_i) Lloc(tu,v)=i{x,y,w,h}smoothL1(tiuvi)是定位损失,
其中, s m o o t h L 1 ( x ) = { 0.5 x 2 , if  ∣ x ∣ < 1 , ∣ x ∣ − 0.5 , otherwise . smooth_{L_1}(x) = \begin{cases} 0.5x^2, & \quad \text{if } |x| <1, \\ |x|-0.5, & \quad \text{otherwise} . \end{cases} smoothL1(x)={0.5x2,x0.5,if x<1,otherwise.,使用 L 1 L_1 L1损失是因为其相对于 L 2 L_2 L2损失具有更强的鲁棒性,对越界的边框不敏感。
其中的位置偏移信息与RCNN是一样的:
在这里插入图片描述
多任务损失中 [ u ≥ 1 ] = { 1 , if  u ≥ 1 , 0 , otherwise  . [u\geq1] = \begin{cases} 1, & \quad \text{if } u \geq 1, \\ 0, & \quad \text{otherwise } . \end{cases} [u1]={1,0,if u1,otherwise .,这是因为当 u = 0 u=0 u=0时,表示当前RoI的类别为背景,没有边界框的真值概念,因此没有位置损失。超参 λ \lambda λ是用来控制多任务损失中分类损失和边界框损失的权重的,文中将其设为1。

4. 优缺点分析

Fast RCNN和RCNN都是利用了卷积网络来实现目标检测任务,但前者是相较于后者,将特征提取、分类、边界框回归进行了融合。下面两个图中,上方为Fast RCNN的模块,下面为CNN的。
在这里插入图片描述在这里插入图片描述
前者的优点主要体现在:

  1. 共享特征提取:Fast R-CNN通过对整个图像进行一次卷积神经网络处理,提取出特征图,然后在特征图上处理所有的候选区域。这种共享特征提取的方式避免了重复计算,进一步加快了检测速度。
  2. 引入RoI Pooling层:Fast R-CNN引入了Region of Interest (RoI) Pooling层,该层能够将不同大小的候选区域转换为固定大小的特征图。网络能够接收不同尺寸的图像输入。
  3. 联合分类和回归:Fast R-CNN将分类和边界框回归任务整合到同一个网络中,使用了多任务损失函数来训练网络,实现了同时优化分类和回归任务。这种多任务学习的方式比R-CNN的分开处理更为高效。
  4. 端到端训练:Fast R-CNN 支持端到端训练,网络可以整体优化,从而实现更好的性能和更简便的训练流程。

总之,Fast R-CNN提高了效率和准确率,降低了时间和空间上的开销。

缺点:
Fast R-CNN降低了网络的耗时,但其还是使用了selective search算法来生成大量的候选框,这需要花费较多时间。且依赖这种外部区域提议算法可能导致漏检一些目标,尤其是在目标大小多样或背景复杂的情况下。

总结

Fast RCNN是一种双阶段目标检测算法,其网络的训练时一个单阶段的流程。Fast RCNN实现目标检测的流程如下:首先,和RCNN一样,使用selective search算法生成候选框;整张图像和生成的候选框位置、大小信息一起送入网络,得到特征图和候选框的位置映射;图片的特征图和候选框映射的位置一起经过RoI池化层,得到固定尺寸的RoI特征图;RoI特征图经过两层全连接层后得到RoI特征向量;RoI特征向量分别经过两个平行的全连接子层,其中一个子层为分类子层,得到K+1个类别概率,另一个子层为边界框回归子层,得到K个前景类别边界框修正信息。Fast RCNN相比其之前的目标检测模型,大幅提升了训练和推理速度,同时提升了准确度,但仍存在候选框生成耗时长的问题。

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

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

相关文章

Python爬虫(二)- Requests 高级使用教程

文章目录 前言一、Session 对象1. 简介2. 跨请求保持 Cookie3. 设置缺省数据4. 方法级别参数不被跨请求保持5. 会话作为上下文管理器6. 移除字典参数中的值 二、请求与响应1. 请求与响应对象1.1 获取响应头信息1.2 获取发送到服务器的请求头信息 三、SSL 证书验证1. 忽略 SSL 证…

Java-38 深入浅出 Spring - AOP切面增强 核心概念 相关术语 Proxy配置

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

【算法】复杂性理论初步

六、算法复杂性初步 重要的复杂性类 P P P 的定义 多项式时间内可解的问题 若 L ∈ P L∈P L∈P&#xff0c;则存在确定性多项式时间的图灵机 M M M&#xff0c;使得 M ( x ) 1 ⟺ x ∈ L M(x)1⟺x∈L M(x)1⟺x∈L N P NP NP 的定义 多项式时间内可验证验证解的正确性 &…

hive中的四种排序类型

1、Order by 全局排序 ASC&#xff08;ascend&#xff09;: 升序&#xff08;默认&#xff09; DESC&#xff08;descend&#xff09;: 降序 注意 &#xff1a;只有一个 Reducer,即使我们在设置set reducer的数量为多个,但是在执行了order by语句之后,当前此次的运算还是只有…

Mysql(MGR)和ProxySQL搭建部署-Docker版本

项目路径&#xff1a;D:\study\backend\mysql\mgr 一、Mysql(MGR) 1.1 docker-compose.yaml volumes: # MySQL配置文件目录 - "./mysql-1/conf.d/my.cnf:/etc/mysql/my.cnf" # MySQL工作目录 - "./mysql-1/data:/var/lib/mysql" …

智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之1

本文要点 这一次我们先把抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接看看应用程序。例如&#xff0c;在现在各种AI聊天工具层出不穷的今天&#xff0c;我觉得特别需要一个通用的AI聊天工具的图形界面能够为每个聊天者&#xff08;或一个利益…

科技快讯 | 水滴筹成为民政部指定个人求助网络服务平台;小米超级小爱首次向正式版用户开放;腾讯发布全球首个重症医疗大模型

本地 AI 开发利器&#xff0c;初探微软 Win11 AI Dev Gallery 功能 12月27日&#xff0c;科技媒体Windows Latest报道&#xff0c;微软推出AI Dev Gallery功能&#xff0c;助力开发者集成端侧AI。该功能支持Windows 10/11&#xff0c;提供25个示例模型&#xff0c;涵盖多领域。…

python爬虫----爬取视频实战

python爬虫-爬取视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入此网站中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到后续我们想要…

大数据面试笔试宝典之Flink面试

1.Flink 是如何支持批流一体的? F link 通过一个底层引擎同时支持流处理和批处理. 在流处理引擎之上,F link 有以下机制: 1)检查点机制和状态机制:用于实现容错、有状态的处理; 2)水印机制:用于实现事件时钟; 3)窗口和触发器:用于限制计算范围,并定义呈现结果的…

AR 模型的功率谱

功率谱密度&#xff08;Power Spectral Density, PSD&#xff09;的表达式是从信号的自相关函数和系统的频率响应推导出来的&#xff0c;特别是对于 AR&#xff08;Auto-Regressive&#xff0c;自回归&#xff09;模型。以下是推导的过程&#xff1a; 1. AR 模型的定义&#xf…

leetcode------mysql

177. 第N高的薪水 - 力扣&#xff08;LeetCode&#xff09; 表: Employee ------------------- | Column Name | Type | ------------------- | id | int | | salary | int | ------------------- 在 SQL 中&#xff0c;id 是该表的主键。 该表的每一行都包含…

coturn docker 项目 搭建【一切正常】

业务需求&#xff1a;需要coturn这个服务 定制语音视频连线 请参考"小红的逃脱外星人追踪计划" coturn项目 本地测试连接服务 turnutils_stunclient -p 3478 127.0.0.1turnutils_stunclient -p 3478 -L 127.0.0.1 127.0.0.1telnet localhost 3478turnutils_uclient …

Linux 笔记 /etc 目录有什么用?

在 Linux 系统中&#xff0c;/etc 目录的全称是 "et cetera"&#xff0c;中文可以翻译为“其他”或“杂项”。这个目录用于存放系统的配置文件和一些启动脚本。名称来源于早期的 Unix 系统设计&#xff0c;当时它被用来存放那些不属于其他特定类别的系统文件。 随着…

Android 学习小记1

目录 先介绍一下Android Studio 看看常见的模板 1. No Activity 2. Empty Activity 3. Gemini API Starter 4. Basic View Activity 5. Bottom Navigation Activity 6. Empty Views Activity 7. Navigation Drawer Views Activity 8. Responsive Views Activity 9. G…

【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题

当我们从Kotlin Multiplatform Wizard | JetBrains 下载ComposeMultiplatform项目时 会遇到无法正常编译/运行的情况&#xff0c;一般网页和桌面是可以正常编译的&#xff0c; 我这里着重解决如下问题 1:Gradle版本不兼容或者Gradle连接超时 2:JDK版本不兼容 3:Gradle依赖库连…

Python + 深度学习从 0 到 1(02 / 99)

希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持&#xff01; ⭐ Keras 快速入门&#xff1a; 神经网络的基本数据结…

MySQL 数据库基础

目录 什么是数据库 数据库分类 关系型数据库 非关系型数据库 SQL子语言 MySQL MySQL 存储数据的组织方式 数据库操作 显示当前数据库 创建数据库 使用数据库 删除数据库 什么是数据库 数据库 是一个用于存储、管理和检索数据的系统&#xff0c;可以组织和保存大量…

《Vue3 二》Vue 的模板语法

在 React 中&#xff0c;想要编写 HTML&#xff0c;是使用 JSX&#xff0c;之后通过 Babel 将 JSX 编译成 React.createElement 函数调用&#xff1b;在 Vue 中&#xff0c;也支持 JSX 的开发模式&#xff0c;但大多数情况下都是使用基于 HTML 的模板语法&#xff0c;在模板中允…

江科大学习笔记之——标准库点亮一个LED灯

控制GPIO就三步 1.RCC时钟使能 2.结构体配置GPIO寄存器 3.控制GPIO值 gpio.c #include "stm32f10x.h" // Device headervoid gpio_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//1.RCC时钟使能GPIO_InitTypeDef GPIO_I…

高级技巧-使用Mysql 实现根据条件过滤整个分组数据

博客-mysql exists实现过滤所属条件对应分组的全部数据 在数据查询中&#xff0c;有时需要根据某一条件来过滤整个分组的数据&#xff0c;尤其是当某条记录满足特定条件时&#xff0c;需要将该组内的所有记录排除。本文将介绍如何使用 MySQL 的 EXISTS 关键字来实现这种分组过滤…