问题
1990年代,CNN在计算机视觉方面得到广泛的应用,但随着SVM的兴起,CNN逐渐失宠。直到2012年,Krizhevsky等人通过在ImageNet Large Scale Visual Recognition Challenge (ILSVRC)中显示出更高的图像分类精度,重新燃起了人们对CNNs的兴趣。那么如何将CNN在图像分类中提高的精度运用到目标检测中成为一个大家争辩的问题。
一种是将目标检测中的定位问题看作是回归问题,但这种策略效果不佳。另一种方法是构建一个滑动窗口探测器,CNN已经以这种方式使用了至少二十年,通常是运用在受约束的物体类别上,例如人脸和行人;然而不受约束的物体需要使用多个长宽比进行搜索,滑动窗口法在计算上非常昂贵。目标检测上有两大挑战:1、使用滑动窗口法对输入图像进行不能精确定位;2、标记数据稀缺,不足以训练大型CNN。
创新点
1、使用region proposals method提高输入图像的精确定位。
2、使用预训练模型,在此基础上用小样本数据进行微调训练,解决标记数据稀缺的问题。
如何解决问题
这篇论文中的目标检测分为三个阶段:1、使用selective search method来生成待检测的候选集;2、将每个待检测的区域resize成统一的尺寸,输入CNN中提取特征,输出固定长度的feature vector;3、为每个类训练一个SVM分类器。
RCNN的大致过程如下:
训练过程
1、有监督的预训练
ILSVRC样本集上仅有图像类别标签,没有图像物体位置标注;采用AlexNet CNN网络进行有监督预训练,学习率=0.01;该网络输入为227×227的ILSVRC训练集图像,输出最后一层为4096维特征->1000类的映射,训练的是网络参数。
2、特定样本下的微调
PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位置标签; 采用训练好的AlexNet CNN网络进行PASCAL VOC 2007样本集下的微调,学习率=0.001;mini-batch为32个正样本和96个负样本;将原来网络中的1000的类别输出改为21个类别(20类+背景);该网络输入为大小为227×227的建议框;训练得到提取建议框的4096维feature vector的CNN权重参数。
3、SVM训练
由于SVM是二分类器,需要为每个类别训练单独的SVM;SVM训练时输入正负样本在AlexNet CNN网络计算下的4096维特征,输出为该类的得分;训练的SVM权重向量;由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本。
4、region proposal regression训练
输入数据为某类别的样本对N个: 以及 所对应的AlexNet CNN网络Pool5层特征,输出回归后的建议框,训练的是四种变换操作的权重向量。(这一部分具体的如何也不太了解)
测试过程
具体操作如下:
a、输入一张包含多目标对图像,采用selective search算法提取约2000个建议框;
b、采用各项异性、同性缩放方法(后面会介绍)对提取到的2000个建议框进行预处理,然后进行padding操作,最后resize成227*227的统一尺寸。
c、将统一尺寸的建议框中的像素减去该建议框中像素的平均值,再依次将每个227×227的建议框输入AlexNet CNN网络获取4096维的特征,2000个建议框的CNN特征组合成2000×4096维矩阵;
d、将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个建议框的各个物体类别的得分;
e、分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框;
d、分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的region proposal。
解释分析
Selective search
selective search采取了hierarchical algorithm分层算法,是一种自底向上的算法。
具体的流程为:
a、利用Efficient Graph-Based Image Segmentation这篇论文中的图像分割方法将原始输入图像分割成很多的初始regions的集合。
b、相邻的region计算相似度,保存在一个相似度集合中。
c、在相似度集合中找到最大相似度的两个region,合并成一个region,将这个region存入一个区域集合R中,并更新其与相邻region的相似度产生更新的相似度集合。
d、重复上面的步骤知道整个输入图像成为一个region。
e、区域集合R中的所有区域就是利用分层算法得到的待检测物体的可能位置。
各项异性、同性缩放方法
对于第2阶段将不同scale的region proposals统一成固定尺寸论文采用了两种方法:
(1)各项异性缩放
不管region proposal的长宽比例如何、是否扭曲,都进行缩放,全部缩放到227*227大小输入CNN,如下图(D)所示。
(2)各项同性缩放
各项异性缩放会造成图像不同程度的扭曲,可能会对后续CNN的训练精度有影响,因此各项同性缩放采用了两种方式:a、直接在原始图片中,把region proposal的边界进行扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用region proposal中的颜色均值填充,如下图(B)所示;b、先把region proposal图片裁剪出来,然后用固定的背景颜色填充成正方形图片(固定的背景颜色也是采用region proposal的像素颜色均值),如下图(C)所示。
对于上面的异性、同性缩放,论文还有个padding处理,上面的示意图中第1、3行就是采用padding=0,第2、4行示意图采用padding=16的结果。经过最后的试验,作者发现采用各向异性缩放、padding=16的精度最高。
非极大值抑制操作
在步骤d中,获得2000×20维矩阵表示每个建议框各个物体类别的得分情况,此时会遇到下图所示情况,同一个车辆目标会被多个建议框包围,这时需要非极大值抑制操作去除得分较低的候选框以减少重叠框,具体操作如下:
① 对2000×20维矩阵中每列按从大到小进行排序;
② 从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,若IoU>阈值,则剔除得分较小的建议框,否则认为图像中存在多个同一类物体;
③ 从每列次大的得分建议框开始,重复步骤②;
④ 重复步骤③直到遍历完该列所有建议框;
⑤ 遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制;
⑥ 最后将各个类别中剩余建议框与Ground Truth进行IOU计算,剔除各个类别中剩余建议框得分少于该类别阈值的建议框。
迁移学习
有监督预训练也称之为迁移学习,举例说明:若有大量标注信息的人脸年龄分类的正负样本图片,利用样本训练了CNN网络用于人脸年龄识别;现在要通过人脸进行性别识别,那么就可以去掉已经训练好的人脸年龄识别网络CNN的最后一层或几层,换成所需要的分类层,前面层的网络参数直接使用为初始化参数,修改层的网络参数随机初始化,再利用人脸性别分类的正负样本图片进行训练,得到人脸性别识别网络,这种方法就叫做有监督预训练。这种方式可以很好地解决小样本数据无法训练深层CNN网络的问题,我们都知道小样本数据训练很容易造成网络过拟合,但是在大样本训练后利用其参数初始化网络可以很好地训练小样本,这解决了小样本训练的难题。这篇文章最大的亮点就是采用了这种思想,ILSVRC样本集上用于图片分类的含标注类别的训练集有1millon之多,总共含有1000类;而PASCAL VOC 2007样本集上用于物体检测的含标注类别和位置信息的训练集只有10k,总共含有20类,直接用这部分数据训练容易造成过拟合,因此文中利用ILSVRC2012的训练集先进行有监督预训练。
可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗?
文中设计了没有进行微调的对比实验,分别就AlexNet CNN网络的pool5、fc6、fc7层进行特征提取,输入SVM进行训练,这相当于把AlexNet CNN网络当做万精油使用,类似HOG、SIFT等做特征提取一样,不针对特征任务。实验结果发现f6层提取的特征比f7层的mAP还高,pool5层提取的特征与f6、f7层相比mAP差不多;在PASCAL VOC 2007数据集上采取了微调后fc6、fc7层特征较pool5层特征用于SVM训练提升mAP十分明显;由此作者得出结论:不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG、SIFT,类似于只学习到了人脸共性特征;从fc6和fc7等全连接层中所学习到的特征是针对特征任务特定样本的特征,类似于学习到了分类性别分类年龄的个性特征。
为什么微调时和训练SVM时所采用的正负样本阈值【0.5和0.3】不一致?
微调阶段是由于CNN对小样本容易过拟合,需要大量训练数据,故对IoU限制宽松:Ground Truth+与Ground Truth相交IoU>0.5的建议框为正样本,否则为负样本;SVM这种机制是由于其适用于小样本训练,故对样本IoU限制严格:Ground Truth为正样本,与Ground Truth相交IoU<0.3的建议框为负样本。
为什么不直接采用微调后的AlexNet CNN网络最后一层SoftMax进行21分类【20类+背景】?
因为微调时和训练SVM时所采用的正负样本阈值不同,微调阶段正样本定义并不强调精准的位置,而SVM正样本只有Ground Truth;并且微调阶段的负样本是随机抽样的,而SVM的负样本是经过hard negative mining方法筛选的;导致在采用SoftMax会使PSACAL VOC 2007测试集上mAP从54.2%降低到50.9%。
Ablation studies相关解释
模型简化测试, 看看取消掉一些模块后性能有没有影响。 根据奥卡姆剃刀法则,简单和复杂的方法能达到一样的效果,那么简单的方法更可靠。 实际上ablation study就是为了研究模型中所提出的一些结构是否有效而设计的实验。 比如你提出了某某结构,但是要想确定这个结构是否有利于最终的效果,那就要将去掉该结构的网络与加上该结构的网络所得到的结果进行对比,这就是ablation study。
RCNN存在的问题
1、如何在提取到的region proposals周围附加上下文信息?例如使用图像像素的均值对region周围进行padding、使用region边界周围信息进行复制padding等,这是一个值得思考的问题。
2、对一张图片的处理速度慢,这是由于一张图片中由selective search算法得出的约2k个建议框都需要经过变形处理后由CNN前向网络计算一次特征,这其中涵盖了对一张图片中多个重复区域的重复计算,很累赘;
3、整个测试过程很复杂,要先提取建议框,之后提取每个建议框CNN特征,再用SVM分类,做非极大值抑制,最后做region proposal回归才能得到图片中物体的种类以及位置信息;同样训练过程也很复杂,ILSVRC 2012上预训练CNN,PASCAL VOC 2007上微调CNN,做20类SVM分类器的训练和20类bounding-box回归器的训练,训练速度慢;每一个ROI都需要在CNN网络中进行一次前向传播,检测速度慢;这些不连续过程必然涉及到特征存储、浪费磁盘空间等问题。
结论
本文提出了一种简单并且可扩展的物体检测方法,达到了VOC 2012数据集相对之前最好性能的30%的提升,取得这个性能主要通过两个方面:第一是应用了自底向上的select search+卷积神经网络进行目标检测。另外一个是使用在标签数据匮乏的情况下训练大规模神经网络的一个方法,展示了在有监督的情况下使用丰富的数据集(图片分类)预训练一个网络作为辅助性的工作是很有效的,然后采用稀少数据(检测)去调优定位任务的网络,作者猜测“有监督的预训练+特定领域的调优”这一范式对于数据稀少的视觉问题是很有效的。目前,R-CNN 已经不是最先进的目标检测模型,也不是最先进的语义分割模型,但这篇论文最大意义在于展示了作者在资源匮乏的情况下如何整合现有的先进技术去解决自己问题的手段。
参考资料
CVPR 2014 Open Access Repository
https://blog.csdn.net/wopawn/article/details/52133338