Abstract
背景:(1)目前最好的方法主要是用复杂的ensemble模型将底层的图片特征同高层的语义特征进行结合
作者方法的特点:(1)将高容量的CNN用于自底向上的region proposals;(2)当训练数据较少时,将有监督的预训练作为辅助任务,然后紧接着做一个domain-specific的fine-tuning,效果同样可以达到很好的提升
R-CNN名字由来为combine region proposals with CNNs
1. Introduction
相较于基于HOG特征的简单模型,CNN实现了在PASCAL VOC数据集上表现的极大提升。作者在文章中主要关注两个问题:(1)用深层次网络进行目标定位;(2)用少量标记数据训练一个大容量模型
CNN在目标定位上存在的问题,使得作者转而求助于新的方法,即"recognition with regions"。测试时候的流程如下:
- 对输入图片生成大约2000个类别独立的region proposals;
- 用CNN对每一个proposal提取出一个固定长度的特征向量;
- 用一个category-specific的线性SVM分类器对每一个proposal进行分类。
注意到CNN要求输入是固定大小的proposal,因此作者对proposal进行了一个affine image warping。
检测问题中存在的另一个挑战是,现有标记数据太少以至于不够来训练一个大型CNN网络。通常的做法是先进行有监督的pre-training,再进行无监督的fine-tuning。
原论文(v5)中的图片其实不完整,看下面这张更清晰。
2. 用R-CNN进行目标检测
模型由3个模块组成:(1)生成region proposal;(2)CNN;(3)一系列线性SVM分类器
2.1 模块设计
- 生成region proposal选择的方法是Selective Search(SS);
- feature extraction:用Caffe版本的CNN从region proposal中提取4096维的特征向量。特征向量计算步骤如下:227x227的mean-subtracted的RGB图经过5个卷积层和2个fc层。
注意,由于CNN要求输入大小均为227x227,作者的做法是无论region proposal的大小和长宽比为多少,we warp all pixels into a tight bbox around it to the required size。在warping前,先对bbox扩充,这样at the warped size there are exactly p pixels of warped image context around the original box(作者在文章中选取p=16,这一段没怎么看懂)。
2.2 Test-time detection
- 用SS在测试图片上提取大约2k个region proposal;
- 对proposals进行warp之后,输入CNN进行前向传导计算特征;
- 对每一个类别,用对应已经训练好的SVM对提取出的特征向量进行打分;
- 对图片中所有已打分的区域,用贪心非极大抑制计算IoU进行筛选。
Run-time Analysis
检测效率较高的两个原因:
- 所有类别共享CNN所有参数
- 相较于其他方法,CNN计算出的特征向量维度较低
only class-specific conputation:
- 特征同SVM权重之间的点乘
- 非极大抑制
2.3 Training
Supervised pre-training
首先在ILSVRC2012数据及上预先训练了一个CNN,训练的数据只是用image-level的annotation
Domain-specific fine-tuning
- 只使用warped region proposals,用SGD对CNN参数进行了训练,并替换了fc层;
- 选择IoU threshold为0.5,分为positive windows和negative windows;
- 选择mini-batch大小为128,其中32个为positive windows,其余为bg windows
Object category classifiers
- 作者通过grid search搜索{0, 0.1, ..., 0.5}的方法,确定IoU的threshold为0.3,作为区分positive和negative的标准;
- 在用SVM进行分类时,作者选择了hard negative mining(https://blog.csdn.net/u012285175/article/details/77866878)的方法;
- 作者在fine-tuning和SVM中对正负样本的定义是不同的,以及他们选择了用SVM而非fine-tune的最后一个softmax输出,这些做法的原因在附录中都有提及。
3. Visualization, albation and modes of error
3.1 Visualizing learned features
一般情况下,卷积神经网络第一层的filter主要用来捕获oriented features和opponent colors。对于后面层的可视化,作者采用了一种很简单地非参数方法。
想法是从网络中提取出一个特殊单元(feature),将其作为一个目标检测器。即,在很多held-out region proposals上计算单元激活值,按照激活值从高到低对proposals进行排序,用nms,最后显示得分最高的区域。
3.2 Albation experiments
Performance layer by layer, without fine-tuning
为了了解detection任务中的关键层是哪些,作者咋iVOC2007数据集上对CNN的最后3层进行了分析。
当不用PASCAL VOC对模型进行fine-tune时,观察结果发现fc7的特征的通用性相较于fc6而言更差。这意味着在保证mAP不减少的前提下,模型参数可以减少29%。
更令人惊讶的是,即使pool5只使用了CNN 6%的参数,当我们除掉fc6和fc7这两层时仍然可以获得比较好的结果。CNN的大多数representational能力来源于卷积层,而非其他层。这一发现意味着只使用CNN的卷积层来计算任一大小的图片的dense特征图有巨大的潜力。
当进行fine-tune时发现,mAP提高了8%,fine-tune上得到的boost中fc6 and fc7的部分要多于pool5的部分,这意味着pool5从ImageNet上学到的特征是一般的特征,提升中的很大一部分来源于对这些特征上domain-specific的非线性分类器的学习。
Performance layer by layer, with fine-tuning
对于fc6和fc7,通过fine-tuning实现的boost,比pool5更大,这意味着pool5层从ImageNet上学到的特征更为一般,而且这一提升大多源于在pool5上学习到的domain-specific的非线性分类器。
3.3 Network architectures
O-Net: OxfordNet,即VGG16
T-Net: TorontoNet,为文章中的baseline
作者选择caffe model zoo中的VGG_ILSVRC_16_layers model作为pre-trained model weights,然后同T-Net一样进行fine-tune,发现用O-Net比用T-Net使得mAP从58.5%提升到了66.0%,但是计算时间前者却是后者的大概7倍。
3.5 Bounding-box regression
为了缓解定位误差,受到DPM中bbox regression思想的启发,作者训练了一个线性回归模型,基于pool5对于SS生成的region proposal进行新的检测窗口的预测。
4. ILSVRC2013数据集
4.1 数据集overview
训练集(395,918)验证集(20,121)测试集(40,152)
val和test中的图片来自于统一分布,并且同PASCAL VOC接近,并且每张图片中的所有类别都被完全标记;train中图片分布服从ILSVRC2013分类图片中的分布,其中的图片分布更倾向于那种只包含单个目标的图片,而且图片中的目标并没有被完全标记。
除此之外,每一个类别都有一个自己的negative images数据集。这个数据集是通过人工验证每张图片不包含任何与该类别相关的物体,但在我们的实验中,没有用到这部分数据集。
由于ILSVRC2013有以上的这些特点,作者提出的训练策略如下:主要依赖val数据集,并且将train数据集中的某些数据作为正样本进行使用。
为了将val同时运用到training和validation中,作者将val分为val1和val2两部分。但是每一个类别在val中的个数差别又比较大,因此我们需要确保一个类别平衡的分割。作者最后选择了有最小maximum relative class imbalance的分割。
每一个候选分割都是通过以下方式生成,即,用类别数目作为特征对val中的图片进行聚类,然后用随机局部搜索来提升分割平衡性。
4.2 Region proposals
在这个数据及上进行region proposals同在PASCAL VOC上一样。但是作者做了一个很小的改变,由于SS没有scale invariant的特性,因此在进行SS之前,他们将所有图片resize到一个固定的宽度(500pixel)。在验证集上,SS在每张图片上大约生成了2403个region proposals,召回率为91.6%,显然低于PASCAL的98%,这意味着region proposal还有很大的提高空间。
4.3 Training data
记Training data为val_1+train_N,其中val_1为包含SS得到的region proposals以及对应的gt boxes,train_N为train中对于每个类别包含N个gt boxes的那些数据(如果不足N个,我们对其进行加总)。
训练数据在R-CNN中主要进行3个步骤:(1)CNN fine-tuning;(2)detector SVM training;(3)bbox regressor training
4.6 同OverFeat的联系
OverFeat可以看做是R-CNN的特殊情况,即用multi-scale pyramid of regular square regions替代SS,用single bbox regressor替代per-class bbox regressors。注意到OverFeat比R-CNN大概快了9倍,原因主要是因为OverFeat的region proposals不是在图片水平上进行warped的,因此overlapping的region proposals可以进行共享计算
5. 语义分割
这部分讲的是R-CNN在语义分割上的应用,因为本人对语义分割的了解不是很透彻,就不仔细研读了,之后有时间会补上。
6.结论
作者提到达到最终效果,主要归功于两点,即,(1)将高容量的CNN用于自底向上的region proposals;(2)当训练数据较少时,将有监督的预训练作为辅助任务,然后紧接着做一个domain-specific的fine-tuning,效果同样可以达到很好的提升。
作者的方法可以称为,"supervised pre-training/domain-specific fine-tuning"。
在我浅层次阅读完这篇文章之后,接受了男朋友狂风暴雨一般的问题的轰炸。总结如下:
1) Fine-tuning的训练数据来源?
答:来自Selective Search提取出的2k个category-independent proposals,所以正负样例就是表示某一个类别的proposal是该类别或者不是该类别,正负样本的区分是通过IoU overlap确定的,设定的IoU threshold为0.5,同gt的overlap大于等于0.5的为positive,其余为negative。
2) SVM的数据是怎么样的?label怎么打的?
答:SVM的输入数据为CNN中输出的4096维的特征向量。正负样例就是表示某一个特征向量,是该类别或者不是该类别,正负样本的区分是通过IoU overlap确定的,设定的IoU threshold为:gt的为positive,同gt的overlap小于等于0.3的为negative,其余部分忽略。
3) 训练分类器是如何训练的?是分别训练?
答:个人觉得是同时训练的,每个mini-batch的所有图片中的任意一张图片经过CNN生成的特征向量同时输入每个类别对应的SVM分类器。
4) 那训练SVM的样本怎么确定?
答:同2, 输入数据为CNN中输出的4096维的特征向量。
5)什么是hard negative mining?
“
Bootstrapping methods train a model with an initial subset of negative examples, and then collect negative examples that are incorrectly classified by this initial model to form a set of hard negatives. A new model is trained with the hard negative examples, and the process may be repeated a few times.
”
6)bbox regression的时候gt如何同proposal对应,以及所有2k个proposal都拿来去做reg吗,以及会否存在class imbalance?
答:因为reg是在SVM之后做的,因此类别自然可以对应得上;SVM中设定了IoU threshold,丢掉了grey zone里面的那些特征;通过hard negative mining可以缓解class imbalance。