← Back to Learning Notes

Lecture 7:语义分割

Chinese-language Computer Science 408 note: Lecture 7:语义分割. Original source available where applicable.

On this page

This note is currently available in Chinese. The original wording, formulas and diagrams are preserved to avoid an unverified technical translation.

描述:本节区分语义分割与实例分割,说明转置卷积的上采样动机、计算过程和矩阵转置含义,并整理全卷积网络 FCN 从 CNN 特征到逐像素类别预测的完整流程。

7.1 语义分割

7.1.1 定义

语义分割(Semantic Segmentation)对图像中的每一个像素进行分类。

设输入图像为:

$$ X\in\mathbb R^{H\times W\times C_{\mathrm{in}}}, $$

网络通常输出每个像素对 $K$ 个语义类别的分数:

$$ Z\in\mathbb R^{H\times W\times K}. $$

像素 $(i,j)$ 的预测类别为:

$$ \hat y_{ij}=\arg\max_{k\in{1,2,\ldots,K}} Z_{ijk}. $$

因此输出不是整张图的一个标签,而是一张与原图空间位置对应的类别图。

7.1.2 语义分割与实例分割

课件中的狗、猫示意图体现了两者的核心区别:

  • 语义分割:同一类别的所有像素使用同一语义标签。例如两只狗都标为 Dog。
  • 实例分割:不仅判断类别,还区分同类中的不同对象。例如两只狗分别标为 Dog 1、Dog 2。
任务 输出 是否区分同类实例
图像分类 整张图的类别 否
目标检测 每个目标的类别与边界框 是
语义分割 每个像素的语义类别 否
实例分割 每个对象独立的像素掩膜与类别 是

WARNING · 易错点 语义分割可以知道某个像素属于“狗”,但仅凭语义标签不能判断它属于第一只狗还是第二只狗。

7.2 为什么需要上采样

普通 CNN 常通过步幅卷积或池化逐步减小特征图:

$$ H\times W \longrightarrow \frac H2\times\frac W2 \longrightarrow \frac H4\times\frac W4 \longrightarrow\cdots $$

这样可以扩大感受野、提取高级语义并降低计算量,但语义分割最终需要恢复到像素级空间分辨率。

因此分割网络通常包含两个阶段:

  1. 下采样/编码:CNN 提取语义特征,空间尺寸逐渐减小。
  2. 上采样/解码:把低分辨率特征或类别分数恢复到较高分辨率。

转置卷积(Transposed Convolution)是可学习上采样的一种实现。

NOTE 普通卷积不一定减小尺寸:步幅 $s=1$ 且 padding 合适时,高宽可以不变。真正使尺寸减小的是步幅、池化或不补零等设置。

7.3 转置卷积的直观计算

7.3.1 散布并累加

设输入元素为 $X[i,j]$,卷积核为 $K$。对步幅 $s=1$、无 padding 的简单情形:

  1. 用 $X[i,j]$ 乘卷积核中的每个元素。
  2. 把所得矩阵放到输出中以 $(i,j)$ 为左上角的位置。
  3. 不同输入元素产生的矩阵若有重叠,就逐元素相加。

可写为:

$$ Y[i:i+k_h,\ j:j+k_w] \mathrel{+}= X[i,j]K. $$

更一般地,步幅为 $s$ 时,放置位置变为 $(is,js)$:

$$ Y[is:is+k_h,\ js:js+k_w] \mathrel{+}= X[i,j]K. $$

这正是课件公式“每个输入元素缩放一份卷积核,再放到对应位置并累加”的含义。

7.3.2 课件的数值例子

输入和卷积核均为 $2\times2$:

$$ X= \begin{bmatrix} 0&1\ 2&3 \end{bmatrix}, \qquad K= \begin{bmatrix} 0&1\ 2&3 \end{bmatrix}. $$

四个输入元素分别生成四个局部矩阵:

$$ 0K,\quad 1K,\quad 2K,\quad 3K, $$

并按输入位置错开后相加,得到:

$$ Y= \begin{bmatrix} 0&0&1\ 0&4&6\ 4&12&9 \end{bmatrix}. $$

重叠区域会相加。例如中心元素 $4$ 来自两份局部结果的叠加,而不是简单复制某个输入像素。

7.4 输出尺寸

对于一维尺寸,设输入长度为 $H_{\mathrm{in}}$、卷积核大小为 $k$、步幅为 $s$、padding 为 $p$、膨胀率为 $d$、额外输出补偿为 $o$,转置卷积输出长度为:

$$ H_{\mathrm{out}}

(H_{\mathrm{in}}-1)s-2p+d(k-1)+o+1. $$

二维情形对高、宽分别使用该公式。

课件例子中:

$$ H_{\mathrm{in}}=2, \quad k=2, \quad s=1, \quad p=0, \quad d=1, \quad o=0, $$

所以:

$$ H_{\mathrm{out}}=(2-1)\times1+2=3, $$

最终输出为 $3\times3$。

7.5 为什么叫“转置”卷积

7.5.1 卷积可以写成矩阵乘法

把输入和输出展平成向量后,一次普通卷积可以写为:

$$ \boldsymbol y=W\boldsymbol x. $$

若普通卷积把 $m$ 维输入映射到 $n$ 维输出,并且 $m>n$,则:

$$ W\in\mathbb R^{n\times m}. $$

对应的转置线性映射使用:

$$ W^{\mathrm T}\in\mathbb R^{m\times n}, $$

把 $n$ 维量映射回 $m$ 维空间:

$$ \tilde{\boldsymbol x}=W^{\mathrm T}\boldsymbol y. $$

深度学习框架通过重新安排输入、卷积核与步幅位置,高效实现这个转置线性算子,不需要显式构造巨大矩阵 $W$。

7.5.2 转置不等于求逆

转置卷积不是普通卷积的严格逆运算:

$$ W^{\mathrm T}\neq W^{-1} $$

通常成立。

如果普通卷积已经丢失空间信息,转置卷积不能凭空精确还原原图;它只是使用可训练参数学习一种上采样映射。

WARNING · 易错点 “转置卷积”名称来自卷积线性算子的转置,不表示把卷积核矩阵简单做二维转置,也不表示一定能逆转原卷积。

7.6 转置卷积与其他上采样

方法 参数是否可学习 特点
最近邻插值 否 快,但可能出现块状边界
双线性插值 否 平滑、稳定,常与普通卷积组合
转置卷积 是 可直接学习上采样核,但不当的核大小与步幅可能产生棋盘格伪影

转置卷积“通常用于上采样”,但并非语义分割唯一的上采样方式。

7.7 全卷积网络 FCN

7.7.1 名称与核心思想

FCN 的全称是 Fully Convolutional Network,应译为全卷积网络,不是“全连接卷积神经网络”。

FCN 是使用深度网络进行语义分割的奠基性工作。它把分类 CNN 改造成可以接收图像并输出空间类别分数图的网络,实现端到端逐像素预测。

7.7.2 分类 CNN 为什么不能直接输出分割图

传统分类 CNN 最后常使用全连接层或全局汇聚,把空间特征压成单个类别向量:

$$ H'\times W'\times D \longrightarrow K. $$

一旦空间位置被压掉,就不能直接得到每个像素的类别。

FCN 保留空间结构,并让网络输出:

$$ H'\times W'\times K, $$

其中每个空间位置都有 $K$ 个类别分数。

7.7.3 全连接层、$1\times1$ 卷积与转置卷积的分工

课件把几个步骤压缩在一句话中,准确关系如下:

  1. 去掉固定长度分类输出;原始 FCN 可把分类网络的全连接层改写为卷积层。
  2. 使用 $1\times1$ 卷积把每个位置的 $D$ 维特征映射为 $K$ 个类别分数。
  3. 使用转置卷积或插值把低分辨率分数图上采样到输入图像尺度。

因此:

  • 卷积化的分类层或 $1\times1$ 卷积负责产生空间类别分数。
  • 转置卷积负责恢复空间分辨率。

不能简单说“转置卷积替换了全连接层”。

7.8 FCN 架构流程

课件第三页给出的主流程可以整理为:

输入图像
   ↓
CNN 主干提取低分辨率特征
   ↓
1×1 卷积:每个位置映射到 K 个类别分数
   ↓
转置卷积:上采样类别分数图
   ↓
逐像素预测图

张量形状可写为:

$$ H\times W\times C_{\mathrm{in}} \longrightarrow H'\times W'\times D \longrightarrow H'\times W'\times K \longrightarrow H\times W\times K. $$

课件网络图最后标出的 21 表示 21 个类别分数通道。在经典 PASCAL VOC 设置中,这通常对应 20 个前景类别加 1 个背景类别。

推理时沿类别维取最大值,得到最终分割图;训练时则把预测分数与逐像素标注比较,并通过反向传播同时学习 CNN、$1\times1$ 卷积和上采样层的参数。

7.9 像素级训练目标

对像素 $(i,j)$,先对 $K$ 个类别分数做 Softmax:

$$ p_{ijk}

\frac{e^{Z_{ijk}}} {\sum_{c=1}^{K}e^{Z_{ijc}}}. $$

若真实类别为 $y_{ij}$,逐像素交叉熵为:

$$ \ell_{ij}=-\log p_{ij,y_{ij}}. $$

整张图的损失通常对有效标注像素求平均:

$$ \mathcal L

\frac{1}{|\Omega|} \sum_{(i,j)\in\Omega}\ell_{ij}, $$

其中 $\Omega$ 是参与训练的像素集合;无效标签或需要忽略的像素不计入损失。

7.10 分辨率与细节恢复

只对最深层特征一次性上采样,虽然语义强,但边界可能较粗,因为编码阶段已经丢失很多细节。

FCN 的经典改进会融合浅层与深层信息:

  • 深层特征:语义强、分辨率低。
  • 浅层特征:定位和边缘细节较丰富、语义较弱。
  • 跳跃连接:把不同尺度的分数或特征融合后再上采样。

这形成了 FCN-32s、FCN-16s、FCN-8s 等逐步细化的思路。数字表示最终预测相对输入的有效步幅;步幅越小,通常空间细节越好,但计算量也更大。

7.11 易错点

  • 语义分割对每个像素分类,但不区分同类的不同实例;实例分割才区分 Dog 1、Dog 2。
  • 普通卷积不一定下采样,输出尺寸由卷积核、步幅、padding 和膨胀率共同决定。
  • 转置卷积是卷积线性算子的转置,不是卷积核的简单二维转置,也不是严格逆卷积。
  • 转置卷积的重叠位置要累加;课件 $2\times2$ 例子的输出是 $3\times3$。
  • FCN 是“全卷积网络”,不是“全连接卷积神经网络”。
  • FCN 不是直接用转置卷积替换全连接层:先得到空间类别分数图,再通过转置卷积或插值上采样。
  • $1\times1$ 卷积改变的是通道维,把特征通道映射为类别通道;它通常不改变高宽。
  • 上采样只恢复尺寸,不保证自动恢复全部边缘细节;融合浅层特征可以改善定位。
  • 分割输出通常包含背景类,因此课件图中的 21 通道可理解为 20 个目标类加背景类的经典设置。

相关知识

7.12 本节复盘

  • 语义分割输出逐像素语义标签,同类实例共享标签;实例分割还要区分每个对象。
  • CNN 下采样得到低分辨率语义特征,分割网络再通过上采样恢复像素级输出。
  • 转置卷积把每个输入元素缩放一份卷积核,并在对应输出位置散布、重叠累加。
  • 课件的 $2\times2$ 输入与 $2\times2$ 核在步幅 1、无 padding 时得到 $3\times3$ 输出。
  • “转置”来自普通卷积矩阵 $W$ 的转置算子 $W^{\mathrm T}$,不代表求逆。
  • FCN 把分类 CNN 改造成空间预测网络,是深度语义分割的奠基性结构。
  • FCN 的基本链路是 CNN 特征提取、$1\times1$ 卷积产生类别分数、转置卷积上采样、逐像素分类。
  • 像素级交叉熵监督每个有效位置,跳跃连接可以融合高级语义与浅层空间细节。