Rich feature hierarchies for accurate object detection and semantic segmentation论文细读

因为研究方向是目标检测,所以最近开始读文献了,因为自己知识浅薄,如有不足请见谅,欢迎互相交流。

论文算法特点的简单介绍:

1.使用了大容量CNN自上而下的提取候选区域以便进行目标检测和分割。
2.在标记数据较为匮乏时,使用监督学习在辅助数据集上进行预训练,然后在针对特定区域进行微调,大幅度提高了性能表现。

RCNN的步骤

在这里插入图片描述

1.首先使用Selective Search方法生成2000个region proposals(候选区域);
2.使用CNN对每一个区域生成固定长度的特征向量(因为CNN 需要一个固定尺寸的输入,所以把所有尺寸的所有候选区域统一warp成CNN的标准输入尺寸);
3.使用类别特定的线性SVM对每个区域进行分类(详见测试时期的检测);
4.使用bounding-box regression(边界框回归)来减少定位错误,进行修正。

作者聚焦了两个问题:

1.如何使用深度学习网络来定位目标;
2.如何使用少量的标记数据(annotated detection data)来训练一个大容量模型。

目标检测

目标检测的一种方法是把定位问题转化为回归问题,但是这种方法的表现不够好;
另一种方法是建立一个滑动窗口模型,CNN早就使用滑动窗口来约束目标类别,尤其是在人脸识别和行人检测领域。为了保持高空间分辨率,CNN通常只使用两个卷积层和池化层,然而在作者的网络中有5层卷积,致使网络拥有非常大的接收域(195×195)和步长(32×32),使得在滑动窗口中精确定位非常困难
为了解决CNN的定位问题,作者使用了识别区域范式(recognition using regions paradigm),这种paradigm早已在目标检测和语义分割领域成功应用。

生成候选区域

在测试阶段,在输入图像上使用Selective Search生成2000个类别独立的候选区域,再使用CNN对每一个区域生成固定长度的特征向量,然后使用类别特定的线性SVM对每个区域进行分类。使用仿射图像变换对每一个区域对应计算一个固定尺寸的CNN的输入,无论这些区域的尺寸是怎么样的

为解决含标记样本数量少的问题,在附加数据集上进行监督学习并在小数据集上进行微调后,再使用非监督学习进行预训练——在附加数据集上进行预训练,然后再小数据集上对特定区域进行微调,这是在缺少标记数据的情况下训练大容量CNN的最有效的方法(实验表明,使用微调方法在mAP上的检测准确率提高了8%)

方法的高效性——特定类的计算只使用小的矩阵向量乘积计算和贪婪的非极大值抑制,计算所需的所有属性、参数都由所有类别的共享,所以这种方法比之前使用区域特征的尺寸要低两个数量级。

作者的方法主要问题出现在定位误差,为了解决定位误差,使用边界框回归(bounding-box regression)的方法减少定位误差

作者提出的目标检测系统由三个模块组成:第一个模块生成大量的候选区域;第二个模块通过CNN从每一个区域提取固定长度的特征向量;第三个模块使用线性SVM进行分类

特征提取

使用AlexNet从每个区域提取一个4096维的特征向量,特征向量的提取是通过使用5层的卷积层和两个全连接层组成CNN前向传播得到的均值,减去227×227的RGB图像计算得到的。
为了计算特征,需要先把图像转化为可以完美兼容CNN的数据(即转化为CNN要求的固定227×227固定大小的输入),在转化前,先对所有的图像进行膨胀处理(dilate),在bounding-box周围增加P个像素(即人工添加边框),一般P=16;在转化的过程中,忽视候选区域的尺寸和形状,直接变换到固定的大小。

测试时期的检测

对每一类,使用针对每一类对应训练的SVM对每一个提取的特征向量进行得分,对整幅图像所有的全区域进行得分,因为有2000个候选区域,所以有很多区域是重叠的,然后以得分最高的区域为基础,使用贪婪的非极大值抑制,根据某一阈值,去除那些重复率(IoU——intersection of union)高的区域。

运行时期的分析

有两个方面导致检测具有高效性——一是所有的CNN参数是所有类别共享使用的;二是与其他常见的方法进行对比,特征向量计算所需的CNN的维度较低。
只有特殊类的计算需要进行对特征和SVM的权重点乘和非极大值抑制,图像中所有的点乘算法都是单一的矩阵乘法,特征矩阵一般是200×4096的,SVM的权重一般是4096×N(N是类别数)

训练

在大型附加数据库进行监督的预训练,提取权重和偏差,为了使RCNN更好的使用新的数据集,在扩充过大小后的候选区域使用SGD(随机梯度下降)来继续训练CNN的参数(微调)。
使用随机的(N+1)的分类数来替代原本ImageNet的1000个类别(N是目标数,1是背景)
对所有与ground-truth区域的IoU>=0.5的区域作为正样本(positive),其余的作为负样本(negative),然后在学习率(learning-rate)为0.001(是预训练时rate的1/10)时开始使用SGD,这样可以在不改变初始化条件的情况下进行微调以获得更好的效果。

目标分类的主要问题是如何把一个含有部分目标的样本进行划分(是划分到positive还是negative?),作者通过在0.0-0.5反复测试,得到当IoU的阈值是0.3时的效果较好。

一旦特征被提取、训练标记被使用,我们需要优化每一个类别对应的线性SVM。但是因为训练数据过大导致无法完全放在内存中,作者提出了困难负样本挖掘(hard negative mining method)方法——就是把错误分类的样本先归于负样本,再进行训练,反复如此,直至达到停止条件(如直到分类器的性能不再提升为止)。

可视化学习特征

作者提出了一个简单的无参数的方法,可以直接显示网络是如何学习的。
具体是在网络中分离出一个特殊的单元,即特征,并把它作为目标检测器,然后在一个大的候选区域数据集来计算该特征的activation值,再把所有候选区域根据activation值由高到低进行排序,执行非极大值抑制,最后显示出得分最高的几个区域。这种方法使得被选择的区域通过准确显示它触发的哪些输出来表明自己的“身份”,由此也可以看出学习的过程。

作者可视化了来自pool5层的单元,这些单元是网络的第五层也就是最后一个卷积层的最大池化输出。忽略边界点的影响,每一个pool5层单元在227227的原始输入中,有195195的接收域。位于中心点的pool5层单元有近乎全局的视野,而位于边缘的单元拥有的视野就比较小,对结果的帮助也不大。

消融研究——通过删除部分功能来研究其影响和作用

在不使用微调(fine-tuning)时,通过逐层分析,发现FC7得到的特征准确率不如FC6的准确率高。更令人惊讶的是在移除FC6和FC7后,pool5层仅使用6%的CNN参数就可以得到相当不错的效果。这证明CNN的效果大多来自于卷积层,而不是全连接层。

在使用微调时,发现在经过微调之后,FC6和FC7的作用大幅提高,表明pool5层从ImageNet学习了泛化的能力,且性能提升是通过在它们之上学习特殊域的非线性分类器获得的

网络算法——不同的算法选择对RCNN的检测结果有着重大的影响,使用O-Net和RCNN 比 T-Net和RCNN 准确率从58.5%提升到了66.0%, 但是O-Net的前向传递比T-Net多花了7倍的时间

分析错误检测

作者使用了Hoiem的错误检测工具来揭示方法的错误方式,以便了解如何微调它们,并且可以与DPM的错误类型的对比结果。

边界框回归

使用bounding-box regression边界框回归来减少定位错误
训练一个线性的回归模型,可以根据在选择性搜索区域的pool5的特征预测一个新的检测窗口。

语义分割

O2P使用CPMC对每幅图像生成150个候选区域。然后预测每一个候选区域的质量,对每一个类,使用SVR支持向量回归。
这种方法高性能主要是因为CPMC(constrained parametric min-cuts约束参数最小分割)生成区域的高质量和多种特征类型(丰富的SIFT和LBP的变形体)的二阶合并。

CNN特征的分割

3个阶段——第一个阶段(full阶段)使用CPMC生成候选区域,忽视了区域的形状,并且在计算CNN特征时直接把窗口扩展为需要检测的大小(227×227),然而这些特征忽视了非矩形的区域,两个只有一点重复的区域或许会有非常相似的边界框;
第二个阶段(fg阶段),在计算CNN特征时只使用前景,在使用输入的均值替代背景区域并进行均值减法后,背景区域都是0
第三个阶段简单的串联了full和fg特征(即将前景和背景进行简单的拼接)

总结

本文提出一种简单且适应性强的目标检测算法,比当前PASCAL VOC 2012最好的结果实现了30%的提升,实现这种进步来源于两点:一是为了定位和分离目标对象,使用大容量的卷积神经网络自上而下的生成候选区域二是创造性的提出了当含标记的训练数据较为匮乏时,如何训练大型CNN。
本文展示了一种高效预训练网络模型——使用监督学习解决包含丰富数据的附加任务,然后在含标记数据匮乏时,通过微调神经网络进行学习。

猜你喜欢

转载自blog.csdn.net/weixin_41963310/article/details/108808086