经典目标检测R-CNN系列(1)开山之作R-CNN
2014年,大神RBG(Ross Girshick)等人将卷积神经网络(Convolutional Neural Network,CNN)应用于目标检测任务中,在PASCAL VOC 2012数据集上,能够将目标检测的平均精度均值(Mean Average Precision, MAP)
指标提升到53.3%,这相对之前最好的结果(由DPM++保持的40.4%)提升了超过30%。
R-CNN,中文直译为具有CNN特征的区域
(Regions with CNN features),无疑是深度学习目标检测应用的开山之作。
1 R-CNN前向过程
RCNN算法流程可分为4个步骤
- 一张图像生成1K~2K个候选区域(使用Selective Search方法)
- 对每个候选区域,使用深度网络提取特征
- 特征送入每一类的SVM 分类器,判别是否属于该类
- 使用回归器精细修正候选框位置
1.1 获取候选区域
-
针对一幅图像,R-CNN在该环节生成大约2000个区域建议。
-
R-CNN强调其支持现在任意一种区域建议的生成方式作为前端,但是考虑到需要与其他算法进行比较,
采用选择性搜索(Selective Search)算法
实现区域建议生成。 -
选择性搜索为一种自下而上(bottom-up)的区域生成算法,首先通过分割(over-segmentation)将图像分为很多小的区域(“自下”),然后按照区域的纹理、形状等特征的一致性,将临近区域进行合并、再合并(“而上”),形成具有层次关系(hierarchical)的多尺度分割结果。在不同尺度上,用区域的包围框作为对应的区域建议范围,在这里,“不同尺度”表达了对图像细节的分辨程度,如同是在不同的“远近”对图像内容进行不同程度的抽象。
-
下图示意了针对一辆轿车图像进行选择性搜索获取区域建议的自下而上过程。
1.2 利用CNN(AlexNet)提取特征
-
在R-CNN中,CNN网络被用作特征提取器(Feature Extractor)。
-
用AlexNet结构作为基础并进行小幅改造,网络输入图像尺寸为227×227,输出为4096维的特征向量。
-
AlexNet网络结构如下图所示。输入图像的尺寸为227×227,可训练的层包括5个卷积层以及3个全连接层。
- 在R-CNN中,CNN的作用是提取特征,所以不用考虑IMAGENET的类别因素,因此R-CNN直接以fc7层的4096维特征作为最终的特征提取结果。
- 将2000候选区域缩放到227x227 pixel,接着将候选区域输入事先训练好的AlexNet CNN网络,最后获取4096维的特征得到2000×4096维矩阵。
注:
R-CNN的原文中讨论了2种统一输入图像尺寸的方法:
- 最紧方形裁剪(tightest square)缩放:按照区域建议不同的长宽比,选择使其居中的最紧正方形进行裁剪,在裁剪得到正方形中、区域建议之外的区域进行数据填充(以零值填充或是以图像均值填充),然后将填充后的方形区域以均匀的方式缩放至227×227的尺寸;
- 裁剪-非均匀扭曲(warp):直接按照区域建议进行裁剪,然后以非均匀的方式将裁剪得到的子图像至227×227的尺寸。
如下图,R-CNN采用非均匀扭曲方法进行输入统一尺寸,而且在裁剪前对区域建议进行16像素的外扩,然后再进行非均匀缩放。
1.3 利用SVM进行分类
- R-CNN按照PASCAL VOC 2012目标检测任务的21类(20个目标类别再加上背景)进行分类。
- 在R-CNN中,分类任务使用支持向量机(Support Vector Machine, SVM)分类器来实现。R-CNN为每个类别训练一个针对该类别的
二值线性分类器
,实现对该类别“是/否”的判断。针对PASCAL VOC 2012目标检测任务的20种目标设定,R-CNN采用20个线性SVM分类器
实现分类。 - 将2000×4096的特征矩阵与20个SVM组成的权值矩阵4096×20相乘,获得2000×20的概率矩阵,每一行代表一个建议框归于每个目标类别的概率。
- 分别对上述2000×20维矩阵中每一列,即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。
1.4 回归器精细修正候选框位置
-
一个理想的包围框表现为目标物体的外接矩形,即要求其紧紧包裹在目标轮廓的外侧。在某一检测任务中,如果包围框的预测位置偏差过大,那么即使类别预测的再准确,也相当于没有正确的检测出目标。
-
在R-CNN中,目标包围框由
选择性搜索得到,在上文中我们已经知道这些框是由多尺度的图像分割生成
。然而,针对很多复杂场景应用,图像分割往往难以用一个区域精确表达一个完整目标,这就导致选择性搜索得到的包围框在很大程度上存在位置偏差。在这种情况下,如果能够构造一个变换,实现对存在偏差的包围框进行微调,使其尽可能贴近理想包围框的位置,这样岂不是定位会更准确? -
BBR就是通过学习构造这样的变换,从而可以将该变换作用到选择性搜索得到的初始包围框上,对其位置进行微调,得到最终更加准确的包围框。
BBR变换公式
BBR的平移变换和尺度缩放
2 R-CNN的训练
2.1 R-CNN训练的五个步骤
R-CNN的训练过程还是相当繁琐的,大致分为相对独立的5个步骤,简单说一下:
训练第1步——预训练(pre-training)
- 在IMAGENET分类任务数据集上训练一个基于AlexNet网络的1000类分类模型。
训练第2步——参数微调(fine-tuning)
- 以PASCAL VOC 2012目标检测任务数据集作为训练数据。微调环节首先将AlexNet的1000维全连接层(fc8)替换为21维,对应训练数据集的20个目标类别和1个背景类别。然后将选择性搜索得到的区域建议包围框与训练数据所给的真实(Ground Truth, GT)目标包围框进行IoU计算,若计算得到最大的IoU小于0.5,则给该区域建议赋予背景类,否则赋予其GT包围框对应的类别。
- 对每个区域建议进行裁剪和扭曲,统一尺寸至227×227。具有统一尺寸的图像作为AlexNet网络(21路输出)的输入,以微调的方式,训练一个21类的分类器。
训练第3步——特征提取
- 经过参数微调训练之后,CNN即可用作特征提取器使用。在R-CNN中,截取全连接层fc7的4096维输出作为最终的特征。
- 为了方便进行后续的SVM分类器训练,需要将提取得到的特征及对应的类别标签进行磁盘保存。
- 除此之外,为了满足后续BBR的需要,区域建议包围框位置信息以及对应的pool5层特征也需要进行保存。
- 整个PASCAL VOC 2012数据集得到的特征数据大约需要200G的存储空间。
训练第4步——SVM分类器训练
- 以第3步保存的特征和类别标签为输入,为每个类别训练一个二分类的线性SVM分类器。
训练第5步——包围框回归(BBR)
2.2 R-CNN的优缺点
优点:
-
R-CNN是将CNN技术应用于目标检测领域的开山之作,具有里程碑式的意义。
-
与传统非深度学习目标检测方法相比,在检测精度方面有着大幅度提高。
-
R-CNN也验证了CNN作为特征提取工具的有效性。
缺点:
- 固定尺寸输入:R-CNN强制将每个区域建议的子图像拉伸/缩放至227×227这一固定尺寸。这一简单的操作将给某些对象、尤其是长宽差异极大的对象带来严重的扭曲,从而影响后续的检测精度;
- 速度慢:R-CNN的目标检测速度过慢成为制约其应用、尤其是实时目标检测应用的瓶颈。速度慢的主要原因在于大约2000个尺寸为227×227区域建议均要通过CNN进行提取特征;
- 操作繁琐
- R-CNN中的生成区域建议、预训练、参数微调、分类器训练和包围框回归等环节都是相对独立的,操作流程繁琐,更谈不上端到端(end-to-end,即模型的输入输出分别为原始数据和最终结果)。
- 同时,R-CNN的预训练依赖IMAGENET数据集,参数微调依赖PASCAL VOC数据集,对共享数据集的依赖过重。当需要使用自己的数据集完成全流程训练时,整套操作将变得异常繁琐。