Обзор наборов данных для семантической сегментации#
Семантическая сегментация присваивает каждому пикселю изображения метку класса. В отличие от сегментации экземпляров, семантическая сегментация не разделяет отдельные объекты одного класса. Цель обучения — плотная карта классов, в которой каждому пикселю соответствует идентификатор класса.
В этом руководстве описан формат наборов данных для моделей Ultralytics YOLO семантической сегментации и перечислены встроенные конфигурации наборов данных, доступные для обучения и валидации.
Поддерживаемые форматы датасетов#
Поддерживаются два формата разметки. Загрузчик набора данных выбирает PNG-маски, если в YAML-файле набора данных задан ключ masks_dir или если в корневой папке набора данных рядом с изображениями уже есть папка masks/; в противном случае используются многоугольные метки YOLO.
Формат PNG-масок#
В наборах данных для семантической сегментации для каждого примера используются один файл изображения и один файл маски. Маска — это одноканальное изображение, обычно в формате PNG, в котором значение каждого пикселя обозначает индекс класса для соответствующего пикселя исходного изображения.
- Значения пикселей
0,1,2, ... обозначают идентификаторы классов из сопоставления набора данныхnames. - Значение пикселя
255считается меткой игнорирования и не учитывается при вычислении функции потерь и метрик. - Для файлов масок нужно использовать то же основное имя, что и для соответствующего файла изображения, например
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, а пиксели, не покрытые ни одним многоугольником, — как0. Вnamesдополнительный фоновый класс не добавляется. - Для пикселей, добавленных при дополнении изображения во время аугментации (например, случайного кадрирования), по-прежнему используется метка игнорирования
255.
Используй этот режим, если данные уже размечены многоугольниками экземпляров и ты хочешь обучить модель семантической сегментации на тех же файлах.
Формат YAML-файла набора данных#
Наборы данных для семантической сегментации настраиваются с помощью YAML-файлов. Основные поля:
| Ключ | Описание |
|---|---|
path | Корневая папка набора данных. |
train | Путь к изображениям для обучения относительно path или абсолютный путь. |
val | Путь к изображениям для валидации относительно path или абсолютный путь. |
test | Необязательный путь к изображениям для тестирования. |
masks_dir | Имя папки для семантических масок. Чтобы переключиться на формат многоугольных меток YOLO, не указывай этот ключ и убедись, что в корневой папке набора данных нет папки masks/. |
names | Сопоставление идентификаторов классов с названиями классов. |
label_mapping | Необязательное сопоставление идентификаторов исходного набора данных с идентификаторами для обучения или 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
# Загрузи предварительно обученную модель семантической сегментации
model = YOLO("yolo26n-sem.pt")
# Обучи модель на наборе данных Cityscapes8 для семантической сегментации
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. - Убедись, что значения пикселей масок — это ID классов. Для пикселей, которые нужно игнорировать, используй
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, даже если в YAML нетmasks_dir. - Не добавляй запись «background» в
names. Для наборов данных с несколькими классами загрузчик добавляет её автоматически; при обучении на одном классе остаётся 1 класс — объявленный тобой класс становится1в маске, а незакрытые пиксели становятся0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carUltralytics Platform предоставляет инструмент полигональной разметки для задачи семантической сегментации, а также Smart-разметку с поддержкой SAM: размечай прямо в браузере и экспортируй полученный набор данных с полигональными метками или обучай на нём без ручной настройки этой структуры.
Часто задаваемые вопросы#
Маски семантической сегментации — это плотные карты пикселей. Каждый пиксель хранит ID класса, и для каждого обучающего изображения предусмотрена одна маска. В Ultralytics YOLO для разметки сегментации экземпляров используются текстовые файлы с координатами полигонов — по одной строке на каждый экземпляр объекта.
В качестве метки игнорирования используется значение пикселя
255. Эти пиксели исключаются при вычислении функции потерь и метрик; это удобно для областей без меток, неразмеченных пикселей и классов, не входящих в набор обучающих меток.Да. Имя файла каждой семантической маски без расширения должно совпадать с именем соответствующего изображения. Загрузчик набора данных заменяет компонент каталога
imagesнаmasks_dirи ищет соответствующие файлы масок. Если маска.pngне найдена, загрузчик использует другие поддерживаемые расширения файлов изображений (.jpg,.tiffи т. д.), хотя рекомендуются только форматы без потерь, поскольку при таком поиске это не проверяется.Да, если они уже совпадают с 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 классов семантического разбора сцен). На странице каждого набора указаны точный список классов, инструкции по загрузке и проверенный пример обучения.