【CV 目标检测】②R-CNN模型
二、R-CNN网络基础
2.R-CNN模型
2014年提出R-CNN!网络,该网络不再使用暴力穷举的方法,而是使用候选区域方法(region proposal method)创建目标检测的区域来完成目标检测的任务,R-CNN是以深度神经网络为基础的目标检测的模型,以R-CNN为基点,后续的Fast R-CNN,Fast R-CNN模型都延续了这种目标检测思路
(1)算法流程
步骤:
- 候选区域生成:使用选择性搜索(Selective Search,SS)的方法找出图片中可能存在目标的候选区域
- CNN网络提取特征:选取预训练卷积神经网络(AlexNet或VGG)用于进行特征提取
- 目标分类:训练支持向量机(SVM)来辨别目标物体和背景,对每个类别,都要训练一个二元SVM。
- 目标定位:训练一个线性回归模型(修正坐标),为每个辨识到物体生成更精确的边界框
(1)候选区域生成
在选择性搜索中,使用语义分割的方法,它将颜色,边界,纹理等信息作为合并条件,采用多尺度的综合方法,将图像在像素级上划分出一系列的区域,这些区域要远少于传统的滑动窗口的穷举法产生的候选区域。(根据图像像素点的相似性,分成不同的子区域,获取外包矩形)
SelectiveSearch在一张图片上提取出来约2000个候选区域,需要注意的是这些候选区域的长宽不固定。而使用CNN提取候选区域的特征向量,需要接受固定长度的输入,所以需要对候选区域做一些尺寸上的修改。
(2)CNN网络提取特征
采用预训练模型(AlexNet或VGG)在生成的候选区域上进行特征提取,将提取好的特征保存在磁盘中,用于后续步骤的分类和回归
- 全连接层的输入数据的尺寸是固定的,因此在将候选区域送入CNN网络时,需进行裁剪或变形为固定的尺寸,再进行特征提取。
- 预训练模型在ImageNet数据集上获得,最后的全连接层是1000,在这里我们需要将其改为N+1(N为目标类别的数目,例如VOC数据集中N = 20,COCO数据集中N= 80,1是加一个背景)后,进行微调即可。
VGG16
- 利用微调后的CNN网络,提取每一个候选区域的特征,获取一个4096维的特征(将最后的全连接层去掉,该4096维特征即表示某一个候选区域的结果),一幅图像就是2000x4096维特征存储到磁盘中。(有2000个候选区域)
(3)目标分类(SVM)
对于N个类别的检测任务,需要训练N(目标类别数目)个SVM分类器,对候选区域的特征向量(4096维)进行二分类,判断其是某一类别的目标,还是背景来完成目标分类
(4)目标定位
通过选择性搜索获取的目标位置不是非常准确,实验证明,训练一个线性回归模型在给定的候选区域的结果上去预测一个新的检测窗口,能够获得更精确的位置。修正过程如下图所示:
通过训练一个回归器来对候选区域的范围进行一个调整,这些候选区域最开始只是用选择性搜索的方法粗略得到的,通过调整之后得到更精确的位置
(5)预测过程
使用选择性搜索的方法从一张图片中提取2000个候选区域,将每个区域送入CNN网络中进行特征提取,然后保存至磁盘中,然后送入到SVM中进行分类,并使用候选框回归器,计算每个候选区域的位置。候选区域较多,有2000个,需要剔除掉部分检测结果。针对每个类,通过计算IOU,采取非极大值抑制NMS方法,保留比较好的检测结果。
算法总结
- 训练阶段多,训练耗时:微调CNN网络+训练SVM+训练边框回归器
- 预测速度慢:使用GPU,VGG16模型处理一张图像需要47s
- 占用磁盘空间大:5000张图像产生几百G的特征文件。
- 数据的形状变化:候选区域要经过缩放来固定大小,无法保证目标的不变形