分为三个部分
第一部分 region proposal
方法 selective search
一
二 用R-CNN做目标检测
算法流程:提取候选的region,然后提取
1 Region proposal
使用了selective search的方法获取候选区域(region proposal),大约获取2000个
2 Feature extraction
2.1 提取过程
将每个region proposal都先调整到227×227的图像,然后用Alexnet(5层卷积层,2层全连接层)神经网络提取4096维的特征向量。
2.2 网络框架
用了Caffe的框架,可以参考caffe.berkeleyvision
2.3 网络描述
2.3.1 输入region的尺寸需要调整到与网络输入一致
在进行特征提取前,需要先将每个建议框调整到227×227的尺寸。
【调整方法】原文讨论了好几种调整的方法
2.3.2 时间空间复杂度分析
【参数量】
由于对region先用CNN进行了特征提取,再用SVM分类,就极大减少了SVM输入数据端的维度(360K vs 4K-dimension)。
【时间】region proposals和特征提取这两个过程的运行时间可以被所有目标类别平摊,每一个类单独的时间花销是特征向量feature在进行SVM分类和non-maximum suppression上。
【存储】
用本文的方法:R-CNN提取特征矩阵为2000×4096(region的数量×特征维度),SVM权重矩阵4096×N(维度×类别数量),其做分类时只用相乘这两个矩阵。
传统方法:高纬度features作SVM分类时,需要大量的内存存储
相比较而言,本文中降维提取的特征所需要的内存是很小的
3 训练
3.1 CNN预训练
有监督预训练:对CNN在ILSVRC2012上预训练(图像有标签但无bounding box labels),最后一层是4096维特征到ILSVRC分类数据集上1000类的映射。这样的预训练使得AlexNet在图像分类任务中获得了较强的特征提取能力。
3.2 Domain-specific fine-tuning(调优)
为了将CNN应用于新的检测任务和新的domain(warped VOC windows),需要用SGD的方法再训练网络参数,此时网络的输入是来自VOC的wraped region proposals。
【网络的调整】
替换层:将预训练时的1000个通道的分类层替换为一个随机初始化的21-way的分类层(VOC的20个classes加一个背景)
【分类标准】
正样本(positive example):region proposals与ground-truth box的
负样本(negetive example):region proposals 与 ground-truth box 的
【训练过程】
使用SGD方法训练,采用mini-batch的方法,统一采样32个正样本(在所有类上)和96个负样本
计算它们的平均损失函数的值来更新参数,学习率为0.001(预训练时的0.1倍)。
3.3 SVM训练
R-CNN网络输出的是4096维的特征向量,然后送到SVM中分类,SVM输出属于该类别的得分。SVM是二分类器,所以对于每一个类别都要训练一个SVM分类器。
【训练方法】
正样本为标定的真值边界框(Ground-truth bounding boxes)经CNN提取后的特征向量。
负样本为与所有标定真值边界框的的region proposals经CNN提取后的特征向量。
因为负样本的数量非常多,所以用难负样本挖掘(standard hard negative mining)的方法选取具有代表性的负样本。将每次检测结果为错误的情况作为难负样本(hard negative)送回去训练,直至模型的成绩不再提升。
【讨论】
在SVM阶段负样本选取IoU的阈值是0.3,原因是SVM适用于小样本训练,故对IoU的限制严格;CNN在样本数量较少时容易发生过拟合,所以需要大量的训练数据,因此“放宽”了IoU。
调优训练的正样本IoU宽松,不强调位置的精准性
正样本 | 负样本 | |
SVM | 标定的真值边界框 | 难负样本挖掘方法筛选 |
CNN | 与标定真值边界框IoU大于等于0.5的建议框 | 随机抽样 |
用SVM代替softmax分类,mAP由50.9%提升到54.2%。
3.4训练结果
三 可视化,消融实验,误差模式分析
1 可视化学习特征
文章提出一种简单,无参数方法来直接显示网络学习到的内容。
1.1 思路
思想是挑出一个feature,然后将它作为目标检测器。做法就是计算其在大量的region proposals(1000万)的activations,从高到底对activations的结果排序,运用non-maximum suppression的方法,然后展示得分最高的regions
1.2 实验做法
文章可视化Alexnet的pool5,feature map(又称为unit)为6×6×256,每个pool5的unit在原始227×227的输入上的感受野为195×195。
在VOC 2007上 fine-tuned,下图的每一行是一个pool5 unit得分最高的16个activations:
可以看出来挑选的六个unit分别学到了不同的内容,如第一行是人脸,第二行是狗的脸和洞的排列;网络体现了在pool5层学习到的representation结合了一些class-tuned feature和有关形状,纹理等的特征分布
2 消融实验
2.1 实验内容
分析了fine-tune阶段,CNN网络后三层的分类性能,即输出各层的结果并用SVM分类。
【各层介绍】
pool5:输出9216维的特征向量
全连接层6:对pool5左乘一个4096×9216的权重矩阵,再对结果添加bias,并半波整流
全连接层7:其作用是对fc6的feature乘以一个4096×4096的权重矩阵,并添加一个bias向量,半波整流
2.2 实验介绍及结果分析
2.2.1 实验一:不对网络进行fine-tuning,只在ILSVRC 2012上对CNN参数预训练
结果却发现经过fc7层后,特征反而不如fc6层的特征的分类结果好,这就说明可以去掉这一层(节省29%的参数量,约16.8million),且不会使得mAP值下降。
文章还说到:CNN的表示能力大多来自于卷积层,而非后续的全连接层(占很大参数量)
2.2.2 实验二:在VOC 2007 trainval数据集上进行fine-tuned:
可以看到fc7的mAP提升了8%,且fc6和fc7层mAP的提升远大于pool5层
说明pool5学到的更多是泛化的特征,fc6,fc7层的提升是因为学到了domain-specific,non-linear的特征
2.2.3 实验三:与同期其他特征学习方法的比较
DPM ST(A learned mid-level representation for contour and object detection)
DPM HSC
可以看到任一种R-CNN的性能都优于三种基于DPM的方法
3 误差分析
利用了分析工具 ,出自Hoiem的Diagnosing error in object detectors,讨论结果在Figure4和figure5的题目部分
四 边界框回归
通过误差分析会发现,有定位误差出现,假设有一个标定的真值目标边界框和建议框,即使建议框被分类器识别为飞机,但由于框的定位不准确,与真值边界框的IoU较小,相当于没有正确检测出飞机
我们可以使用边界框回归的方法来减小目标定位的误差。边界框回归的思路就是将定位不准确的建议框进行微调,使调整后的边界框与真值边界框更接近,从而提升定位的准确度。
训练一组特定类别的线性回归模型(包括Pascal VOC数据集中的全部20个类别),在使用SVM给建议框打分之后,通过建议框在CNN的顶层预测一个新的目标边界框的位置。实验结果表明,使用边界框回归的方法后,大量错误的位置检测结果被修复了,mAP相应地提升了3%~4%
对上述的问题,进行修正
Bounding box regression
训练了一个线性回归模型来预测一个新的检测window,作为selective search region proposal,提升了mAP
五 应用于语义分割
Semantic segmentation
Region分类任务是语义分割的一种标准技术,因此可以将R-CNN应用到PASCAL VOC分割挑战中。本文与同期领先的语义分割系统O2P比较,为了统一性使用了他们的开源框架。O2P利用CPMC对每张图生成150region proposals,并用support vector regression(SVR)预测每个类别的每个region的质量。CPMC regions和 多特征类型的second-order pooling
用于分割的CNN特征
评估了在CPMC regions上计算特征的三种策略,首先都是将包含region的矩形窗口 wrap成227×227。
第一种方法(full):忽略region的形状并在warped window上直接计算CNN features,与做检测类似
但这样的坏处就是忽略了region拥有的非矩阵形状的特性,导致两个可能重叠量很小的region也有很相似的boundng boxes。
第二种方法(fg)计算一个区域的foreground mask上的CNN features。
第三种方法是(full+fg):
在VOC 2011上验证集上的结果
fc6的结果好于fg
masked region又好于full
六 补充
1 目标建议框的变换
CNN网络的输入是固定尺寸227×227,但proposal是任意尺寸的矩形框,所以需要先对proposal变换成可以送入CNN网络的尺寸。
1.1 尺寸变换
有两种变换方法:
tightest square with context:将proposal用一个正方形紧密围绕,然后将包含在正方形的image缩放成CNN输入的尺寸。另一种变体是舍弃图像中除proposal外的部分。
wrap:直接将proposal缩放成CNN输入尺寸,改变长宽比。
1.2 padding
对proposal的周围进行填充。
2 正负样本选取以及softmax
2.1 正负样本的选取
由正文可知,正负样本在fine-tuning阶段和SVM阶段定义正负样本的方式不同:在fine-tuning时,正样本是与ground-truth boxes的IoU大于等于0.5的proposal,其他proposal称为background(负样本);训练SVM时,正样本是ground-truth boxes,取与ground-truth boxes的IoU小于0.3的为负样本,其余proposal被丢弃。
【原因解释】
在训练SVM时,使用的训练数据是从ImageNet上预训练后的CNN得到的features,此时还没有进行fine-tuning。实验验证当前对于正负样本的定义的效果最好。当开始进行fine-tuning时,发现使用与SVM相同的正负样本定义时,效果并不如现在的定义。
fine-tuning阶段使用了很多IoU在0.5到1之间的proposals(称为“jittered" examples),扩大了近30倍的正样本的数量。作者推测fine-tuning阶段,大的训练集能够帮助获得更好的训练结果,且防止了过拟合。但是这种jittered examples更像是次优解,不是对目标精确定位的fine-tuned。
2.2 softmax分类与SVM
由2.1可知,fine-tuning阶段不能训练精确定位,这就引入了另一个问题:为什么在fine-tuning后要训练SVM,而不是直接用fine-tuned网络的最后一层进行分类。
作者实验后发现,在VOC 2007数据集上直接用softmax分类,mAP由54.2%下降到50.9%。可能原因为:
- 在fine-tuning阶段定义的positive examples不强调定位的准确性;
- softmax分类器是用随机采样的negative examples训练的,SVM用的是hard negatives的子集进行训练的。
由于差距不大,作者推测可以使用一些额外的微调缩小性能之间的差距,用softmax来替代SVM,在不损失性能的同时简化和加速R-CNN的训练。
3 边界框回归(Bounding-box regression)
文中在bounding-box 回归阶段提升定位的性能。在某一类的SVM上得到proposal的分数后,用一个class-specific bounding-box regressor预测一个bounding box。
3.1 训练算法
[ 算法输入 ] 输入为N个训练对,其中表示了proposal 中心像素点的坐标。每个ground-truth bounding box也由来表示。
训练目标是学习一种能够将proposal映射为ground-truth bounding box的变换。
[ 算法介绍 及 训练过程]
各维度的变换函数为,实现为:
前两个函数实现的是平移变换:
后两个函数实现的是一个对数空间的尺寸缩放变换:
每个变换函数都是线性函数,在CNN最高层特征图上建模,输入为proposal在的特征(这一点很重要!!特征是从CNN的pool5层得到的),用表示。
根据上述定义,将原proposal变换函数与输入的关系可以描述为:。
是可学习的参数向量,学习可以通过优化下面的正则化最小二乘目标(岭回归ridge regression):
的定义如下:
其含义为真正需要的平移量和尺寸缩放量
训练损失函数为
经过训练,就能通过proposal在CNN顶层的特征,根据学习到的参数预测出,进而得到需要的平移变换和尺寸缩放,实现更精确的目标定位 。
[ 有关bounding-box回归实现时的两个问题 ]
一是正则化:在验证集上设置
二是要注意训练对的选取:
若proposal离所有ground-truth box很远,则对其做回归没有意义;
因此选取proposal作为训练的输入时,要选择至少离一个ground-truth box‘近’的proposal。‘近’的定量描述为:与ground-truth boxes的IoU的最大值大于0.6。其他不符合条件的proposal都舍弃 。