多年来,卷积神经网络 (CNN) 一直是图像分类领域无可争议的王者。给 CNN 一张图片,它就能以惊人的准确度告诉你,这是一只猫、一只狗,还是一辆汽车。
但如果你想知道猫在图片中的具体位置——不仅仅是一个边界框,而是它逐像素的精确轮廓呢?这就是**语义分割 **(semantic segmentation) 的任务,它使问题从分类的“是什么”,跃升到了更深层次的“是什么 以及 在哪里”。
在 2015 年之前,解决这一问题的过程相当复杂。当时最好的系统是由多步组成的流水线,涉及区域提议、超像素,以及条件随机场 (CRFs) 等后处理步骤。这些方法运行缓慢、流程繁琐,而且通常无法实现端到端训练。
直到加州大学伯克利分校发表了一篇里程碑式的论文——*Fully Convolutional Networks for Semantic Segmentation *(用于语义分割的全卷积网络) ——改变了一切。
作者的核心思想优雅而简洁: 能否让一个标准分类网络,直接执行密集的、像素级别的预测?他们展示了如何构建全卷积网络 (FCNs) ,可以端到端地、从像素到像素地训练,从而生成最先进的分割结果。
这项工作不仅仅是小幅推进,而是彻底重塑了密集预测问题的解法。
在本文中,我们将深入剖析这篇开创性的论文,分解其三大关键贡献:
- 卷积化 (Convolutionalization) : 将强大的分类网络 (如 VGG) 转换成输出空间图谱而非单一标签的灵活网络。
- 网络内上采样 (In-Network Upsampling) : 一种将粗糙的输出放大回精细、像素级完美预测的可学习方法。
- 跳跃结构 (Skip Architecture) : 融合不同网络深度的信息,以协调语义 (是什么) 与位置 (在哪里) 之间的关系。
从图像标签到像素标签: 传统方法
要理解 FCN 的精妙之处,得先了解它解决了什么问题。
典型的 CNN——如 AlexNet 或 VGG——是为分类任务设计的。它将固定尺寸的图像 (如 227×227 像素) 依次经过卷积层和池化层,在压缩空间维度的同时提取越来越抽象的特征。最后,全连接层会丢弃空间信息,将特征压缩成向量,并输出一个类别概率分布。
这种架构擅长告诉你图像中有一只“虎斑猫”,却无法告诉你哪些像素属于它。主要原因是全连接层会丢失位置信息。
在 FCN 出现之前,将 CNN 应用于分割的常见做法是**基于图像块的训练 **(patch-based training) :
- 从训练图像中裁取一个小图像块。
- 将其输入标准 CNN。
- 训练 CNN 预测中心像素的类别。
- 推理时,在测试图像的每个像素滑动 CNN,生成预测。
这种方法虽然可行,但效率极其低下。模型需要对每张图像运行数千次,相邻像素感受野重叠,计算高度冗余。此外,基于图像块的训练限制了全局上下文的利用,因为网络只能看到局部信息。
也有方法使用复杂的多阶段流水线,但无法端到端地训练。该领域亟需一种更简单、统一的解决方案。
核心方法: 构建全卷积网络
这篇论文的重大创新,是将现有的分类网络改造为能够处理任意大小输入,并在一次前向传播中输出整幅空间图谱。
1. 卷积化: 去掉全连接层
第一个洞见:** 全连接层,本质上就是一个卷积核覆盖其整个输入空间的卷积层。**
全连接层是将输入向量与权重矩阵做点积。如果把输入向量还原成二维特征图,这个过程等同于用与该特征图同尺寸的滤波器进行卷积。
将全连接层重新解释为卷积层,网络就完全“卷积化”了。这意味着:
- 处理任意尺寸的图像。
- 每个操作都是滑动窗口式的卷积,输出空间位置与输入对齐。
- 网络输出的不再是单个类别预测,而是整个图像的类别分数热力图。
效率提升:
相比对成千上万的重叠图像块逐一运行网络,“卷积化”后只需在整张图像上运行一次,位置间计算共享,大幅提升运行效率。
潜在问题:
池化层会显著下采样特征图。例如 VGG16 的总步长是 32,这意味着 500×500 的输入会变成 15×15 的粗糙输出。我们需要一种方法恢复全分辨率预测。
2. 上采样: 从粗到精
为了获得像素级的密集预测,需要将粗糙输出上采样回输入分辨率。
论文中最有效的方法是**通过转置卷积 (transposed convolution) 进行网络内上采样 **(也叫反卷积,deconvolution) 。
转置卷积可以逆转常规卷积的空间变换。例如,输出步长为 f
时,可将特征图上采样 f
倍。
和普通卷积一样,转置卷积的滤波器是可学习的,并可通过反向传播更新。这意味着网络可以学习将粗糙图谱转换为细粒度预测的最佳方式,比固定的双线性插值更强大。
3. 跳跃结构: 融合“是什么”和“在哪里”
即使通过上采样,来自深层的粗糙预测仍缺乏细节。
深层特征擅长捕捉高级语义 (是什么) ,但空间定位精度低 (在哪里) ;浅层特征则相反,空间定位精度高但语义较弱。
为平衡两者,作者提出了**跳跃结构 **(skip architecture) : 将来自深层 (粗语义) 和浅层 (细空间信息) 的特征融合。跳跃连接使局部预测具备全局结构的约束与指导。
FCN 变体:
- FCN-32s: 使用最后一层 (步长 32) 的预测,直接 ×32 上采样。结果较粗糙。
- FCN-16s: 最后一层预测先 ×2 上采样,与
pool4
(步长 16) 的预测融合,再 ×16 上采样。输出更锐利。 - FCN-8s: 在 FCN-16s 的基础上,再融合来自
pool3
(步长 8) 的预测,再 ×8 上采样。输出最精细。
实验与结果
训练与微调
FCN 性能的关键之一是**迁移学习 **(transfer learning) :
- 使用在 ImageNet 上预训练的 VGG16 权重进行初始化。
- 为分割任务微调所有层。
这样可充分利用 ImageNet 的特征层次,并将其适配到密集预测任务。
直接在整幅图像上训练——而不是采样图块——不仅可行,而且更高效。计算可在全图共享,加快收敛速度。
最先进结果
在 PASCAL VOC 2011 & 2012 数据集上:
- FCN-8s 达到 62.2% 的平均交并比 (IoU) ,相比此前最佳方法 (SDS)** 相对提升了 20%**。
- 推理时间仅 175 毫秒,而 SDS 约为 50 秒——快近 300 倍。
定性结果显示,FCN 能捕捉精细细节,更好地区分相邻物体,并更稳健地处理遮挡。
PASCAL 之外:
- NYUDv2: 将 FCN 扩展到 RGB-D 数据,探索深度特征嵌入。
- SIFT Flow: 使用双头 FCN 联合学习语义与几何标签预测,达到或超过当时最优。
结论与影响
Fully Convolutional Networks for Semantic Segmentation 是现代计算机视觉的经典之作,从根本上改变了密集预测的研究范式。
核心经验:
- 标准分类 CNN 已包含密集预测所需的空间信息——通过将其卷积化来“解锁”这些信息。
- 网络内的可学习上采样 (转置卷积) 在保留语义上下文的同时,实现了从粗到精的预测。
- 跳跃结构将全局语义与局部精度融合,大幅提升细节质量。
FCN 的理念奠定了后续多种架构的基础:
- U-Net: 对称编码器-解码器结构,具有丰富的跳跃连接。
- DeepLab: 使用空洞卷积来捕捉多尺度上下文。
简而言之,FCN 告诉我们: 面对复杂的结构化预测任务,应构建简单且优雅的模型,并对其进行端到端训练。