这是一篇2015.04的论文。
本文探索了神经网络的深度在大尺寸图像爱那个识别精度上的影响。我们主要的贡献是:完整地评估了一个用 3x3 卷积滤波器增加深度的网络,结果表明,当层数达到 16-19 层的时候,精度会有一个很好的提升。这个发现也使我们团队在 ImageNet Challenge 2014 获得了定位第一名,分类第二名的主要原因。我们也证明了我们的模型在其他数据集上可以很好的泛化,并达到了 state-of-the-art 结果。我们已经开源了 2 个表现最好的卷积网络模型来方便更长远的研究。
随着卷积神经网络在计算机视觉领域变的越来越有用,研究者在AlexNet的基础上做了大量的尝试来得到更高的准确率。例如 2013 年的 ILSVRC-2013 冠军在底层卷积层采用了更小的感受视野窗口,以及更小的步长。另一种改进的思路是在训练和测试网络时使用多尺寸的图像。本文中,我们解决了另一个重要的问题——深度。为此,我们固定了结构的其他参数,可以稳定的增加卷积层来增加网络的深度,因为在所有卷积层中使用 3x3 的卷积滤波器。
结果,我们提出十分高精度的卷积网络结构,不仅在 ILSVRC 分类和定位上去的了 state-of-art 的结果,也可以应用到其他的图像识别数据集。
训练时,我们的输入是 224x224 大小的 RGB 图像, 唯一的预处理是减去训练集在 RGB 通道上的每个像素的均值,图像会经过一堆卷积层,在这些卷积层中我们使用了很小的感受视野: 3x3 的滤波器( 3x3 是可以获得 上下,左右,中心信息的最小尺寸)。在配置过程中,我们也会使用 1x1 滤波器,可以看做是输入通道(input channels)的线性转换(后面要跟非线性器)。卷积的步长都固定为 1,3x3 的卷积层 padding 是 1,空间的池化使用了 5 个最大值池化层(不是所以的卷积层后面都跟池化层的),池化单元是 2x2,步长是 3 。
Tabel 1,表中给出来分别是 11 层,13 层, 16 层,19层时各个层的参数以及结构。Tabel 2给出的是各种结构包含的参数量。
我们的结构不同于 ILSVRC-2012 和 ILSVRC-2013 年冠军的结构。我们的第一层卷积层不用很打尺寸的感受视野(2012年的是 11x11 步长为4,2013年的是 7x7 步长为2),我们使用更小的 3x3 感受视野贯穿整个网络,步长为1,可以与输入图像的每一个像素进行卷积。很容易想到,两个没有 padding 的 3x3 卷积层相当于一个 5x5 的卷积层。3个 3x3 的卷积层相当于一个 7x7 的卷积层。那么我们为什么要这么做呢? 以 7x7 为例:
首先,这样我们可以采用 3 个 ReLU 而不是一个,增加了非线性,是边界方程更分明。
其次, 可以减少参数量。设一个3层的 3x3 卷积块,输入输出都是 C 通道,这个块的参数数量就是,3x(3^2 x C^2)= 27 x C^2 个权重,而一个 7x7 的卷积层 参数就有 7x7xC^2 = 49 x C^2 个 weight.
使用 1x1 卷积核的卷积层也是一种在不影响卷积层感受视野的情况增加决策函数非线性的一种方法。( 1x1 卷积层在Network in Network也有被使用)
小尺寸的卷积核在之前也有用过(2011年),但是他们的网络没有我们的深,也没有在大的数据集上做测试,2014年 Goodfellow 等人用一个深的网络(11层)应用到街道物体识别,表明了网络结果越深,效果越好。 GoogleNet(2014),和我们的工作虽然有很大的不同,但是相似之处都是基于很深的卷积结构(22层)和很小的卷积核(除了3x3,他们还使用了,1x1 , 5x5的卷积),他们的网络拓扑结构比我们的更复杂,并且为了降低计算量,特征图谱的空间分辨率上下降的太快,我们的模型在单只网络的表现比GoogleNet更好。
训练的过程一般都是采用AlexNet的方法(除了没有从多尺寸的训练图片中裁剪,后面会解释)
,
batch size = 256 ,
momentum = 0.9 ,
weight decay(L2正则化的惩罚系数) = 0.0005,
前两层全连接层 dropout = 0.5 ,
当验证集准确率不再改善时,学习率降10倍,最后总共下降3次,总训练37万次(74 epoches),相比于AlexNet的 90 epoches 更快收敛因为(a)更深的结构和更小的卷积核更有利于正规化,(b)某些层进行了预训练。
网络权重W的初始化同样重要,可能会影响最后的表现,前面4层卷积层和后面3层全连接层用的是浅层网络的值(
预训练 Table 1 中的 A 结构得到的权值)作为初始化,然后中间的值就随机取(0均值,方差0.01的高斯分布),偏置都设为0.
Train image size: 用 S 表示图片最小的边,当网络需要输入训练图片的尺寸定为 224x224 时,原则上 S 只要不小于 224 就可以了,当 S = 224 时,裁剪可以获取图像的大部分区域,但是当 S >> 224 时,可能裁剪就会只包含物体的一部分,或者一些小的物体。所以我们考虑用 2 种方法来设定训练的尺寸 S.
1. 固定S,只用单尺寸的图形训练。 设置了 2 种尺寸,第一种是 256x256 (ImageNet2012-2014(googleNet)都一直在用的尺寸),还有一种是 384x384 大小的,为了加速训练,我们用在 256x256 尺寸上训练完的模型作为初始化,然后训练 384x384 的网络,初始学习率降为:0.001.
2. S 是在一种多尺寸的训练。我们随机从[256,512]这个范围里面取,因为物体在图片中的尺寸不一定,这个问题考虑进去还是很有用处的。为了加速训练,我们在多尺寸的模型是在,384x384 的模型上 fine-tuning 。
首先要把图片均值缩放成最短边的大小,记为Q(Q 不一定要等于 S),然后网络,去测试这些 rescale 的图片,也就是说,将全连接层首先转化成卷积层(第一个全连接层转换成 7x7 的卷积层,最后2层转化为使用 1x1 的卷积),全卷积网络用到整张没有经过裁剪的图像上,将最后一层输出的通道数改成类别数(1000)和一个取决于输入尺寸的空间分辨率的变量。最后,我们也同样把测试集水平翻转来增广,获得一个固定尺寸的包含类别分数的向量,这些映射是空间平均的,最后用原图像和水平翻转图像的softmax值取平均得到最后分数。
因为全卷积网络的应用,测试时图片就不用裁剪了,每一次裁剪会降低效率。实验证明,用一些大更大尺寸的裁剪会提高准确率。因为多尺寸的输入和 dense value 是互补的,因为更多的信息会被捕捉到。
主要是使用了 Caffe 框架,同时也做了一些修改,可以让我们在多个 GPU 上面执行训练和评估,并且可以测试多种尺寸的图像(没有经过裁剪),最后结果也可以和在一块 GPU 上训练效果一样。我们的系统配备了4块 NVIDIA Titan Black GPUs,训练一个网络要2-3周的时间。
这里我们拿出了130张图片来做训练,5万张图片做验证,10万张图片做测试(从原先训练集中分出来的),用 top-1 和 top-5 作为指标。
我们主要证明了提升神经网络深度在提升分类准确率上很有效,也很重要。