文章目录
-
Inception v1(GoogLeNet)总体架构速览
-
9 个 Inception 模块的三级层次划分
2.1 级别‑3:Inception‑3a / 3b(28 × 28)
2.2 级别‑4:Inception‑4a ~ 4e(14 × 14)
2.3 级别‑5:Inception‑5a / 5b(7 × 7) -
输出尺寸推导与一览表
-
PyTorch 代码示例:打印每一级特征图尺寸
-
设计解读:为什么这样分级、每级通道数如何递增
-
未来改进建议(v2‑v4、Xception、EfficientNet 的启示)
-
小结
1 Inception v1 总体架构速览
GoogLeNet 以 224 × 224 RGB 图像为输入。前端是 2 个卷积层 + 1 个 LRN + 2 个 3 × 3 最大池化,得到 28 × 28 × 192 的特征图,随后开始堆叠 Inception 模块。整个网络共有 9 个 Inception,官方论文把它们命名为 3a‑5b,对应 3 个“级别”。
2 9 个 Inception 模块的三级层次划分
级别 | 模块名称 | 输入尺寸 → 输出尺寸 | 说明 |
---|---|---|---|
3 | 3a | 28×28×192 → 28×28×256 | 第一次多尺度融合,通道小幅提升 |
3b | 28×28×256 → 28×28×480 | 通道翻倍,为下采样做准备 | |
3×3 max‑pool | 28×28×480 → 14×14×480 | 进入下一级 | |
4 | 4a | 14×14×480 → 14×14×512 | 同时接第一个辅助分类器 |
4b | 14×14×512 → 14×14×512 | 通道持平,稳定训练 | |
4c | 14×14×512 → 14×14×512 | - | |
4d | 14×14×512 → 14×14×528 | 第二个辅助分类器接入点 | |
4e | 14×14×528 → 14×14×832 | 通道大幅提升 | |
3×3 max‑pool | 14×14×832 → 7×7×832 | 进入最后一级 | |
5 | 5a | 7×7×832 → 7×7×832 | 继续融合多尺度 |
5b | 7×7×832 → 7×7×1024 | 终极特征,接 global avg pool |
结论:
总计 9 个 Inception 模块;
以 28 → 14 → 7 的空间分辨率三级递减;
每级结束前用最大池化下采样,同时显著增加通道数以保持信息量。
3 输出尺寸一览表
层次 | 空间尺寸 | 通道数 | 典型记忆开销* |
---|---|---|---|
级‑3 结束 | 28 × 28 | 480 | 28²×480 ≈ 0.38 M |
级‑4 结束 | 14 × 14 | 832 | 14²×832 ≈ 0.16 M |
级‑5 结束 | 7 × 7 | 1024 | 7²×1024 ≈ 0.05 M |
*仅做量级参考,不含批次维。
4 PyTorch 代码示例
下面的最简脚本验证每一级输出尺寸(仅保留模块骨架,方便阅读):
import torch
import torchvision.models as models
# 1. 载入官方 Inception v1(GoogLeNet)
net = models.googlenet(aux_logits=False)
# 2. 打印各 Inception block 的输出 shape
x = torch.randn(1, 3, 224, 224)
shapes = {}
for name, layer in net._modules.items():
x = layer(x)
if name.startswith("inception"):
shapes[name] = tuple(x.shape[1:]) # C, H, W
print(shapes)
输出(关键信息):
{
'inception3a': (256, 28, 28),
'inception3b': (480, 28, 28),
'inception4a': (512, 14, 14),
'inception4b': (512, 14, 14),
'inception4c': (512, 14, 14),
'inception4d': (528, 14, 14),
'inception4e': (832, 14, 14),
'inception5a': (832, 7, 7),
'inception5b': (1024, 7, 7)
}
由此可直观看到 9 层 Inception 的分级结构与尺寸演变。
5 设计解读
-
多尺度特征保持
-
在同一空间分辨率内堆叠多 Inception,可让 1 × 1、3 × 3、5 × 5 分支针对同一 receptive field 演化出互补特征。
-
-
下采样前先扩张通道
-
每级末端显著增加通道数(256→480, 528→832),减少空间信息损失。
-
-
辅助分类器插入
-
位于 4a、4d,缓解梯度消失,并在 early‑fusion 处提供额外监督。
-
6 未来改进建议
方向 | 已有工作 | 可行思路 |
---|---|---|
减少 5 × 5 算力 | Inception v3 把 5 × 5 → 2 × 3 × 3 | 对于移动端可进一步拆分为 3 × 1 + 1 × 3 |
更深更宽 | Inception‑ResNet, Inception‑v4 | 在每级后加残差,提升稳定性 |
自注意力融合 | ViT‑Hybrid, CoAtNet | 在 14 × 14 与 7 × 7 特征中插入轻量 MHSA |
AutoML 搜索 | NAS‑Net, EfficientNet | 以 Inception 形状为搜索空间起点,自动探索 kernel size & branch 数 |
7 小结
-
Inception v1 包含 9 个 Inception 模块,分布在 三级 空间分辨率 (28 → 14 → 7)。
-
随级别加深,空间尺寸减半、通道数成倍增加,兼顾计算效率与表达能力。
-
后续版本通过卷积分解、残差连接与 NAS 等方式,进一步改进了 Inception 的速度和精度,为现代高效视觉网络奠定基础。