论文地址:https://arxiv.org/pdf/1311.2524v3.pdf
RCNN源于2014年发表在cs.CV上的论文《Rich feature hierarchies for accurate object detection and semantic segmentation》用多层特征实现精确目标检测和语义分段。这也是一篇里程碑似的论文,它将目标检测模型的准确率从30.5% 提升到了58.5%。论文中提出了两个重要技术:第一使用CNN多层次特征自下而上的计算“建议区域”(Region proposals+CNN=RCNN),第二在目标识别中使用预训练和精调(pretrain/fine-tune)方法解决特定领域数据有限的问题。
构建模型
目标识别分成三步:第一计算与目标无关的备选区域;第二用CNN提取每一区域的定长特征(如果不定长,无法代入后续模型);使用SVM对区域的特征做分类,确定是否为目标区域,以及目标区域的类别。
对于可选区域,无论其宽高及比例,都先加16像素的扩边,而后缩放成227x227大小,将缩放后的图片输入CNN网络,经过五个卷积层和两个全连接层,提取4096维特征。训练数据如下图所示:
在测试阶段,从每个图中提取2000个可选区域(不考虑目标类别),缩放到固定大小之后,送入CNN网络,网络对每个区域提取出定长的特征,用SVM分类器对每个区域做预测,然后对每个独立的类别应用贪婪的非最大抑制(MNS:如遇重叠,则拒绝分数较低且与高分区域重叠IoU大于阈值的区域)。
在训练阶段,先使用分类数据集训练CNN模型(预训练),然后在目标检测数据集中调优,将基础CNN网络中最后一个用于识别1000个分类的全连接层替换成供21分类的层,其中包括20种类别和背景。对于所有可选区域,如果它与真实标注框ground-truth重叠(IoU)超过0.5则认为正例,否则认为负例,对每个窗口跨类别采32个正例,96个背景负例,最小batch为128。将变形后的区域输入CNN网络,继续调优CNN网络参数,学习率设为0.001是预训练模型的十分之一,这样即能调优,又不破坏原始参数。
训练时包含一些技巧,如:与ground-truth部分重叠的区域较难处理,通过设定重叠比例阈值方法解决此问题,文中通过网格搜索将IoU设定为0.3。由于数据量占内存太大,使用“hard negative难负例”训练,使得收敛速度更快。
模型效果
在不同的备选区域中可以共享由底层CNN提取出的特征,代入SVM分类器的特征维度相对之前算法也较少,即使类别很多,计算量也不会太大。下图展示了在VOC 2010数据集上的测试效果,相对于其它模型,它复杂度更低,速度更快,效果更好。
下图显示了第五层池化(CNN的最后一层,大小为6x6x256,分别为宽、高、通道数)的6通道,每通道前16个激活值最大的图片,可以看到CNN模型可以提取到如第一行中的人,第二行中点的图案,第三行中红色物体,第四行的字,第五行中三角的房顶,第六行中反射的概念。这些抽取出的特征在后续的全连接层中被组合成更复杂的表征。
消融研究(Ablation studies)
下图展示了消融研究的实验结果:
前三行为只使用预测训练模型,未精调的结果,可以看到,使用第七个全连接层的输出不如使用第六个全连接层的输出。全连接层存储了模型绝大部分参数,如果去掉后两个全连接层,参数只剩下6%,而模型效果相差无几。大部分提取特征都在卷积部分实现(自此之后,提取特征时,开发者更重视最后一个卷积层的输出,而非预训练模型的全连接层)。
第四到六行展示了模型精调后的结果,第六层和第七层学到了领域相关的知识(非线性分类方法)。
第七行是精调目标框后的效果,除了对目标区域的判别,模型还使用了回归方法精调目标所在区域的边框,文中含有BB(Bounding-box)的说明均指精调后的效果,可以看到,精调后mAP有3到4个百分比的提升。
第八到十行,对比了几个基于DPM(可变型部件模型)的效果,可见,基于R-CNN的所有模型效果都优于基本DPM的早期模型。
作者还展示了一种对错误分类的分析方法,如图是对假阳性结果的分析:其中Loc代表找到正确分类,但与ground-true重叠在0.1-0.5之间;Sim表示识别到近似类别,Oth表示识别到其它类别,BG表示误将背景当作某一类别。
ILSVRC2013数据集
除了PASCAL VOC数据集,作者还在ILSVRC2013数据集中做了测试,ILSVRC2013相对来说更加复杂,此处也展示了一些R-CNN在复杂场景中的处理技巧。
ILSVRC2013包含训练集 395,918,验证集 20,121,测试集40,152,验证集和测试集完全标注且同分布,而训练集相对比较复杂,它并未完全标注,训练和验证集的统计特征也不一致。使得无法使用难负例训练R-CNN模型。文中使用验证集和训练集中的一些正例训练模型,将验证集分成v1和v2,分别用于训练和验证。由于很多类别只包括少量实例,因此切分方法也很重要,文中提到了聚类、随机局部搜索等方法。
此外,ILSVRC2013图片大小差异也很大,处理前先将其缩放到500像素,这使它的召回率明显低于PASCAL VOC数据集,由此可见,需要根据图像的大小调整策略,还有更大的优化空间。
训练时,使用部分验证集数据v1和从训练集中抽取的每个类别的N个正例,记作val1+trainN,训练分为三步:精调CNN,训练SVM分类器,回归调整矩形框。难负例从验证集部分随机选取,下图展示了不同训练集上的结果。
可以看到在验证集v2的结果和测试集结果类似。
语义分割
目标检测是语义分割的基础。文中将R-CNN应用于PASCAL VOC语义分割任务上,分别使用了三种策略,先将图片缩放成227x277大小,第一种策略full忽略形状信息,对变换后整体矩形区域提取特征;第二种策略fg是将背景填充成平均值(归一化后变为0),从而只对前景提取特征;第三种策略结合上述两种特征,结果如下:
O2P是当前主流的语义分割系统,从结果可以看到第三种策略效果超过了O2P,使用第六层的效果好于使用第七层,策略二好过策略一,另外值得注意的是训练一次O2P需要十小时,而用文中方法只需要一小时。
相关术语
IoU(intersection over union)
IoU重叠度,用于测量预测区域和ground-truth区域之间的相似性,简单地讲就是交集除以并集,具体公式如下:
MNS(non-maximum suppression)
NMS非极大值抑制,用于消除冗余的bounding box,对每个独立的类应用MNS方法时,如遇重叠,则拒绝分数较低且与高分区域重叠比例大于阈值的区域。
Hard negative
Hard negative难反例,一般指收集错题集——在每轮训练中不断“记错题”,并把错题集加入到下一轮训练中,用易错的题训练模型,增加难度加速模型收敛。













网友评论