基础目标检测算法CNN、RCNN、Fast RCNN、Faster RCNN

基础目标检测算法介绍:

CNN、RCNN、Fast RCNN和Faster RCNN

1.CNN:( 问题:输入尺寸固定)
对于普通的CNN网络,由于输入图片中的物体可能有不同的长宽比,空间位置。
目标物体可能占据图片的大部分,也可能是一小部分,目标物体的形状也可能不同。
在目标检测时,就需要将 图片分割成多个区域,以检测此区域内的物体(为了将各个物体分离开),这就需要大量算力
为解决这一问题, 减少区域的分割 ,引入基于区域的CNN,它可以进行区域的选择。
 
2.RCNN:
SPP:Spatial Pyramid Pooling(空间金字塔池化),使得输入的图像可以是任意尺寸的。
基础目标检测算法CNN、RCNN、Fast RCNN、Faster RCNN_第1张图片
在图像中 创建多个边界框 ,检查这些 边框中是否含有目标物体
使用 选择性搜索 提取 图片中的这些边框
组成目标物体通常有四个要素: 变化尺度、颜色、结构(材质)、所占面积。
选择性搜索: 确定物体在图片中的这些特征,然后基于这些特征突出不同区域
基于颜色、结构、尺寸、形状,将相似的区域合并成更大的区域
最后,生成最终的目标物体位置
步骤:( 候选区域选择,CNN特征提取,分类与边界回归
  1. 首先取一个 预训练卷积神经网络
  2. 根据需要检测的  目标类别数量 ,训练网络的最后一层
  3. 得到每张图片的  感兴趣区域 (Region of Interest),对这些区域重新改造,让其符合CNN的输入尺寸要求。
  4. 得到这些区域后,训练 支持向量机(SVM)来 辨别目标物体和背景 。对每个类别,都要训练一个二元SVM。
  5. 最后,训练一个 线性回归模型, 为每个辨识到的物体生成更精确的边界框。
基础目标检测算法CNN、RCNN、Fast RCNN、Faster RCNN_第2张图片
 
缺陷:
训练一个RCNN模型非常昂贵,并且步骤较多:
为了检测一个目标,需要 计算 所有的候选区域,大量卷积运算,这是非常慢的
  • 根据选择性搜索,要对 每张图片提取2000个单独区域;
  • 用CNN提取每个区域的特征。假设我们有N张图片,那么CNN特征就是N*2000;
  • 用RCNN进行目标检测的整个过程有三个模型;
  1. 用于特征提取的CNN
  2. 用于目标物体辨别的线性SVM分类器
  3. 调整边界框的回归模型。
这些过程合并在一起,会让 RCNN的速度变慢 ,通常每个新图片需要40—50秒的时间进行预测,基本上 无法处理大型数据集。
 
Fast RCNN
 
为了减少RCNN算法的计算时间, 在每张图片上 只使用一次CNN即可得到全部的 重点关注区域
基础目标检测算法CNN、RCNN、Fast RCNN、Faster RCNN_第3张图片
  1. 输入图片
  2. 输入到卷积网络中,它生成感兴趣区域
  3. 利用 Rol池化层 对这些 区域重新调整,将其输入到 完全连接网络
  4. 在网络的顶层用 softmax层 输出类别,同样使用一个线性回归层,输出相对应的边界框
ROI池化层: 可以把 不同大小的输入映射到一个固定尺度的特征向量
基础目标检测算法CNN、RCNN、Fast RCNN、Faster RCNN_第4张图片
Fast RCNN只用了一个模型就同时实现了区域的 特征提取、分类、边界框生成
问题:
  R-CNN训练过程分为了三个阶段,而Fast R-CNN直接使用softmax替代SVM分类,同时利用多任务损失函数边框回归,并加入到网络中,这样整个的训练过程是端到端的(除去Region Proposal提取阶段)
它同样用的是选择性搜索作为寻找感兴趣区域的,这一过程通常较慢。与RCNN不同的是,Fast RCNN处理一张图片大约需要2秒。
但是在大型真实数据集上,这种速度仍然不够理想。
RCNN:许多候选框-->CNN-->每个候选框的特征-->分类+回归
Fast-RCNN: 一张完整图片-->CNN-->每张候选框的特征-->分类+回归
优化点:整张图片提取一次特征,再把 候选框映射到conv5上
 
Faster RCNN
与Fast RCNN相比, 二者主要的不同在于 感兴趣区域的生成方法
Fast RCNN使用的是 选择性搜索  
Faster RCNN 用的是  Region Proposal 网络 (RPN)。RPN将图像特征映射作为输入,生成一系列object proposals,每个都带有相应的分数。
区域生成网络RPN候选框提取模块 + Fast RCNN检测模块
过程:
  1. 输入图像到卷积网络中,生成该图像的特征映射。  
  2. 在特征映射上应用Region Proposal Network,返回object proposals和相应分数。   
  3. 应用 Rol池化层 ,将所有proposals修正到同样尺寸。  
  4. 最后,将proposals传递到完全连接层,生成目标物体的边界框。 
流程:
1.输入图像
2.通过  区域生成网络RPN生成候选区域
3.提取特征
4.分类器分类
5.回归器回归并进行位置调整
基础目标检测算法CNN、RCNN、Fast RCNN、Faster RCNN_第5张图片
Faster-RCNN组成:
1.CNN卷积层(Vgg, ResNet):提取图片的特征,输入为整张图片,输出为提取出的特征feature maps
2.RPN(Region Proposal Network), 推荐候选区域,代替search selective,输入是CNN处理后的feature maps ,输出为多个候选区域。 
 
RPN 可以理解为一种全卷积网络,该网络可以进行end-to-end的训练,目的:推荐候选区域:
在feature map上滑动窗口,  建一个神经网络用于物体分类 + 框位置的回归, 滑动窗口的位置提供了物体的大体位置信息, 框的回归提供了框更精确的位置。
基础目标检测算法CNN、RCNN、Fast RCNN、Faster RCNN_第6张图片
任意尺寸—>resize 到 H*600*3时,通过Backbone 常见的特征提取网络,得到共享特征层:feature maps 38*38*1024 
把输入进来的图像分割成38*38的网格, 然后每个网格存在9个先验框,这些先验框有不同的大小,在图像上密密麻麻分布着。
 
获得的公用特征层在图像中就是Feature Map,其有两个应用,一个是和ROIPooling结合使用、另一个是进行一次3x3的卷积后 (得到:38*38*18; 38*38*36 ) ,进行一个18通道的1x1卷积,和一个36通道的1x1卷积。
相当于就是将整个图像分成38x38个网格;然后从每个网格中心建立9个先验框,一共38x38x9个,12996个先验框( 当输入图像shape不同时,先验框的数量也会发生改变 )。
在Faster-RCNN中,num_priors先验框的数量是9,所以两个1*1卷积的结果实际上是:
9个先验框:
  基础目标检测算法CNN、RCNN、Fast RCNN、Faster RCNN_第7张图片
9*2的卷积(判断上述获得的先验框中是否包含物体(2:0-1))
9*4的卷积(对先验框进行调整,获得一个新框(4:中心点的x,y,w,h))
RPN是一个网络,9*2,9*4的参数调整,要根据后续的回归+分类结果进行调整。 到此,就获得了一个建议框。
 
Proposal 建议框是对画面中的物体进行筛选, Proposal + feature maps  —> ROIPooling 层
ROIPooling层作用是利用建议框对feature maps 进行截取。
 
Proposal建议框:
Proposal 建议框是一个大致的预测,后边需要不断根据 回归(调整建议框大小+位置)和分类(是否包含目标物体)来学习 ,以此来获得更精确的建议框
(建议框调整:取9*2分类中置信度最高的建议框,计算其与其他的建议框之间的IoU,如果IoU过大就去掉其余的建议框,以此来保证一定区域内置信度最高的建议框)
 
 
ROIPooling层:(in:300,4;  out: 300,1024,14,14)
根据预先设定的参数值(置信度最高的多少个建议框,以此来在共享特征层上进行截取)
在ROIPooling 层对所有的feature maps 截取的建议框进行池化,使其所有的size大小一样。
之后是:回归(调整建议框)+分类(判断建议框是否包含目标物体)
根据回归+分类,预测的结果来对先验框进行调整,以此来获得更精确的建议框。
 
 
Faster RCNN的问题:
所有目标检测算法都用区域来辨别目标物体, 网 络并非一次性浏览所有图像,而是关注图像的多个部分。
  • 算法需要让 图像经过多个步骤才能提取出所有目标
  • 由于有 多个步骤嵌套 ,系统的表现常常 取决于前面步骤的表现水平
基础目标检测算法CNN、RCNN、Fast RCNN、Faster RCNN_第8张图片
 
R-CNN(Selective Search + CNN + SVM)
Fast R-CNN(Selective Search + CNN + ROI)
Faster R-CNN(RPN + CNN + ROI)

你可能感兴趣的:(深度学习)