CNN、RCNN、Fast RCNN和Faster RCNN
1.CNN:(
问题:输入尺寸固定)
对于普通的CNN网络,由于输入图片中的物体可能有不同的长宽比,空间位置。
目标物体可能占据图片的大部分,也可能是一小部分,目标物体的形状也可能不同。
在目标检测时,就需要将
图片分割成多个区域,以检测此区域内的物体(为了将各个物体分离开),这就需要大量算力
。
为解决这一问题,
减少区域的分割
,引入基于区域的CNN,它可以进行区域的选择。
2.RCNN:
SPP:Spatial Pyramid Pooling(空间金字塔池化),使得输入的图像可以是任意尺寸的。
在图像中
创建多个边界框
,检查这些
边框中是否含有目标物体
使用
选择性搜索
提取
图片中的这些边框
组成目标物体通常有四个要素:
变化尺度、颜色、结构(材质)、所占面积。
选择性搜索:
确定物体在图片中的这些特征,然后基于这些特征突出不同区域
基于颜色、结构、尺寸、形状,将相似的区域合并成更大的区域
最后,生成最终的目标物体位置
步骤:(
候选区域选择,CNN特征提取,分类与边界回归
)
-
首先取一个 预训练卷积神经网络
-
根据需要检测的
目标类别数量
,训练网络的最后一层
-
得到每张图片的
感兴趣区域
(Region of Interest),对这些区域重新改造,让其符合CNN的输入尺寸要求。
-
得到这些区域后,训练
支持向量机(SVM)来
辨别目标物体和背景
。对每个类别,都要训练一个二元SVM。
-
最后,训练一个
线性回归模型,
为每个辨识到的物体生成更精确的边界框。
缺陷:
训练一个RCNN模型非常昂贵,并且步骤较多:
为了检测一个目标,需要
计算
所有的候选区域,大量卷积运算,这是非常慢的
-
用于特征提取的CNN
-
用于目标物体辨别的线性SVM分类器
-
调整边界框的回归模型。
这些过程合并在一起,会让
RCNN的速度变慢
,通常每个新图片需要40—50秒的时间进行预测,基本上
无法处理大型数据集。
Fast RCNN
为了减少RCNN算法的计算时间,
在每张图片上
只使用一次CNN即可得到全部的
重点关注区域
-
输入图片
-
输入到卷积网络中,它生成感兴趣区域
-
利用
Rol池化层
对这些
区域重新调整,将其输入到
完全连接网络
中
-
在网络的顶层用
softmax层
输出类别,同样使用一个线性回归层,输出相对应的边界框
ROI池化层:
可以把
不同大小的输入映射到一个固定尺度的特征向量
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检测模块
过程:
-
输入图像到卷积网络中,生成该图像的特征映射。
-
在特征映射上应用Region Proposal Network,返回object proposals和相应分数。
-
应用
Rol池化层
,将所有proposals修正到同样尺寸。
-
最后,将proposals传递到完全连接层,生成目标物体的边界框。
流程:
1.输入图像
2.通过
区域生成网络RPN生成候选区域
3.提取特征
4.分类器分类
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上滑动窗口,
建一个神经网络用于物体分类 + 框位置的回归,
滑动窗口的位置提供了物体的大体位置信息,
框的回归提供了框更精确的位置。
任意尺寸—>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个先验框:
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的问题:
所有目标检测算法都用区域来辨别目标物体, 网
络并非一次性浏览所有图像,而是关注图像的多个部分。