RCNN----Fast R-CNN----Faster R-CNN

目标检测:图像识别+定位
图像识别分类:卷积神经网络CNN
定位:回归(预测出位置4个参数x,y,w,h)
思路1:看做成回归
步骤1:搭一个识别图像的神经网络(AlexNet)
步骤2:在神经网络尾部加俩个头即“分类头”和“回归头”,成为classification+regression模式
在这里插入图片描述
步骤3:Regression部分用欧式距离损失,使用SGD训练
步骤4:预测阶段把俩个头部接上,完成不同的功能
注意:需要俩次fine-tuning,第一次在AlexNet上做,第二次将头部改成regression head
Regression部分:
1、 加在最后一个卷积层后面(如VGG)
2、 加在最后一个全连接层后面(如R-CNN)
思路2:取图像窗口
还是思路1的思路,取不同的大小的框,让框出现在不同的位置,得出这个框的判定得分,取出分最高的那个框。

选择性搜索(Selective Search)

选择性搜索算法用于为物体检测算法提供候选区域,它速度快,召回率高。
产生初始的分割区域,然后使用相似度计算方法合并一些小的区域。
我们不能使用原始分割图的区域作为候选区域,原因如下:

  1. 大部分物体在原始分割图里都被分为多个区域
  2. 原始分割图无法体现物体之间的遮挡和包含。

产生初始的分割区域作为输入,通过下面的步骤进行合并:

  1. 首先将所有分割区域的外框加到候选区域列表中
  2. 基于相似度合并一些区域
  3. 将合并后的分割区域作为一个整体,跳到步骤1
    选择性搜索算法如何计算两个区域的相似度,主要是通过以下四个方面:颜色、纹理、大小和形状交叠,最终的相似度是这四个值取不同的权重相加

R-CNN:

在这里插入图片描述

步骤1:训练或者下载一个分类模型(如AlexNet)
在这里插入图片描述
步骤2:对模型做fine-tuning,将分类数从1000改为20,去掉最后一个全连接层
在这里插入图片描述
步骤3:特征提取。提取图像的所有候选框(选择性搜索),对于每一个区域:修正区域大小以适合CNN的输入,做一次前向运算,将第五个池化层的输出(就是对候选框提取到的特征)存到硬盘
在这里插入图片描述
步骤四:训练一个SVM分类器(二分类)来判断这个候选框里物体的类别,每个类别对应一个SVM,判断是不是属于这个类别,是就是positive,反之nagative
在这里插入图片描述
步骤五:使用回归器精细修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。
在这里插入图片描述
R-CNN算法的检测效果很好,但是检测速度很慢,因此总体效率不高。其主要原因在于:
提取特征操作非常冗余。检测时,需要将每个推荐区域都送入训练好的模型(AlexNet)进行前向传播,因此每张图片大约要进行1000~2000次前向传播。
训练速度慢,过程繁琐。要单独分别训练三个不同的模型:CNN用来提取图像特征、SVM分类器用来预测类别、回归器精细修正建议框的位置。分开训练,耗时耗力。
使用Selective Search算法生成推荐区域,这个过程大约耗时2s,也是它不能达到实时性检测的一个重要原因。

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,然后找到每个候选框zaifeature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。节省了大量的计算时间,比R-CNN有一百倍左右的提速。
在这里插入图片描述

Fast R-CNN:

Fast R-CNN就是在RCNN的基础上采纳了SPP Net方法
在这里插入图片描述
提出了一个可以看做单层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模型,实际实验也证明,这两个任务能够共享卷积特征,并相互促进。
R-CNN有一些相当大的缺点(把这些缺点都改掉了,就成了Fast R-CNN)。
大缺点:由于每一个候选框都要独自经过CNN,这使得花费的时间非常多。
解决:共享卷积层,现在不是每一个候选框都当做输入进入CNN了,而是输入一张完整的图片,在第五个卷积层再得到每个候选框的特征
原来的方法:许多候选框(比如两千个)–>CNN–>得到每个候选框的特征–>分类+回归
现在的方法:一张完整图片–>CNN–>得到每张候选框的特征–>分类+回归
所以容易看见,Fast RCNN相对于RCNN的提速原因就在于:不过不像RCNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到conv5上,而SPP只需要计算一次特征,剩下的只需要在conv5层上操作就可以了。
Fast R-CNN的改进点:
ROI Pooling层。这个方法是针对R-CNN的第一个问题提出来的,用来解决提取特征操作冗余的问题,避免每个推荐区域都要送入CNN进行前向计算。核心思路是:将图像只输入CNN提取特征,只进行一次前向计算。得到的特征图由全部推荐区域共享。然后再将推荐区域(SS算法得到)投影到特征图上,获得每个推荐区域对应的特征图区域。最后使用ROI Pooling层将每个特征图区域下采样到7*7大小。
将原来三个模型整合到一个网络,易与训练。R-CNN算法使用三个不同的模型,需要分别训练,训练过程非常复杂。在Fast R-CNN中,直接将CNN、分类器、边界框回归器整合到一个网络,便于训练,极大地提高了训练的速度。
Fast R-CNN的瓶颈:
虽然Fast R-CNN算法在检测速度和精确度上了很大的提升。但是它仍然不能满足实时目标检测,最大的原因在于:采用SS算法生成推荐区域的方法很耗时,处理每张图像大约需要消耗2秒,大大限制了目标检测的速度。

Faster R-CNN:

Fast R-CNN存在的问题:存在瓶颈:选择性搜索,找出所有的候选框,这个也非常耗时解决:加入一个提取边缘的神经网络,也就说找到候选框的工作也交给神经网络来做了。
做这样的任务的神经网络叫做Region Proposal Network(RPN)。
具体做法:
  • 将RPN放在最后一个卷积层的后面
  • RPN直接训练得到候选区域
在这里插入图片描述
RPN简介:
  • 在feature map上滑动窗口
  • 建一个神经网络用于物体分类+框位置的回归
  • 滑动窗口的位置提供了物体的大体位置信息
  • 框的回归提供了框更精确的位置
在这里插入图片描述

总结:

RCNN
  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. 对于属于某一特征的候选框,用回归器进一步调整其位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值