ML 学习站
跳到正文

图像分割:像素级理解

语义/实例/全景分割, U-Net / Mask R-CNN / SAM。

45 分钟4 / 42,865
加载中...

图像分割旨在实现像素级理解,分为语义分割、实例分割和全景分割三大任务。语义分割为每个像素分配类别,不区分个体;实例分割为每个目标实例生成掩码和类别;全景分割则结合两者。评估指标方面,语义分割常用mIoU(平均交并比),实例分割则采用mAP(平均精度)。经典架构包括FCN、U-Net、SegNet、DeepLab v3+和PSPNet等。FCN通过反卷积上采样和跳跃连接融合特征,U-Net采用编码器-解码器结构和跳跃连接,在医学影像分割中表现优异。实例分割方面,Mask R-CNN通过添加掩码分支实现联合训练,YOLACT和SOLO则分别采用单阶段和位置分类方法。损失函数方面,语义分割常用交叉熵和Dice Loss,实例分割则结合分类、边界框和掩码损失。学完本章,读者能够理解图像分割的基本概念、常用模型和评估方法,并掌握U-Net等经典模型的训练和应用。

图像分割:像素级理解

检测给出"框", 分类给出"标签", 分割更进一步: 每个像素一个类别

这一章拆解语义分割、实例分割、全景分割三大任务。

1. 三大分割任务

语义分割 (Semantic Segmentation)

每个像素一个类别, 不区分个体:

  • 输出: H×W 矩阵, 每个值是类别 ID
  • 应用: 医学影像 (肿瘤区域) / 卫星图像 (地形分类) / 自动驾驶 (可行驶区域)

实例分割 (Instance Segmentation)

每个目标实例一个 mask + 类别:

  • 输出: N 个 (类别, mask, 置信度)
  • 应用: 图像编辑 (抠图) / 视频会议背景替换

全景分割 (Panoptic Segmentation)

语义 + 实例合并: 每个像素既知道类别, 也知道实例 ID (背景除外)。

2. 评估指标

语义分割: mIoU

mean Intersection over Union, 最常用:

mIoU = (1/C) × Σ (TP_c / (TP_c + FP_c + FN_c))

C 是类别数。Cityscapes 数据集 19 类, mIoU 70%+ 是 SOTA。

实例分割: mAP (类似检测)

mask IoU > 0.5 算正确, 然后算 mAP, 类似 COCO 检测。

3. 经典架构

FCN (Fully Convolutional Network, 2015)

语义分割的开山之作, 核心思想:

  • 把分类网络的 FC 层换成 1×1 Conv
  • 反卷积 (Transposed Conv) 上采样到原图尺寸
  • 跳跃连接融合浅层细节

缺点: 反卷积上采样产生棋盘格 (checkerboard artifacts)。

U-Net (2015, 医学影像专用)

编码器-解码器 + 跳跃连接, 至今仍是医学分割 baseline:

Encoder (下采样):  Conv→Pool→Conv→Pool→...
                     ↓ 跳跃连接
Decoder (上采样):  UpConv→Concat→Conv→UpConv→...

特点:

  • 对称结构, 编码器提取语义, 解码器恢复细节
  • 跳跃连接把编码器的高分辨率特征直接拼接到解码器
  • 医学影像 (细胞 / 器官) 小数据上特别强

SegNet (2016)

类似 U-Net, 但用 max-pooling indices 上采样 (节省内存)。

DeepLab v3+ (2018)

Google 提出, 多个改进:

  • ASPP (Atrous Spatial Pyramid Pooling): 多个 dilation rate 并行, 捕获多尺度
  • Encoder-Decoder: 兼顾精度和细节
  • Cityscapes mIoU 82%

PSPNet (2017)

金字塔池化模块 (PPM): 不同尺度池化后 concat, 捕获全局上下文。

4. 实例分割

Mask R-CNN (2017, 何恺明)

Faster R-CNN + mask 分支:

Faster R-CNN:
  image → backbone → RPN → RoI Align → [cls, box]
                              ↓
                         + Mask head (FCN, 输出 m×m mask)
  • 类别 + 边界框 + mask 三个任务联合训练
  • mAP mask ~37% on COCO

YOLACT / YOLACT++ (2019)

单阶段实例分割, 实时性好:

  • 每个 instance 生成 k 个 prototype mask + 每实例 N 个系数
  • mask = prototype × 系数线性组合

SOLO / SOLOv2 (2020)

把实例分割当作"位置分类":

  • 划网格, 每个格子预测 instance mask
  • 完全 anchor-free, 简单优雅

5. 损失函数

语义分割: Cross-Entropy + Dice Loss

CE = CrossEntropyLoss()(logits, labels)  # 像素级分类
Dice = 1 - (2 × |pred ∩ gt| + smooth) / (|pred| + |gt| + smooth)
Total = CE + Dice

Dice Loss 对小目标 / 类别不平衡更友好。

实例分割: L_cls + L_box + L_mask

mask 分支用 per-pixel sigmoid + binary CE, 平均成 m×m 输出。

6. 实战:U-Net 训练医学影像

import segmentation_models_pytorch as smp

model = smp.Unet(
    encoder_name="resnet50",        # backbone
    encoder_weights="imagenet",     # 预训练
    in_channels=3,                  # RGB
    classes=1,                      # 2 类分割 (肿瘤/背景)
)

loss = smp.losses.DiceLoss(smp.losses.BCEWithLogitsLoss(), mode='binary')
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4)

for img, mask in train_loader:
    pred = model(img)
    l = loss(pred, mask)
    optimizer.zero_grad()
    l.backward()
    optimizer.step()

10 分钟训完一个器官分割模型, Dice > 0.9。

7. 数据集

数据集任务类别规模
Pascal VOC 2012语义2110K
Cityscapes语义195K (街景)
COCO实例80118K
LVIS实例1203100K
ADE20K全景15020K
Medical Segmentation Decathlon语义数千

8. 进阶话题

  • 数据增强: RandomCrop / Flip / Elastic Deformation (医学) / Mosaic
  • 半监督: 仅 10% 标注也能量产 (Mean Teacher / FixMatch)
  • 域适应: CT 模型迁移到 MRI (CycleGAN / DANN)
  • 交互式分割: 用户点几下, 模型实时调整 (SAM / SAM2)
  • SAM (Segment Anything, Meta 2023): 基础模型, 零样本分割任意物体
  • 3D 分割: 点云 (PointNet++) / 体素 (3D U-Net) / 视频 (TubeR)

9. 模型选择

场景推荐模型
通用语义分割SegFormer / Mask2Former
医学影像nnU-Net (auto-config) / U-Net++
实例分割Mask2Former / YOLOv8-seg
实时分割STDC / PP-LiteSeg
零样本 / 提示式SAM / SAM2
街景Panoptic-DeepLab

总结

分割 = 像素级分类, 三大任务 (语义 / 实例 / 全景) 各有应用。从 U-Net 到 SAM, 模型越来越通用。

整个 CV 入门 4 章走完, 你应该掌握:

  • CNN 基础 (卷积 / 池化 / ResNet)
  • 迁移学习 (预训练 + 微调)
  • 目标检测 (R-CNN / YOLO)
  • 图像分割 (U-Net / Mask R-CNN)

下一步看 GNN (图神经网络) 还是 AutoML?

章末小测验

检验你对《图像分割:像素级理解》的掌握程度。

1

语义分割、实例分割、全景分割的核心区别是?

2

U-Net 的核心创新是?

3

SAM (Segment Anything, Meta 2023) 的核心创新是?

讨论区(0)

加载评论中...