图像分割(Image Segmentation)是计算机视觉(Computer Vision)中最重要的任务之一,它可以认为是目标检测(Object Detection)的进一步升级。
如果把整个计算机视觉的发展过程串起来,你会发现它们之间是层层递进的:
text
图像分类(Classification)
│
▼
目标检测(Detection)
│
▼
实例分割(Instance Segmentation)
│
▼
全景分割(Panoptic Segmentation)
│
▼
开放词汇分割(Open Vocabulary)
│
▼
SAM时代(Prompt Segmentation)
今天我会按照**"为什么需要 → 基本概念 → 各种分割任务 → 模型发展 → 原理 → Loss → 评价指标 → 实际工程"**这条路线系统讲一遍。
第一章 为什么需要图像分割
假设有这样一张图片:
+------------------------------------+
| |
| 一只猫坐在草地上 |
| |
+------------------------------------+
如果是分类(Classification):
输出:
Cat
只知道:
这是猫。
不知道猫在哪里。
如果是目标检测(Detection)
输出:
┌────────────┐
│ Cat │
└────────────┘
得到:
类别
位置
也就是:
Cat
Bounding Box
但是:
##################
# #
# 猫 #
# #
##################
框里面还有:
背景
草地
尾巴外面
框非常粗糙。
很多任务需要知道:
每一个像素是不是猫。
于是:
出现了图像分割。
第二章 什么叫图像分割
一句话:
给图片中的每一个像素进行分类。
例如:
原图:
□□□□□□
□□猫□□□
□□猫□□□
□□猫□□□
□□□□□□
输出Mask:
000000
001100
001100
001100
000000
这里:
1 = 猫
0 = 背景
所以:
分割最终输出的是:
Mask(掩码)
而不是Box。
Mask是什么?
就是:
和原图一样大的二维矩阵。
例如:
图片:
640×640
Mask也是:
640×640
每个像素:
0
或者
1
或者:
0
1
2
3
...
表示类别。
第三章 图像分割有哪些类型
这是最重要的一章。
很多人把这些搞混。
其实只有四种。
第一种 Semantic Segmentation(语义分割)
最简单。
例如:
两只猫
输出:
111111
111111
111111
111111
所有猫:
都是:
类别=Cat
不区分:
猫A
猫B
所以:
语义分割回答的是:
哪些像素属于猫?
不是:
哪只猫?
例如:
背景:
0
猫:
1
狗:
2
天空:
3
整个Mask:
333333333
000111110
000111110
222222220
只有类别。
应用:
道路分割
医学
土地分割
卫星遥感
代表模型:
- FCN
- U-Net
- DeepLab
- PSPNet
第二种 Instance Segmentation(实例分割)
实例分割就是:
Detection+
Semantic Segmentation
例如:
两只猫
输出:
Cat 1
Mask1
Cat 2
Mask2
也就是说:
每一只猫:
都有自己的Mask。
例如:
11110000
11110000
00002222
00002222
这里:
1 = 第一只猫
2 = 第二只猫
所以:
实例分割输出的是:
类别
Box
Mask
三样东西。
代表模型:
- Mask R-CNN
- YOLACT
- SOLO
- YOLOv8
- YOLO11
第三种 Panoptic Segmentation(全景分割)
这是:
Semantic
Instance
结合。
例如:
图片:
天空
树
路
汽车
人
其中:
天空
树
路
属于:
Stuff(不可数)
而:
人
汽车
属于:
Thing(可数)
Panoptic:
要求:
背景全部分类
目标全部区分实例
例如:
天空
天空
天空
树
树
汽车1
汽车2
道路
道路
代表模型:
- Panoptic FPN
- Mask2Former
第四种 Prompt Segmentation(SAM时代)
这几年最火。
代表:
- Segment Anything Model
- SAM 2
以前:
输入:
图片
输出:
Mask
现在:
输入:
图片
+
Prompt
Prompt可以是:
点:
●
框:
□□□□□
文字:
dog
甚至:
另一张Mask。
然后:
SAM自动分割。
这就是Prompt Segmentation。
第四章 图像分割的发展历史
2015
FCN
↓
2017
U-Net
↓
PSPNet
↓
DeepLab V3
↓
Mask R-CNN
↓
YOLACT
↓
SOLO
↓
Mask2Former
↓
SAM
↓
SAM2
↓
Grounded-SAM
↓
YOLO11-Seg
其中:
真正改变整个行业的是:
- U-Net(医学)
- Mask R-CNN(实例分割)
- Segment Anything Model(基础模型时代)
第五章 图像分割的核心原理
本质上:
分割就是:
Dense Prediction(密集预测)
检测:
预测:
几十个框
分割:
预测:
几十万个像素
例如:
640×640图片:
640×640
=
409600
个像素
每一个像素:
都要预测类别。
所以:
输出:
409600次分类
因此:
最后一层通常输出:
H
×
W
×
Classes
例如:
640
×
640
×
20
表示:
每个像素:
20分类。
第六章 Instance Segmentation 是怎么做出来的
例如:
YOLO11 Seg。
除了检测头:
Box
Class
Confidence
还增加:
Mask Head
Mask Head输出:
32维Prototype
然后:
每个目标:
预测:
32个Mask Coefficient
最终:
Mask
=
Prototype
×
Coefficient
得到:
实例Mask。
所以:
YOLO不是直接预测640×640Mask。
而是:
预测:
Prototype
+
Coefficient
速度非常快。
第七章 常见Loss
分割Loss很多。
最经典:
BCE Loss
逐像素分类。
例如:
预测:
0.9
GT:
1
计算Binary Cross Entropy。
Dice Loss
医学最常见。
公式思想:
Overlap越大
Loss越小
Dice:
2×Intersection
------------------
Prediction+GT
优点:
类别不平衡非常稳定。
IoU Loss
Mask IoU:
Intersection
/
Union
越来越多模型直接优化Mask IoU。
Focal Loss
解决:
背景
>>
目标
的问题。
Dice + BCE
医学里几乎标配。
第八章 常见评价指标
最重要:
Pixel Accuracy
像素准确率:
预测正确像素
/
全部像素
简单。
但是:
背景很多时:
没有意义。
IoU
Mask
交集
/
并集
最经典。
mIoU
Mean IoU。
所有类别:
IoU平均。
这是:
语义分割第一指标。
Dice
医学第一指标。
很多论文:
直接:
Dice=95%。
AP
实例分割:
也是:
AP50
AP75
mAP
和检测类似。
第九章 图像分割的数据集
经典数据集:
| 数据集 | 任务 | 类别数 |
|---|---|---|
| PASCAL VOC | 语义分割 | 21 |
| Cityscapes | 自动驾驶 | 19 |
| ADE20K | 场景解析 | 150 |
| COCO | 实例分割 | 80 |
| LVIS | 长尾实例分割 | 1200+ |
第十章 图像分割在工业中的应用
图像分割已经广泛应用于多个行业:
| 行业 | 典型任务 |
|---|---|
| 医疗 | 肿瘤、器官、病灶分割 |
| 自动驾驶 | 道路、车道线、车辆、行人分割 |
| 遥感 | 建筑、农田、河流、森林分割 |
| 工业检测 | 划痕、裂纹、焊缝、缺陷分割 |
| 农业 | 作物、杂草、果实分割 |
| 机器人 | 抓取目标、场景理解 |
| AR/VR | 人像抠图、背景替换 |
| 电商 | 商品抠图、虚拟试穿 |
总结:一张图理解图像分割体系
text
图像分类
│
▼
知道是什么
│
▼
目标检测
│
▼
知道是什么 + 在哪里(Box)
│
▼
语义分割
│
▼
知道每个像素属于什么类别
│
▼
实例分割
│
▼
知道每个像素属于哪一个具体目标
│
▼
全景分割
│
▼
整个场景所有像素都有语义,所有目标都有实例ID
│
▼
SAM / Prompt Segmentation
│
▼
通过点、框、文本等提示即可分割任意目标