目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

从RCNN到Faster RCNN,目标检测技术经历了显著的优化。RCNN引入候选框概念,SPPNet解决了多尺度输入问题,Fast RCNN通过共享卷积层提升了效率,而Faster RCNN则利用RPN网络自动产生候选框,极大提高了检测速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

object detection技术的演进:
RCNN->SppNET->Fast-RCNN->Faster-RCNN

 

图像识别+定位

卷积神经网络CNN已经帮我们完成了图像识别(判定是猫还是狗)的任务了,我们只需要添加一些额外的功能来完成定位任务即可。

定位问题的解决思路

思路一:看做回归问题

看做回归问题,我们需要预测出(x,y,w,h)四个参数的值,从而得出方框的位置。

步骤1:

搭一个识别图像的神经网络,在AlexNet VGG GoogleLenet上fine-tuning一下

步骤2:

在上述神经网络的尾部展开(也就说CNN前面保持不变,我们对CNN的结尾处作出改进:加了两个头:“分类头”和“回归头”)成为classification + regression模式

步骤3:

回归头部分用欧氏距离损失,使用SGD训练

步骤4:

预测阶段把两个头部街上,完成不同的功能

这里需要进行两次fine-tuning
第一次在ALexNet上做,第二次将头部改成regression head,前面不变,做一次fine-tuning

Regression的部分加在哪?

有两种处理方法:
  • 加在最后一个卷积层后面(如VGG)
  • 加在最后一个全连接层后面(如R-CNN)

regression太难做了,应想方设法转换为classification问题。

regression的训练参数收敛的时间要长得多,所以上面的网络采取了用classification的网络来计算出网络共同部分的连接权值。

思路二:取图像窗口

classification + regression思路,取不同的大小的“框”,让框出现在不同的位置,得出这个框的判定得分,取得分最高的那个框。

根据得分的高低,我们选择了右下角的黑框作为目标位置的预测。
注:有的时候也会选择得分最高的两个框,然后取两框的交集作为最终的位置预测。

总结一下思路:
对一张图片,用各种大小的框(遍历整张图片)将图片截取出来,输入到CNN,然后CNN会输出这个框的得分(classification)以及这个框图片对应的x,y,h,w(regression)。

耗时间,需要做优化。

原来网络是这样的:

优化后这样:把全连接层改为卷积层,这样可以提提速。

物体检测

当图像中物体很多时,多物体识别+多物体定位

把这个任务看做分类问题的不妥之处:

需要找找很多位置,给很多个不同大小的框;需要对框内的图像分类。

有人想到一个好方法:
找出可能含有物体的框(也就是候选框,比如选1000个候选框),这些框之间是可以互相重叠互相包含的,这样我们就可以避免暴力枚举的所有框了。

大牛们发明好多选定候选框的方法,比如EdgeBoxes和Selective Search。

R-CNN横空出世

基于以上的思路,RCNN出现了。

步骤1:训练或者下载一个分类模型(比如AlexNet)

步骤2:微调该模型:将分类数从1000改为20,去掉最后一个全连接层

步骤3:特征提取

提取图像的所有候选框(选择性搜索)

对于提取出的每一个区域,修正区域大小以适合CNN的输入,做一次前向运算,将第五个池化层的输出(就是对候选框提取到的特征)存到硬盘

步骤4:训练一个SVM分类器(二分类)来判断这个候选框里物体的类别

每个类别对应一个SVM,判断是不是属于这个类别,是就是positive,反之nagative
比如下图,就是狗分类的SVM

步骤5:使用回归器靖西修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。

RCNN的进化中SPP Net的思想对其贡献很大,这里也简单介绍一下SPP Net。

SPP Net

SPP:Spatial Pyramid Pooling(空间金字塔池化)

两个主要特点:

1、结合空间金字塔方法实现CNNs对尺度的输入;一般CNN后接全连接层或者分类器,他们都需要固定的输入尺寸,因此不得不对输入数据进行crop或者warp,这些预处理会造成数据的丢失或几何的失真。SPP Net的第一个贡献就是将金字塔思想加入到CNN,实现了数据的多尺度输入。

如下图所示,在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。

2、 只对原图提取一次卷积特征

在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。

所以SPP Net根据这个缺点做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到候选后在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。节省了大量的计算时间,比R-CNN有一百倍左右的提速。

Fast R-CNN

SPP Net真是个好方法,R-CNN的进阶版Fast R-CNN就是在RCNN的基础上采纳了SPP Net方法,对RCNN作了改进,使得性能进一步提高。

R-CNN与Fast RCNN的区别有哪些呢?

RCNN的缺点:

即使使用了selective search等预处理步骤来提取潜在的bounding box作为输入,但是RCNN仍会有严重的速度瓶颈,原因也很明显,就是计算机对所有region进行特征提取时会有重复计算,Fast-RCNN正是为了解决这个问题诞生的。

大牛提出了一个可以看作单层SPPNet的网络层,叫做ROI Pooling,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量,而我们知道,conv、pooling、relu等操作都不需要固定size的输入,因此,在原始图片上执行这些操作后,虽然输入图片size不同导致得到的feature map尺寸也不同,不能直接接到一个全连接层进行分类,但是可以加入这个神奇的ROI Pooling层,对每个region都提取一个固定维度的特征表示,再通过正常的softmax进行类型识别。另外,之前RCNN的处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression,而在Fast-RCNN中,作者巧妙的把bbox regression放进了神经网络内部,与region分类和并成为了一个multi-task模型,实际实验也证明,这两个任务能够共享卷积特征,并相互促进。Fast-RCNN很重要的一个贡献是成功的让人们看到了Region Proposal+CNN这一框架实时检测的希望,原来多类检测真的可以在保证准确率的同时提升处理速度,也为后来的Faster-RCNN做下了铺垫。

重点:

R-CNN大缺点:由于每个候选框都要独自经过CNN,这使得花费的时间非常多。

解决:共享卷积层,现在不是每一个候选框都当做输入进入CNN了,而是输入一张完整的图片,在第五个卷积层再得到每个候选框的特征

原来的方法:许多候选框(比如两千个)-->CNN-->得到每个候选框的特征-->分类+回归

现在的方法:一张完整图片-->CNN-->得到每张候选框的特征-->分类+回归

所以容易看见,Fast RCNN相对于RCNN的提速原因就在于:不过不像RCNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到conv5上,而SPP只需要计算一次特征,剩下的只需要在conv5层上操作就可以了。

在性能上的提升也是很明显的:

Faster R-CNN

Fast R-CNN存在的问题:选择性搜索,找出所有的候选框,这个也非常耗时。那我们能不能找出一个更加高效的方法来求出这些候选框呢?

解决:加入一个提取边缘的神经网络,也就说找到候选框的工作也交给经网络来做了。

做这样任务的神经网络叫做Region Proposal Network(RPN)。

具体做法:

1、将RPN放在最后一个卷积层的后面

2、RPN直接训练得到候选区域

RPN简介:

1、在feature map上滑动窗口;

2、建一个神经网络用于物体分类+框位置的回归

3、滑动窗口的位置提供了物体的大体位置信息

4、框的回归提供了更精确的位置

一种网络,四个损失函数:

  • RPN calssification(anchor good.bad)
  • RPN regression(anchor->propoasal)
  • Fast R-CNN classification(over classes)
  • Fast R-CNN regression(proposal ->box)

速度对比:

Faster R-CNN的主要贡献是设计了提取候选区域的网络RPN,代替了费时的选择性搜索,使得检测速度大幅提高。

最后总结一个各大算法的步骤:

R CNN:

1、在每个图像中确定约1000-2000个候选框(使用选择性搜索)

2、每个候选框图像块缩放至相同大小,并输入到CNN内进行特征提取

3、对候选框内提取出的特征,使用分类器判别是否属于一个特定类

4、对于属于一个特征的候选框,用回归器进一步调整其位置

Fast RCNN:

1、在图像中确定约1000-2000个候选框(使用选择性搜索)

2、对整张图片输入进CNN,得到feature map;

3、找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层

4、对候选框中提取出的特征,使用分类器判别是否属于一个特定类

5、对于属于某一特征的候选框,用回归器进一步调整其位置

Faster RCNN:

1、对整张图片输入进CNN,得到feature map;

2、卷积特征输入到RPN,得到候选框的特征信息;

3、对候选框中提取出的特征,使用分类器判别是否属于一个特定类;

4、对于属于某一特征的候选框,用回归器进一步调整其位置

 

总的来说,从R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。可以说基于region proposal的R-CNN系列目标检测方法是当前目标检测技术领域最主要的一个分支。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值