⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

3.4 从检测到像素级理解:图像分割

核心问题: 如果边界框还不够精细,模型如何进一步理解图像中每一个像素?

在线 Notebook

对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明


技术背景

核心问题

目标检测已经能告诉我们目标在哪里,但边界框仍然是粗粒度表示。医学影像、自动驾驶和遥感图像等任务通常需要更细粒度的空间理解。

关键概念

概念简单解释
图像分割对图像中的每个像素进行预测
语义分割区分像素属于哪一类,但不区分同类实例
实例分割既区分类别,也区分同类中的不同个体
编码器-解码器先压缩提特征,再恢复空间分辨率

应用场景

  • 自动驾驶:理解道路、行人、车辆区域
  • 医学影像:分割器官、病灶、肿瘤区域
  • 遥感分析:分割建筑、道路、农田、水体

思考问题

  • 为什么图像分割比目标检测更细粒度?
  • 为什么恢复空间分辨率是一个难点?

本节学习目标

完成本节后,你应该能够:

  1. ✅ 理解目标检测与图像分割的区别
  2. ✅ 理解语义分割与实例分割的区别
  3. ✅ 理解编码器-解码器结构为什么适合分割任务

为什么需要分割

检测的局限

目标检测的输出通常是边界框:

目标:汽车
位置:一个矩形框

但现实中,边界框只能粗略地表示目标位置:

  • 框里会包含背景
  • 目标边界并不精确
  • 无法描述细长或不规则形状

也就是说,检测还停留在“目标级别”,而很多任务已经要求“像素级别”的理解。

分割的目标

图像分割要做的是:

对每个像素预测类别

例如:

  • 这些像素属于道路
  • 这些像素属于汽车
  • 这些像素属于行人
  • 这些像素属于背景

因此,分割比检测更细粒度,因为它把任务从“目标级别”推进到“像素级别”。


语义分割 vs 实例分割

语义分割

只关心像素属于哪一类。

两辆车 → 都标记为“车”

适合:

  • 场景理解
  • 医学区域分析
  • 道路/地表分类

实例分割

不仅要知道类别,还要区分同类中的不同个体。

两辆车 → 车1、车2 分开标记

适合:

  • 多目标交互场景
  • 机器人抓取
  • 复杂交通场景

编码器-解码器结构

图像分割常见的核心结构是:

输入图像

编码器(提取高层特征)

解码器(恢复空间分辨率)

像素级预测图

编码器做什么

编码器通常由CNN或Transformer骨干组成:

  • 逐层提取更抽象的特征
  • 降低空间分辨率
  • 提高语义表达能力

解码器做什么

解码器负责把低分辨率特征重新映射回原始图像大小:

  • 上采样
  • 插值
  • 转置卷积
  • 特征融合

这一步是分割成功的关键,因为模型不仅要“看懂”,还要“画回来”。

从建模角度看,编码器负责压缩语义,解码器负责恢复空间,这正是分割任务需要的双向能力。


为什么skip connection重要

深层特征语义强,但空间细节弱;浅层特征空间细节强,但语义弱。

所以很多分割模型会使用 skip connection

浅层特征 ───────┐
                ├→ 融合 → 更精细的输出
深层特征 → 解码器 ┘

这样做的原因是:

  • 深层特征帮助模型理解“这是什么”
  • 浅层特征帮助模型保留“边界在哪里”

这正是 U-Net 等经典分割模型有效的原因。

它说明分割不是单纯把网络做深,而是要同时保留语义和细节。


为什么分割更难

图像分割比检测更难,主要因为它要求同时满足:

  1. 语义正确

    • 每个区域类别要对
  2. 空间边界精确

    • 不能只大概圈住,需要像素级精确
  3. 多尺度鲁棒性

    • 大物体和小物体都要识别
  4. 计算成本更高

    • 输出分辨率更高,预测量更大

所以分割任务是视觉理解从粗粒度走向细粒度的一步。


与后续章节的关系

图像分割也为后面的多模态理解做铺垫,因为很多任务都依赖更细粒度的视觉表示。

因此,分割帮助我们理解:视觉模型不只是认类别,而是在逐步提升空间理解能力。


代码实验

完整的代码示例位于:code/ch03_deep_learning_fast/detection_segmentation_demo.py

运行方式:

bash
python code/ch03_deep_learning_fast/detection_segmentation_demo.py

Segmentation Mask and Overlay

图3.4:分割任务的专属可视化。左图是输入图像,中图是像素级语义 mask,右图把 mask 叠加回原图并显式画出边界。它更直接地说明了分割不仅要判断”是什么”,还要精确回答”每一块区域和边界到底在哪里”。

代码文件: code/ch03_deep_learning_fast/detection_segmentation_demo.py
运行方式: python code/ch03_deep_learning_fast/detection_segmentation_demo.py

本节小结

图像分割把视觉理解推进到像素级:

  • 检测给出边界框,分割给出像素标签
  • 语义分割关注类别,实例分割区分个体
  • 编码器-解码器结构兼顾语义理解和空间恢复
  • skip connection帮助保留边界细节
  • 分割是从“看见目标”到“精细理解场景”的关键一步

从第 3 章主线上看,分割是视觉任务粒度继续上移的一步,也为后面多模态视觉理解铺路。


下一节: 3.5 序列建模与一维信号处理

本教程采用 CC BY-NC-SA 4.0 许可协议