YOLO Vision 2026:

语义分割#

Semantic segmentation examples

Semantic segmentation 会为图像中的每个像素分配一个类别标签,生成覆盖整个场景的密集类别图。与分离单个对象的 instance segmentation 不同,语义分割会将同一类别的所有像素归为一组,无论存在多少个不同的对象。



Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial

语义分割模型的输出是一个单一的宽高类映射,其中每个像素值对应一个预测的类 ID。这使得语义分割非常适合场景解析任务,如自动驾驶、医学成像和土地覆盖映射。

提示

使用 task=semanticyolo semantic CLI 任务进行语义分割。YOLO26 语义分割模型文件使用 -sem 后缀,例如 yolo26n-sem.pt

模型#

Cityscapes 数据集上预训练的 YOLO26 语义分割模型如下所示。

模型会在首次使用时从最新的 Ultralytics 发布版本中自动下载。

模型尺寸
(像素)
mIoUval速度
RTX3090 PyTorch
(ms)
参数量
(M)
FLOPs
(B)
YOLO26n-sem1024 × 204878.34.4 ± 0.01.622.7
YOLO26s-sem1024 × 204880.88.4 ± 0.06.588.8
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3304.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.9384.7
YOLO26x-sem1024 × 204883.648.9 ± 0.240.2861.7
  • mIoUval 值是在 Cityscapes 验证集上使用单模型单尺度测得的。
    使用 yolo semantic val data=cityscapes.yaml device=0 imgsz=2048 复现
  • Speed 指标使用 RTX3090 实例在 Cityscapes 验证集图像上取平均值。
    使用 yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 复现
  • ParamsFLOPs 值适用于经过 model.fuse() 处理后的融合模型,该操作会合并 Conv 和 BatchNorm 层。预训练检查点保留了完整的训练架构,可能会显示更高的数值。

ADE20K 数据集上预训练的 YOLO26 语义分割模型如下所示。

模型会在首次使用时从最新的 Ultralytics 发布版本中自动下载。

模型尺寸
(像素)
mIoUval速度
RTX3090 PyTorch
(ms)
参数量
(M)
FLOPs
(B)
YOLO26n-sem-ade20k64038.83.9 ± 0.21.64.4
YOLO26s-sem-ade20k64045.64.2 ± 0.36.517.4
YOLO26m-sem-ade20k64047.44.7 ± 0.314.359.5
YOLO26l-sem-ade20k64049.78.3 ± 0.217.975.0
YOLO26x-sem-ade20k64051.59.9 ± 0.340.2168.1
  • mIoUval 值是在 ADE20K 验证集上使用单模型单尺度测得的。
    使用 yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640 复现,并将 yolo26n-sem-ade20k.pt 替换所需的 yolo26*-sem-ade20k.pt 检查点。
  • Speed 指标使用 RTX3090 实例在 ADE20K 验证集图像上取平均值。
    使用 yolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640 复现,并将 yolo26n-sem-ade20k.pt 替换为所需的 yolo26*-sem-ade20k.pt 检查点。
  • ParamsFLOPs 值适用于经过 model.fuse() 处理后的融合模型,该操作会合并 Conv 和 BatchNorm 层。预训练检查点保留了完整的训练架构,可能会显示更高的数值。

训练#

在 Cityscapes8 数据集上以图像尺寸 1024 训练 YOLO26n-sem 100 个 epochs。有关可用参数的完整列表,请参阅 Configuration 页面。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.yaml")  # build a new model from YAML
model = YOLO("yolo26n-sem.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

查看完整的 train 模式详情,请访问 Train 页面。语义分割模型也可以通过 Ultralytics Platform cloud training 进行训练。

数据集格式#

语义分割数据集使用单通道掩码图像(通常为 PNG),其中每个像素值代表一个类别 ID。值为 255 的像素会被视为“忽略”并在损失计算中被排除。数据集 YAML 应指定图像及其对应的掩码目录的路径。有关格式详细信息,请参阅 Semantic Segmentation Dataset Guide。支持的数据集包括 CityscapesADE20K。你可以使用 Ultralytics Platform annotation 管理和标注语义数据集。

验证#

在语义分割数据集上验证已训练的 YOLO26n-sem 模型 accuracy。显式传递 data,以便验证使用预期的目标数据集 YAML。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val(data="cityscapes.yaml")
metrics.miou  # mean Intersection over Union
metrics.pixel_accuracy  # overall pixel accuracy

预测#

使用训练好的 YOLO26n-sem 模型在图像上运行预测。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    semantic_mask = result.semantic_mask.data  # class map, shape (H,W), integer dtype selected by class count

查看完整的 predict 模式详情,请访问 Predict 页面。

结果输出#

YOLO 语义分割为每张图像返回一个 Results 对象。每个结果为整张图像存储一个密集类别图,而不是对象掩码列表。具有相同预测类别的像素共享相同的类别 ID,即使它们属于不同的对象也是如此。

属性类型形状描述
result.semantic_maskSemanticMask(H,W)密集类地图。
result.semantic_mask.datatorch.uint8
torch.int16
torch.int32
(H,W)类 ID;dtype 由类别数量决定。
result.masks--无实例掩膜。
result.boxes--无实例框/置信度。
result.masks.xy--无默认多边形。

有关所有任务特定于任务的 Results 字段,请参阅按任务划分的预测结果部分。

掩码边界质量

语义分割会预测一个稠密的类别图,然后将该图大小调整回图像形状以便进行可视化和下游使用。因此,当推理在远低于原始图像分辨率的 imgsz 下运行时,极细的结构(如车道线、球场线、杆子或电线)可能会看起来呈阶梯状。如果边界显得锯齿状,请首先使用更大的 imgsz(例如 10241280 或最接近源图像大小的实用值)重新测试原生的 PyTorch .pt 模型。只有在确认 .pt 输出可接受之后才使用导出的模型,因为低分辨率输入无法恢复预测类别图中不存在的精细细节。

实例分割与语义分割#

方面Instance Segmentation (task="segment")Semantic Segmentation (task="semantic")
预测目标单独分割每个检测到的对象为每个像素分配一个类 ID
输出字段result.masksresult.semantic_mask
主要数据result.masks.dataresult.semantic_mask.data
形状(N,H,W)(H,W)
像素值Binary mask values: 0 or 1Class IDs: 0, 1, 2, ...
数据类型 (Dtype)torch.uint8torch.uint8
torch.int16
torch.int32
同类对象作为单独的实例保留合并为同一类区域
多边形Yes, through result.masks.xy and result.masks.xyn默认无多边形输出
边界框和置信度Yes, through result.boxes无每个实例的边界框或置信度分数
典型用途计数、跟踪、裁剪、对象级测量密集场景标注、可行驶区域、土地覆盖、医疗区域

导出#

将 YOLO26n-sem 模型导出为其他格式,如 ONNX、CoreML 等。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-sem.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Export the model
model.export(format="onnx")

可用的 YOLO26 语义分割导出格式如下表所示。你可以使用 format 参数导出到任何格式,即 format='onnx'format='engine'。你可以直接在导出的模型上进行预测或验证,即 yolo predict model=yolo26n-sem.onnx。导出完成后,将显示针对你的模型的使用示例。

格式format 参数模型元数据参数
PyTorch-yolo26n-sem.pt-
TorchScripttorchscriptyolo26n-sem.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-sem.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-sem_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgsz, batch, device
MNNmnnyolo26n-sem.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-sem_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-sem_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-sem_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-sem_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-sem_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-sem_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-sem.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-sem_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-sem_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms

查看完整的 export 详情,请访问 Export 页面。

常见问题解答#

如何训练自定义数据集上的 YOLO26 语义分割模型?#

要在自定义数据集上训练 YOLO26 语义分割模型,您需要准备 PNG 掩码图像,其中每个像素值代表一个类 ID (0, 1, 2, ...),值为 255 的像素在训练过程中会被忽略。创建一个指向您的图像和掩码目录的数据集 YAML 文件,然后进行训练:

示例
from ultralytics import YOLO

# Load a pretrained YOLO26 semantic segmentation model
model = YOLO("yolo26n-sem.pt")

# Train the model
results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=512)

查看配置页面以获取更多可用参数。

实例分割和语义分割有什么区别?#

实例分割和语义分割都是像素级任务,但在关键方面有所不同:

  • Semantic segmentation 会为每个像素分配一个类别标签,但不区分同一类别的各个独立对象。例如,场景中的所有汽车共享相同的类别标签。
  • Instance segmentation 会分别识别每个独立对象,为每个对象生成不同的掩码,即使它们属于同一类别。

语义分割最适合自动驾驶和土地覆盖映射等场景理解任务,而当需要计数或跟踪单个对象时,则首选实例分割。

我可以使用实例分割数据来训练语义分割吗?#

可以。如果你的数据集使用 Ultralytics YOLO 多边形标签(每张图片一个 .txt),请从数据集 YAML 中省略 masks_dir,并确保数据集根目录下你的图片旁没有 masks/ 文件夹(仅凭它的存在就会触发 PNG 掩码模式,即使未设置 masks_dir)。加载器随后会在运行中将多边形转换为逐图语义掩码。对于多类数据集(N > 1),一个额外的 background 类别会自动追加到 names。对于单类数据集(N == 1),训练保持为 1 个类——你声明的类在掩码中变为 1,未覆盖的像素变为 0。详情请参阅语义分割数据集指南

语义分割支持哪些数据集?#

Ultralytics YOLO26 为多个语义分割数据集提供了内置配置:

  • Cityscapes: 包含 19 个类别的城市场景,广泛用于自动驾驶研究。
  • ADE20K: 一个包含 150 个类别的大规模场景解析数据集。

您也可以使用任何提供 PNG 掩码标注的自定义数据集,其中像素值对应于类 ID。

如何验证预训练的 YOLO26 语义分割模型?#

使用用于评估的数据集 YAML 验证预训练的 YOLO26 语义分割模型:

示例
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n-sem.pt")

# Validate the model
metrics = model.val(data="cityscapes.yaml")
print("Mean IoU:", metrics.miou)
print("Pixel Accuracy:", metrics.pixel_accuracy)

这些步骤将为您提供诸如平均交并比 (mIoU) 和像素准确度等验证指标,这些是评估语义分割性能的标准衡量指标。

如何将 YOLO26 语义分割模型导出为 ONNX 格式?#

使用 Python 或 CLI 命令将 YOLO26 语义分割模型导出为 ONNX 格式:

示例
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n-sem.pt")

# Export the model to ONNX format
model.export(format="onnx")

有关导出到各种格式的更多详情,请参考导出页面。

评论