Ultralytics YOLO27:

使用 Ultralytics YOLO 进行语义分割#

Semantic segmentation examples

语义分割为图像中的每个像素分配类别标签,生成覆盖整个场景的密集类别图。不同于实例分割将各个对象分离开来,语义分割会将同一类别的所有像素归为一组,而不考虑其中包含多少个不同对象。



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.623.8
YOLO26s-sem1024 × 204880.88.4 ± 0.06.591.0
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3305.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.8388.2
YOLO26x-sem1024 × 204883.648.9 ± 0.240.1866.9
  • 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.5
YOLO26s-sem-ade20k64045.64.2 ± 0.36.517.5
YOLO26m-sem-ade20k64047.44.7 ± 0.314.459.6
YOLO26l-sem-ade20k64049.78.3 ± 0.217.975.2
YOLO26x-sem-ade20k64051.59.9 ± 0.340.2168.4
  • 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 层。预训练检查点保留完整的训练架构,因此显示的数量可能更高。

查看未发布的 YOLO27 预览版以了解初步的 Cityscapes mIoU 结果。

训练#

在 Cityscapes8 数据集上以图像大小 1024 训练 YOLO26n-sem,共训练 100 个周期。有关可用参数的完整列表,请参阅配置页面。

示例
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 模式详细信息。语义分割模型也可以通过 Ultralytics Platform 云训练进行训练。

数据集格式#

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

验证#

在语义分割数据集上验证已训练的 YOLO26n-sem 模型准确率。显式传入 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

Predict#

使用已训练的 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 模式详情。

结果输出#

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 重新测试原生 PyTorch .pt 模型,例如 10241280,或选择 最接近源图像尺寸的实际可用值。只有在确认 .pt 输出可接受后,才使用导出的模型, 因为低分辨率输入无法恢复预测类别图中原本不存在的细节。

实例分割与语义分割#

方面实例分割(task="segment"语义分割(task="semantic"
预测目标分别分割每个检测到的对象为每个像素分配一个类别 ID
输出字段result.masksresult.semantic_mask
主要数据result.masks.dataresult.semantic_mask.data
形状(N,H,W)(H,W)
像素值二值掩码值:01类别 ID:012、...
Dtypetorch.uint8torch.uint8
torch.int16
torch.int32
同类对象保留为独立实例合并到同一类别区域
多边形是,通过 result.masks.xyresult.masks.xyn默认不输出多边形
边界框和置信度是,通过 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.torchscriptimgszquantizedynamicnmsbatchdevice
ONNXonnxyolo26n-sem.onnximgszquantizedynamicsimplifyopsetnmsbatchdatafractiondevice
OpenVINOopenvinoyolo26n-sem_openvino_model/imgszquantizedynamicnmsbatchdatafractiondevice
TensorRTengineyolo26n-sem.engineimgszquantizedynamicsimplifyopsetworkspacenmsbatchdatafractiondevice
CoreMLcoremlyolo26n-sem.mlpackageimgszdynamicquantizenmsbatchdevice
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgszkerasquantizeopsetnmsbatchdatafractiondevice
TF GraphDefpbyolo26n-sem.pbimgszopsetbatchdevice
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgszquantizeopsetdatafractiondevice
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgszbatchdevice
MNNmnnyolo26n-sem.mnnimgszbatchdynamicquantizesimplifyopsetnmsdevice
NCNNncnnyolo26n-sem_ncnn_model/imgszquantizebatchdevice
IMX500imxyolo26n-sem_imx_model/imgszquantizedatafractionnmsdevice
RKNNrknnyolo26n-sem_rknn_model/imgszbatchnamequantizesimplifyopsetdatafractiondevice
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgszbatchdevice
Axeleraaxelerayolo26n-sem_axelera_model/imgszbatchquantizedatafractiondevice
DEEPXdeepxyolo26n-sem_deepx_model/imgszquantizesimplifyopsetdataoptimizedevice
Qualcomm QNNqnnyolo26n-sem_qnn.onnximgszbatchnamequantizesimplifyopsetdatafractiondevice
LiteRTlitertyolo26n-sem.tfliteimgszquantizebatchdatafractiondevice
Hailohailoyolo26n-sem_hailo_model/imgsznamequantizedatafractionsimplifyconfiou
Huawei Ascendascendyolo26n-sem_ascend_model/imgszbatchnamequantizeopsetsimplifynms
Apple Core AIcoreaiyolo26n-sem.aimodelimgszbatchquantize

nms=None 默认对外部 NMS 使用原始输出。设置 nms=False 以选择可用的无 NMS 检测头;不支持的格式将回退到其本机输出路径。上面的 nms 条目标识了可以通过 nms=True 嵌入 NMS 的格式。

请在导出页面查看完整的 export 详情。

常见问题#

  • 要在自定义数据集上训练 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)

    请查看配置页面,了解更多可用参数。

  • 实例分割和语义分割都是像素级任务,但有一个关键区别:

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

    语义分割最适合自动驾驶和土地覆盖制图等场景理解任务,而当计数或跟踪单个对象很重要时,则更适合使用实例分割。

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

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

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

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

  • 使用评估时所用的数据集 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) 和像素准确率等验证指标,这些指标是评估语义分割性能的标准方法。

  • 使用 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")

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

评论