Inception-v1(GoogLeNet)通过多尺度并行卷积结构,在参数量仅为 AlexNet 的 1/12 下实现 6.67% Top-5 错误率。
Inception 模块
四个并行分支捕获多尺度特征:
| 分支 | 结构 |
|---|---|
| 1 | 1×1 卷积 |
| 2 | 1×1 卷积 → 3×3 卷积 |
| 3 | 1×1 卷积 → 5×5 卷积 |
| 4 | 3×3 池化 → 1×1 卷积 |
1×1 卷积作用
- 通道降维:减少计算量
- 非线性增强:增加模型表达能力
- 跨通道交互:实现通道信息整合
PyTorch 实现
class InceptionV1Module(nn.Module):
def __init__(self, in_ch, ch1x1, ch3x3red, ch3x3, ch5x5red, ch5x5, pool_proj):
super().__init__()
self.branch1 = nn.Conv2d(in_ch, ch1x1, 1)
self.branch2 = nn.Sequential(
nn.Conv2d(in_ch, ch3x3red, 1),
nn.Conv2d(ch3x3red, ch3x3, 3, padding=1)
)
self.branch3 = nn.Sequential(
nn.Conv2d(in_ch, ch5x5red, 1),
nn.Conv2d(ch5x5red, ch5x5, 5, padding=2)
)
self.branch4 = nn.Sequential(
nn.MaxPool2d(3, stride=1, padding=1),
nn.Conv2d(in_ch, pool_proj, 1)
)
def forward(self, x):
return torch.cat([
self.branch1(x), self.branch2(x),
self.branch3(x), self.branch4(x)
], dim=1)网络架构
- 共 22 层,包含 9 个 Inception 模块
- 全局平均池化替代全连接层
- 辅助分类器缓解梯度消失
性能对比
| 模型 | Top-5 错误率 | 参数量 | FLOPs |
|---|---|---|---|
| AlexNet | 15.3% | 60M | 720M |
| VGG-16 | 7.3% | 138M | 15.5B |
| GoogLeNet | 6.67% | 6.8M | 1.5B |
历史贡献
- 证明宽度优于深度的设计理念
- 开创模块化网络设计范式
- 1×1 卷积成为现代 CNN 标配组件