1. 动机
提高深度网络的性能可以通过加深网络的深度和宽度,但是缺点是容易过拟合且计算量大。所以应该采用稀疏连接结构代替全连接结构,但是现有设备对稀疏计算并不高效,所以依然只采用稠密计算。Inception是一种逼近稀疏连接的结构。
2. 结构细节
Inception主要思想是在卷积网络中逼近最优局部稀疏结构,一旦找到就可以在空间上重复使用。在逐层构建中,分析上一层的相关性统计并将高相关性的单元聚集到一起。这些聚集的单元构成了下一层并和上一层单元连接。假设每个单元只关联输入图像的一个局部区域,那么就可以让每个聚集集合都关联这个局部区域,在下一层使用1 × 1卷积来利用这个局部区域。然而,我们同样期望会有少量的关联更大区域的聚集集合,它们会使用较大的patch,区域越大patch的数量就会减少。为了将patch对齐,Inception同时采用了1 × 1,3 × 3,5 × 5的卷积滤波路径。所有滤波的输出结果串联起来形成一个输出并输入到下一层。同时增加一个pool路径会有好的效果。
这些Inception堆叠在一起后,它们的输出相关性统计就会变化:随着层数的增加,特征越来越抽象,关联的空间区域越来越大,因而高层中3
×
3和5
×
5的卷积滤波比例应该增加。
由于各个路径的输出结果串联,越到高层输出规模越大,这导致计算复杂度高效率低。从而引入降维映射结构来降低部分输出规模。低维嵌入压缩能够包含图像较大patch的信息,但是经过压缩后的信息不好去建模。我们需要保持大多数地方稀疏表示,而在全体聚合的时候压缩信号。也就是可以在计算代价高的3
×
3和5
×
5卷积之前采用1
×
1降维。除了降维还有利用它的relu激活。
这样的结构能够在每层增加单元而并不引起计算复杂度的剧烈增加。在卷积之前首先降维可以屏蔽大量的输入进入下一层。另外,视觉信息以多种尺度处理并聚合在一起,从而下一层可以在不同尺度同时提取信息。
这样的计算资源使用可以同时增加网络的宽度和深度,Inception也可以使用效果差一些但计算更简单的结构,这样控制计算平衡的结构比一般的速度更快。
3. GoogLeNet
Inception的宽度和深度可以增大,性能可以较差,但是聚合起来可以略微改善结果,但是这些具体的结构参数的影响是次要的。所有的激活都使用relu。输入是3 × 224 × 224去均值的RGB图像,“#3×3 reduce” 和 “#5×5 reduce”表示在3 × 3和5 × 5卷积之前1 × 1降维后的维度。最后采用了全局平均池化和dropout,并在其后另外使用了一般的线性层MLP层,可以方便调整网络应用于其他的标签集。
深度网络梯度反向传播的能力值得考虑。浅层网络观察得到,在网络的中间层产生的特征具有较强的识别能力。通过在这些中间层增加辅助的分类器,我们增强了这些分类器低层的识别能力,增强了反向传播的梯度信号,也提供了额外的正则项。这些分类器置于Inception(4a)(4d)的输出部分,训练时它们的损失加权在总体的损失之上(辅助分类器的权重是0.3),预测时则去除这些网络。(在引入了batch normalization后,辅助分类器可以去除)
4. 训练方法
CPU实现,随机梯度下降0.9动量项,学习率每8epochs降低4%,采样图片的多种尺度8%~100%,纵横比随机选3/4和4/3。增加图片的光学形变可以抑制过拟合。使用随机插值算法来缩放图片大小。
1. 独立训练7个相同的模型,聚合预测结果。模型初始化都相同,只改变图片采样方法和输入的顺序;
2. 测试的时候将图片缩放成4种尺度,短边分别为256,288,320,352,分别取左、中、右正方形区域,每个正方形区域取4个角和中间的224
×
224切片以及正方形区域缩小到224
×
224的大小,还包括所有镜像对称后的图片。最后结果是每张图片具有切片数为
4×3×6×2=144
。但是当切片具有一定数量后再增加影响不大。
3. 最终的预测是取所有的切片的简单平均,再取所有分类器的简单平均。
实现方法参考GoogLeNet in Keras