Ultralytics YOLO27:
Get Started

语义分割数据集概览#

语义分割为图像中的每个像素分配一个类别标签。与实例分割不同,语义分割不会区分同一类别中的各个对象。训练目标是一张稠密类别图,其中每个像素都存储一个类别 ID。

本指南介绍 Ultralytics YOLO 语义分割模型使用的数据集格式,并列出可用于训练和验证的内置数据集配置。

支持的数据集格式#

支持两种标签格式。如果数据集 YAML 定义了 masks_dir 键,或者数据集根目录中图像旁边已经存在 masks/ 文件夹,数据集加载器就会选用 PNG 掩码;否则会回退到 YOLO 多边形标签。

PNG 掩码格式#

语义分割数据集为每个样本使用一个图像文件和一个掩码文件。掩码是单通道图像,通常为 PNG,其中每个像素值都是对应图像像素的类别索引。

  • 像素值 0、1、2、... 表示数据集 names 映射中的类别 ID。
  • 像素值 255 会被视为忽略标签,不参与损失和指标计算。
  • 掩码文件应与对应图像文件使用相同的主文件名,例如 frankfurt_000000_000294.png。
  • 默认情况下,掩码文件按 .png 查找;如果不存在,也接受其他受支持的图像扩展名。请使用 .png 或 .tiff 等无损格式,因为有损压缩(例如 .jpg)会破坏类别 ID 像素值。

默认目录结构会将图像和掩码保存在并行文件夹中。数据集 YAML 中的 masks_dir 值会替换 images 路径组件,以此查找掩码。

dataset/
├── images/
│   ├── train/
│   └── val/
└── masks/
    ├── train/
    └── val/

例如,当 masks_dir: masks 时,images/train/aachen_000000_000019.png 中的图像会与 masks/train/aachen_000000_000019.png 中的掩码配对。

YOLO 多边形标签格式#

如果你的数据集已经使用 Ultralytics YOLO 多边形标签(每张图像对应一个 .txt,其中包含 <class-index> <x1> <y1> <x2> <y2> ... 行),你可以直接用这些标签训练语义分割模型,无需转换为 PNG 掩码。有关逐行布局,请参阅实例分割数据集格式。

当数据集 YAML 未包含 masks_dir 且数据集根目录中图像旁边也不存在 masks/ 文件夹时,会自动选择此路径——删除或重命名任何遗留的 masks/ 文件夹,否则加载器会回退到 PNG 掩码模式,并改为在该文件夹中查找掩码。其行为如下:

  • 加载时会将多边形转换为每张图像对应的语义掩码,并按面积排序,使较小对象在重叠区域覆盖较大对象。
  • 多类别(names 中的 N > 1):对于未被任何多边形覆盖的像素,会在你声明的类别之后追加一个 background 类别。模型会使用 N + 1 个输出通道构建,最后一个通道表示背景。
  • 单类别(names 中的 N == 1):仍按 1 个类别进行训练。掩码为二值掩码,你声明的类别以 1 表示,未被任何多边形覆盖的像素则以 0 表示。不会向 names 添加额外的背景类别。
  • 通过数据增强填充的像素(例如随机裁剪)仍使用 255 作为忽略标签。

如果你的数据已经标注为实例多边形,并且希望直接使用相同文件训练语义分割模型,请选择此路径。

数据集 YAML 格式#

语义分割数据集通过 YAML 文件配置。主要字段如下:

键说明
path数据集根目录。
train相对于 path 的训练图像路径,或绝对路径。
val相对于 path 的验证图像路径,或绝对路径。
test可选的测试图像路径。
masks_dir语义掩码使用的目录名称。省略此键(且数据集根目录中没有 masks/ 文件夹)即可切换到 YOLO 多边形标签格式。
names类别 ID 到类别名称的映射。
label_mapping从源数据集 ID 到训练 ID 或 ignore_label 的可选映射。
ultralytics/cfg/datasets/cityscapes8.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# Cityscapes semantic segmentation dataset (19 classes)
# Documentation: https://docs.ultralytics.com/datasets/semantic/cityscapes8
# Example usage: yolo semantic train data=cityscapes8.yaml model=yolo26n-sem.pt
# parent
# ├── ultralytics
# └── datasets
#     └── cityscapes8 ← downloads here (small subset)
#         └── images
#         └── masks

# Dataset root directory
path: cityscapes8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images

masks_dir: masks # semantic mask directory

# Cityscapes 19-class labels
names:
  0: road
  1: sidewalk
  2: building
  3: wall
  4: fence
  5: pole
  6: traffic light
  7: traffic sign
  8: vegetation
  9: terrain
  10: sky
  11: person
  12: rider
  13: car
  14: truck
  15: bus
  16: train
  17: motorcycle
  18: bicycle

# Map source label IDs to train IDs; ignore_label is converted to 255.
label_mapping:
  -1: ignore_label
  0: ignore_label
  1: ignore_label
  2: ignore_label
  3: ignore_label
  4: ignore_label
  5: ignore_label
  6: ignore_label
  7: 0
  8: 1
  9: ignore_label
  10: ignore_label
  11: 2
  12: 3
  13: 4
  14: ignore_label
  15: ignore_label
  16: ignore_label
  17: 5
  18: ignore_label
  19: 6
  20: 7
  21: 8
  22: 9
  23: 10
  24: 11
  25: 12
  26: 13
  27: 14
  28: 15
  29: ignore_label
  30: ignore_label
  31: 16
  32: 17
  33: 18

# Download URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/cityscapes8.zip

当源掩码 ID 与连续的训练类别 ID 不匹配时,使用 label_mapping。Cityscapes 和 ADE20K 包含映射,可将原始标签 ID 转换为 YOLO 语义分割训练 ID,并忽略未使用的标签。

用法#

使用 Python 或 CLI 训练 YOLO26 语义分割模型:

示例
from ultralytics import YOLO

# 加载预训练语义分割模型
model = YOLO("yolo26n-sem.pt")

# 在 Cityscapes8 语义分割数据集上训练
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

支持的数据集#

Ultralytics 为这些数据集提供语义分割数据集 YAML 文件。完整的预训练模型基准测试表请参阅语义分割任务页面。

  • Cityscapes:用于城市街景语义分割的数据集,包含 19 个训练类别。
  • Cityscapes8:包含 8 张图像的 Cityscapes 子集,适合快速测试和 CI 检查。
  • ADE20K:场景解析数据集,包含 150 个语义类别。

添加你自己的数据集#

选项 A — PNG 掩码#

  1. 将图像保存在拆分文件夹中,例如 images/train 和 images/val。
  2. 在对应的掩码文件夹中,为每张图像保存一个单通道掩码,例如 masks/train 和 masks/val。
  3. 确保掩码像素值是类别 ID。对于应忽略的像素,使用 255。
  4. 使用 path、train、val、masks_dir 和 names 创建数据集 YAML。
  5. 仅当你的掩码 ID 需要转换为连续训练 ID 时,才添加 label_mapping。
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks

names:
    0: background
    1: road
    2: building

选项 B — 多边形标签#

  1. 图像和 .txt 多边形文件的目录结构与实例分割完全相同。
  2. 使用 path、train、val 和 names 创建数据集 YAML — 省略 masks_dir。
  3. 确保数据集根目录中、图像旁边不存在 masks/ 文件夹 — 即使 YAML 中没有 masks_dir,只要该文件夹存在,加载器就会切换到 PNG 掩码模式。
  4. 不要在 names 中添加“background”条目。对于多类别数据集,加载器会自动追加一个类别;对于单类别数据集,训练仍保持 1 个类别 — 你声明的类别会成为掩码中的 1,未覆盖的像素则成为 0。
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

Ultralytics Platform 提供语义分割任务的多边形标注工具,以及 SAM 辅助的智能标注功能 — 你可以直接在浏览器中标注,并导出或训练生成的多边形标注数据集,无需手动设置此目录结构。

常见问题#

  • 语义分割掩码是密集像素图。每个像素存储一个类别 ID,每张训练图像对应一张掩码图像。Ultralytics YOLO 的实例分割标签使用包含多边形坐标的文本文件,每个目标实例占一行。

  • 像素值 255 用作忽略标签。这些像素不会参与损失和指标计算,适用于空白区域、未标注像素或训练标签集中不存在的类别。

  • 是。每个语义掩码的文件主名都应与对应图像相同。数据集加载器会将 images 目录部分替换为 masks_dir,并查找匹配的掩码文件;如果找不到 .png 掩码,则会回退到其他受支持的图像扩展名(.jpg、.tiff 等)——不过建议只使用无损格式,因为回退机制不会强制这一点。

  • 可以,前提是这些 ID 已与 names 类别 ID 匹配。如果源数据集使用非连续 ID,或包含应忽略的标签,则添加 label_mapping 配置段,将源像素值转换为训练 ID。

  • 可以。实例分割数据集使用 Ultralytics YOLO 多边形标签(每张图像一个 .txt,其中包含 <class-index> <x1> <y1> <x2> <y2> ... 行),这些文件也可用于语义分割 — 只需从数据集 YAML 中省略 masks_dir,并确保数据集根目录中、图像旁边不存在 masks/ 文件夹(只要该文件夹存在,即使未设置 masks_dir,也会触发 PNG 掩码模式)。随后,加载器会即时将多边形转换为逐图像掩码。对于多类别数据集(N > 1),会追加一个 background 类别,并将模型构建为具有 N + 1 个输出通道。对于单类别数据集(N == 1),训练仍保持 1 个类别 — 掩码会将你声明的类别显示为 1,未覆盖的像素显示为 0。

  • Ultralytics 提供可直接使用的数据集 YAML 文件,包括 Cityscapes(19 个城市场景类别)、用于测试流程的轻量级 Cityscapes8 子集,以及 ADE20K(150 个场景解析类别)。每个页面都介绍了准确的类别列表、下载步骤和经过验证的训练示例。

评论