并行连接的网络 (GoogLeNet)
本文基于d2l项目内容整理,介绍在ImageNet挑战赛中脱颖而出的GoogLeNet网络,包括其核心的Inception块设计和并行连接思想。
CNN架构发展历程:
从 LeNet 首次将卷积的思想引入计算机视觉,再到后来的 AlexNet、VGG 和 NiN 等,这些网络除了考虑如何变得更深而复杂,也在不断地探索哪种窗口大小(卷积核大小)更适合 ImageNet 的数据。一定程度受美国华纳兄弟于 2010 年发行的科幻动作惊悚片《盗梦空间 (Inception)》影响,2014 年腾空出世的 GoogLeNet 在保持类似精度的条件下,以较少的计算复杂度成为 ImageNet 图像识别挑战赛最有效的模型之一。
双重设计理念
We Need To Go Deeper - 通过更深的网络结构提高性能,借鉴 NiN 网络设计
全面启动 - 同时引入多种卷积核尺寸的并行组合 (1×1
梦中梦 - 逐层深入的多层次特征捕捉概念
受《盗梦空间 (Inception)》影响
一方面,电影《盗梦空间 (Inception)》的台词”We Need To Go Deeper”被 GoogLeNet 用于强调模型通过更深的网络结构,进一步提高性能的方式。在具体实现上,借鉴了 NiN 网络。
另一方面,电影台湾译名”全面启动”似乎更能说明 GoogLeNet 同时引入多种卷积核尺寸的并行组合(1×1、3×3 和 5×5),捕捉多层次特征。这与电影中”梦中梦”逐层深入的概念不谋而合。
实现简化说明:
随着观念和框架的进步,这里在初始版本的 GoogLeNet 上删去了不必要的、为稳定训练而设置的特性,简化了实现。
1. GoogLeNet 网络架构设计
1.1 Inception 块的核心思想
Inception 块设计理念:
Inception 块是实现并行连接的关键。为了捕捉不同尺度下的图像特征,使用 4 种不同的卷积窗口组合并行,最后在通道维度上进行连接输出。
1.2 四种并行路径设计
1×1 卷积层
- 提取通道特征并降维
- 计算效率最高的路径
1×1 卷积层 → 3×3 卷积层
- 先对通道降维,减少计算量
- 随后提取较大的空间特征
1×1 卷积层 → 5×5 卷积层
- 先对通道降维,减少计算量
- 随后提取更大的空间特征
3×3 最大池化层 → 1×1 卷积层
- 先下采样特征图,保留重要信息
- 随后调整通道数,匹配其他路径
1.3 Inception 块的 PyTorch 实现
Inception 块IncepBlock
的 PyTorch 实现如下:
1 | from typing import Tuple |
2. GoogLeNet 完整网络架构
2.1 网络整体设计
GoogLeNet 架构特点:
GoogLeNet 在进入 Inception 块之前,首先需要经过一系列层的逐步特征提取与数据维度压缩:
7×7 卷积层以较大的感受野捕获特征,并由最大池化层下采样
1×1 卷积层用于降维并进行跨通道特征融合
3×3 卷积层提取更细粒度的特征,并由最大池化层下采样
共有 9 个 Inception 块,每个 Inception 块之间用最大池化层降维
最后使用全局平均池化层和全连接层获得输出
2.2 适配 Fashion-MNIST 的设计
数据集适配说明:
为了继续在 Fashion-MNIST 数据集上测试 GoogLeNet 网络,需要将图像像素修改为 96×96 以简化计算。复用 Inception 块,GoogLeNet 网络的 PyTorch 实现如下:
1 | from typing import Tuple |
2.3 网络结构分析
使用torchinfo
库的summary
函数执行输出维度测试:
1 | from torchinfo import summary |
网络参数统计:
- 总参数量:5,977,530 个参数(约 598 万)
- 计算复杂度:276.66 MB 的乘加运算
- 内存占用:总计约 28.69 MB
- 特点:通过 Inception 块的并行设计,在保持高性能的同时控制了参数数量
3. 模型训练与评估
3.1 训练配置与实现
继续使用training_tools.py
中的工具训练评估模型:
1 | from typing import Tuple |
3.2 训练结果与分析
查看完整训练过程
1 | 第 001/30 轮,训练损失:1.0233,训练精度:64.77 ,测试损失:0.5896,测试精度:78.30 |
训练结果分析:
- 最终性能:GoogLeNet 在 Fashion-MNIST 上达到 94.52% 的训练精度和 90.21% 的测试精度
- 收敛速度:相比传统CNN,Inception并行架构加速了特征学习过程
- 泛化能力:通过多尺度特征捕捉,模型展现出良好的泛化性能
- 参数效率:598万参数实现高性能,体现了并行设计的优势
- 训练稳定性:Kaiming初始化和Xavier初始化保证了训练过程的稳定性
总结
本文深入介绍了GoogLeNet的创新架构设计:
- Inception块:通过四种并行路径同时捕捉不同尺度的特征,提高了网络的表达能力
- 并行连接:多尺度卷积核的并行组合有效解决了选择最优卷积核大小的问题
- 参数效率:1×1卷积的巧妙运用在降维的同时减少了计算复杂度
- 架构创新:受电影《盗梦空间》启发的”梦中梦”式递归设计理念
- 实用价值:在ImageNet挑战赛中以较少计算量获得优异性能,推动了深度学习发展
GoogLeNet的Inception思想为后续的深度学习架构设计提供了重要启发,特别是在多尺度特征融合和计算效率优化方面开创了新的范式。