Fast-R-CNN论文笔记

news2024/9/25 3:25:28

目标检测之Fast R-CNN论文精讲,Fast RCNN_哔哩哔哩_bilibili

一 引言

1.1 R-CNN和SPPNet缺点

😀R-CNN

Training is a multi-stage pipeline

多阶段检测器(两阶段和一阶段检测器) 1️⃣首先训练了一个cnn用来提取候选区域的特征,这个cnn训练好后再提取整个数据集上所有区域的特征;

2️⃣然后利用特征来额外训练一个svm网络来对候选区域进行分类。

如果是RCNN-BB算法,还会3️⃣额外训练一个框回归的模型来回归出候选框的精确位置。

Training is expensive in space and time

在训练svm和框回归模型的时候,需要把每一张图片上的每一个候选框的这个特征都提取出来,这些特征都被提取出来后才能训练后续的模型;

所以利用cnn提取到这个特征,需要先把它写到磁盘里供后续训练使用;

所以在训练过程中会耗费大量的空间来存特征、会耗费大量的时间来提取特征

Object detection is slow

对于一张测试图片RCNN也需要先产生2000个候选区域,每个候选区域都需要通过cnn的前向传播来提特征; 因此测试一张图片的速度也会特别慢,导致一张图的测试时间可能会达到47秒。

😅因为R-CNN需要使用一个cnn来前向传播,提取每一个候选区域的特征,没有用到共享计算;因此后续提出的SPP-net这个网络,就尝试通过共享计算来加速r cnn的训练和测试过程;

😲RCNN ---> SPP-Net

在SPP-Net可以只用把一整张图传进去给cnn,然后在cnn里只使用这一整张图进行一次前向传播,计算整张图的一个特征图,最后再把各个候选区域的特征给抠出来就可以了,也就是在整张图上共享计算;

否则在R-CNN里,还需要先产生2000个候选区域,每个候选区域都需要通过cnn的前向传播来提特征;

SPP-Net优化了R-CNN第三个缺点;

😆SPP-Net

它的核心其实就是引入了一个这个spp层,也叫空间金字塔池化(SPP和ASPP)层。 这个空间金字塔池化层的尺寸和步长是一个动态变化的过程 它会根据你输出特征图的尺寸来动态的改变尺化合的尺寸和步长; 

在得到4x4大小、2x2大小和1x1大小的一个特征图之后,再把这些特征给拼接起来,形成了一个固定长度的一个特征,然后再把这个特征传给后续的全连接层形成最终的一个候选区域的图片特征;

1️⃣但SPP-Net仍是一个多阶段过程;

2️⃣But unlike R-CNN, the fine-tuning algorithm proposed in [11] cannot update the convolutional layers that precede the spatial pyramid pooling

SPP-Net的微调很难更新卷积层

1.2 Fast-RCNN优势

  1. 比RCNN和SPPNET具有更高的一个检测精度
  2. 它的训练过程是一个单阶段的过程
  3. 训练能更新所有的网络层,而不像sppnet不能更新卷积层
  4. 由于训练过程变成单阶段了,所以不需要额外的磁盘空间来缓存特征

二 Fast R-CNN模型结构和训练流程

模型结构

😺对于一整张输入图片,会先通过一个深度卷积神经网络来得到整张图片的图片特征; 😸根据候选区域在原图上的一个图片位置,使用ROI投影来获取到候选区域; 😹有了候选区域的特征图之后,再通过ROI池化层把尺寸不固定的候选区域特征图给转换成特定尺寸的一个特征图; 😻再接上两个全连接层来得到每一个区域的特征向量; 😼再额外接上两个并行的全连接层,其中一个利用soft max函数负责预测类别, 😽另一个直接预测和框坐标相关的一个框回归; 🙀这个预测类别的分支输出k加一个数据集的类别,另外加上一个背景类; 😿预测坐标的分支直接输出4*(k+x),也就是每个类别对应的坐标;

vs spp-net

😈是SPP-NET在最后一个卷积层后面跟上的是一个空间金字塔池化,但是Fast-RCNN在最后一个卷积层后面跟上的是一个ROI池化层

👽SPP-NET它在提取到候选区域的特征之后,像RCNN一样额外训练支持向量机进行分类或回归; 但是Fast-RCNN在是后面直接接了两个并行的全连接层实现分类和回归;

2.1 ROI 池化层

The RoI pooling layer uses max pooling to convert the features inside any valid region of interest into a small feature map with a fixed spatial extent of H × W (e.g., 7 × 7), where H and W are layer hyper-parameters that are independent of any particular RoI.

它能将任意有效的候选区域内的这个特征给转化成一个小的特征图并且这个小的特征图具有特定的一个空间范围;

它本质上就是使用最大池化把不规则的一个特征图给转换成一个特定尺寸的输出;

只不过在这个空间金字塔池化层这里它是分别使用了三个不同的磁化来得到三个不同大小的一个输出;

但是在FAST-RCNN这里作者只用了一个池化来得到一个输出

The RoI layer is simply the special-case of the spatial pyramid pooling layer used in SPPnets [11] in which there is only one pyramid level

它仅仅是空间金字塔池化层的一种特殊情况,因为金字塔池化层是有三个输出,但是ROI层在这里它只有一个输出;

2.2 从预训练模型中初始化一个Fast-R-CNN

作者试验了三个预训练的imagenet网络,每个网络都具有五个最大池化层,并且具有5到13个卷积层;(这三个预训练模型的具体结构会在4.1小节给详细列出)

这里的预训练网络其实指的就是在imagenet上预训练好的一个图像分类模型, 预训练的分类模型一般都是这种结构: 🙈先传入一整张图片给一个深度卷积网络; 🙉这个深度卷积网络会得到这一整张图片的一个特征图,然后接上一个固定尺寸的最大池化层,来对这一个特征图做最大池化; 🙊再接上几个全连接层; 🙉最后再跟上一个全连接层和soft max函数来输出image net数据解上的1000个图像类别; 

这里的这个初始化,它指的其实就是把一个预训练的一个图像分类网络 给变成Fast-RCNN网络的一个过程; 也就是从上面这个模型变成下面这个模型的过程: 

🤖三个变换阶段

First, the last max pooling layer is replaced by a RoI pooling layer that is configured by setting H and W to be compatible with the net’s first fully connected layer (e.g., H = W = 7 for VGG16).

第一步先把最后的一个最大池化层给替换成ROI池化层

Second, the network’s last fully connected layer and softmax (which were trained for 1000-way ImageNet classification) are replaced with the two sibling layers described earlier (a fully connected layer and softmax over K + 1 categories and category-specific bounding-box regressors).

第二步是把最后的一个全连接层和soft max层给替换成了两个并行的全连接层;

其中一个分支用来预测k加一个类别;

另一个分支用来预测边界框回归;

Third, the network is modified to take two data inputs: a list of images and a list of RoIs in those images.

第三步是把网络给修改成了两个数据输入;

除了输入图片外还需要输入图片中的一系列候选区域坐标,以便于你在最终的这个特征图中根据这个候选区域的坐标把这个候选区域的特征给抠出来

2.3 在检测任务上进行微调

Training all network weights with back-propagation is an important capability of Fast R-CNN.

微调模型它其实就是使用反向传播来训练整个网络的一个权重

🤔为什么Fast-RCNN有很好的训练权重能力,SPP-NET却不能?

答:这涉及到训练过程中样本的一个采样方法;

在模型训练时,需要一批一批的图片喂给这个卷积神经网络,一次会传入多张图片。在反向传播更新权重的时候,是需要利用你正向传播得到的中间每一层的值去更新权重的;

🐵SPPNet The root cause is that back-propagation through the SPP layer is highly inefficient when each training sample (i.e. RoI) comes from a different image, which is exactly how R-CNN and SPPnet networks are trained. The inefficiencystems from the fact that each RoI may have a very large receptive field, often spanning the entire input image. Since the forward pass must process the entire receptive field, the training inputs are large (often the entire image).

在训练时,因为一批样本它是通过随机采样得到的,比如需要128个候选区,这128个区域它可能是来自不同的图片,也就是说你需要传入128张这种类似的原图进去; 然后在128个特征图中各自抠出各自所需要的这个后面区域; 在前向传播和反馈传播的过程中,会占用大量的显存,降低模型的训练效率

🐶FAST-RCNN In Fast RCNN training, stochastic gradient descent (SGD) minibatches are sampled hierarchically, first by sampling N images and then by sampling R/N RoIs from each image. Critically, RoIs from the same image share computation and memory in the forward and backward passes. Making N small decreases mini-batch computation. For example, when using N = 2 and R = 128, the proposed training scheme is roughly 64× faster than sampling one RoI from 128 different images (i.e., the R-CNN and SPPnet strategy).

在FAST-RCNN的训练过程中,随机梯度下降Stochastic Gradient Descent(SGD)的这个mini-batch它是通过一种按层抽样的方法;

以N等于二,R等于128为例: 🙋会首先采样两张图片; 🙋‍♂️然后在每张图片上各自采样64个候选区域;

👍这样做的好处就是每次在前向传播的时候,只能传两张图片进去就可以了; 因为每张图片的64个区域都是在一张图上去得到的,所以说你只需要两张原图传进去,然后在两张原图的特征图上各自扣出64个候选区域就可以了;

而不是像SPP-Net一样需要去传入128个原图,大大提升了训练效率

🥳训练时的多任务损失函数

Multi-task loss

Fast-RCNN是有两个并行的输出层;

第一个输出用来产生k加一个类别; 其中p0 表示某个候选区域是背景类的概率; p1到pk表示属于k数据集类别的概率;

第二个分支输出是一个框回归的一个偏移量; 它预测出来的tx和ty表示框的中心点归一化后的偏移量; tw和th表示跟边界框的宽和高相关的一个值;

p和t都是每个候选区域的预测值

求损失函数的时,除了要有预测值之外,还需要有一个提前标注好的一个目标值,也就是ground truth;

这里把标注好的候选区域类别给用u符号表示; 把边界框回归的目标值给定义成v这个符号;

😘类别损失公式: 

 λ [u≥1 ] 一般等于1。 它表示只有当目标类别是≥1的时候,值才等于一; 表示需要求这个回归损失,如果u等于零,就表示这是一个背景类,这个值也就是零,所以最后回归损失就是零,因为背景类它是没有预测框的,也就不需要去求后边这个回归损失。

😲**类别损失函数: 

😊**框回归损失函数: 

🤡vs RCNN smoothL2

假如使用L2损失,这条曲线是可以向两端无限延伸,如果预测出来的这个预测值和目标值偏差过大的话,即x过大,导致smooth值一直无限的往上延伸;

在图像上,斜率其实就是梯度,当无线往上延伸的时候,这个梯度就会趋向于无穷大,最终会产生梯度爆炸现象,没法训练;

所以这个smooth L1损失它在x≥1时,等于|x|-0.5,它的梯度恒等于1,相当于是给梯度设置了一个上限,不会再像L2损失一样产生梯度爆炸;

当x绝对值小于一的时候,多乘了一个0.5系数,是为了让这个分段函数在 x=1的这个点两端的一个梯度值连续

👻Mini-Batch采样策略

Mini-batch sampling

在微调期间,每个随机梯度下降的mini batch都先随机去采样了两张图片; 然后在每个图片上在采样64个候选区域; 这样就构成了一个128个候选区域的一个mini batch

在这128个候选区域里有25%,也就是32个候选区域是正样本; 剩下的96个候选区域是负样本;

正样本的采样方法跟 RCNN一样,以IoU≥0.5来作为正样本; 在剩下的候选区域里,IoU在0.1~0.5之间的候选区域作为负样本; 对于阈值低于0.1的样本,都采用难例挖掘 hard negative mining的这种方法来挑选难样本进行训练;

在训练期间,每张图片都随机的以0.5的概率去做水平翻转

🤢RoI池化层的反向传播公式

Back-propagation through RoI pooling layers这里假设只使用一张图,也就是mini batch的N=1来进行推导; N=1就表示在一张图上取出了128个候选区域,通过ROI池化层,而不像之前一样使用两张,一张取出64个候选区域。

举例: 

 在这张图上一共取出来了128个候选区域的一个特征图,这个特征图是其中第二个候选区域的特征图; 假设它是一个7x7大小的一个特征图,假如使用了一个3x3步长为二的一个最大池化; 对这个特征图进行操作,通过池化处理以后会得到一个3x3的输出特征图;

这里的这个xi指的就是输入特征图上的每一个位置的一个元素值;

这里的y r j表示的就是输出输出特征图上的每一个位置的一个元素值,也就是第二个特征图上的这个输出;

y rj的这个值是通过在池化和的范围内挑选出最大的那一个值,然后得到的这个位置的值; ![[Fast R-CNN.pdf#page=3&rect=466,90,530,100&color=note] 这里的Xi*, 小括号指的就是这个石化和覆盖区域内的最大值; 所以这个值和这个值是相等的.反向传播公式:

👾训练过程的超参数

SGD hyper-parameters.

The fully connected layers used for softmax classification and bounding-box regression are initialized from zero-mean Gaussian distributions with standard deviations 0.01 and 0.001, respectively. Biases are initialized to 0. All layers use a per-layer learning rate of 1 for weights and 2 for biases and a global learning rate of 0.001. When training on VOC07 or VOC12 trainval we run SGD for 30k mini-batch iterations, and then lower the learning rate to 0.0001 and train for another 10k iterations. When we train on larger datasets, we run SGD for more iterations, as described later. A momentum of 0.9 and parameter decay of 0.0005 (on weights and biases) are used.

全连接层初始化的时候,使用了一个零为均值,然后0.01或者0.01为标准差的高斯分布来初始化,偏差项被初始化为零;

设置了一个学习率以及这个权重衰减的一个值;

2.4 目标的尺度不变性

尺度不变性指的就是有两个相同的目标,一个目标比较,一个目标比较,如果这两个目标都能够被模型识别出来,就说明这个模型具有比较好的尺度不变性。

作者设计了两种方法:

1️⃣brute-force approach

可以把它理解成单尺度训练。

在单尺度训练过程中,每一张图片都被处理成了一个预定义好的图片尺寸来进行训练或者进行预测;

他的目的是让网络来直接学会尺度不变形

2️⃣multi-scale approach

多尺度方法。

在训练期间,每一张图片都先被随机采样成一个特定的尺度,而不是像第一种一样采用一个预定义的固定尺度;

这种多尺度的训练方法也是一种数据增强的方式

👋这两种方法在第五章有实验结果做对比。

三 Fast-RCNN测试流程

一旦fast cn的网络被微调好后就可以进行目标检测,整个网络只需要接收两个输入,分别是一张图片和这个图片中的一系列目标候选区域,就能够预测出候选区域的类别和精确坐标。

3.1 奇异值分解方法加速检测

For whole-image classification, the time spent computing the fully connected layers is small compared to the conv layers. On the contrary, for detection the number of RoIs to process is large and nearly half of the forward pass time is spent computing the fully connected layers (see Fig. 2).

对于图像分类任务来说,花费在全连接层上的时间比花费在卷积层上的时间要小

相反的对于检测任务来说,由于ROI的数量非常的大,因此几乎一半前馈传播时间都被花费在了计算全连接层上;

这是因为在测试一张图片的时候只需要通过一次前馈传播把这一整张图的一个特征图给提取出来就可以;

但是在后面进行全连接层运算的时候,需要把这一张图上所有的候选区域抠出来后的候选区域特征图都通过后面的全连接层去进行运算;

所以全连接层会占据大量的一个测试时间

👏大的全连接层的一个加速方法就是通过截断奇异值分解 Truncated SVD方法

🧙‍♂️奇异值分解SVD: 

🎅截断奇异值分解 Truncated SVD: 中间的这个对角矩阵有一个性质,就越靠近左上角的这个值越重要,越靠近右下角的这个值越不重要,既然右下角的这个值不重要,就可以直接把这些值给去掉。

🤸相当于只保留左上角一部分变成一个t乘t的矩阵; 🤸‍♂️相应的前面这个矩阵就把最后这几列给去掉变成u乘t的一个矩阵 🤸‍♀️后面这个矩阵就把最后的这几这几行给去掉就变成一个t乘v的一个矩阵 相当于对原始的这么一个u乘v的矩阵做了一个压缩 

全连接层中,它本质上就是让参数矩阵w和一个输入特征x去进行相乘;

把单个全连接层w给替换成两个全连接层

这两个全连接层中的第一个是使用了一个权重矩阵

第二个使用这个来作为权重矩阵;

左边的这个全连接层用右边两个更小的全连接层近似替换了;

替换前左边的这个参数是u乘w的参数; 右边压缩后的参数其实是u乘t加上一个v乘t;

右边这个压缩的力度越大,右边的这个参数是越小的;参数越少;模型的运行速度就会越快

所以说通过这种截断的奇异值分解法,可以提高全连接层的一个推理速度

四 主要结论

😇fast-rcnn在三个数据集上都取得了一个最优的一个平均精度 😎与RCNN和SPPNET相比,Fast-RCNN具有更快的训练速度和测试速度 😲在VGG-16上微调卷积层能够提高模型的平均精度

4.1 实验配置

作者使用了三个预训练的ImageNet模型:

🤗第一个模型是RCNN的CaffeNet模型 它本质上是使用了一个AlexNet这个模型,作者额外给它起了一个名字 也就是model-s(其中这个s就表示small的意思)

😌第二个模型是使用了 VGG CNN M 1024 这个模型 这个模型它和model s具有相同的一个模型深度,但是它更宽一些,所以也所以就给这个模型起名为model m() m就是medium的意思)

🤣最后一个网络模型就是非常深的这个 VGG16模型,由于第三个模型是最大的一个,所以就给它起名为model L (L就表示large的意思)

所有的实验都使用单尺度训练和单尺度预测,也就是说模型在训练和预测时输入的图片尺寸都被固定成了600大小;

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

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

相关文章

JMeter并发工具的使用

视频地址:Jmeter安装教程01_Jmeter之安装以及环境变量配置_哔哩哔哩_bilibili 一、JMeter是什么 JMeter是一款免安装包,官网下载好后直接解压缩并配置好环境变量就可以使用。 环境变量配置可参考:https://www.cnblogs.com/liulinghua90/p/…

只有IP地址怎么实现HTTPS访问?

只有IP地址也可以实现HTTPS访问。虽然大部分SSL证书通常是针对域名发放,但也存在专门针对IP地址发放的SSL证书,这类证书允许服务器通过HTTPS协议为其公网IP地址提供安全的Web服务。当服务器配置了基于IP地址的SSL证书后,用户可以通过“https:…

git基础-查看提交历史

查看提交历史 在创建了多个提交之后,或者如果克隆了一个具有现有提交历史的存储库,可能会想要回顾一下发生了什么。最基本和强大的工具就是 git log 命令。 运行下git log查看下输出状态 默认情况下,不带任何参数运行 git log 命令会以逆时…

Java之继承和多态(精简版-更适合复习)

继承 如果子类有,优先访问子类的,子类没有,然后去看父类有没有,父类也没有,那就会报错。 就是要访问父类怎么办?通过super关键字。 在静态方法当中,时不能使用this和super的。 当子类继承了父…

江苏开放大学2024年春《中级会计实务(上) 050284》第1次任务第一单元总论、第二单元存货练习参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 电大搜题 多的用不完的题库&#xff…

院子摄像头的监控

院子摄像头的监控和禁止区域入侵检测相比,多了2个功能:1)如果检测到有人入侵,则把截图保存起来,2)如果检测到有人入侵,则向数据库插入一条事件数据。 打开checkingfence.py,添加如下…

2024阿里云学生服务器免费领取申请(2024新版教程)

阿里云学生服务器免费申请,之前是云翼计划学生服务器9元/月,现在是高校计划,学生服务器可以免费申请,先完成学生认证即可免费领取一台云服务器ECS,配置为2核2G、1M带宽、40G系统盘,在云服务器ECS实例过期之…

大学期末考试搜题软件?这4款足够解决问题 #知识分享#笔记#职场发展

当代大学生面临着繁重的学业压力和海量的知识点,如何高效地进行学习和搜题成了他们关注的焦点。幸运的是,随着科技的不断进步,我们有越来越多的日常搜题和学习软件可以帮助我们更好地应对这些挑战。在本文中,我将为大家介绍10款备…

软考复习笔记day3(计算机体系结构和指令系统基础)(精简版)

计算机体系结构分类 处理机数量分类: 单处理(一个处理单元)并行处理系统(两个以上处理机互联).分布式处理系统 Flynn分类:(常考) 以指令流和数据流进行区别 指令流由控制部分进…

day03_mysql_课后练习 - 参考答案

文章目录 day03_mysql_课后练习mysql练习题第1题第2题第3题第4题第5题 day03_mysql_课后练习 mysql练习题 第1题 案例: 1、创建一个数据库:day03_test01_school 2、创建如下表格 表1 Department表的定义 字段名字段描述数据类型主键外键非空唯一D…

算法 之 排序算法

🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ 🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖 🎉希望我们在一篇篇的文章中能够共同进步!!&…

总结 | vue3项目初始化(附相应链接)

如何运行 vue 项目:vscode运行vue项目_vscode启动vue项目命令-CSDN博客 vue3项目搭建 目录管理 git管理:vue3项目搭建并git管理_git 新建vue3项目-CSDN博客 目录调整:vue3项目 - 目录调整-CSDN博客 vscode中快速生成vue3模板&#xff1a…

12 Games101 - 笔记 - 几何(网格处理)、阴影图

12 几何(网格处理)、阴影图 曲面细分 曲面细分是指将一个模型的面合理的分成更多小的面,从而提升模型精度,使模型越来越光滑,提高渲染效果。 Loop细分 Loop细分是指Loop提出来的细分规则,只能针对于三角…

中等职业学校大数据课程建设方案

大数据产业是以数据及数据所蕴含的信息价值为核心生产要素,通过数据技术、数据产品、数据服务等形式,使数据与信息价值在各行业经济活动中得到充分释放的赋能型产业。 大数据产业定义一般分为核心业态、关联业态、衍生业态三大业态。 一、专…

【Entity Framework】 EF中DbContext类详解

【Entity Framework】 EF中DbContext类详解 一、概述 DbContext类是实体框架的重要组成部分。它是应用域或实例类与数据库交互的桥梁。 从上图可以看出DbContext是负责与数据交互作为对象的主要类。DbContext负责以下活动: EntitySet:DbContext包含…

golang sync.Map之如何设计一个并发安全的读写分离结构?

在 golang中,想要并发安全的操作map,可以使用sync.Map结构,sync.Map 是一个适合读多写少的数据结构,今天我们来看看它的设计思想,来看看为什么说它适合读多写少的场景。 如下,是golang 中sync.Map的数据结构…

Oracle数据库如果出现乱码,需要查看是否时字符集不一致导致乱码,这样解决

1、如果出现乱码,需要查看是否时字符集不一致导致乱码 以修改为ZHS16GBK字符集为例,具体字符集需要sql查询。 Oracle查看字符集 SELECT * FROM NLS_DATABASE_PARAMETERS p where p.PARAMETERNLS_CHARACTERSET; SELECT USERENV(language) FROM DUAL; 1.…

机器人路径规划:基于斑翠鸟优化算法(Pied Kingfisher Optimizer ,PKO)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

视频素材库哪个好?这8个短视频相关的优质素材网推荐看看

在这个数字化时代,视频内容的创作变得前所未有地重要。无论是短视频的快速制作,还是专业影片的精心编辑,找到合适的素材资源是每个视频创作者的基本需求。从高清视频片段、无水印的图片,到富有情感的音效,以下精选的网…

Java应用常见log框架介绍以及 如何用好Log

前言 合理使用日志对于Java应用程序的开发、部署和维护都至关重要。通过采用良好的日志记录实践,可以更好地监控应用程序的运行状况、排查问题并优化性能 日志系统与日志框架 日志系统 直接负责打印输出日志,提供完整的日志输出能力: JUL java.uti…