3.4 从检测到像素级理解:图像分割
核心问题: 如果边界框还不够精细,模型如何进一步理解图像中每一个像素?
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
技术背景
核心问题
目标检测已经能告诉我们目标在哪里,但边界框仍然是粗粒度表示。医学影像、自动驾驶和遥感图像等任务通常需要更细粒度的空间理解。
关键概念
| 概念 | 简单解释 |
|---|---|
| 图像分割 | 对图像中的每个像素进行预测 |
| 语义分割 | 区分像素属于哪一类,但不区分同类实例 |
| 实例分割 | 既区分类别,也区分同类中的不同个体 |
| 编码器-解码器 | 先压缩提特征,再恢复空间分辨率 |
应用场景
- 自动驾驶:理解道路、行人、车辆区域
- 医学影像:分割器官、病灶、肿瘤区域
- 遥感分析:分割建筑、道路、农田、水体
思考问题
- 为什么图像分割比目标检测更细粒度?
- 为什么恢复空间分辨率是一个难点?
本节学习目标
完成本节后,你应该能够:
- ✅ 理解目标检测与图像分割的区别
- ✅ 理解语义分割与实例分割的区别
- ✅ 理解编码器-解码器结构为什么适合分割任务
为什么需要分割
检测的局限
目标检测的输出通常是边界框:
目标:汽车
位置:一个矩形框但现实中,边界框只能粗略地表示目标位置:
- 框里会包含背景
- 目标边界并不精确
- 无法描述细长或不规则形状
也就是说,检测还停留在“目标级别”,而很多任务已经要求“像素级别”的理解。
分割的目标
图像分割要做的是:
对每个像素预测类别例如:
- 这些像素属于道路
- 这些像素属于汽车
- 这些像素属于行人
- 这些像素属于背景
因此,分割比检测更细粒度,因为它把任务从“目标级别”推进到“像素级别”。
语义分割 vs 实例分割
语义分割
只关心像素属于哪一类。
两辆车 → 都标记为“车”适合:
- 场景理解
- 医学区域分析
- 道路/地表分类
实例分割
不仅要知道类别,还要区分同类中的不同个体。
两辆车 → 车1、车2 分开标记适合:
- 多目标交互场景
- 机器人抓取
- 复杂交通场景
编码器-解码器结构
图像分割常见的核心结构是:
输入图像
↓
编码器(提取高层特征)
↓
解码器(恢复空间分辨率)
↓
像素级预测图编码器做什么
编码器通常由CNN或Transformer骨干组成:
- 逐层提取更抽象的特征
- 降低空间分辨率
- 提高语义表达能力
解码器做什么
解码器负责把低分辨率特征重新映射回原始图像大小:
- 上采样
- 插值
- 转置卷积
- 特征融合
这一步是分割成功的关键,因为模型不仅要“看懂”,还要“画回来”。
从建模角度看,编码器负责压缩语义,解码器负责恢复空间,这正是分割任务需要的双向能力。
为什么skip connection重要
深层特征语义强,但空间细节弱;浅层特征空间细节强,但语义弱。
所以很多分割模型会使用 skip connection:
浅层特征 ───────┐
├→ 融合 → 更精细的输出
深层特征 → 解码器 ┘这样做的原因是:
- 深层特征帮助模型理解“这是什么”
- 浅层特征帮助模型保留“边界在哪里”
这正是 U-Net 等经典分割模型有效的原因。
它说明分割不是单纯把网络做深,而是要同时保留语义和细节。
为什么分割更难
图像分割比检测更难,主要因为它要求同时满足:
语义正确
- 每个区域类别要对
空间边界精确
- 不能只大概圈住,需要像素级精确
多尺度鲁棒性
- 大物体和小物体都要识别
计算成本更高
- 输出分辨率更高,预测量更大
所以分割任务是视觉理解从粗粒度走向细粒度的一步。
与后续章节的关系
图像分割也为后面的多模态理解做铺垫,因为很多任务都依赖更细粒度的视觉表示。
因此,分割帮助我们理解:视觉模型不只是认类别,而是在逐步提升空间理解能力。
代码实验
完整的代码示例位于:code/ch03_deep_learning_fast/detection_segmentation_demo.py
运行方式:
python code/ch03_deep_learning_fast/detection_segmentation_demo.py
图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 序列建模与一维信号处理
