Rich feature hierarchies for accurate object detection and semantic segmentation
用于准确的目标检测和语义分割的丰富特征层次结构
[翻译参考]https://blog.csdn.net/v1_vivian/article/details/78599229
- 简介
两个关键因素:(1) 将大型卷积神经网络(CNN)应用于自底向上区域推荐,以定位和分割物体;(2)当标签训练数据不足时,先针对辅助任务进行有监督预训练,再进行特定任务的微调,就可以产生明显的性能提升。
主要关注两个问题:使用深度网络定位物体、在小规模的标注数据集上进行大型网络模型的训练
定位问题的解决:
1.将定位问题定义为回归问题,效果不好
2.建一个滑动窗口探测器,主要在一些特定的物体类别上。overfeat采用这种方法。为了获得较高的空间分辨率,这些CNNs都采用了两个卷积层和两个池化层。但这次的网络层次更深,感受野更大,这使得在滑窗模式中做精确定位成为挑战。
3.操纵“对区域进行识别”的模式来解决CNN定位问题,该方法已经成功用于物体检测和语义分割。
训练问题的解决:
对于标签数据太少的情况。传统方法多是采用无监督预训练,再进行有监督调优。本文则是在辅助数据集(ILSVRC)上进行有监督预训练,再在小数据集上针对特定问题进行调优,这是在训练数据稀少的情况下一个非常有效的训练大型卷积神经网络的方法。
测试过程:
测试时,该方法产生了接近2000个类别无关的区域推荐,对每个推荐使用CNN提取了一个固定长度的特征向量,然后借助专门针对特定类别数据的线性SVM对每个区域进行分类。使用简单的技术(仿射图像变换)对每个推荐区域计算出一个固定大小的CNN输入,从而支持各种区域尺寸。该结合了区域推荐和CNNs的方法被称为R-CNN:Regions with CNN features
R-CNN的高效率:
需要进行的计算是合理的小矩阵向量乘法和贪心非极大值约束。原因在于参数是所有分类共享,且特征向量比之前的区域特征低了两个级别的维度。因此,计算推荐区域特征的耗时可以分摊到所有类别的头上,唯一的和类别有关的计算都是在特征和SVM权重以及最大化抑制之间的点积。实践中,一个图像的所有的点积都可以批量化成一个单独矩阵间运算。
作为本次分析的直接结果,得出一个简单的边界框回归方法会明显改善位置错位问题,而错位是该系统面对的主要错误模式。
- 对象探测
对象探测系统由三部分组成:
产生类别无关的区域推送——这些推送构成候选探测区域集合;
大的卷积神经网络——从每个区域中抽取固定大小的特征向量;
特殊类别的线性SVM集合。
1.模型设计
区域推送:有很多类别无关区域推荐的方法,这里采用选择性搜索。
特征抽取:将一个277×277大小的RGB图像送到五个卷积层和两个全连接层进行前向传播来计算特征,最终得到一个4096维的特征向量。为了对推送区进行特征计算,需要先将不同尺寸的推送区扭曲至固定大小(227×227)来适应CNN的输入层。扭曲之前,在推送区周围加上16px的padding,再进行各向异性缩放。
2. 测试检测
在测试图像上使用选择性搜索抽取2000个推荐区域。变形每一个推荐区域,通过CNN前向传播计算出特征。然后,对于每个类,我们使用为该类训练的SVM分类器对每个提取的特征向量进行评分。在一张图像中给出所有打分区域,然后使用贪婪非最大化抑制算法(每个类别是独立进行的),如果一个区域和那些得分较高且被选中的区域有IoU重叠,且IoU大于学习阈值,就会被舍弃。
3. 训练
有监督预训练:
在大型辅助训练集ILSVRC2012分类数据集(有图像类别标志,没有约束框数据)上对CNN进行预训练。预训练采用了Caffe的CNN库。
对特定问题微调:
为了让我们的CNN适应检测任务和变形后的推荐窗口,我们只使用变形后的推荐区域对CNN参数进行SGD训练。我们采用一个随机初始化的(N+1)路分类层,其中N是类别数,1代表背景,CNN结构没有改变。对所有的推荐区域,其和真实标注框的IoU重叠>= 0.5为正例,否则为负例。SGD开始的学习率为0.001(是初始化预训练时的十分之一),这使得调优得以有效进行而不会破坏初始化的成果。每轮SGD迭代,统一使用32个正例窗口(跨所有类别)和96个背景窗口,即每个mini-batch的大小是128。另外我们倾向于采样正例窗口,因为和背景相比他们很稀少。
对象分类器:
比如,一个图像区域紧紧包裹着一辆汽车是正例,看不到任何汽车的背景区域就是负例。我们使用IoU重叠阈值来解决怎样标注哪些和汽车部分重叠的区域的问题,低于这个阈值的就是负例(阈值选了0.3,是proposal-region与ground-truth之间的IoU值)。一旦特征提取出来,就用标签数据优化每个类的线性SVM。由于训练数据太大,我们选择标准的hard negative mining method,该算法收敛很快,实践中只要经过一轮mAP就可以基本停止增加了。
注:正例和负例在调优和SVM训练两个阶段的定义不同;对于训练检测SVM的平衡问题,不是简单地使用来自调优后的CNN的最终softmax层的输出。
- 可视化、消融、错误模式
1.可视化学习到的特征
第一层滤波器能被直接可视化且易于理解,用于捕获方向性边界和对比色。理解后面的层是有挑战的。对于后面的层,使用一种简单的非参数化方法,直接展示网络学到的东西。这个想法是挑选出网络中一个特定单元(特征),然后把它当做一个正确类别的物体检测器来使用。方法是,先计算所有提取的推荐区域,计算每个推送区域的单元的激活值,然后按激活值从高到低对这些区域进行排序,进行非极大值抑制,最后展示分值最高的若干个区域。这个方法通过精确显示其对应的输入来让被选中的单元“为自己说话”。我们避免平均化是为了看到不同的视觉模式和深入观察单元计算出来的不变性。
我们可视化了pool5,是池化的第五层,也是卷积网络的最后一层,feature_map大小是6 x 6 x 256 = 9216维。忽略边界效应,对于227×227的输入,每个pool5单元拥有195×195的感受野。pool5中间的单元,几乎是一个全局视角,而边缘的单元有较小的局部的支持。
2.消融研究
未调优的各层性能:
未调优是指所有的CNN参数就是在ILSVRC2012上训练后的状态。
为了理解哪一层对于检测的性能最重要,对CNN最后三层(pool5,fc6,fc7)的每一层在VOC2007上面的结果进行分析,得出CNN的主要表达力来自于卷积层pool5,而不是全连接层。这提醒我们也许可以在计算任意尺寸的图片的稠密特征图(dense feature map)时使仅仅使用CNN的卷积层。这种表示可以直接在pool5的特征上进行滑动窗口检测的实验。
调优后的各层性能:
观察调优后在VOC2007上的表现,fc6和fc7的提升明显优于pool5,说明pool5从ImageNet学习的特征通用性很强,在它之上层的大部分提升主要是在学习领域相关的非线性分类器。
与其他特征提取方法相比:
R-CNN更优。
3.网络架构
架构的选择对于R-CNN的检测性能会有很大的影响。我们采用了16层的深度网络。这个网络采用了完全同构的13层3×3卷积核,中间穿插了5个最大池化层,顶部有三个全连接层。我们称这个网络为O-Net,表示OxfordNet,基准网络称为T-Net,表示TorontoNet。使用更小的Batch Size来适应GPU的内存。使用O-Net的R-CNN表现优越,但计算耗时,O-Net的前向传播耗时大概是T-Net的7倍。
4.边界框回归
见:https://blog.csdn.net/v1_vivian/article/details/80292569
===================================================================================================
补充:
1.HOG、SIFT:文中开头提到的提取图像特征的老方法,基于图像边缘梯度,不进行局部、有层次地提取特征。
https://blog.csdn.net/lingyunxianhe/article/details/79063547
https://blog.csdn.net/gy429476195/article/details/50156813
2.neocognitron:模式识别的层次化、移动不变性模型,但缺乏监督学习算法。CNNs被认为是继承自neocognitron的一类模型。
解释:
1、 mAP:
mAP:各类别AP的平均,即,把每个类别的AP都算一遍,再取平均值。
AP:该类别精确率对该类别召回率的积分得到。
P:precision,精确率
2、hard negative mining method:
负样本有完全不包含目标的,也有部分包含目标的,这些部分包含目标的负样本容易被划分为正样本,这些划分错误的负样本为 false positive,把其中得分较高的false positive,当做Hard negative,送进网络再训练一次,从而加强分类器判别假阳性的能力。
3、消融研究(ablation study):
为了研究模型中所提出的一些结构是否有效而设计的实验。要想确定一个结构是否有利于最终的效果,就要将去掉该结构的网络与加上该结构的网络所得到的结果进行对比,这就是ablation study,即控制变量法。