Meet YOLO26: next-gen vision AI.

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/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

Используй 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#

  1. Сохрани свои изображения в соответствующих папках, например images/train и images/val.
  2. Сохрани по одной одноканальной маске для каждого изображения в зеркальных папках масок, таких как masks/train и masks/val.
  3. Убедись, что значения пикселей маски — это ID классов. Используй 255 для пикселей, которые нужно игнорировать.
  4. Создай YAML набора данных с path, train, val, masks_dir и names.
  5. Добавь 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

Link to this sectionВариант B — полигональные метки#

  1. Размести изображения и файлы полигонов .txt точно так же, как для экземплярной сегментации.
  2. Создай YAML набора данных с path, train, val и namesпропусти masks_dir.
  3. Не добавляй запись "background" в names. Для многоклассовых наборов данных загрузчик добавляет её автоматически; для одноклассовых наборов обучение остается на 1 классе — твой объявленный класс становится 1 в маске, а не покрытые пиксели становятся 0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

Link 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.

Комментарии