图像分割与U-Net系列模型解析

1.图像分割

虽然图像分割(Image Segmentation)与目标检测(Object Detection)都属于计算机视觉中的视觉识别任务,但它们的目标、输出形式和应用场景各不相同:

  • 目标检测(Object Detection):找出图像中有哪些物体,并框出每个物体的位置,比如说检测行人、车辆,以边界框 + 类别标签为输出形式。
  • 图像分割(Image Segmentation):精确地标出图像中每个像素属于哪个类别,以每个像素的类别标签为输出形式。

举个例子:

  • 左图是目标检测任务,把人框出来。
  • 右图是图像分割任务,每个像素都需要判断是属于“人”还是背景,类似于 Photoshop 中的“抠图”。

图像分割任务可以分为:

1.语义分割(Semantic Segmentation)

把图像中的像素分为不同类别,同类的像素标注为相同颜色,不用区分个体。例如,如下图中5个人都被标注为“人类”类别,不需要区分谁是谁。

2.实例分割(Instance Segmentation)

不仅区分类别,还要区分每个实例。例如下图中5个人都属于“人类”类别,但每个人都需要被单独标记出来。

目标检测中我们需要预测的是几个坐标点(回归问题),而图像分割中我们需要对每一个像素点做分类,最基础的图像分割是前景 vs 背景(二分类),更高级一点的是多类别语义分割实例分割
换句话说,图像分割就是一个逐像素的分类任务(per-pixel classification)

2.分割任务损失函数

在图像分割任务中,我们的目标是对图像中的每一个像素点进行分类——判断它是属于前景(如人、车、树等)还是背景。那我们该如何衡量模型预测的效果好坏呢?和其他深度学习任务一样,我们也需要一个损失函数。而图像分割中最常用的损失函数有两个加权交叉熵损失(Weighted Cross Entropy Loss)以及Focal Loss

1.加权交叉熵损失(Weighted Cross Entropy Loss)

1. 逐像素的交叉熵损失

在最基础的语义分割任务中,我们对每个像素点预测其类别,并与真实标签进行比较,这和图像分类任务是一样的,只不过粒度从“整张图”变成了“每个像素”,这就是交叉熵损失函数(Cross Entropy Loss),公式如下:
$$\mathcal{L}{CE} = - \sum{i} y_i \log(p_i)$$
其中:

  • $i$ 类别索引,表示当前样本可能属于的各个类别
  • $y_i$ 是真实标签(通常是one-hot编码)
  • $p_i$ 是模型对该像素属于类别 $i$ 的预测概率

2. 加入前景/背景的不平衡权重(加权交叉熵)

而在图像中,前景往往只占很小一部分,绝大多数像素都是背景。如果我们直接用普通交叉熵损失,那模型可能更倾向于“全部预测成背景”,这会导致训练不收敛或结果不理想。

因此,我们可以引入一个权重项,对前景像素赋予更高的权重,从而让模型更关注“稀有”的前景目标。这个权重可以根据前景和背景的像素数比例自动计算,也可以手动指定。
$$\mathcal{L}_{WCE} = - \alpha \cdot y \log(p) - (1 - \alpha) \cdot (1 - y) \log(1 - p)$$
其中:

  • $\alpha$ 是正样本(前景)的权重,值越大,模型对前景越敏感

2.Focal Loss

除了数量上的不平衡,其实还有一个更细致的问题——有些像素点很好判断(比如大片背景或目标内部),而有些像素点非常难判断(比如目标边缘、遮挡处)。我们希望模型更加关注这些难判断的像素点

这时候就要引入著名的Focal Loss
$$\mathcal{L}_{focal} = -\alpha (1 - p_t)^{\gamma} \log(p_t)$$
其中:

  • $p_t$ 表示模型对真实类别的预测概率
  • $\gamma$ 是调节因子,一般设为 2
  • $\alpha$ 是样本类别的权重(和上面公式一样)

这个公式的核心思想是:

  • 对于预测非常准确($p_t \approx 1$)的样本,损失值被显著缩小
  • 对于预测错误的样本($p_t$ 小),损失值被放大
    也就是说,Focal Loss 会自动弱化容易分类的像素点、增强难分类像素点的权重,从而引导模型重点学习更有价值的信息。

3.加权交叉熵+Focal Loss

加权交叉熵的关注点在于类别样本不均衡,而Focal Loss的关注点在于像素点难易程度不同

在实际任务中,我们可以将这两者结合起来使用,例如使用带权重的Focal Loss:
$$\mathcal{L} = - \alpha (1 - p_t)^\gamma \log(p_t)$$
其中:

  • 权重 α:物以稀为贵。 前景像素少,就要给它更高的权重,像打游戏爆稀有装备一样,越少越珍贵
  • 调节因子 γ:难者多得分。 越是难分类的像素(比如目标边缘),对训练越有价值,就像我们抄错题、练习难题一样,要多加关注

3.语义分割中的评估指标

训练完模型后,我们还需要评估模型的效果,IoU(Intersection over Union) 是语义分割中最常用的评估指标。

1.IoU(Intersection over Union)

IoU 表示的是预测区域与真实区域的交集与并集之比,公式如下:
$$\text{IoU} = \frac{\text{Intersection}}{\text{Union}}$$

  • Intersection(交集):预测为某类且真实也为该类的像素数量
  • Union(并集):预测为该类的像素数量 + 真实为该类的像素数量 − Intersection
    混淆矩阵中,IoU 的计算方式可以看作:
    $$\text{IoU}_\text{class} = \frac{TP}{TP + FP + FN}$$
    其中:
  • TP(True Positive):预测正确的正类
  • FP(False Positive):误判为该类的像素
  • FN(False Negative):漏判为其他类的像素

2.平均 IoU(mIoU)

由于语义分割通常包含多个类别,我们通常会计算所有类别的 IoU,然后取平均,得到 mean IoU (mIoU)
$$\text{mIoU} = \frac{1}{C} \sum_{c=1}^{C} \text{IoU}_c$$
这就像是多个类别下的 IoU 的加权平均,是衡量模型整体性能的核心指标。

4.U-Net 网络结构

U-Net 是一种非常经典的语义分割网络,最初发表于 2015-2016 年,专为医学图像分割设计,因为其结构简单后来被广泛应用于各种像素级任务。因为整体结构:像字母U的形状,所以叫U-Net

如下图,U-Net 是一个对称结构,左边下采样提取语义,右边上采样还原细节,跳跃连接帮助拼接高精度特征,最终生成和输入尺寸接近的像素级预测图。

1.结构设计

可以类比为“编码-解码”的思想(像 Sequence-to-Sequence)

模块 功能 类比
编码器(左边) 下采样,提取语义特征 像人眼看整体轮廓,从模糊到清晰
解码器(右边) 上采样,恢复空间分辨率,生成 mask 像放大镜一点点拼出目标的精细形状
跳跃连接(中间横线) 保留细节,连接浅层特征到深层输出 就像复习时要结合课本基础和考试重点一起理解

1.编码器(Contracting Path)

编码器的主要作用是,提取抽象语义特征 + 下采样。采用多个卷积 + ReLU + MaxPooling 层,逐步下采样(比如 256→128→64…),每个阶段是两个3 $\times$ 3卷积(蓝色箭头)+ ReLU,后跟一个2 $\times$ 2 max pooling(红色箭头)。随着层数加深,空间分辨率变小(572 → 284 → … → 28),通道数增多(64 → 128 → … → 1024),特征越粗,语义越强。
示例:

  • 第一层输入大小为 572×572×1(单通道图像)
  • 卷积后输出:568×568×64(因为 3×3 卷积没有 padding)
  • 然后 max pooling:下采样为 284×284×64

下采样(编码器)的作用:逐层抽象全局轮廓**​

  • 感受野扩大​:通过池化/卷积步长降低分辨率,每个神经元能覆盖更大图像区域,捕获整体结构(如器官形状、物体位置)
  • 高级语义提取​:深层网络识别抽象特征(如”这是肺部CT”而非像素级纹理),类似人类先看”大致轮廓”
  • 抗噪声干扰​:压缩空间信息后,对小位移和噪声更鲁棒

2.解码器(Expansive Path)

解码器的主要作用是上采样恢复原图尺寸 + 分割掩码生成。每个阶段是一次转置卷积(绿色箭头)进行上采样,然后将对应分辨率的特征图拼接(灰色箭头),再做两个 3 $\times$ 3 卷积(蓝色箭头)。
使用转置卷积(或上采样)逐步还原分辨率,每次上采样后,都把对应的编码器特征“跳跃连接”过来,拼接后再卷积。这样能结合深层的语义信息浅层的位置信息
示例:

  • 中间最底部是 28×28×1024
  • 上采样为 56×56×512,拼接编码器的 64×64×512
  • 然后卷积、ReLU 处理,输出通道逐渐减小

上采样(解码器)的作用:逐步恢复空间细节​

  • 定位精细化​:通过转置卷积/插值逐步放大特征图,结合跳跃连接(skip connection)注入编码器的底层细节(如边缘、纹理)
  • 多尺度特征融合​:跳跃连接将高层语义(”这是什么”)与底层细节(”边界在哪”)拼接,实现”轮廓指导细节”的分割
  • 分辨率恢复​:最终输出与输入同分辨率,实现像素级预测

3.跳跃连接(Skip Connection)

每下采样一次,保留当前的特征图,解码时,把对应分辨率的编码特征图复制并拼接到解码器中。这一步也叫:copy and crop。目的是防止上采样过程丢失空间信息,补充原始的细节和边缘特征。比如编码器在 128x128 层的特征,会跳到解码器的同尺寸上一起用。防止丢失空间细节,补回精细轮廓和边缘信息

4.最后一层输出(右上角)

使用一个 1×1 卷积(青色箭头) 将通道数变为类别数(图中为 2 类)。最终输出尺寸为:388×388×2(每个像素对应两个类别的概率)。

为啥尺寸变小了?(572→388)
因为卷积操作没有使用 padding,每次 3×3 卷积会减少 2 个像素,两次卷积减少 4 个像素,每层下采样都会累计空间损失,所以最终输出图比输入图小(用 crop 来对齐)。

5.U-Net 的特征融合

1. 为什么要做特征融合?

在深度学习做视觉任务时,总会强调“特征融合”。什么是特征融合?就是把不同层级(深浅不同)的特征信息整合起来,既有局部细节,也有全局语义。在 U-Net 结构中,典型的融合方式就是从左侧编码器(下采样路径)拿出浅层特征,传到右侧解码器(上采样路径)对应位置进行融合。如下图。

1.基本结构说明

每个节点 $X^{i,j}$ 表示一个特征图,来自某一层的卷积输出
$i$:表示网络的深度层级(从上到下)
$j$:表示在同一分辨率下的第几个操作阶段(从左到右)
图中三种箭头说明不同的信息流路径:

  • 下黑实箭头:下采样(Down-sampling)
  • 上黑实箭头:上采样(Up-sampling)
  • 虚线箭头:跳跃连接(Skip Connection)
  • 所有连接都是基于 卷积操作(节点本身)

U-Net 之所以分割效果好,关键就在于它把“高分辨率细节特征”和“低分辨率语义特征”融合在了一起。

2.跳跃连接(Skip Connections)

每次下采样后保留的特征(如 $X^{0,0}, X^{1,0}, X^{2,0}$…),会在解码阶段通过虚线跳跃连接到对应分辨率的上采样阶段(如 $X^{0,4}, X^{1,3}$…)。

深层特征语义强但空间信息模糊,浅层特征保留边缘细节但语义弱。跳跃连接能组合两者优点,形成精准分割。

3.拼接 + 卷积融合(Concat + Conv)

在执行上采样操作后,U-Net 会把,当前上采样结果,对应的跳跃特征图,进行 通道维度的拼接(concatenate),再通过卷积融合,生成新的特征图。
$$X^{2,2} = Conv([Up(X^{3,1}) ⊕ X^{2,0}])$$
把解码路径中的上采样结果和编码路径中的浅层特征拼接,再交给卷积融合,这一步实现了真正的“融合”。

4. 多尺度融合(层层递进)

从图中可见,最终输出 $X^{0,4}$ 是逐层融合浅层和深层特征得到的。每一级都融合了不同语义层级的特征,最终形成一个丰富多尺度信息的特征图

类比理解:

就像人做图像理解时,既需要看到整体(全局语义),也需要看细节(边界线条)。U-Net 就是“全景 + 放大镜”一起看。

6.U-Net++ 核心结构

1.整体框架设计:升级版的 U-Net

1.基础结构

  • 下采样(Down-sampling):通过卷积步长为2的方式,将特征图尺寸逐步减半(例如:96 → 48 → 24 → 12 → 6)
  • 上采样(Up-sampling):使用插值(如最近邻或双线性)将特征图尺寸恢复(例如:6 → 12 → 24 → 48 → 96)

2. 跳跃连接与特征融合

不仅连接当前层与对应的对称上采样层(如传统U-Net),还连接同一层级的多个历史特征图。每一层的输出可能融合了来自多个深度和广度的特征——类似 DenseNet 的密集连接思想,表现形式上是:
“当前节点 = 上采样特征 + 所有前层同级别节点的融合”。

2.网络结构核心思想:深度特征融合

1.融合机制

所有能拼接的特征图都尽可能进行融合,提高特征表达的丰富性,增强网络学习能力。类似 2017 CVPR Best Paper 中提出的 DenseNet 结构。

2. U-Net++ 的特征融合方式

类似于“多个路径、跨层连接、分支拼接”的机制,多层次、多尺度的特征信息被汇聚到一起。

3.辅助监督机制:多层损失引导训练

1.中间监督(Deep Supervision)

网络训练时,不只在最后输出层加损失函数,而是所有输出尺寸一致的位置都可以加损失函数(例如多个 96x96 大小的节点)。并且每个阶段都加以监督,因为这样有利于梯度传播、加速收敛、提升中间层质量。

就像看人不是只看最终是否考上大学,而是每一个阶段(小学、初中、高中)都要尽力做到最好,才能最终成功。同理,网络中每一个中间输出都应该被优化,才能提升整体性能。

U-Net++ 作为 U-Net 的增强版本,在分割、检测等 CV 任务中应用广泛,结构通用、效果优秀,主要改进在于:

  • 多级跳跃连接和特征融合机制,强化了跨层信息的整合
  • 多损失辅助监督机制,提高了模型的训练效率与精度

7.U-Net3+改进

U-Net 3+统一解码器、全尺度特征融合,结构简洁、效果更强、计算更高效。

模型 特征融合策略 改进点 存在问题(相对)
U-Net++ 深度跳跃连接 + 密集嵌套结构(Nested skip) 强调语义一致性,引入了密集连接路径,减缓语义鸿沟 路径结构复杂、融合不彻底、解码器分支多、计算开销大
U-Net 3+ 全尺度融合(Full-scale skip connection) 引入统一解码器结构,将浅层细节和深层语义全融合,提升效果且结构简洁 跳跃路径更多,特征对齐成本更高

1.从密集嵌套连接 ➜ 全尺度融合

  • U-Net++ 通过构建密集的嵌套路径(Nested decoder),增强特征流动,但每一层的解码器是独立的
  • U-Net 3+ 则提出:每一层解码器只保留一个,将所有尺度的编码特征、解码特征全部统一融合,更高效、结构更简单
    本质:从“多路径拼接” ➜ “一次性大融合”

2.统一解码器设计(One Decoder to Rule Them All)

  • U-Net++:每个输出都对应一个不同的子解码器结构(解码器嵌套)
  • U-Net 3+:整个网络只保留一套统一的解码器路径,避免冗余计算,减少参数

3.多尺度上下文建模能力更强

在 U-Net 3+ 中,所有编码器特征通过上采样/下采样对齐后统一拼接,同时利用解码器中间特征,提供更深层次语义信息。这样做的结果是:在每一层融合中,模型能够同时看到:浅层,边界细节,中层:语义和上下文,深层:全局理解。

4.更轻量,训练和推理速度更快

虽然跳跃连接更多,但结构统一,避免了解码器重复设计,在保持准确率的前提下,整体计算量低于 U-Net++。

8.总结

本文主要讲了:

  • 图像分割任务,对比了目标检测差异
  • 语义/实例分割区别
  • 解析加权交叉熵与Focal Loss,解决样本不均衡问题
  • IoU/mIoU评估指标。

还重点剖析了U-Net系列:

  • U-Net如何通过编码-解码结构与跳跃连接实现特征融合的
  • U-Net++引入密集嵌套连接和中间监督增强语义一致性
  • U-Net3+创新全尺度融合与统一解码器,兼顾多尺度特征与计算效率,形成从基础到高阶的模型演进路径。