【第五章:计算机视觉-项目实战之图像分类实战】1.经典卷积神经网络模型Backbone与图像-(5)经典多分支网络Inception的架构讲解
摘要:Inception网络是Google团队2014年提出的经典多分支卷积神经网络。其核心Inception模块通过并行使用1×1、3×3、5×5卷积和池化层,实现多尺度特征提取。关键创新包括:1)利用1×1卷积降维减少计算量;2)多分支特征拼接;3)22层深度但参数量仅500万。该网络在ImageNet竞赛中取得6.67%的Top-5错误率,开创了高效CNN设计范式,后续发展出Inceptio
第五章:计算机视觉(Computer Vision)-项目实战之图像分类
第一部分:经典卷积神经网络模型 Backbone 与图像
第五节:经典多分支网络 Inception 的架构讲解
1. 背景与提出动机
在 LeNet、AlexNet、VGGNet 和 ResNet 的发展中,网络深度不断加深,但 卷积核尺寸选择 成为了瓶颈:
-
大卷积核(如 5×5、7×7)具有更大的感受野,但参数多、计算量大
-
小卷积核(如 1×1、3×3)计算量小,但感受野有限
那么,是否可以 同时使用不同大小的卷积核,让网络自己去学习合适的特征?
Google 团队在 2014 年提出了 GoogLeNet(Inception v1),其核心思想就是 多分支结构(Inception Module)。通过在同一层同时使用 1×1、3×3、5×5 卷积 以及 池化层,再将结果拼接起来,从而高效提取多尺度特征。
GoogLeNet 在 2014 年 ImageNet 竞赛中取得冠军,Top-5 错误率仅为 6.67%,震惊业界。
2. Inception Module 的核心思想
Inception 模块包含 多个并行分支:
-
1×1 卷积:用于降维,减少计算量,并提取局部特征
-
3×3 卷积:提取中等感受野特征
-
5×5 卷积:提取大感受野特征
-
3×3 最大池化:增强模型的鲁棒性
最终将各个分支的结果在 通道维度上拼接(Concat),形成输出。
3. Inception 模块结构示意
Input
│
┌──────────┬───────────────────┬───────────────────┬───────────────────┐
│ 1×1 Conv │ 1×1 Conv+3×3 Conv │ 1×1 Conv+5×5 Conv │ 3×3 Pool+1×1 Conv │
└──────────┴───────────────────┴───────────────────┴───────────────────┘
│
Concatenate
│
Output
说明:
-
在 3×3、5×5 卷积之前加上 1×1 卷积层,用来 减少输入通道数,降低计算成本(即网络的“瓶颈层”)。
-
池化后也通过 1×1 卷积调整通道数,避免通道数不平衡。
4. GoogLeNet(Inception v1)的整体架构
-
使用了 9 个 Inception 模块,层数达到 22 层,但参数量却远小于 VGGNet
-
在每个 Inception 模块中采用多分支并行卷积
-
在训练过程中加入 辅助分类器(Auxiliary Classifier),缓解梯度消失问题
5. Inception 系列的演化
-
Inception v1(GoogLeNet, 2014):提出多分支结构,22 层深度
-
Inception v2/v3(2015):引入因式分解卷积(如 5×5 → 两个 3×3),降低计算量,并使用 Batch Normalization
-
Inception v4 & Inception-ResNet(2016):结合 ResNet 的残差思想,进一步提高训练稳定性和准确率
6. PyTorch 实现示例
import torch
import torch.nn as nn
# Inception 模块
class Inception(nn.Module):
def __init__(self, in_channels, out1, red3, out3, red5, out5, pool_proj):
super(Inception, self).__init__()
# 分支1: 1×1 卷积
self.branch1 = nn.Conv2d(in_channels, out1, kernel_size=1)
# 分支2: 1×1 卷积 + 3×3 卷积
self.branch2 = nn.Sequential(
nn.Conv2d(in_channels, red3, kernel_size=1),
nn.ReLU(inplace=True),
nn.Conv2d(red3, out3, kernel_size=3, padding=1)
)
# 分支3: 1×1 卷积 + 5×5 卷积
self.branch3 = nn.Sequential(
nn.Conv2d(in_channels, red5, kernel_size=1),
nn.ReLU(inplace=True),
nn.Conv2d(red5, out5, kernel_size=5, padding=2)
)
# 分支4: 3×3 池化 + 1×1 卷积
self.branch4 = nn.Sequential(
nn.MaxPool2d(kernel_size=3, stride=1, padding=1),
nn.Conv2d(in_channels, pool_proj, kernel_size=1)
)
def forward(self, x):
out1 = self.branch1(x)
out2 = self.branch2(x)
out3 = self.branch3(x)
out4 = self.branch4(x)
# 在通道维度拼接
return torch.cat([out1, out2, out3, out4], dim=1)
# 测试 Inception 模块
x = torch.randn(1, 192, 28, 28)
model = Inception(192, 64, 96, 128, 16, 32, 32)
y = model(x)
print("输出维度:", y.shape)
输出结果:
输出维度: torch.Size([1, 256, 28, 28])
说明:经过 Inception 模块后,通道数增加(64+128+32+32=256),同时保持空间分辨率不变。
7. Inception 的优势
-
多尺度特征提取:不同大小卷积核同时学习特征
-
计算高效:利用 1×1 卷积降维,减少参数量
-
深度更深但更轻量:GoogLeNet 参数量约 500 万,而 VGGNet 高达 1.38 亿
-
应用广泛:被广泛应用于图像分类、目标检测、视频理解等任务
8. 小结
-
Inception 提出了多分支卷积结构,使网络能同时关注不同尺度的特征
-
通过 1×1 卷积降低计算量,是高效 CNN 的典范
-
Inception 系列与 ResNet 一起,成为深度学习视觉任务中的两大经典基石

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)