Link to this sectionОбзор наборов данных для семантической сегментации#
Семантическая сегментация присваивает одну метку класса каждому пикселю изображения. В отличие от экземплярной сегментации, семантическая сегментация не разделяет отдельные объекты одного и того же класса. Целью обучения является плотная карта классов, где каждый пиксель хранит ID класса.
Это руководство объясняет формат набора данных, используемый моделями семантической сегментации Ultralytics YOLO, и перечисляет встроенные конфигурации наборов данных, доступные для обучения и валидации.
Link to this sectionПоддерживаемые форматы наборов данных#
Поддерживаются два формата меток. Загрузчик набора данных выбирает путь в зависимости от того, определяет ли YAML-файл набора данных ключ masks_dir.
Link to this sectionФормат масок PNG#
Наборы данных для семантической сегментации используют один файл изображения и один файл маски на образец. Маска — это одноканальное изображение (обычно в формате PNG), где значение каждого пикселя является индексом класса для соответствующего пикселя изображения.
- Значения пикселей
0,1,2, ... представляют ID классов из сопоставленияnamesв наборе данных. - Значение пикселя
255рассматривается как метка игнорирования и исключается из вычислений функции потерь и метрик. - Файлы масок должны иметь тот же базовый путь (имя файла), что и соответствующие им файлы изображений, например
frankfurt_000000_000294.png. - Маски по умолчанию распознаются как
.png; если их нет, принимаются и другие поддерживаемые форматы изображений. Используй форматы без потерь, такие как.pngили.tiff, так как сжатие с потерями (например,.jpg) повреждает значения ID классов в пикселях.
Стандартная структура хранит изображения и маски в параллельных папках. Значение 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.
Link to this sectionФормат полигональных меток YOLO#
Если у твоего набора данных уже есть полигональные метки Ultralytics YOLO (один файл .txt на изображение со строками <class-index> <x1> <y1> <x2> <y2> ...), ты можешь обучать семантическую сегментацию напрямую на них — конвертация в маски PNG не требуется. См. формат набора данных для экземплярной сегментации для описания структуры строк.
Этот путь выбирается автоматически, если в YAML-файле набора данных отсутствует masks_dir. Поведение:
- Полигоны преобразуются в семантическую маску для каждого изображения во время загрузки, сортируясь по площади, чтобы меньшие объекты перекрывали большие в областях пересечения.
- Многоклассовый режим (
N > 1вnames): дополнительный классbackground(фон) добавляется после твоих объявленных классов для пикселей, не покрытых ни одним полигоном. Модель строится сN + 1выходными каналами, и последний канал является фоном. - Одноклассовый режим (
N == 1вnames): всё равно обучается как 1 класс. Маска будет бинарной: твой объявленный класс отображается как1, а пиксели, не покрытые полигоном, — как0. Дополнительный фоновый класс вnamesне добавляется. - Пиксели, добавленные при аугментации (например, при случайном обрезании), по-прежнему используют
255в качестве метки игнорирования.
Используй этот путь, если твои данные уже размечены как полигоны экземпляров и ты хочешь получить модель семантической сегментации на основе тех же файлов.
Link to this sectionФормат YAML набора данных#
Наборы данных для семантической сегментации настраиваются с помощью YAML-файлов. Основные поля:
| Ключ | Описание |
|---|---|
path | Корневой каталог набора данных. |
train | Путь к обучающим изображениям относительно path или абсолютный путь. |
val | Путь к валидационным изображениям относительно path или абсолютный путь. |
test | Опциональный путь к тестовым изображениям. |
masks_dir | Имя каталога, используемое для семантических масок. Пропусти этот ключ, чтобы переключиться на формат полигональных меток 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 и игнорируют неиспользуемые метки.
Link to this sectionИспользование#
Обучи модель семантической сегментации 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)Link to this sectionПоддерживаемые наборы данных#
Ultralytics предоставляет YAML-файлы наборов данных для семантической сегментации для следующих наборов:
- Cityscapes: Набор данных для семантической сегментации городских улиц с 19 классами для обучения.
- Cityscapes8: Подмножество Cityscapes из 8 изображений для быстрых тестов и проверок CI.
- ADE20K: Набор данных для анализа сцены со 150 семантическими классами.
Link to this sectionДобавление собственного набора данных#
Link to this sectionВариант 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: buildingLink to this sectionВариант B — полигональные метки#
- Размести изображения и файлы полигонов
.txtточно так же, как для экземплярной сегментации. - Создай YAML набора данных с
path,train,valиnames— пропустиmasks_dir. - Не добавляй запись "background" в
names. Для многоклассовых наборов данных загрузчик добавляет её автоматически; для одноклассовых наборов обучение остается на 1 классе — твой объявленный класс становится1в маске, а не покрытые пиксели становятся0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carLink to this sectionFAQ#
Link to this sectionВ чем разница между масками семантической сегментации и метками экземплярной сегментации?#
Маски семантической сегментации — это плотные пиксельные карты. Каждый пиксель хранит ID класса, и на каждое обучающее изображение приходится одна маска. Метки экземплярной сегментации в Ultralytics YOLO используют текстовые файлы с координатами полигонов, по одной строке на каждый экземпляр объекта.
Link to this sectionКакое значение пикселя игнорируется во время обучения?#
Значение пикселя 255 используется в качестве метки игнорирования. Эти пиксели пропускаются при вычислении функции потерь и метрик, что полезно для областей пустоты, неразмеченных пикселей или классов вне набора меток обучения.
Link to this sectionДолжны ли имена файлов масок совпадать с именами файлов изображений?#
Да. Каждая семантическая маска должна иметь тот же базовый путь, что и соответствующее изображение. Загрузчик набора данных заменяет компонент пути images на masks_dir и ищет соответствующие файлы масок.
Link to this sectionМогу ли я использовать исходные ID меток набора данных напрямую?#
Да, если они уже соответствуют ID твоих классов в names. Если исходный набор данных использует непоследовательные ID или включает метки, которые нужно игнорировать, добавь раздел label_mapping для преобразования значений пикселей источника в ID обучения.
Link to this sectionМогу ли я использовать свой набор данных экземплярной сегментации для обучения семантической сегментации?#
Да. Наборы данных экземплярной сегментации используют полигональные метки Ultralytics YOLO (один .txt на изображение со строками <class-index> <x1> <y1> <x2> <y2> ...), и эти же файлы можно повторно использовать для семантической сегментации — просто пропусти masks_dir в YAML-файле набора данных. Загрузчик преобразует полигоны в маски на лету. Для многоклассовых наборов (N > 1) добавляется дополнительный класс background, и модель строится с N + 1 выходными каналами. Для одноклассовых наборов (N == 1) обучение остается на уровне 1 класса — маска показывает твой объявленный класс как 1, а непокрытые пиксели как 0.