查看全课大纲(第 43 / 93 节)
- 1.计算机视觉概述
- 2.计算机视觉应用场景
- 3.困难与挑战
- 4.开源库介绍
- 5.图像显示与存储
- 6.CLAHE
- 7.腐蚀膨胀与开闭运算
- 8.滤波与边缘填充
- 9.各种滤波
- 10.图像金字塔
- 11.傅里叶变换
- 12.短时傅里叶变换与小波变换
- 13.颜色特征与颜色直方图
- 14.几何特征_边缘
- 15.几何特征-角点与斑点
- 16.局部特征-SIFT特征描述子
- 17.局部特征-SURF特征描述子
- 18.局部特征-ORB特征描述子
- 19.其他特征描述子
- 20.传统图像分割技术
- 21.GraphCut
- 22.GrabCut
- 23.人脸检测的传统方法
- 24.行人检测的传统方法HOG+SVM
- 25.行人检测DPM
- 26.人工神经网络的架构
- 27.目标函数与梯度下降
- 28.误差反向传播
- 29.可手算的神经网络
- 30.改进目标函数与克服梯度消散
- 31.神经网络之传统神经网络与深度网络的差异
- 32.各种梯度下降算法
- 33.如何选择合适的梯度下降算法
- 34.避免过适应
- 35.CNN的架构
- 36.CNN的误差反向传播_卷积层
- 37.CNN的误差反向传播_池化层
- 38.分类所用的数据集
- 39.Alexnet详解
- 40.VGG详解
- 41.GoogLeNet_v1
- 42.BatchNormalization
- 43.GoogLeNet_v3v4
- 44.ResNet
- 45.ResNeXt
- 46.CNN设计准则
- 47.图像检索与推土机距离
- 48.基于颜色相似性
- 49.基于形状相似性
- 50.基于纹理相似性
- 51.基于局部特征相似性
- 52.DL的二值哈希编码
- 53.高维空间中检索KDTree
- 54.高维空间中检索LSH
- 55.目标识别任务综述
- 56.RCNN
- 57.SPP-Net
- 58.Fast R-CNN
- 59.Faster R-CNN
- 60.R-CNN系列模型回顾
- 61.R-FCN的设计思路
- 62.R-FCN的实现
- 63.YOLOv1
- 64.YOLOv2_9000
- 65.YOLOv3
- 66.图像分割应用场景与数据集
- 67.上采样的实现方式
- 68.FCN网络架构的由来
- 69.FCN构建细节
- 70.DeepLabv1
- 71.CRF
- 72.DeepLabv2
- 73.DeepLabv3
- 74.特定的医学影像分割任务
- 75.U-Net
- 76.3D U-Net
- 77.V-Net
- 78.DenseNet
- 79.病理切片分析任务及数据集
- 80.病理切片分析
- 81.图说任务及其传统处理方法
- 82.深度语言模型与RNN
- 83.LSTM及其变种
- 84.NIC模型
- 85.SAT模型
- 86.图说的性能指标
- 87.判别模型与生成模型
- 88.KL散度与JS散度
- 89.VAE
- 90.GAN的基本原理
- 91.DCGAN与CGAN
- 92.Wasserstein GAN
- 93.SRGAN
GoogLeNet_v3v4
GoogLeNet V3 与 V4:增强卷积模块功能
小象实战讲义 · 基于深度学习的计算机视觉
在掌握了 GoogLeNet V1 和 V2 的核心思想后,我们继续探索其后续版本。本节课将深入剖析 Inception V3 和 V4,这两个版本通过一系列精巧的模块化设计,特别是“非对称卷积”和“高效降尺寸”策略,在提升网络表达力的同时,有效控制了计算复杂度。学完本节,你将能理解如何通过结构创新而非单纯增加深度或宽度来优化卷积神经网络。
💡 核心导读
- 设计哲学转变:从单纯追求“更深更宽”转向“更智能的模块化设计”,保留所有可能性,让网络自行学习最优路径。
- 核心创新:非对称卷积:将 N×N 卷积分解为 1×N 和 N×1 卷积的级联,大幅降低计算量,适用于中等尺度特征图。
- 高效降尺寸策略:在降低空间尺寸时采用并行的池化/卷积分支,拼接后扩充通道数,以保留信息、避免“表达瓶颈”。
- 模块化堆叠:V3 和 V4 定义了多种 Inception 模块(如针对 35×35、17×17、8×8 特征图),并在网络后部进行堆叠,形成复杂而高效的架构。
- 架构总结与反思:理解 Inception 系列“保留所有可能性”的自动化设计思想,并认识其在可扩展性上的局限性。
从“更深更宽”到“更智能”
在 GoogLeNet 出现之前,提升卷积神经网络性能的主流思路相对直接:一是让网络更深(增加层数),二是让网络更宽(增加每层的神经元或通道数)。随着 GPU 算力的提升,这两种方法似乎是最容易想到的改进方向。
然而,随着我们对网络理解的深入,这种纯粹增大网络规模的做法暴露出明显的缺点:
- 网络退化:如果不采用像 ResNet 那样的残差连接,当网络加深到一定程度时,性能不仅不会提升,反而会下降,这就是网络退化问题。
- 宽度无益:盲目增加宽度(通道数)往往缺乏理论依据。我们之前学习 Dropout 等技术,目的之一是让网络变得更“瘦”且多样化,过度的宽度反而可能适得其反。
因此,Inception 系列网络的核心贡献在于,它跳出了“更深更宽”的思维定式,转向通过增强单个卷积模块的功能来提升整体网络性能。它不再人工决定每一层应该用什么卷积核、是否该池化,而是预先设计一个包含多种可能性的“工具箱”(即 Inception 模块),然后让网络通过训练,自己决定在数据流经时,更依赖哪一条路径。
Inception V3:非对称卷积与模块优化
GoogLeNet 在 2014 年 ImageNet 大赛夺冠后,其 Inception 架构持续进化,形成了 V1、V2、V3、V4 的传承序列。V3 版本的关键改进之一就是引入了非对称卷积分解。
非对称卷积分解
大卷积核(如 5×5、7×7)虽然感受野大,但计算量巨大。对于一个 n×n 的卷积核在 m×m 的特征图上做卷积,计算复杂度约为 。
Inception V3 提出,一个 n×n 的卷积可以近似地分解为两个更小卷积的级联:一个 1×n 的卷积,后接一个 n×1 的卷积。从效果上看,这相当于先进行水平方向的特征聚合,再进行垂直方向的特征聚合。
计算量对比:
- 原始
n×n卷积:计算量约为 次乘加运算(每个位置)。 - 分解为
1×n+n×1:计算量约为 次乘加运算。
例如,当 n=5 时,原始计算量约为 25,分解后约为 10,计算量降低至原来的 40%。这种分解在数学上是严格等价的吗?并非完全等价,但它是一种有效的、低秩的近似,在实践中被证明能很好地工作,同时显著减少了参数数量和计算量。
经验性约束:论文中指出,这种非对称卷积分解在中度大小的特征图上使用效果更好。所谓“中度大小”,通常建议特征图的空间边长 m 在 12 到 20 之间。这是一个经验性的发现,在后续的模块设计中得到了遵循。
三种 Inception Module 结构
Inception V3 优化了模块结构,针对网络不同阶段特征图尺度的变化,设计了三种主要的 Inception Module,它们主要出现在网络的后部(即更靠近输出的层)。
这里需要明确网络“前后”的概念:
- 网络前部:更靠近输入图像的那些层,特征图尺寸较大,通道数较少,通常进行基础特征提取。
- 网络后部:更靠近输出的那些层,特征图尺寸经过多次下采样后变小,但通道数显著增加,进行高级语义特征抽象。
Inception V3 的三种模块分别针对 35×35、17×17 和 8×8 尺度的特征图设计。
针对 35×35 特征图的模块:
- 包含多个并行分支:
1×1卷积、1×1接3×3卷积、1×1接3×3卷积再接3×3卷积、池化接1×1卷积。 - 所有分支的输出在通道维度上进行拼接(Concatenation)。
- 包含多个并行分支:
针对 17×17 特征图的模块(应用非对称卷积):
- 由于 17×17 属于“中度大小”特征图,此处引入了非对称卷积。
- 分支包括:
1×1卷积、1×1接1×7再接7×1卷积、1×1接1×7再接7×1再接1×7再接7×1卷积、池化接1×1卷积。 - 同样进行通道拼接。
针对 8×8 特征图的模块:
- 结构更加复杂,融合了对称与非对称卷积。
- 分支包括:
1×1卷积、1×1接并行的1×3与3×1卷积、1×1接3×3再接并行的1×3与3×1卷积、池化接1×1卷积。 - 最终拼接。
这些模块的共同设计思想是:在有限的计算预算内,尽可能丰富特征的表达。网络不再需要人工决定哪条路好,而是把所有可能有效的路径都准备好,让梯度反向传播时,数据自动选择并强化那些有用的连接。
高效降尺寸:避免表达瓶颈
在卷积网络中,我们经常需要通过池化或步长大于1的卷积来降低特征图的空间尺寸(Grid Size),以减少计算量并为后续的全连接层做准备。但这里存在一个关键矛盾:
先池化,再过 Inception 模块:
- 优点:计算量小,因为输入 Inception 模块的特征图尺寸已经变小。
- 缺点:存在“表达瓶颈”。池化操作(尤其是最大池化)会不可避免地丢失一些空间细节信息。用一个信息量已经减少的特征图进行复杂的特征变换,其表达潜力上限从一开始就被限制了。
先过 Inception 模块,再池化:
- 优点:无表达瓶颈。原始尺寸的特征图包含了最丰富的信息,经过 Inception 模块的充分处理后再降尺寸,信息利用更充分。
- 缺点:计算量巨大。在大尺寸特征图上运行复杂的 Inception 模块开销很高。
Inception V3 采用了一个巧妙的折中方案:在降尺寸的同时扩充通道数。
具体如何实现?V3 采用的是两个并行的 stride=2 分支:一个池化分支保留原有特征,一个卷积分支(先做 1×1 降维,再做 3×3 或非对称卷积)产生新的通道;两个分支的输出在通道维拼接。这样在降低空间尺寸的同时增加了通道数,既避免表达瓶颈,又把计算量控制在较低水平。
这样做的逻辑是:既然降低空间尺寸(H, W)会损失信息,那么就在另一个维度——通道数(C)上,把信息“备份”或“分散”开来。并行分支在降尺寸时把新特征写入额外的通道,使总体信息量 H × W × C 不至于骤降;通道数的增加来自两个分支的拼接,而不是“先串行升维、再降尺寸”。
这个过程体现了 Inception 结构的一个核心优势:通过并行分支和通道拼接,在降尺寸的同时扩充通道,在计算效率和特征表达力之间取得了良好的平衡。
Inception V3 网络架构与其它改进
Inception V3 的整体架构遵循了从大到小的特征图处理流程:
- 网络前部(Stem):由一系列基础的卷积层和池化层构成,负责快速下采样并初步提取特征。例如,使用步长为2的
3×3卷积来替代部分池化层。 - 网络中部:堆叠多个
35×35尺度的 Inception 模块。 - 网络后部:当特征图缩小到
17×17时,堆叠多个使用了非对称卷积的 Inception 模块。接着,特征图进一步缩小到8×8,再堆叠对应尺度的 Inception 模块。 - 网络末端:经过全局平均池化(Global Average Pooling)、Dropout 层,最后通过一个全连接层(或直接用
1×1卷积)接 Softmax 输出分类结果。
其它重要改进:
- 辅助分类器的调整:V3 取消了浅层的辅助分类器,因为实验发现它们基本无用。只保留了深层的辅助分类器(通常在
17×17特征图之后),并且发现它主要在训练后期起到一定的正则化作用。 - 继承与强化:完整继承了 V2 的批归一化(Batch Normalization)技术,并配合使用 Dropout。
- 辅助分类器的作用:保留的深层辅助分类器(其侧头中含 BN)在训练后期起正则化作用,为主分类器带来约 0.4% 的 Top-1 提升。
Inception V4:极致的模块化与复杂性
Inception V4 可以看作是 Inception 系列架构思想的集大成者,它将网络设计得更加复杂和系统化。
- 更复杂的 Stem:网络入口的 Stem 部分不再是简单的几层卷积,而是精心设计的一个小网络,其中也使用了并行结构和不对称卷积,旨在以最小的信息损失快速降低计算维度。
- 模块化程度更高:V4 明确区分了三种不同的 Inception 模块(A, B, C)和两种不同的降维模块(Reduction A, B)。
- Inception A, B, C:分别对应网络不同深度的特征抽象阶段,结构越来越复杂,融合了更多样化的卷积组合。
- Reduction A, B:专门负责降低特征图空间尺寸的模块。它们不是简单的池化,而是包含了多种策略的并行分支,例如:最大池化、带步长的
3×3卷积、以及先1×1卷积再非对称卷积最后带步长卷积的组合等。这种设计让尺度缩减过程本身也具备了强大的特征变换能力。
- 系统化堆叠:整个网络就是这些预定义模块的规律性堆叠:
Stem -> [Inception A × N] -> Reduction A -> [Inception B × M] -> Reduction B -> [Inception C × K] -> Average Pooling -> Dropout -> Output。
Inception V4 代表了纯 Inception 架构(不含残差连接)所能达到的复杂度和性能的顶峰。事实上 V4 论文发表于 ResNet 之后,论文中同时还提出了与残差连接结合的 Inception-ResNet 版本。它的设计哲学始终如一:通过提供丰富的、并行化的局部结构选择,将网络架构设计的部分工作自动化,让优化过程来决定特征流动的最优路径。
总结 Inception 的核心思想与局限
核心思想: Inception 网络最大的特点是保留所有可能性。它代替了人工去艰难地选择每一层应该用 3×3 还是 5×5 卷积,是否需要池化层。其策略是:预先给网络添加所有可能用到的操作(不同尺寸的卷积、池化),以并行分支的形式呈现,然后将所有分支的输出连接(Concatenate)起来。在训练过程中,通过误差反向传播,网络会自动调整各条路径上参数的权重。对于当前任务更重要的特征通路,其权重会被强化;不重要的通路,其贡献则被弱化。网络自己学会了它需要什么样的架构。
局限性与反思: 这种“保留所有可能性”的设计在取得巨大成功的同时,也暴露出一个弱点:针对性过强,可扩展性一般。 网络的结构和超参数是为了在 ImageNet 这样的特定分类数据集上取得最优性能而精心设计和调优的。它学习到的“最优路径”高度适应当前数据。当我们将训练好的 Inception 网络迁移到差异很大的新数据集上,或者将其作为特征提取器用于目标检测、图像分割等下游任务时,其表现可能会打折扣,往往需要重新调整或设计模块结构。换句话说,它的“自动化设计”能力是在一个相对固定的搜索空间内进行的,跨任务泛化能力不如一些更简洁、更通用的架构(如 VGG、ResNet)来得直接。
尽管如此,Inception 系列所倡导的模块化、并行化以及“预置多种可能、由数据选择路径”的思想,深刻影响了后续的网络设计;这种思路与后来的神经网络架构搜索(NAS)在精神上是相通的。
📝 动手练一练
- 概念辨析:Inception V3 中提出的“非对称卷积分解”主要为了解决什么问题?为什么论文中建议在“中度大小”(空间边长约 12–20)的特征图上使用它,而不是在非常大的特征图(如224×224)或非常小的特征图(如4×4)上使用?请从计算复杂度和特征表达两个角度简述你的理解。
👉 点击查看参考答案
主要解决问题:解决大卷积核(如5×5,7×7)参数多、计算量大的问题,通过分解来降低计算复杂度和参数量。
使用尺度原因:
- 计算复杂度角度:非对称分解的计算优势是比例性的。在非常大的特征图(如224×224)上,虽然绝对计算量节省巨大,但网络前部更关注基础特征(如边缘、纹理),使用标准卷积可能更直接有效;且前期特征图通道数少,计算压力本身不大。在非常小的特征图(如4×4)上,空间信息已极度压缩,再进行行列分离可能破坏本已有限的局部结构,得不偿失。
- 特征表达角度:“中度大小”特征图(如17×17)通常处于网络中层,承载着由低级特征组合而成的中级语义信息。在此尺度上进行水平与垂直方向的解耦聚合,有助于模型学习更具判别力的空间组合模式,且此时通道数已较多,分解带来的计算收益非常显著。这更像一个经验性的“甜点”区域。
- 结构理解:假设我们有一个
17×17×256的特征图,现在要设计一个类似 Inception V3 的模块,其中一个分支计划采用“先1×1卷积降维,再进行7×7非对称卷积(分解为1×7和7×1)”的策略。如果1×1卷积将通道数降到64,请估算这个分支的输出特征图尺寸和通道数(假设所有卷积步长 stride=1,使用 ‘SAME’ 填充)。
👉 点击查看参考答案
- 输入:
17×17×256 - 经过1×1卷积 (stride=1, padding=‘SAME’):
- 作用:通道数变换。
256 -> 64。 - 空间尺寸不变(因为stride=1, padding=‘SAME’)。
- 输出:
17×17×64
- 作用:通道数变换。
- 经过1×7卷积 (stride=1, padding=‘SAME’):
1×7卷积核在高 1、宽 7 的窗口上滑动,沿水平(宽度)方向做一维聚合;padding='SAME'保证输出的高、宽都不变。- 输出:
17×17×64(这里假设滤波器数量为 64,与输入通道数一致,因此通道数不变)。
- 经过7×1卷积 (stride=1, padding=‘SAME’):
7×1卷积核在高 7、宽 1 的窗口上滑动,沿垂直(高度)方向做一维聚合;padding='SAME'同样保证输出尺寸不变。- 输出:
17×17×64(同样假设滤波器数量为64)。
- 最终输出:该分支输出特征图尺寸为
17×17×64。
注意:在实际 Inception 模块中,非对称卷积分支的1×7和7×1卷积的滤波器数量(即输出通道数)是一个可设计的超参数,不一定等于输入通道数。但根据典型设计,为了保持各分支输出能进行通道拼接,通常会设计使得各分支输出的空间尺寸相同,但通道数可以不同。本题中假设了通道数保持不变以简化计算。
本章小结
本节我们深入探讨了 GoogLeNet 的进化版本 V3 和 V4。它们标志着卷积神经网络设计从“规模竞赛”转向“结构创新”的关键一步。
- V3 的核心在于非对称卷积分解和针对不同尺度特征图设计的三种模块化结构,其高效降尺寸策略巧妙地平衡了计算量与特征表达力。
- V4 的核心在于将这种模块化思想推向极致,定义了更精细的 Inception 模块和专门的 Reduction 模块,通过系统化堆叠构建出复杂而强大的网络。
- 整个 Inception 系列的灵魂是 “保留所有可能性” 的自动化设计思想,让网络通过训练自行选择最优特征路径,这与后来的神经网络架构搜索(NAS)在思路上相通。同时,我们也认识到这种高度定制化设计在任务迁移时可能存在的局限性。
今天,Inception V3/V4 在分类任务上早已被 ResNet 及后续的 EfficientNet、ViT 等取代,V4 本身也很少直接使用。但非对称卷积“用 1×n + n×1 替代 n×n”的分解思路,以及“降尺寸时用并行分支(1×1 升维 + 步长卷积/池化)再拼接”的经验,仍然出现在轻量网络与检测/分割骨干的设计中,是理解卷积结构设计权衡的经典案例。
📋 行动清单
- 理解非对称卷积:在纸上推导将一个5×5卷积分解为1×5和5×1卷积后,参数数量和计算量的变化比例。
- 分析模块图:找到 Inception V3 论文中的模块结构图,对照讲义,说出每个并行分支的具体操作顺序。
- 思考迁移:如果让你将一个在 ImageNet 上预训练好的 Inception V3 模型,用于一个医学影像分类任务(图像风格差异大),你认为在模型结构或训练策略上可能需要做哪些调整?
—— 小象教研组