Image Segmentation
图像分割会将图像划分为像素区域,精确显示每个类别或物体的位置。内容比较语义分割、实例分割和全景分割。
图像分割是一项计算机视觉任务,通过为像素标注类别,将图像划分为不同区域。其输出是一组掩码,用于精确标明哪些像素属于哪个类别或物体。与通过矩形边界框定位物体、且框内会包含背景的目标检测相比,分割会描绘每个物体或区域的真实轮廓;与为整张图像分配一个标签的图像分类相比,分割能提供细致得多的信息。当决策取决于面积、轮廓或物体间的接触关系时,这种精度就至关重要,例如测量肿瘤或寻找汽车前方的可通行空间。
图像分割的类型#
分割任务中,像素标签的含义各不相同。计算机视觉将“可数物体”(thing),例如人和汽车,与“背景区域”(stuff),例如道路、草地和天空等无定形区域区分开来。
- 语义分割:为每个像素分配一个类别,覆盖可数物体和背景区域,并将同一类别的所有物体合并为一个区域。
- 实例分割:检测每个可数物体,并为其分配独立的掩码和 ID,因此两个相接的人仍会被分开;背景像素不会被标注。
- 全景分割:为每个像素分配一个类别,并为可数物体的像素添加实例 ID,将前两种方法统一起来。
- 交互式分割:根据用户点击、框选或文本提示所指示的内容返回掩码,Segment Anything Model (SAM) 等可提示模型就是采用这种方式。
前三种方法回答的问题各不相同,因此可以通过简短的判断来选择:
分割模型的工作原理#
传统方法根据强度、颜色和边缘等低级特征对像素进行分组,包括使用 Otsu 方法的阈值处理、区域生长、分水岭变换、k-means 颜色聚类和图割。OpenCV实现了其中几种方法;它们在传送带上逆光拍摄的零件等干净且受控的图像上仍然有用,但它们只能对像素分组,并不知道每个组代表什么。
深度学习模型从标注掩码中学习区域的边界和含义。U-Net等编码器-解码器网络会对图像进行下采样以捕获上下文,再上采样回完整分辨率,进行逐像素预测。Mask R-CNN和 YOLO 分割模型等实例模型会在目标检测器上附加掩码头;Mask2Former等 Transformer 模型则使用单一架构处理语义、实例和全景分割。可提示的基础模型将分割能力扩展到任意物体:SAM于 2023 年推出,在 1,100 万张图像的 11 亿个掩码上训练;SAM 2于 2024 年加入视频支持;SAM 3随后于 2025 年 11 月推出,能够分割文本提示中指定概念的每个实例。由于分割标签是多边形或逐像素掩码,绘制所需时间远长于边界框,这些可提示模型现在可以通过一次点击生成大量训练掩码草稿。
任务类型也决定了输出的形状。Ultralytics YOLO26提供两个独立的模型系列:-seg 用于实例分割,-sem 用于语义分割;在同一张照片上运行它们,就能看出两者的区别:
from ultralytics import YOLO
# 加载一个实例分割模型和一个语义分割模型
instance_model = YOLO("yolo26n-seg.pt")
semantic_model = YOLO("yolo26n-sem.pt")
# 使用这两个模型分割同一张街景图像
image = "https://ultralytics.com/images/bus.jpg"
instance_results = instance_model(image)
semantic_results = semantic_model(image)
# 实例分割输出:每个检测到的物体对应一个二值掩码,形状为 (objects, height, width)
print(instance_results[0].masks.data.shape)
# 语义分割输出:整张图像对应一张类别图,形状为 (height, width)
print(semantic_results[0].semantic_mask.data.shape)实例分割输出的第一维等于检测到的物体数量,因此可以统计实例分割结果。每种输出类型都有自己的指标:实例分割使用掩码平均精度均值(mAP),语义分割使用交并比(IoU)均值,全景分割则使用全景质量(PQ)。










