R-CNN网络结构详解

在介绍R-CNN之前,先来了解一种目标检测算法的思路。

目标检测-Overfeat模型

最初的目标检测采用的思路是滑动窗口,比较暴力的从左到右和上到下的扫描图片。

在这里插入图片描述
设定好检测框(Bounding box)的大小,扫描图片后生成子图片。这样就变成了分类的问题了。但是,图片中的物体大小是不一样的,这也意味着每个检测框的大小也不一样。所以就要提前设定M个检测窗口,每个窗口滑动提取N张图片,总共M*N张图片。
每张图片通过转换压缩变形等手段固定成大小一样的图像,然后输入CNN分类器提取特征。

那这种方法是怎么进行数据训练的呢?
准备所需要的训练数据集,每张图片被扫描后生成的子图片和图片的位置如下图:
在这里插入图片描述
比如我们要检测的目标是车,手动标注和准备训练数据集。x为训练的数据,y为标签。是车标记为1,不是车标记为0。
Overfeat总结
这种方法就好像暴力穷举,需要消耗大量的计算力和时间。除此之外,大小不一样的检测框也可能导致效果不准确。
但是,它提供了一种目标检测的思路。

目标检测R-CNN模型

R-CNN使用的不是上面说到的暴力扫描的方式,而是一种候选区域法(region proposal),它以深度学习神经网络为基础的物体检测模型,在性能上有很大的提升。
下面是完整的R-CNN的结构图:
在这里插入图片描述
先来列出整体的算法运行流程,具体的下面再做详细理解
算法运行流程:
●找出图片中可能存在目标的侯选区域(region proposal)
●进行图片大小调整为了适应AlexNet网络的输入图像的大小227×227,通过CNN对候选区域提取特征向量,2000个建议框的CNN特征组合成2000×4096维矩阵
●将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘(20种分类,SVM是二分类器,则有20个SVM),获得2000×20维矩阵
●分别对2000×20维矩阵中每一列即每一类进行非极大值抑制(NMS:non-maximum suppression)剔除重叠建议框,得到该列即该类中得分最高的一些建议框
●修正Bounding box,对bbox做回归微调.

候选区域(region proposal)

这里涉及到很多区域选择算法,其中最出色的是选择性搜索(selective search)。它的工作原理是将图片中的每一个像素作为一组,然后计算每个像素的纹理,将相近的的组合起来形成更大的像素组,然后继续合并各个像素组。下图中展示了像素组是如何扩大的,蓝色矩形代表了真实图片各像素组合并中所有可能的目标对象。
在这里插入图片描述
selective search选取的检测框大小都不一样,但是进入CNN提取候选区的特征向量需要固定的格式输入。因此,就需要对候选区域做尺寸的修改。

Crop+Warp

R-CNN网络结构中的第三层,Warp region。控制候选区的大小,因为这是根据Alexnet结构为基础,即大小要求为227*227.
●Crop:截取原图片一个固定大小的碎片
●Warp:缩放图片
尽管再优秀的算法,也不可能在不失真的情况下传入到CNN中。但是会尽可能的让图片发生更小的变形。
●各向异性缩放:直接缩放到指定大小,但是会造成一定的图片失真
●各向同性缩放:在原图上裁取候选区域填充在边界。
在这里插入图片描述
上图中,第一行的图片是异性缩放的方式,第二行是同性缩放,相比之下,后者图像的变形或者说是失真没那么严重。

CNN网络提取特征

经过前面两步的候选区域提取的子图,进入卷积神经网络进行特征提取,并且将特征数据存于磁盘中
在这里插入图片描述
将提取好的特征数据存于磁盘中是为了后续步骤的使用。而这些存储的特征才是真正要进行训练的数据。
一张图片中的候选区域大约2000个,而R-CNN中的CNN输出是4096大小的特征向量。所以总的特征向量就是2000*4096.

SVM分类

R-CNN中会有20个不同类别的SVM分类对2000个候选区域的特征向量进行分类。所以就有20*2000这样的一个得分矩阵。见图:
在这里插入图片描述
每个分类器都会对2000个候选区域进行分类判断,如上图中判断是否为猫,如果是,得分矩阵中的值记为1,并且给一个分数,这个分数也可以说是该特征为猫的概率分数。如果不是则理解为是背景,记为0。

非极大值抑制NMS

这一步目的是筛选CNN网络最后预测的候选区域,因为共有2000个候选区域,检测一个目标不可能同时显示这么多候选区域。如图:
在这里插入图片描述
图中CNN最后推荐有五个候选区域,上面标注的分数就是上一步得分矩阵的分数。
NMS的方式是选取分数最大的候选区域,然后其余候选区域与它进行交并比IoU计算,也就是两个候选区域相交部分与两候选区域总面积之比。这里还会设置一个阈值,比如阈值为0.5。如果IoU>=0.5。那么分数小的候选区域会被删除。因为IoU的值越接近1,说明两候选区域越接近重合。也就是说两候选区域预测的是同一个目标,只有分数大的会被保留。

修正候选区域-regressor

经过上述步骤得出最后的一个候选区域不一定就是正确的,即使它的得分再好。
所以R-CNN的最后一步会进行微调。就是以最后一个候选区域的特征值,与目标值(grounding truth)建立回归方程计算。这里不展开讨论回归方程计算,简单的理解为候选区域参考真实标注的目标来进行偏移。以下图为例:
在这里插入图片描述
A为最后的候选区域,G为真实标注的目标区域。经过建立回归方程的计算得出G’。使最后的候选区域更接近真实目标,从而提高预测的准确率。
以上就是R-CNN的整个运作流程。那么它是怎么进行训练的呢?

R-CNN训练过程

训练过程包括:正负样本准备+预训练+微调网络+训练SVM+训练边框回归器

正负样本准备

正样本:与真实目标进行IoU运算,值大于或等于0.5的候选区域。
负样本:负样本则是小于0.5的候选区域。
一般正负样本的比例为正样本1:3负样本

预训练
一般在开发中,不会用自己初始化的CNN网络模型,那样的准确率是不太高的。因为CNN的参数有很多,需要大量的数据参与训练。一般是在训练好的CNN模型基础上进行微调,例如使用Alexnet。

微调
微调就是拿训练好的CNN模型,把刚自己准备好的样本进行尺寸变换,再继续训练,得出新的模型。类似迁移学习

训练SVM
上述的预训练+微调只是训练好了全连接层。还要对SVM分类器进行训练,有20个SVM分类器就意味着要进行20个类别的训练。刚准备的正负样本就是用来训练分类器的。

训练边框回归器
这是最后一步用于修改候选区域的回归器,参与这一步训练的数据很少。因为这一步是以真实目标值(grounding truth)为参考的,只有真实目标值和IoU大于一定阈值的候选区域数据才会参与训练。

R-CNN缺点总结

●训练阶段多:步骤繁琐: 微调网络+训练SVM+训练边框回归器。
●占用磁盘空间大:上面提到的特征存于磁盘中,每个图片会有2000个候选区域
●训练耗时
●处理速度慢

以上就是R-CNN的所有内容,或有遗漏,欢迎指正。
篇幅过长,感谢阅读!

END

  • 18
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Cascade R-CNN是一种用于目标检测的深度学习结构,通过级联多个R-CNN模块来提高检测的准确性和鲁棒性。 Cascade R-CNN结构图由三个主要部分组成:基础网络、R-CNN模块和级联结构。 基础网络通常采用卷积神经网络(CNN),用于提取图像的特征。常见的基础网络有ResNet、VGG等。基础网络负责将原始图像输入,并逐层提取出高层次的特征图,以供后续处理使用。 R-CNN模块是Cascade R-CNN的核心部分。它由若干个R-CNN模块级联而成,每个R-CNN模块通过一个CNN来进行特征提取,然后通过一个ROI Pooling层提取出感兴趣区域(Region of Interest)的特征。接着,这些特征经过全连接层,进行目标分类和边界框回归。 级联结构是Cascade R-CNN的独特之处。它通过级联多个R-CNN模块来逐步提高目标检测的准确性。级联结构的每个阶段都会选择性地引入难例样本,以便让模型更好地学习难以区分的目标。级联结构通常包括三个阶段,每个阶段从不同的阈值划分正负样本,通过进一步训练来提高检测的精度和召回率。 总结起来,Cascade R-CNN的结构图展示了一个多阶段的目标检测系统。它通过级联多个R-CNN模块,逐步提高检测的准确性和鲁棒性。基础网络用于特征提取,R-CNN模块用于目标分类和边界框回归,级联结构用于引入难例样本并提高检测性能。这种结构在目标检测领域取得了显著的性能提升。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值