Обзор наборов данных для семантической сегментации#
Семантическая сегментация присваивает метку одного класса каждому пикселю на изображении. В отличие от сегментации экземпляров, семантическая сегментация не разделяет отдельные объекты одного класса. Целевым объектом обучения является плотная карта классов, где каждый пиксель хранит идентификатор класса.
Это руководство объясняет формат набора данных, используемый моделями семантической сегментации Ultralytics YOLO, и перечисляет встроенные конфигурации наборов данных, доступные для обучения и валидации.
Поддерживаемые форматы наборов данных#
Поддерживаются два формата меток. Загрузчик датасета выбирает PNG-маски, когда в YAML-файле датасета определен ключ masks_dir или когда папка masks/ уже существует рядом с твоими изображениями в корне датасета; в противном случае он переключается на полигональные метки YOLO.
Формат масок PNG#
Наборы данных для семантической сегментации используют один файл изображения и один файл маски на образец. Маска — это одноканальное изображение (обычно в формате PNG), где значение каждого пикселя является индексом класса для соответствующего пикселя изображения.
- Значения пикселей
0,1,2, ... представляют идентификаторы классов из сопоставления датасетаnames. - Значение пикселя
255обрабатывается как метка игнорирования и исключается из вычисления потерь и метрик. - Файлы масок должны иметь то же базовое имя (stem), что и соответствующие им файлы изображений, например
frankfurt_000000_000294.png. - Маски по умолчанию определяются как
.png; если они отсутствуют, принимаются и другие поддерживаемые расширения изображений. Используй форматы без потерь, такие как.pngили.tiff, поскольку сжатие с потерями (например,.jpg) искажает значения пикселей идентификаторов классов.
Макет по умолчанию хранит изображения и маски в параллельных папках. Значение masks_dir из YAML-файла датасета заменяет компонент пути images для поиска масок.
dataset/
├── images/
│ ├── train/
│ └── val/
└── masks/
├── train/
└── val/Например, изображение по пути images/train/aachen_000000_000019.png сопрягается с маской по пути masks/train/aachen_000000_000019.png, когда masks_dir: masks.
Формат полигональных меток YOLO#
Если твой датасет уже содержит полигональные метки Ultralytics YOLO (по одному .txt на изображение со строками <class-index> <x1> <y1> <x2> <y2> ...), ты можешь обучать семантическую сегментацию непосредственно по ним — конвертация в PNG-маски не требуется. См. формат датасета для сегментации экземпляров для макета на уровне строк.
Этот путь выбирается автоматически, когда в YAML-файле датасета отсутствует masks_dir и рядом с твоими изображениями в корне датасета нет папки masks/ — удали или переименуй любую оставшуюся папку masks/, иначе загрузчик вернется в режим PNG-масок и будет искать маски там. Поведение:
- Полигоны преобразуются в семантическую маску для каждого изображения во время загрузки, сортируясь по площади, чтобы меньшие объекты перекрывали большие в областях пересечения.
- Многоклассовый режим (
N > 1вnames): дополнительный классbackgroundдобавляется после твоих объявленных классов для пикселей, не охваченных ни одним полигоном. Модель строится сN + 1выходными каналами, и последний канал является фоном. - Одноклассовый режим (
N == 1вnames): по-прежнему обучается как 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 🚀 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Используй label_mapping, когда ID исходных масок еще не соответствуют непрерывным ID обучающих классов. Cityscapes и ADE20K включают отображения, которые преобразуют исходные ID меток в ID обучения семантической сегментации YOLO и игнорируют неиспользуемые метки.
Использование#
Обучи модель семантической сегментации YOLO26 с помощью Python или CLI:
from ultralytics import YOLO
# Load a pretrained semantic segmentation model
model = YOLO("yolo26n-sem.pt")
# Train on the Cityscapes8 semantic segmentation dataset
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)Поддерживаемые наборы данных#
Ultralytics предоставляет YAML-файлы датасетов семантической сегментации для этих датасетов. См. страницу задач семантической сегментации для полной таблицы бенчмарков предобученных моделей.
- Cityscapes: набор данных семантической сегментации городских уличных сцен с 19 обучающими классами.
- Cityscapes8: подмножество Cityscapes из 8 изображений для быстрых тестов и проверок CI.
- ADE20K: набор данных для разбора сцен со 150 семантическими классами.
Добавление собственного набора данных#
Вариант A — маски PNG#
- Сохраняй свои изображения в разделенных папках, таких как
images/trainиimages/val. - Сохраняй по одной одноканальной маске на изображение в зеркальных папках масок, таких как
masks/trainиmasks/val. - Убедись, что значения пикселей маски являются идентификаторами классов. Используй
255для пикселей, которые следует игнорировать. - Создай YAML-файл датасета с
path,train,val,masks_dirиnames. - Добавь
label_mappingтолько тогда, когда твои ID масок требуют преобразования в непрерывные ID обучения.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks
names:
0: background
1: road
2: buildingВариант B — полигональные метки#
- Расположи изображения и файлы полигонов
.txtточно так же, как для сегментации экземпляров. - Создай YAML-файл датасета с
path,train,valиnames— опустиmasks_dir. - Убедись, что рядом с твоими изображениями в корне датасета не существует папки
masks/— само ее присутствие переключает загрузчик в режим PNG-масок даже безmasks_dirв YAML. - Не добавляй запись "background" в
names. Для многоклассовых датасетов загрузчик добавляет ее автоматически; для одноклассовых датасетов обучение остается на уровне 1 класса — твой объявленный класс становится1в маске, а непокрытые пиксели становятся0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carUltralytics Platform предоставляет инструмент аннотации полигонов для семантической задачи, а также умную аннотацию с поддержкой SAM — размечай прямо в браузере, экспортируй полученный датасет с разметкой полигонами или обучаийся на нем без ручной настройки этой структуры.
FAQ#
Маски семантической сегментации — это плотные пиксельные карты. Каждый пиксель хранит ID класса, и на каждое обучающее изображение приходится одна маска. Метки экземплярной сегментации в Ultralytics YOLO используют текстовые файлы с координатами полигонов, по одной строке на каждый экземпляр объекта.
Значение пикселя
255используется в качестве метки игнорирования. Эти пиксели пропускаются при вычислении потерь и метрик, что полезно для пустых областей, неразмеченных пикселей или классов вне набора меток обучения.Да. Каждая семантическая маска должна иметь то же базовое имя файла, что и соответствующее изображение. Загрузчик датасета заменяет компонент директории
imagesнаmasks_dirи ищет подходящие файлы масок, возвращаясь к другим поддерживаемым расширениям изображений (.jpg,.tiffи т. д.), если маска.pngне найдена — хотя рекомендуются только форматы без потерь, так как резервный вариант этого не гарантирует.Да, если они уже соответствуют твоим ID классов
names. Если исходный датасет использует неконсекутивные (несмежные) ID или включает метки, которые следует игнорировать, добавь разделlabel_mapping, чтобы преобразовать исходные значения пикселей в ID обучения.Да. Датасеты сегментации экземпляров используют полигональные метки Ultralytics YOLO (по одному
.txtна изображение со строками<class-index> <x1> <y1> <x2> <y2> ...), и те же файлы можно повторно использовать для семантической сегментации — просто опустиmasks_dirиз YAML-файла датасета и убедись, что рядом с твоими изображениями в корне датасета нет папкиmasks/(само ее присутствие запускает режим PNG-масок даже без установленногоmasks_dir). Затем загрузчик на лету конвертирует полигоны в попиксельные маски для каждого изображения. Для многоклассовых датасетов (N > 1) добавляется дополнительный классbackground, и модель создается сN + 1выходными каналами. Для одноклассовых датасетов (N == 1) обучение остается на уровне 1 класса — маска показывает твой объявленный класс как1, а непокрытые пиксели как0.Ultralytics включает готовые к использованию YAML-файлы датасетов для Cityscapes (19 классов городского окружения), легкого подмножества Cityscapes8 для тестирования пайплайна и ADE20K (150 классов разбора сцен). На каждой странице документирован точный список классов, шаги загрузки и проверенный пример обучения.