卷积神经网络:从局部特征提取到像素级分割的演进

卷积神经网络(Convolutional Neural Network, CNN)是深度学习在计算机视觉领域最核心的架构。从2012年AlexNet在ImageNet竞赛中突破性夺冠,到如今以Vision Transformer为代表的现代视觉模型,CNN经历了十余年的演进与变革。本专题以「CNN如何从图像分类网络演进为能进行像素级密集预测的分割网络」为主线,系统讲解卷积运算原理、Batch Normalization训练稳定性机制、经典架构设计哲学,以及U-Net、Segment Anything等分割模型的关键创新,最终指向对CNN持续生命力的理解。 Batch Normalization CNN U-Net ViT-H ConvNeXt

理解CNN的演进,有一条核心矛盾贯穿始终:它比全连接网络更高效(局部连接+权值共享),但深度增加反而导致训练困难(退化问题)——理解这条张力如何被Batch Normalization和残差连接两大关键创新所化解,是理解整个演进故事的关键。

为什么图像处理需要卷积,而不是全连接网络?

从全连接网络说起

在传统全连接(Fully Connected, FC)神经网络中,每一层的每个神经元都与上一层的所有神经元相连。以一张224×224×3的彩色图像为例,如果第一层隐藏层有1000个神经元,那么这一层的参数量就达到了224×224×3×1000 ≈ 1.5亿。想象一个全连接前馈网络:输入层有8个节点,三个隐藏层分别约有11、11、10个节点,输出层有4个节点,层与层之间密密麻麻的全连接线——这幅景象清晰地展示了参数量的爆炸。

对于图像这样的高维输入,全连接网络的参数量巨大到难以训练。更根本的问题是:图像中的大多数模式(pattern)都是局部的——要判断一张图片里有没有鸟,我们不需要看一眼整张图才能发现鸟喙;只要扫一眼某个局部区域就够了。

全连接前馈神经网络的结构示意图,从左到右依次为8节点输入层、三个隐藏层(各约11、11、10节点)及4节点输出层,层间全连接。

图注:全连接网络中每层神经元与上一层全部相连,参数量随节点数呈平方级增长,处理图像时造成参数爆炸。

局部感受野:把「看局部」变成网络能力

卷积神经网络的核心思想,是让每个神经元只与输入的一个局部区域相连,这个局部区域就叫做局部感受野(Local Receptive Field)。打个比方:当你用余光扫过一张照片时,你的注意力一次只能覆盖照片的一小块区域——CNN中的每个神经元也是这样工作的。

以一张6×6的输入图像为例,如果局部感受野大小为3×3,那么输出特征图上的每个像素只依赖于输入的3×3邻域。这意味着:输出层的每个位置只从输入的9个像素计算得到,而非全部36个像素。

这种局部连接的结构,让网络能够天然地捕捉图像的空间结构信息——相邻的像素本来就是高度相关的。

权值共享:同一个检测器到处跑

CNN压缩参数的第二个关键机制是权值共享(Weight Sharing)。假设我们要检测图像中任意位置的「鸟喙」特征:一个位置有鸟喙,和另一个位置有鸟喙,本质上是同一种模式。如果为每个位置单独学习一组参数,就太浪费了。

更好的做法是:用同一组滤波器(filter,也叫卷积核)在整张图像上滑动。这样,无论鸟喙出现在左上角还是图片中央,都由同一组滤波器参数来检测。具体来说,一个检测器在不同位置滑动时复用同一组权重——两个不同位置的检测器可以共享参数,从而将参数量从两套压缩为一套。

鸟喙检测器在图像的多个位置工作,每个位置感知一个局部窗口并产生响应——这就是卷积运算的物理意义。

两个不同位置鸟喙检测器('upper-left beak'和'middle beak')的参数共享压缩示意,两滤波器间有红色双向箭头标注'They can be compressed to the same parameters'。

图注:两个不同位置的鸟喙检测器共享同一组参数,参数量从两套压缩为一套。参数共享让CNN在大幅减少可学习参数的同时,仍然能够检测图像中任意位置的同类型特征。

平移不变性:小位置偏移不会改变识别结果

局部感受野加权值共享的组合,天然赋予了CNN平移不变性(Translation Invariance):图像中的目标发生少量位移时,CNN的输出基本不受影响。因为负责检测某个特征的滤波器是全局共享的,它在图像上滑动时以相同的方式响应,无论特征出现在哪里。

从局部到特征图:卷积层的本质

局部感受野和权值共享共同决定了卷积层的工作方式:输入图像与一组可学习的滤波器做卷积,每个滤波器产生一张特征图(Feature Map)。特征图的每个位置记录了在对应局部区域中该滤波器的响应强度——响应高的地方,说明那里存在滤波器正在检测的模式(比如边缘、纹理或更复杂的形状)。

打个比方:一个滤波器就像一个「鸟喙检测器」。当它在图像上滑动时,经过鸟喙区域时输出值高,经过其他区域时输出值低——输出的「响应地图」就是特征图。

卷积与全连接结构对比图:上部为convolution流程(6×6矩阵经滤波器输出4×4特征图),下部为Fully-connected流程(36个输入节点全连接至输出节点)。

图注:卷积的局部连接让每个输出只依赖9个输入参数(3×3感受野),而全连接让每个输出依赖全部36个参数。这一对比从结构层面清晰展示了CNN的参数效率从何而来。

至此,CNN的两大核心压缩机制——局部感受野和权值共享——都已经建立了。这两条原则让CNN比全连接网络高效得多,同时又能很好地捕捉图像的空间层次结构。AlexNet的原始论文系统性地验证了这两大机制在大型图像数据集上的有效性,是理解CNN基础的必读工作。

卷积运算到底是怎么算的?

离散卷积的数学本质

上一章建立了直觉,这一章来抠细节。卷积的原始数学定义是连续积分 $(f * g)(t) = \int f(r) g(t - r) dr$,但在计算机上处理图像时,我们用的是离散卷积(Discrete Convolution)。

对离散序列(比如图像像素)做卷积,核心操作只有两步:

  1. 翻转(Flip):将卷积核(kernel)在水平和垂直方向翻转
  2. 滑动点积(Slide & Multiply-Add):将翻转后的核在输入上逐位置滑动,每次计算对应元素的乘积之和

为什么必须翻转?数学上这是积分顺序交换带来的必然结果;在CNN的语境下,滤波器在图像上「滑动并叠加」的过程就是卷积的实际含义。直觉上可以理解为:用卷积核作为滑动窗口,在图像上测量每个位置的局部相似度——卷积核本身就是那个被拿来「比对」的模板。

滤波器与特征提取

以一个6×6的二值图像为例,其主对角线和对角线外侧均为1,其余为0。用两个3×3的滤波器去检测它:Filter 1的主对角线为1、其余为-1,负责检测主对角线方向的结构;Filter 2的中间列为1、其余为-1,负责检测垂直边缘特征。

两个3×3卷积核(Filter)示意,Filter 1主对角线为蓝色1其余为-1,Filter 2中间列为蓝色1其余为-1。

图注:不同的滤波器提取不同的局部特征——Filter 1的主对角线权重模式让它对「主对角线方向的变化」产生高响应;Filter 2的中间列权重模式让它对「垂直方向的变化」产生高响应。这说明CNN的特征提取能力来自滤波器的可学习权重。

步长:滤波器每次滑多远

**步长(Stride)**控制滤波器每次移动多少像素。步长为1时,滤波器逐像素滑动;步长为2时,每次跳过1个像素(即滑动步幅为2)。stride越大,输出特征图越小——这是下采样的一种形式。

以stride=1为例:将Filter 1(主对角线为1、其余为-1)划过6×6输入,每次覆盖一个3×3区域,计算对应位置的点积。当滤波器完全位于主对角线区域时,输出响应最高(如3);当与边缘相交时,响应降低或为负。

6×6矩阵左上角3×4区域被红色粗框圈出并细分,右侧输出为浅紫色圆圈标注数字3和-1,箭头标注'dot product'。

图注:stride=1时,滤波器在输入上逐像素滑动。局部感受野与滤波器权重的点积运算——主对角线区域与滤波器重叠最多,输出响应为3(最高);与边缘相交处输出为-1。

当stride=2时,滤波器每次向右或向下移动2个像素,输出特征图的尺寸相应减小:6×6输入经过3×3滤波器、stride=2后,输出为3×3(而非stride=1时的4×4)。

6×6矩阵左上区域红色框标注,前3行前5列区域,垂直红线将其分为三部分,右侧输出为紫色圆圈标注3和-3。

图注:stride=2时滤波器跳步滑动,输出尺寸减小,但感受野覆盖的区域更大。不同的步长设置直接影响输出特征图的空间分辨率。

三种填充模式:边界如何处理

滤波器在滑动到输入边界时面临一个问题:核的一部分会超出图像范围。不同填充(padding)策略决定了这个问题的不同答案:

  • Valid模式:不做任何填充,核只计算完全在输入范围内的位置。输入n与核k的输出尺寸为 max(n - k + 1, 0)。输出比输入小。
  • Same模式:在输入周围对称填充,使输出与输入空间尺寸相同。对于核大小k,通常填充 (k-1)/2 个零。
  • Full模式:在输入周围充分填充,使核的至少一个元素与输入有重叠。输出尺寸为 n + k - 1。

一个具体例子:输入 x = [1, 2, 3, 4],核 h = [0.5, 1, 0.5]。三种模式的输出尺寸分别为:full模式输出6个元素,same模式输出4个(与输入等长),valid模式输出2个(只计算完全重叠区域)。

对于CNN中的卷积层,最常用的是Same模式(保持空间尺寸)或Valid模式(故意缩小尺寸)。在处理图像边界时,选择哪种模式取决于网络设计的需求——保持分辨率还是快速降采样。

多通道与多滤波器

真实的彩色图像是RGB三通道的,卷积运算也必须处理多通道输入。一个3×3滤波器实际上是一个3×3×3的张量——第三维与输入通道数匹配。滤波器在所有通道上同时做点积,然后求和得到单张输出特征图。

多个滤波器并行工作,每个滤波器产生一张独立的特征图。如果输入有3个通道,使用2个滤波器则产生2张特征图——输出的第三维由滤波器数量决定。

CNN卷积运算完整流程图:左侧RGB三通道堆叠图像,两个3×3滤波器(Filter 1橙色、Filter 2蓝色),经卷积输出6×6特征图。

图注:RGB三通道输入同时与两个不同的3×3滤波器作用,每个滤波器在三个通道上做加权求和后产生一张特征图。两个滤波器输出两张特征图,构成输出的通道维度。

多通道多滤波器的卷积过程可以总结为:输入张量(H×W×C_in)与F个C_in×K×K的可学习滤波器做卷积,产生F张H'×W'的特征图堆叠在一起——这就是CNN中「特征图」这一名称的来源。

池化:进一步压缩

池化(Pooling)层是卷积网络中另一类重要的操作,用于进一步降低特征图的空间尺寸。最常用的是最大池化(Max Pooling):将特征图划分为不重叠的2×2窗口,每个窗口输出最大值。

池化有两个关键作用:一是降低计算量(空间尺寸减半,特征图数量不变);二是提供一定程度的平移不变性——目标在图像中移动几个像素,经过池化后输出基本不变。

4×4矩阵经2×2最大池化Filter和stride 2操作后输出2×2矩阵的示意图,配色分区显示四个窗口对应关系

图注:2×2最大池化将特征图划分为4个不重叠窗口,每个窗口取最大值输出。最大池化保留了每个局部区域最显著的特征响应,同时使特征图对小幅平移更加鲁棒。

池化层通常跟在卷积层后面,交替出现——Conv-Pool-Conv-Pool——逐步减小空间尺寸、增加特征图通道数,最终将图像压缩成一个小而深的特征向量,用于分类或其他任务。

Batch Normalization:让深层CNN能被训练的hidden hero

内部协变量偏移:深层网络训练的隐形杀手

前面提到CNN通过局部连接和权值共享大幅降低了参数量,但还有一个问题没解决:当网络层数加深时,训练变得异常困难。

原因在于内部协变量偏移(Internal Covariate Shift, ICS)。随着网络前向传播,每一层的输入分布都受前一层参数更新的影响而不断变化。底层参数的小变化在层间逐级放大,导致高层输入进入激活函数的饱和区(saturated region),引发梯度消失(vanishing gradient)。这使得深层网络的底部层几乎无法学习。

Batch Normalization(BN,批标准化)由Google的Sergey Ioffe和Christian Szegedy于2015年提出,首次系统性地解决了这个问题。

BN的核心操作

Batch Normalization的核心思想说起来很简单:在每个mini-batch上,对每一层的激活值做归一化,将它们强行拉回到标准正态分布。具体操作分为四步:

  1. 计算均值:$\mu_B \leftarrow \frac{1}{m} \sum_{i=1}^{m} x_i$——当前batch的均值
  2. 计算方差:$\sigma_B^2 \leftarrow \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2$——当前batch的方差
  3. 归一化:$\hat{x}_i \leftarrow \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}$——将激活值变为均值为0、方差为1的分布
  4. 线性变换:$y_i \leftarrow \gamma \cdot \hat{x}_i + \beta$——用可学习的$\gamma$(scale)和$\beta$(shift)再做一次线性变换

第三步的归一化把分布强行固定了,但「标准正态分布」未必是每层的最优分布——第四步的可学习参数$\gamma$和$\beta$让模型自己决定:要不要偏离标准正态分布、偏离多少。$\gamma$调整标准差,$\beta$调整均值/偏置。如果模型学到的最优分布恰好就是标准正态分布,那么$\gamma=1$、$\beta=0$即可。

Batch Normalization结构图,左侧不规则分布经BN后变为标准正态分布,含深灰白浅灰长方体和概率分布曲线

图注:BN的核心效果——将不规则的输入分布(左)归一化为稳定的标准正态分布(右)。这种稳定化使得深层网络各层的输入分布大致相同,从而避免了激活函数的饱和问题。

训练阶段 vs 推理阶段

BN在训练阶段和推理阶段的行为是不同的,这来自其统计量来源的不同:

  • 训练阶段:使用当前mini-batch的均值$\mu_B$和方差$\sigma_B^2$进行归一化——每次只看了当前batch的数据
  • 推理阶段:使用训练过程中累积的全局均值$E[x]$和全局方差$Var[x]$(由多个mini-batch的统计量指数加权平均得到),代入确定性的线性变换公式进行归一化

推理时没有batch的概念,必须使用训练时确定的全局统计量。这是BN能够正常工作的关键细节。

BN对CNN的特殊处理

在卷积层中,BN需要保持卷积的性质——同一特征图内不同空间位置的激活值使用相同的均值/方差。具体而言,mini-batch包含同一特征图上所有空间位置和batch内所有样本,参数$\gamma$、$\beta$按特征图共享(而非按神经元独立)。这样的设计让卷积的局部性和BN的归一化能够协调工作。

BN的效果在实验中得到了充分验证:在MNIST数据集上,3层全连接网络加入BN后训练速度显著加快、准确率更高;在ImageNet上,BN-Inception达到相同准确率只需7%的训练步数,最终top-5验证误差进一步降低至4.9%。

Dropout:另一种训练稳定性工具

与BN并列,Dropout是另一种重要的训练稳定性技术。与BN归一化激活值分布不同,Dropout通过随机关闭(置零)一部分神经元来避免过拟合。

Dropout的核心洞察是:当网络中部分神经元被随机关闭时,每次训练相当于在训练一个不同的「子网络」。所有这些子网络共享参数,最终推理时使用完整网络。由于每次训练只能更新一部分神经元,Dropout有效防止了神经元之间的共适应(co-adaptation)——某个神经元不能依赖其他特定神经元来纠正自己的错误。

Dropout与BN经常一起使用,但BN本身也具有一定的正则化效果,在某些场景下可以减弱或替代Dropout。

Dropout对比图,(a)标准全连接神经网络与(b)应用dropout后部分节点被X掉且连接线减少的对比

图注:Dropout在训练时随机断开一部分神经元连接(用X标注),迫使网络不能依赖特定的神经元组合,从而学到更鲁棒的特征表示。

从LeNet到ResNet:经典CNN架构解决了一个又一个问题

时间线:ImageNet错误率见证CNN演进

理解CNN架构演进有一个非常好的切入点——ImageNet ILSVRC竞赛的错误率历史。这条曲线清晰地展示了每代架构带来的质的飞跃:

  • 2010年:非深度学习方法错误率约26%
  • 2012年 AlexNet:top-5错误率降至16.4%(5模型平均),最佳组合达15.3%,首次证明深度CNN可以在大规模图像任务上大幅超越传统方法
  • 2014年 VGG/GoogLeNet:错误率降至7%左右
  • 2015年 ResNet:错误率降至3.57%,首次超越人类水平(5%)

ImageNet ILSVRC竞赛获奖者错误率柱状图,Y轴为Error rate,X轴为2010-2017各团队,含网络层数标注和Revolution of Depth红色标注

图注:ImageNet错误率的演进曲线展示了CNN架构一步步逼近并超越人类水平的过程。横轴是不同年份和参赛团队,纵轴是错误率。每一次重大架构创新(AlexNet→VGG→ResNet)都对应错误率的显著下降。

LeNet:一切的开端

LeNet(1998年)是最早的CNN架构之一,由Yann LeCun设计,用于手写数字识别(MNIST数据集)。它的结构非常简洁:28×28×1的灰度图像输入,经过两次「卷积+池化」的组合,再到全连接层输出10个类别。

纵向CNN架构图,从28×28×1输入图像经Conv+sigmoid、Pool、Conv+sigmoid、Pool+flatten,到120、84、10个神经元的全连接层

图注:LeNet-5的结构:输入→Conv+sigmoid→Pool→Conv+sigmoid→Pool→flatten→FC→FC→输出。这是CNN的经典组合模式:卷积层提取特征、池化层压缩空间、全连接层做分类决策。

LeNet仅有约6万个参数、5个可学习层(2个卷积层和3个全连接层)。它证明了CNN可以在简单任务上工作,但其规模和能力都远不足以应对ImageNet这样的大规模数据集。

AlexNet:深度CNN的突破口

AlexNet(2012年)是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在NIPS发表的里程碑工作,首次在ImageNet上将top-5错误率降到18%,远超第二名的26%——超过10个百分点的差距在计算机视觉竞赛史上是前所未有的。

AlexNet有8个可学习层、5个卷积层和3个全连接层,约6000万参数。它确立了此后十年CNN研究的范式:

  1. GPU并行训练:使用两块NVIDIA GTX 580 3GB GPU训练5-6天,突破了单机算力限制
  2. ReLU激活函数:采用非饱和非线性函数ReLU,训练速度比tanh快数倍
  3. Dropout正则化:以0.5概率随机关闭神经元,避免过拟合
  4. 重叠池化:池化窗口3×3、步长2(而非不重叠的步长等于窗口尺寸)
  5. 数据增强:随机裁剪、水平翻转、颜色变换,将有限样本扩增数十倍

AlexNet架构立体方块图,从输入224×224×3经多层次卷积、池化,到最后1000维输出,含各层特征图尺寸

图注:AlexNet的层级结构——从224×224×3输入开始,经过多轮Conv+Pool的组合,最终通过全连接层输出1000维分类结果。各层特征图尺寸逐步压缩,通道数逐步增加。

AlexNet的第一层卷积使用96个11×11×3的滤波器,以步长4划过224×224×3的输入图像。每个滤波器只与输入的局部区域(局部感受野)连接,但同一滤波器在整张图像上滑动时共享同一组权值——这正是第一章讲的核心机制。

VGGNet:3×3小滤波器的设计哲学

VGGNet(2014年)由牛津大学VGG(Visual Geometry Group)提出,其核心贡献是系统性地证明了「更深网络+更小滤波器」这一设计原则。

VGGNet统一使用3×3小卷积核替代AlexNet中的大卷积核(11×11、7×7、5×5)。为什么小滤波器更好?

这里有一个精妙的参数效率分析:两个连续的3×3卷积层的有效感受野等于5×5(中间无池化的情况下);三个连续的3×3卷积层等效于7×7的感受野。但参数量差别巨大:

  • 3个3×3卷积层:$3 \times (3^2 \times C^2) = 27C^2$ 个参数
  • 单个7×7卷积层:$7^2 \times C^2 = 49C^2$ 个参数

3×3堆叠相比单个大滤波器,节省约81%的参数(49 vs 27)。更深但更小的滤波器组合,在保持相同有效感受野的同时大幅减少了参数量。

VGG-16(16层,138M参数)和VGG-19(19层,144M参数)是其代表。VGGNet在ILSVRC 2014获得分类第二名和定位第一名,3×3小卷积核的设计直接影响了此后几乎所有CNN架构。 VGG-16

AlexNet层级结构图,从Input经conv1-7各层、Pool层、fc6-7全连接层到Softmax输出,标注各层卷积核尺寸和通道数

图注:VGG-16的结构——多次堆叠3×3卷积层,配合5次2×2最大池化逐步降低空间分辨率、增大通道数(64→128→256→512),最后通过三个全连接层分类。

VGG-16的通道数变化非常规律:64→128→256→512,每经过一次池化翻倍。这种设计让网络能够逐层捕获从细节到语义的层次化特征。

退化问题:更深反而更差

VGG证明了「更深」有价值,但当网络继续加深时,一个奇怪的现象出现了——退化问题(Degradation Problem):当网络从20层增加到56层时,训练误差反而上升了。这不是过拟合(因为训练集上同样出现),而是优化困难的表现。

直觉上,更深的网络至少应该能学会恒等映射(把输入原封不动地传下去),不应该比浅层网络更差。但实际训练中,SGD求解器无法在合理时间内找到这个恒等解——深层网络的优化陷入了困境。

ResNet:残差学习让152层成为可能

ResNet(Deep Residual Learning,何恺明等人,2015年)引入的**残差学习(Residual Learning)**框架从根本上解决了退化问题。其核心洞察是:不直接学习底层映射 H(x),而是学习残差 F(x) = H(x) - x,然后将输出定义为 F(x) + x。 ResNet

这个设计的关键是恒等快捷连接(Identity Shortcut):将输入x直接跨过两层卷积,加到输出上。如果最优映射接近恒等映射,网络只需将F(x)趋近于0即可——这比直接学习H(x)要容易得多,因为让一堆卷积层的输出趋近于0比让它精确复制输入容易得多。

ResNet残差块结构图,含输入x、主路径weight layer×2+relu、跳跃identity连接、加法节点、F(x)+x输出、relu

图注:ResNet残差块的核心——输入x同时经两条路径:主路径通过两个3×3卷积层处理得到F(x),快捷路径直接将x连接到输出端,两者在加法节点融合为F(x)+x,最后经ReLU输出。

残差连接让梯度能够直接流向网络底层。当梯度经过加法节点时,一部分梯度可以无衰减地通过恒等快捷连接直接回传到输入——这让深层网络的优化变得更加容易——网络只需将残差F(x)趋近于0即可,而无需学习复杂的恒等映射,让152层的训练成为可能。

ResNet-152在ILSVRC 2015中以3.57%的top-5错误率获得冠军,首次超越人类水平5%。且ResNet-152比VGG-19深8倍,FLOPs反而更低(11.3G vs 19.6G)。

ResNet多种网络架构对比图,左侧纵向流程图含conv层、Pool层、残差连接弧线,右侧列出ResNet18/34/50/101/152等

图注:ResNet系列的不同深度变体(18/34/50/101/152)共享相同的残差块设计原则。残差连接的弧线是ResNet区别于plain网络的关键标识。

ResNet的残差学习框架不仅解决了训练问题,其残差块设计还成为现代深度视觉模型的标准组件——被后续几乎所有CNN架构以及Transformer(如ViT中的残差连接)广泛采用。

GoogLeNet与U-Net:多尺度并行与编码器-解码器,各走出一条路

GoogLeNet:并行多尺度捕获不同粒度的特征

GoogLeNet(Inception v1,2014年)走了与ResNet不同的演进方向——不是把网络堆得更深,而是在同一层内并行使用不同尺度的卷积核,让网络能够同时捕获从局部到全局的不同粒度特征。

Inception模块的核心设计是四条并行分支:

  • 1×1卷积:捕获最局部的特征
  • 3×3卷积:捕获中等尺度的模式
  • 5×5卷积:捕获较大尺度的模式
  • 最大池化后接1×1投影:提供池化的平移不变性

所有分支输出空间尺寸相同(28×28),因此可以沿通道维度Filter Concatenation拼接,形成同时包含多尺度信息的统一输出。

展示Inception模块结构的神经网络架构示意图,底部为上一层,分出四条并行支路分别经过1x1、3x3、5x5卷积和池化操作后汇聚到Filter concatenation。

图注:Inception模块的四分支并行结构——1×1、3×3、5×5卷积和池化分支同时处理相同的输入,最后通过Filter Concatenation拼接四路输出。这让网络在同一层级就能同时学习从精细到粗粒度的多尺度特征。

1×1瓶颈降维:让大卷积核变得可用

5×5卷积核的计算量很大——如果直接用,计算成本会爆炸。Inception模块的关键技巧是1×1瓶颈降维:在大卷积核(3×3、5×5)之前,先用一个1×1卷积压缩输入通道数,经ReLU激活后再送入大卷积核。

例如,对28×28×192的输入直接做5×5卷积需要大量乘加运算;如果先用1×1降到64通道再做5×5,计算量显著减少。1×1卷积不仅降维,还增加了非线性(通过ReLU),起到「瓶颈层」的作用。

这个设计让GoogLeNet仅用约5M参数(远少于VGG的138M)就实现了22层深度,且在ImageNet上top-5误差仅6.67%,是当时的最佳成绩。

U-Net:编码器-解码器与跳跃连接

前面讲的LeNet、AlexNet、VGG、ResNet、GoogLeNet都是图像级分类网络——输入一张图像,输出一个类别标签。但分割任务需要的是像素级密集预测:为图像中每个像素分配一个类别标签。

U-Net(Ronneberger et al., 2015)首次提出对称编码器-解码器结构,专门为像素级分割任务设计,是医学图像分割领域最广泛使用的架构之一。

U-Net的结构呈对称U形:

  • 左侧收缩路径(Contracting Path / 编码器):通过重复的3×3卷积+ReLU+2×2最大池化逐层下采样,捕获越来越粗糙的语义上下文。通道数从64逐渐增加到1024。
  • 底部Bottleneck:最深层的特征表示,通道数1024,空间的最小分辨率(32×32)。
  • 右侧扩张路径(Expansive Path / 解码器):通过2×2转置卷积(up-convolution)逐层上采样恢复空间分辨率,通道数逐步从1024降到64,最后通过1×1卷积映射到目标类别数(通常为2)。

跳跃连接(Skip Connections)是U-Net的灵魂:每一层上采样后,与对应收缩路径同层级的特征图进行通道拼接(concatenation)。这让解码器在恢复空间分辨率时,能够同时获得深层语义信息(来自上采样路径)和浅层空间细节(来自跳跃连接)。

U-Net神经网络架构图,呈U形对称结构,左侧为收缩路径(编码器),右侧为扩展路径(解码器),标注了各层通道数和特征图尺寸。

图注:U-Net的完整对称U形架构——左侧收缩路径逐步压缩空间分辨率、增加通道数(64→1024),底部bottleneck后右侧解码路径通过上采样恢复空间分辨率。灰色箭头标注的跳跃连接将收缩路径的对应层级特征直接拼接到扩张路径,为解码器提供原始的空间细节信息。

为什么跳跃连接如此重要?因为下采样会丢失空间细节——每次池化将空间分辨率减半,虽然语义信息更丰富了,但精确的边缘位置信息丢失了。上采样可以恢复空间尺寸,但如果没有跳跃连接带来的底层细节,输出的分割边界会非常模糊。跳跃连接弥补了这个缺口。

U-Net仅用23个卷积层,在ISBI EM细胞分割挑战赛上以显著优势夺冠,证明了编码器-解码器+跳跃连接这一范式在医学图像分割中的强大能力。

U-Net对称U形架构图,左侧收缩路径增加感受野丢失空间信息,右侧扩张阶段创建高分辨率映射,底部标注Ronneberger et al. (2015)。

图注:收缩路径通过多次下采样增加感受野、捕获语义上下文,但空间分辨率降低;扩张路径通过上采样恢复空间分辨率,但缺乏底层细节。跳跃连接将两者桥接,实现语义与空间信息的兼得。

U-Net的成功证明了CNN不仅能做分类——通过编码器-解码器架构改造,还能做像素级的密集预测。这一范式成为后续几乎所有分割模型(FCN、DeepLab、Mask R-CNN、SAM等)的基础。

从U-Net到Segment Anything:分割任务如何走向通用基础模型

三种分割任务:语义、实例、全景

在深入SAM之前,需要先建立分割任务的分类体系。根据处理方式不同,主要有三类分割任务:

  • 语义分割(Semantic Segmentation):为图像中每个像素分配类别标签(如「草地」「天空」「猫」),但同类物体不区分彼此。图片中所有的猫都被标为同一类「猫」。
  • 实例分割(Instance Segmentation):不仅分割类别,还分割每个独立的个体——图片中每只猫都有自己独立的轮廓。
  • 全景分割(Panoptic Segmentation):语义分割+实例分割的结合,同时提供每个像素的语义类别和每个实例的独立轮廓。

展示语义分割四种任务对比的教学示意图,包含GRASS/CAT/TREE/SKY的像素分割图、单对象检测图、多对象边界框检测图和实例分割图。

图注:四种视觉任务的对比——语义分割输出每个像素的类别(不区分同类不同个体);目标检测输出物体边界框;实例分割为每个独立实例生成精确轮廓;全景分割同时提供语义和实例级别的分割结果。

上采样:解码器的工具箱

分割网络的解码器需要将低分辨率特征图恢复到原始图像尺寸,这涉及到**上采样(Upsampling)**操作。根据复杂程度,主要有三类方法:

最近邻插值(Nearest Neighbor):将每个输入像素复制到输出的2×2块中。优点是不需要学习、计算快;缺点是会在恢复的图像中产生明显的棋盘格效应(blockiness)。

Bed of Nails:将输入像素放在输出对应位置的左上角,其余位置填0。这会产生大量零值,利用率低。

Max Unpooling:记录池化时每个窗口最大值的位置,反池化时将值放回记录的位置。这利用了前向传播时保存的位置信息,比简单插值更精确。

转置卷积(Transposed Convolution):可学习的上采样方法。通过在输入像素之间插入零,然后用标准卷积核做卷积,实现空间分辨率的扩展。输出尺寸计算公式为 $n_{out} = s \times (n_{in} - 1) + k - 2p$,其中$s$是stride,$k$是核大小,$p$是padding。

两栏对比图,左侧展示最近邻插值:2x2输入扩展为4x4,每个像素复制为2x2块;右侧展示Bed of Nails方法:输入像素只放在左上角,其余位置填0。

图注:两种最简单的上采样方法对比——最近邻插值将每个像素复制为2×2块,产生规则的棋盘格;Bed of Nails将像素放在左上角,其余填0,产生稀疏的零填充。

转置卷积是U-Net解码器恢复空间分辨率的核心工具。通过可学习的卷积核,转置卷积能够自适应地决定如何「填充」上采样产生的空隙,从而产生更精细的分割边界。

Segment Anything:promptable分割的基础模型

2023年,Meta AI提出了Segment Anything Model(SAM),将分割从专用模型转变为通用基础模型。SAM的核心创新是promptable segmentation(可提示分割):给定任意形式的分割提示(点、框、掩码、甚至文本),模型返回对应的分割掩码。

这与U-Net的根本区别在于:U-Net是针对特定任务训练的专用分割模型——训练时确定分割的类别集合,推理时只能分割训练时见过的类别。而SAM通过prompt工程实现了真正的zero-shot泛化——同一个模型,给不同的提示,就能分割任意物体。

SAM的三大组件架构:

  1. Image Encoder(ViT-H):使用MAE预训练的Vision Transformer H规格,将输入图像编码为image embedding。这个编码器很重(ViT-H有632M参数),但只需要运行一次——image embedding可以缓存起来,供后续多次prompt查询复用。

  2. Prompt Encoder:将各种形式的提示(稀疏提示:点、框、文本;密集提示:掩码)编码为prompt embedding。点和框的位置编码为学习嵌入,文本由CLIP编码,掩码由卷积嵌入后与image embedding逐元素相加。

  3. Mask Decoder:轻量级Transformer解码器,两层block,通过跨注意力(cross-attention)双向更新image embedding和prompt tokens,最后上采样输出分割掩码。

可提示分割任务流程图,展示点、边界框、掩膜、文本四种提示输入到模型,输出有效掩膜覆盖原图中一只猫的轮廓。

图注:SAM的promptable分割工作流——同一张猫的照片,输入不同形式的prompt(点、框、掩码或文本),模型输出对应的分割掩码。这展示了prompt多样性带来的分割灵活性。

当prompt存在歧义时(比如一个点同时落在衬衫和人身上),SAM会输出多个有效掩码(通常3个:整体、部分、子部分),并为每个掩码预测一个置信度分数(IoU估计)。这让SAM能够优雅地处理歧义情况。

SAM的训练数据引擎分为三个阶段:

  1. 辅助人工标注阶段:SAM辅助标注者点击标注,人机协作,每掩码标注时间从34秒降至14秒,收集4.3M掩码
  2. 半自动阶段:SAM自动预测高置信度掩码,标注者补充标注剩余物体,收集5.9M掩码
  3. 全自动阶段:用32×32点阵提示对全图生成掩码,配合置信度和稳定性筛选,生成全部11亿掩码

最终SA-1B数据集包含1100万张licensed隐私保护图像、11亿高质量分割掩码——是迄今最大规模的分割数据集,比Open Images多400倍掩码。

完整分割模型工作流程图,从左侧输入图像(剪刀等物品)经过Vision Transformer、prompt encoder和mask decoder,输出三张带分割掩码的结果图,标注了稀疏提示和密集提示的区别。

图注:SAM完整工作流——输入图像经Image Encoder生成image embedding,同时Prompt Encoder编码用户输入的提示(点、框、文本等),两者在Mask Decoder中交互,通过跨注意力机制生成最终掩码。对于歧义prompt,模型输出多个有效掩码并附置信度分数。

SAM的意义远超U-Net:它证明了通过大规模数据+基础模型范式,可以让分割达到真正的通用化。U-Net开创了编码器-解码器分割范式,SAM则将这个范式推向了一个新的高度——从任务专用到任意物体的zero-shot分割。

CNN的持续生命力

回顾CNN的演进:从LeNet的简单5层网络,到AlexNet的GPU训练+ReLU激活,到VGG的3×3小滤波器哲学,到ResNet的残差连接,到Inception的并行多尺度,到U-Net的编码器-解码器,再到SAM的基础模型范式——CNN始终在演进。

即便在Vision Transformer(ViT)已经在大规模预训练上展现出优势的今天,CNN的核心设计原则——局部连接、权值共享、层次化特征提取——仍然是现代视觉架构的重要基础。ResNet的残差连接被所有现代视觉模型采用;U-Net的编码器-解码器范式在SAM中以Transformer形式得到延续。

理解CNN的演进,不仅是为了理解历史,更是为了理解深度学习视觉架构设计的底层逻辑——如何通过架构创新解决一个又一个「更深的网络更难训练」「更大的模型更难泛化」的实际问题。

参考文献

本专题引用的核心资料如下,建议深入学习时阅读原文:

  1. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift — arXiv:1502.03167
  2. ImageNet Classification with Deep Convolutional Neural Networks (AlexNet) — arXiv:1112.62009
  3. Very Deep Convolutional Networks for Large-Scale Image Recognition (VGGNet) — arXiv:1409.1556
  4. Deep Residual Learning for Image Recognition (ResNet) — arXiv:1512.03385
  5. Going Deeper with Convolutions (GoogLeNet) — arXiv:1409.4842
  6. U-Net: Convolutional Networks for Biomedical Image Segmentation — arXiv:1505.04597
  7. Segment Anything — arXiv:2304.02643
卷积神经网络:从局部特征提取到像素级分割的演进