0-Going Deeper with Convolutions
Going Deeper with Convolutions
GoogLeNet CVPR2015
背景
在大规模图像识别挑战赛2014上,仅用AlexNet $\frac{1}{12}$ 的参数,就有比其更好的准确率。提出了名为“Inception”的网络架构(也称Inception v1),提高网络内部计算资源的利用率,增加网络深度和广度并保持计算预算不变。同时考虑到了移动与嵌入式设备的应用(减少算力和内存的消耗),增强实际工程的应用。
相关工作中作者提到了CNN的传统结构$(卷积+Normalization+max pooling)× n + 全连接层 × m$ 用于进行定位和目标检测,但是容易出现过拟合的现象,所以作者使用了稀疏连接(将全连接层换为稀疏的全连接层甚至是卷积层。稀疏连接可以要求更多的复杂计算,可能导致计算效率十分底下,所以需要一种方法,即能保持网络的稀疏性又能利用密集矩阵的高计算性能,所以作者提出来Inception结构。
实验步骤
1.Inception模块的设计
Inception模块的核心思想是通过并行化不同大小的卷积核和池化层来捕捉输入特征的多尺度信息。具体来说,每个Inception模块包括以下几种操作:
- 1x1卷积:用于降维和增加网络的非线性能力。
- 3x3卷积:捕捉中等范围的空间特征。
- 5x5卷积:捕捉更大范围的空间特征。
- 3x3最大池化:提供某种形式的下采样,同时保持局部特征不变。
直接应用上述不同大小的卷积核和池化操作会导致计算量急剧增加。为了应对这一挑战,Inception模块通过:
- 1x1卷积用于降维:在应用3x3和5x5卷积之前,首先使用1x1卷积对输入进行降维。这一步骤显著减少了输入通道数,从而降低了后续卷积操作的计算量。这种做法不仅降低了计算复杂度,还通过增加非线性变换提升了模型的表达能力。
- 并行计算与合并:Inception模块通过并行执行不同的卷积和池化操作,然后将这些操作的输出在通道维度上合并。这种并行设计允许网络在相同层次上捕捉到不同尺度的特征,而不会显著增加计算复杂度。
用来实现高效计算。
2.GoogleNet的网络结构
Inception架构师GoogleNet中的基本构建模块,由多个Inception模块堆叠而成,每个模块通过执行大小不同的卷积和池化操作来捕捉输入特征的多尺度信息。Inception模块的设计思想是通过1x1卷积进行降维,减少计算复杂度,同时增加网络的非线性和表达能力。通过这种方式,GoogleNet在保持计算效率的同时,显著增加了网络深度。GoogleNet在其结构中使用了22层(如果计算参数层则更深),其中包含了多个Inception模块。每个Inception模块都独立执行一组并行的卷积和池化操作,并将结果在通道维度上合并。
- 初始层:GoogleNet的初始层由几个标准的卷积层和池化层组成,用于初步提取输入图像的低级特征。
- Inception模块堆叠:在初始层之后,GoogleNet由多个Inception模块堆叠组成。这些模块并行执行不同大小的卷积和池化操作,捕捉不同尺度的特征,然后将结果合并。
- 全局平均池化:在最后的几层,GoogleNet使用全局平均池化层取代了传统的全连接层,这样不仅减少了参数数量,还降低了过拟合的风险。
- 分类层:最后,GoogleNet使用一个Softmax分类器输出预测结果。
3.模型训练
训练过程中对于数据集(ILSVRC2014)的增强方法也是这篇论文贡献的IDEA。
- 独立训练了7个版本的相同的GoogLeNet模型,并用它们进行了整体预测。这些模型的训练具有相同的初始化和学习率策略,仅在采样方法和随机输入图像顺序方面不同。
- 在测试中,采用更激进的裁剪方法。
具体来说,将图像归一化为四个尺度,其中较短维度(高度或宽度)分别为256,288,320和352,取这些归一化的图像的左,中,右方块(在肖像图片中,采用顶部,中心和底部方块)。对于每个方块,将采用4个角以及中心224×224裁剪图像以及方块尺寸归一化为224×224,以及它们的镜像版本。这导致每张图像会得到4×3×6×2 = 144的裁剪图像。
在实际应用中,这种激进的裁剪可能是不必要的,因为存在合理数量的裁剪图像后,更多裁剪图像的好处会变得很微小。 - softmax概率在多个裁剪图像上和所有单个分类器上进行平均,然后获得最终预测。
分析了验证数据的替代方法,例如裁剪图像上的最大池化和分类器的平均,但是它们比简单平均的性能略逊。
实验结果
ImageNet大规模视觉识别挑战赛(ILSVRC 2014)GoogleNet(Inception V1)在比赛中取得了最佳成绩,展示了其卓越的性能和高效的计算能力。GoogleNet在当年的分类和检测任务都取得了很好的结果。
总结
作者通过引入Inception架构,在深度和计算效率之间找到了一个平衡点,显著提升了卷积神经网络的性能。其创新性的设计和方法对深度学习领域产生了重要影响。