【计算机视觉18-2】语义理解-CNN架构设计_VGG_Inception_ResNet

2025博客之星年度评选已开启 10w+人浏览 1.4k人参与

CNN架构设计:VGG/Inception/ResNet与设计原则

📌 适合对象:计算机视觉初学者、深度学习入门者
⏱️ 预计阅读时间:60-70分钟
🎯 学习目标:深入理解VGGNet、GoogLeNet和ResNet的架构设计,掌握CNN架构设计的基本原则


📚 学习路线图

CNN架构设计原则
VGGNet
深度优先
GoogLeNet
宽度优先
ResNet
残差学习
现代架构设计
深度+宽度+残差

本文内容一览(快速理解)

  1. VGGNet架构(VGGNet Architecture):通过增加网络深度提升性能的设计方法
  2. GoogLeNet架构(GoogLeNet Architecture):Inception模块的多尺度特征提取设计
  3. ResNet架构(ResNet Architecture):残差连接解决深度网络训练问题
  4. 架构设计原则(Architecture Design Principles):从经典架构中总结的设计经验

一、VGGNet架构(VGGNet Architecture):深度优先的设计

这一章要建立的基础:理解VGGNet如何通过增加深度提升性能

核心问题:为什么VGGNet选择增加深度而不是宽度?小卷积核的优势是什么?


[!NOTE]
📝 关键点总结:VGGNet的核心设计思想是使用小的卷积核(3×3)和增加网络深度。多个3×3卷积核可以模拟更大的卷积核,但参数更少,非线性更多。VGGNet展示了深度的重要性,但也暴露了深度网络训练的困难。

1.1 VGGNet的设计理念(VGGNet Design Philosophy):小卷积核和深度网络

概念的本质

VGGNet(Very Deep Convolutional Networks)的设计理念是:

  1. 小卷积核:使用3×3卷积核代替5×5或7×7卷积核
  2. 增加深度:通过堆叠更多层来增加网络深度
  3. 参数效率:多个小卷积核的参数少于一个大卷积核,但非线性更多

图解说明

VGGNet设计
3×3卷积核
代替5×5/7×7
堆叠更多层
增加深度
参数效率
更少参数/更多非线性

💡 说明

  • 小卷积核优势:参数更少,但可以模拟大卷积核的效果
  • 深度优势:更深的网络可以学习更抽象的特征
  • 非线性优势:多个小卷积核有更多的非线性激活函数

类比理解

想象你在建房子。VGGNet就像:

  • 大砖块(5×5):一次建一大块,但灵活性差,参数多
  • 小砖块(3×3):用多个小砖块组合,更灵活,参数少
  • 更多层:建更多层,可以建更高的房子(更深的网络)

实际例子

VGGNet的设计对比:

一个5×5卷积核:
- 参数数量:5×5×C = 25C
- 感受野:5×5
- 非线性:1个ReLU

两个3×3卷积核:
- 参数数量:2×(3×3×C) = 18C
- 感受野:5×5(等效)
- 非线性:2个ReLU

优势:
- 参数更少(18C < 25C)
- 非线性更多(2个ReLU > 1个ReLU)
- 表达能力更强

VGGNet架构(简化):
- 多个3×3卷积层堆叠
- 2×2最大池化层
- 全连接层
- 深度:16层或19层

 


1.2 VGGNet的架构特点(VGGNet Architecture Features):简洁而有效

概念的本质

VGGNet的架构特点:

  1. 统一设计:所有卷积层都使用3×3卷积核
  2. 深度堆叠:通过堆叠更多层增加深度
  3. 池化策略:使用2×2最大池化,步长为2
  4. 全连接层:最后使用全连接层进行分类

实际例子

VGGNet-16架构示例:

输入:224×224×3
  ↓
Conv3-64(2层):224×224×64
  ↓
MaxPool:112×112×64
  ↓
Conv3-128(2层):112×112×128
  ↓
MaxPool:56×56×128
  ↓
Conv3-256(3层):56×56×256
  ↓
MaxPool:28×28×256
  ↓
Conv3-512(3层):28×28×512
  ↓
MaxPool:14×14×512
  ↓
Conv3-512(3层):14×14×512
  ↓
MaxPool:7×7×512
  ↓
FC-4096 → FC-4096 → FC-1000

特点:
- 所有卷积层都是3×3
- 深度:16层(卷积层+全连接层)
- 简洁统一的设计

 


二、GoogLeNet架构(GoogLeNet Architecture):宽度优先的设计

这一章要建立的基础:理解GoogLeNet的Inception架构和多尺度特征提取

核心问题:GoogLeNet如何解决深度网络的问题?Inception模块如何工作?


[!NOTE]
📝 关键点总结:GoogLeNet使用Inception模块在单层上提取多尺度特征,使用1×1卷积降维减少计算量,使用辅助分类器加速训练。GoogLeNet展示了宽度(多尺度)的重要性,与VGGNet的深度优先形成对比。

2.1 Inception架构的核心思想(Inception Architecture Core Idea):多尺度特征提取

概念的本质

Inception架构的核心思想是:

  1. 多尺度卷积核:在同一层使用1×1、3×3、5×5卷积核,提取不同尺度的特征
  2. 特征融合:将不同尺度的特征拼接(concatenate)在一起
  3. 1×1卷积降维:使用1×1卷积核降维,减少计算量

图解说明

输入特征
1×1卷积
局部特征
3×3卷积
中等特征
5×5卷积
大范围特征
最大池化
下采样
拼接
多尺度特征

💡 说明

  • 多尺度:不同大小的卷积核提取不同尺度的特征
  • 特征融合:拼接不同尺度的特征,增强表达能力
  • 降维:使用1×1卷积减少计算量

类比理解

想象你在看一幅画。Inception架构就像:

  • 1×1卷积:用放大镜看细节(局部特征)
  • 3×3卷积:用正常视角看中等范围(中等特征)
  • 5×5卷积:用广角镜头看大范围(大范围特征)
  • 拼接:综合考虑所有尺度的信息,做出更准确的判断

实际例子

Inception模块的详细设计:

输入:28×28×256

分支1:1×1卷积
- 1×1×256卷积核,64个
- 输出:28×28×64

分支2:3×3卷积
- 先1×1降维到128,再3×3卷积,128个
- 输出:28×28×128

分支3:5×5卷积
- 先1×1降维到32,再5×5卷积,32个
- 输出:28×28×32

分支4:最大池化
- 3×3最大池化,然后1×1卷积,32个
- 输出:28×28×32

拼接:
- 输出:28×28×(64+128+32+32) = 28×28×256

1×1卷积降维的作用:
- 减少计算量:5×5卷积在低维进行
- 保持表达能力:通过拼接恢复维度
- 参数效率:总参数更少

 


2.2 GoogLeNet的架构设计(GoogLeNet Architecture Design):Inception模块堆叠

概念的本质

GoogLeNet通过堆叠多个Inception模块构建网络。网络包含9个Inception模块,每个模块提取多尺度特征。GoogLeNet还使用辅助分类器在中间层提供额外的监督信号。

实际例子

GoogLeNet架构(简化):

输入:224×224×3
  ↓
初始卷积和池化
  ↓
Inception模块1
  ↓
Inception模块2
  ↓
...
  ↓
Inception模块9
  ↓
全局平均池化
  ↓
全连接层(1000类)

辅助分类器:
- 在第9层添加辅助分类器1
- 在第17层添加辅助分类器2
- 主分类器在输出层

损失函数:
总损失 = 主损失 + 0.3×辅助损失1 + 0.3×辅助损失2

优势:
- 多尺度特征提取
- 计算效率高(1×1卷积降维)
- 训练稳定(辅助分类器)

 


三、ResNet架构(ResNet Architecture):残差学习的设计

这一章要建立的基础:理解ResNet的残差连接和如何解决深度网络的退化问题

核心问题:什么是退化问题?残差连接如何解决?


[!NOTE]
📝 关键点总结:ResNet通过残差连接解决了深度网络的退化问题。残差连接允许网络学习残差 F ( x ) = H ( x ) − x F(x) = H(x) - x F(x)=H(x)x而不是直接学习 H ( x ) H(x) H(x),使梯度可以直接传播,训练更深的网络成为可能。

3.1 残差连接的设计(Residual Connection Design):恒等映射和梯度传播

概念的本质

残差连接的核心设计是:

  1. 残差学习:学习 F ( x ) = H ( x ) − x F(x) = H(x) - x F(x)=H(x)x而不是 H ( x ) H(x) H(x)
  2. 恒等映射:如果 F ( x ) = 0 F(x) = 0 F(x)=0,输出就是 x x x(恒等映射)
  3. 跳跃连接:输入 x x x直接加到输出 F ( x ) F(x) F(x)
  4. 梯度传播:梯度可以通过跳跃连接直接传播

图解说明

输入x
残差块
F(x)
跳跃连接
恒等映射
相加
x + F(x)
输出
H(x) = x + F(x)

💡 说明

  • 残差学习:学习变化量而不是绝对值
  • 恒等映射:如果不需要变化,输出就是输入
  • 梯度传播:梯度可以直接通过跳跃连接传播

类比理解

想象你在调整音量。残差连接就像:

  • 直接调整:从当前音量直接调到目标音量(困难,容易出错)
  • 残差调整:只调整变化量(容易,更稳定)
  • 如果不需要调整:变化量为0,保持原样(恒等映射)

实际例子

残差块的设计:

基本残差块:
输入x
  ↓
卷积层1 → BatchNorm → ReLU
  ↓
卷积层2 → BatchNorm
  ↓
  └────── 相加 ──────┘(跳跃连接)
  ↓
ReLU
  ↓
输出 x + F(x)

瓶颈残差块(ResNet-50/101/152):
输入x(256通道)
  ↓
1×1卷积(降维到64)→ BatchNorm → ReLU
  ↓
3×3卷积(64通道)→ BatchNorm → ReLU
  ↓
1×1卷积(升维到256)→ BatchNorm
  ↓
  └────── 相加 ──────┘(跳跃连接)
  ↓
ReLU
  ↓
输出 x + F(x)

优势:
- 如果F(x) = 0,输出就是x(恒等映射)
- 梯度可以直接通过跳跃连接传播
- 更容易优化深层网络

 


3.2 ResNet的架构设计(ResNet Architecture Design):深度网络的突破

概念的本质

ResNet通过残差连接可以训练非常深的网络。ResNet有多个变体:ResNet-18、ResNet-34、ResNet-50、ResNet-101、ResNet-152。ResNet在ImageNet上取得突破性成果,证明了残差连接的有效性。

实际例子

ResNet架构示例(ResNet-50):

输入:224×224×3
  ↓
初始卷积和池化:112×112×64
  ↓
残差块组1:56×56×256(3个瓶颈块)
  ↓
残差块组2:28×28×512(4个瓶颈块)
  ↓
残差块组3:14×14×1024(6个瓶颈块)
  ↓
残差块组4:7×7×2048(3个瓶颈块)
  ↓
全局平均池化:1×1×2048
  ↓
全连接层:1000类

ResNet变体:
- ResNet-18:18层,基本残差块
- ResNet-34:34层,基本残差块
- ResNet-50:50层,瓶颈残差块
- ResNet-101:101层,瓶颈残差块
- ResNet-152:152层,瓶颈残差块

性能:
- ResNet-50:Top-5错误率3.57%
- ResNet-152:Top-5错误率更低
- 证明了残差连接的有效性

 


四、架构设计原则(Architecture Design Principles):从经典架构中学习

这一章要建立的基础:总结从经典CNN架构中学到的设计原则

核心问题:如何设计有效的CNN架构?有哪些设计原则?


[!NOTE]
📝 关键点总结:从VGGNet、GoogLeNet和ResNet中可以总结出以下设计原则:深度的重要性、多尺度特征提取、参数效率、梯度传播、计算效率。现代CNN架构通常结合这些原则。

4.1 深度vs宽度(Depth vs Width):两种设计策略

概念的本质

CNN架构设计有两种主要策略:

  1. 深度优先(Depth First):增加网络深度,如VGGNet
  2. 宽度优先(Width First):增加网络宽度(多尺度),如GoogLeNet
  3. 结合策略:现代架构通常结合深度和宽度,如ResNet

图解说明

CNN架构设计
深度优先
VGGNet
宽度优先
GoogLeNet
深度+宽度
ResNet

💡 说明

  • 深度优先:更深的网络可以学习更抽象的特征
  • 宽度优先:多尺度特征提取可以捕获不同范围的信息
  • 结合策略:现代架构通常结合两者

实际例子

深度vs宽度的对比:

VGGNet(深度优先):
- 策略:增加网络深度
- 方法:堆叠更多3×3卷积层
- 优势:学习更抽象的特征
- 问题:训练困难,梯度消失

GoogLeNet(宽度优先):
- 策略:增加网络宽度
- 方法:Inception模块多尺度特征提取
- 优势:捕获不同尺度的信息
- 问题:计算量大(通过1×1卷积缓解)

ResNet(深度+宽度):
- 策略:结合深度和宽度
- 方法:残差连接 + 瓶颈结构
- 优势:可以训练更深的网络,同时保持计算效率
- 结果:取得最佳性能

 


4.2 参数效率和计算效率(Parameter and Computational Efficiency):优化设计

概念的本质

有效的CNN架构需要考虑:

  1. 参数效率:用更少的参数达到更好的性能
  2. 计算效率:减少计算量,提高训练和推理速度
  3. 设计技巧:使用1×1卷积降维、瓶颈结构、深度可分离卷积等

实际例子

参数和计算效率的优化:

1×1卷积降维(GoogLeNet):
- 问题:5×5卷积计算量大
- 解决:先1×1降维,再5×5卷积
- 效果:计算量大幅减少

瓶颈结构(ResNet):
- 问题:3×3卷积在高维进行,计算量大
- 解决:1×1降维 → 3×3卷积 → 1×1升维
- 效果:计算量减少,参数效率提高

深度可分离卷积(MobileNet):
- 问题:标准卷积计算量大
- 解决:深度卷积 + 逐点卷积
- 效果:计算量大幅减少,适合移动设备

设计原则:
- 在保持性能的前提下减少计算量
- 使用降维技术减少参数
- 考虑实际应用场景(移动设备、边缘计算等)

 


4.3 梯度传播和训练稳定性(Gradient Propagation and Training Stability):关键设计考虑

概念的本质

深层网络的训练需要考虑:

  1. 梯度传播:确保梯度可以传播到所有层
  2. 训练稳定性:避免梯度消失或爆炸
  3. 设计技巧:残差连接、批量归一化、辅助分类器等

实际例子

梯度传播和训练稳定性的设计:

残差连接(ResNet):
- 问题:深层网络梯度消失
- 解决:跳跃连接,梯度直接传播
- 效果:可以训练非常深的网络

批量归一化(GoogLeNet v2):
- 问题:内部协变量偏移,训练不稳定
- 解决:归一化每层的激活值
- 效果:训练更稳定,可以使用更大的学习率

辅助分类器(GoogLeNet):
- 问题:深层网络梯度难以传播到前面层
- 解决:在中间层添加分类器
- 效果:提供额外监督,帮助梯度传播

设计原则:
- 确保梯度可以传播到所有层
- 使用技术稳定训练过程
- 考虑网络的深度和训练难度

 


📝 本章总结

核心要点回顾

  1. VGGNet

    • 深度优先设计,使用小卷积核增加深度
    • 展示了深度的重要性
    • 但训练困难
  2. GoogLeNet

    • 宽度优先设计,Inception模块多尺度特征提取
    • 1×1卷积降维,提高计算效率
    • 辅助分类器,加速训练
  3. ResNet

    • 残差连接,解决退化问题
    • 可以训练非常深的网络
    • 结合深度和宽度,取得最佳性能
  4. 设计原则

    • 深度和宽度都很重要
    • 参数效率和计算效率需要平衡
    • 梯度传播和训练稳定性是关键

知识地图

CNN架构设计
VGGNet
深度优先
GoogLeNet
宽度优先
ResNet
深度+宽度
设计原则
深度vs宽度
参数效率
计算效率
梯度传播

关键决策点

  • 深度vs宽度:根据任务选择合适的策略,或结合两者
  • 参数效率:使用降维技术减少参数,但保持性能
  • 计算效率:考虑实际应用场景,优化计算量
  • 训练稳定性:使用残差连接、批量归一化等技术稳定训练

📚 延伸阅读

推荐资源

  1. VGGNet

    • Simonyan and Zisserman, “Very Deep Convolutional Networks for Large-Scale Image Recognition”, 2014
  2. GoogLeNet

    • Szegedy et al., “Going Deeper with Convolutions”, 2014
    • Szegedy et al., “Rethinking the Inception Architecture”, 2015
  3. ResNet

    • He et al., “Deep Residual Learning for Image Recognition”, 2015
  4. 架构设计

    • 研究现代CNN架构(DenseNet、EfficientNet等)
    • 学习架构搜索(NAS)方法
    • 了解轻量级架构(MobileNet、ShuffleNet等)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值