论文地址:
1 贡献
1 解决CNN的定位问题;2 在训练数据稀少的情况下,提出了一个非常有效的训练大型卷积神经网络的方法,即在辅助数据集(ILSVRC)上进行有监督预训练,再在小数据集上针对特定问题进行调优。
2 R-CNN的提出
1 基本思路:在候选区域使用自下而上的大容量卷积神经网络,用于定位和分割;
当带标签的训练数据不足时,先针对辅助任务进行有监督训练,然后对特定区域进行调优,就可以显著的提升性能。
2 实现方案:给定一个输入图片,从图片中提取2000个独立类别的候选区域;使用CNN在每个候选区域提取固定长度的特征向量;用支持向量机对每个区域进行分类。
3 模型设计
特征提取:使用AlexNet网络对每个候选区域提取了4096个特征向量。为了计算候选区域的特征,不管候选区域的大小或长宽比如何,我们都会将它周围的所有像素弯曲成所需的大小(227×227)。在弯曲之前,我们扩展了紧边界框,这样在变形大小处,原始框周围正好有p个变形的图像上下文像素(我们使用p = 16)。AlexNet网络结构图如下:
第一层使用96个11×11×3的卷积核对图像进行滤波,步长为四。
卷积:(227-11)/4+1=55个像素, 卷积核个数为96,故555596个像素层。
池化:最大值池化核3×3,步长为2,则池化后的图像尺寸为 (55-3)/2+1=27,即27×27×96。
第二层使用第一层的输出(经过局部归一化和池化处理过)作为输入,256个5×5×48的卷积核对输入进行滤波。
卷积:为了保持图像输入输出一致,故padding=2,(27-5+22)/1+1=27,由于有256个卷积核,单层为27×27×128像素层。
池化:池化后的图像尺寸为 (27-3)/2+1=13,即13×13×128。
第三、四、五卷积层互相连接,中间没有池化层和归一层。
第三层有384个3×3×256的卷积核,(13-3+12)/1+1=13个像素,单层13×13×192像素。
第四层有384个3×3×192的卷积核,(13-3+12)/1+1=13个像素,单层13×13×192像素。
第五层有256个3×3×256的卷积核,(13-3+12)/1+1=13个像素,单层13×13×128像素。
重叠池化层:(13-3)/2+1=6,即6×6×256像素层。
每个全连接层有4096个神经元
第六层输入数据的尺寸是66256,采用66256尺寸的滤波器对第六层的输入数据进行卷积运算;每个66256尺寸的滤波器对第六层的输入数据进行卷积运算生成一个运算结果,通过一个神经元输出这个运算结果;共有4096个66256尺寸的滤波器对输入数据进行卷积,通过4096个神经元的输出运算结果;然后通过ReLU激活函数以及dropout运算输出4096个本层的输出结果值。
3.1 测试时间检测
在测试阶段,在测试图像上用选择性搜索抽取2000个候选区域(所有的实验都是fast 模型),我们对每个候选区域进行变换,并通过CNN进行前向传播计算特征。对每个类,使用针对该类训练的SVM(支持向量机)进行打分,对给定图像中所有得分区域,我们应用一个贪婪的非最大抑制(对每个类独立地),如果一个区域有一个相交-并集(IoU)与一个高于学习阈值的得分较高的选定区域重叠,则该区域拒绝该区域。
3.2 运行时分析
第一,在CNN中所有类别参数共享;第二,与其他常用方法相比,通过CNN计算的特征向量是低维的。参数共享的结果是,计算候选区域和特征的时间都被平均在所有类上。由于一个图像中的点都被批量化为一个矩阵-矩阵乘积,故R-CNN可以扩展到数千个类而无需使用近似技术。
4 训练
4.1 监督预训练
在一个大的辅助训练集上仅使用图像标签进行预训练,预训练使用开源的CNN,R-CNN的表现几乎与Krizhevsky等人的[25]不相上下,在ILSVRC2012分类验证集上获得了最高1的错误率,高出2.2个百分点。这种差异是由于在训练过程中简化了。
4.2 特定区域微调
为了使CNN适用新的任务(检测)和新的领域(卷曲区域窗口),仅在候选区域使用随机梯度下降法(SGD)训练CNN参数。