Семантическая сегментация#
Семантическая сегментация присваивает метку класса каждому пикселю на изображении, создавая плотную карту классов, которая охватывает всю сцену. В отличие от сегментации экземпляров, которая разделяет отдельные объекты, семантическая сегментация объединяет все пиксели одного класса вместе независимо от того, сколько различных объектов присутствует.
Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial
Результатом работы модели семантической сегментации является единая карта классов с высотой и шириной, где каждое значение пикселя соответствует предсказанному ID класса. Это делает семантическую сегментацию идеальной для задач парсинга сцен, таких как автономное вождение, медицинская визуализация и картирование земного покрова.
Используй task=semantic или задачу CLI yolo semantic для семантической сегментации. Файлы моделей семантической сегментации YOLO26 используют суффикс -sem, например yolo26n-sem.pt.
Модели#
Модели семантической сегментации YOLO26, предварительно обученные на датасете Cityscapes, показаны ниже.
Модели загружаются автоматически из последнего релиза Ultralytics при первом использовании.
| Модель | размер (пиксели) | mIoUval | Скорость RTX3090 PyTorch (мс) | параметры (М) | FLOPs (Б) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 22.7 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 88.8 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 304.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.9 | 384.7 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.2 | 861.7 |
- Значения mIoUval указаны для одной модели и одного масштаба на валидационном наборе Cityscapes.
Воспроизведи с помощьюyolo semantic val data=cityscapes.yaml device=0 imgsz=2048 - Метрики Speed усреднены по валидационным изображениям Cityscapes с использованием экземпляра RTX3090.
Воспроизведи с помощьюyolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 - Значения Params и FLOPs относятся к объединенной модели после
model.fuse(), которая объединяет слои Conv и BatchNorm. Предварительно обученные чекпоинты сохраняют всю архитектуру обучения и могут показывать больший счетчик.
Модели семантической сегментации YOLO26, предварительно обученные на датасете ADE20K, показаны ниже.
Модели загружаются автоматически из последнего релиза Ultralytics при первом использовании.
| Модель | размер (пиксели) | mIoUval | Скорость RTX3090 PyTorch (мс) | параметры (М) | FLOPs (Б) |
|---|---|---|---|---|---|
| YOLO26n-sem-ade20k | 640 | 38.8 | 3.9 ± 0.2 | 1.6 | 4.4 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4.2 ± 0.3 | 6.5 | 17.4 |
| YOLO26m-sem-ade20k | 640 | 47.4 | 4.7 ± 0.3 | 14.3 | 59.5 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8.3 ± 0.2 | 17.9 | 75.0 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9.9 ± 0.3 | 40.2 | 168.1 |
- Значения mIoUval указаны для одной модели и одного масштаба на валидационном наборе ADE20K.
Воспроизведи с помощьюyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, заменивyolo26n-sem-ade20k.ptна желаемый чекпоинтyolo26*-sem-ade20k.pt. - Метрики Speed усреднены по валидационным изображениям ADE20K с использованием экземпляра RTX3090.
Воспроизведи с помощьюyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, заменивyolo26n-sem-ade20k.ptна желаемый чекпоинтyolo26*-sem-ade20k.pt. - Значения Params и FLOPs относятся к объединенной модели после
model.fuse(), которая объединяет слои Conv и BatchNorm. Предварительно обученные чекпоинты сохраняют всю архитектуру обучения и могут показывать больший счетчик.
Обучение#
Обучи YOLO26n-sem на датасете Cityscapes8 в течение 100 эпох при размере изображения 1024. Полный список доступных аргументов смотри на странице Configuration.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.yaml") # build a new model from YAML
model = YOLO("yolo26n-sem.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)Смотри подробности о режиме train на странице Train. Модели семантической сегментации также можно обучать с помощью облачного обучения Ultralytics Platform.
Формат набора данных#
Датасеты семантической сегментации используют одноканальные маски-изображения, обычно в формате PNG, где значение каждого пикселя представляет идентификатор класса. Пиксели со значением 255 трактуются как «игнорируемые» и исключаются из вычисления функции потерь. В YAML-файле датасета должны быть указаны пути к изображениям и соответствующим им директориям масок. Подробности о формате см. в Руководстве по датасетам семантической сегментации. Поддерживаемые датасеты включают Cityscapes и ADE20K. Ты можешь управлять семантическими датасетами и размечать их с помощью разметки Ultralytics Platform.
Валидация#
Выполни валидацию точности обученной модели YOLO26n-sem на датасете семантической сегментации. Передай data явно, чтобы валидация использовала нужный YAML-файл датасета.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="cityscapes.yaml")
metrics.miou # mean Intersection over Union
metrics.pixel_accuracy # overall pixel accuracyПредсказание#
Используй обученную модель YOLO26n-sem для запуска предсказаний на изображениях.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
# Access the results
for result in results:
semantic_mask = result.semantic_mask.data # class map, shape (H,W), integer dtype selected by class countСмотри полную информацию о режиме predict на странице Предсказание.
Вывод результатов#
Семантическая сегментация YOLO возвращает один объект Results на изображение. Каждый результат хранит одну плотную карту классов для всего изображения вместо списка масок объектов. Пиксели с предсказанным одинаковым классом разделяют один и тот же ID класса, даже если они принадлежат разным объектам.
| Атрибут | Тип | Форма | Описание |
|---|---|---|---|
result.semantic_mask | SemanticMask | (H,W) | Плотная карта классов. |
result.semantic_mask.data | torch.uint8torch.int16torch.int32 | (H,W) | ID классов; тип данных (dtype) выбирается в зависимости от количества классов. |
result.masks | - | - | Нет масок экземпляров. |
result.boxes | - | - | Нет прямоугольников/достоверностей экземпляров. |
result.masks.xy | - | - | По умолчанию многоугольники отсутствуют. |
Информацию о специфичных для задач полях Results для каждой задачи см. в разделе Результаты предсказания по задачам.
Семантическая сегментация предсказывает плотную карту классов, а затем изменяет размер этой карты до формы изображения для визуализации и дальнейшего использования. Очень тонкие структуры, такие как разметка полос, линии площадки, столбы или провода, из-за этого могут выглядеть лестничными, когда инференс запускается с гораздо меньшим imgsz, чем исходное разрешение изображения. Если границы выглядят рваными, сначала перепроверь нативную модель PyTorch .pt с большим imgsz, например 1024, 1280 или ближайшим практическим значением к размеру исходного изображения. Используй экспортированные модели только после подтверждения того, что вывод .pt является приемлемым, так как входы с более низким разрешением не могут восстановить мелкие детали, отсутствовавшие на предсказанной карте классов.
Экземплярная vs Семантическая сегментация#
| Аспект | Сегментация экземпляров (task="segment") | Семантическая сегментация (task="semantic") |
|---|---|---|
| Цель предсказания | Сегментировать каждый обнаруженный объект отдельно | Присвоить один ID класса каждому пикселю |
| Поле вывода | result.masks | result.semantic_mask |
| Основные данные | result.masks.data | result.semantic_mask.data |
| Форма | (N,H,W) | (H,W) |
| Значения пикселей | Значения бинарных масок: 0 или 1 | ID классов: 0, 1, 2, ... |
| Dtype | torch.uint8 | torch.uint8torch.int16torch.int32 |
| Объекты одного класса | Сохраняются как отдельные экземпляры | Объединяются в одну область класса |
| Многоугольники | Да, через result.masks.xy и result.masks.xyn | По умолчанию вывод многоугольников не предусмотрен |
| Рамки и уверенность | Да, через result.boxes | Нет рамок или оценок уверенности для каждого экземпляра |
| Типичное использование | Подсчет, отслеживание, обрезка, измерение на уровне объектов | Плотная разметка сцены, проезжая часть, земной покров, медицинские области |
Экспорт#
Экспортируй модель YOLO26n-sem в другой формат, такой как ONNX, CoreML и т.д.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Export the model
model.export(format="onnx")Доступные форматы экспорта семантической сегментации YOLO26 приведены в таблице ниже. Ты можешь экспортировать в любой формат с помощью аргумента format, то есть format='onnx' или format='engine'. Ты можешь выполнять предсказание или валидацию напрямую на экспортированных моделях, т.е. yolo predict model=yolo26n-sem.onnx. Примеры использования показываются для твоей модели после завершения экспорта.
| Формат | Аргумент format | Модель | Метаданные | Аргументы |
|---|---|---|---|---|
| PyTorch | - | yolo26n-sem.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-sem.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-sem.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-sem_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-sem.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-sem.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-sem_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-sem.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-sem_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-sem_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-sem.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-sem_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-sem_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-sem_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-sem_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-sem_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-sem_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-sem_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-sem.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-sem_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-sem_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-sem.aimodel | ✅ | imgsz, batch, quantize |
Смотри полную информацию об export на странице Экспорт.
FAQ#
Чтобы обучить модель семантической сегментации YOLO26 на собственном наборе данных, нужно подготовить изображения масок в формате PNG, где каждое значение пикселя представляет ID класса (0, 1, 2, ...), а пиксели со значением 255 игнорируются при обучении. Создай файл YAML набора данных, указывающий на директории с изображениями и масками, затем обучи модель:
Примерfrom ultralytics import YOLO # Load a pretrained YOLO26 semantic segmentation model model = YOLO("yolo26n-sem.pt") # Train the model results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=512)Ознакомься со страницей Конфигурация, чтобы узнать о других доступных аргументах.
Экземплярная и семантическая сегментации — это задачи на уровне пикселей, но они отличаются в одном ключевом аспекте:
- Семантическая сегментация присваивает метку класса каждому пикселю, но не различает отдельные объекты одного класса. Например, все машины на сцене имеют общую метку класса.
- Сегментация экземпляров идентифицирует каждый отдельный объект по отдельности, создавая четкие маски для каждого объекта, даже если они принадлежат к одному классу.
Семантическая сегментация лучше всего подходит для задач понимания сцены, таких как автономное вождение и картирование земного покрова, в то время как экземплярная сегментация предпочтительнее, когда важен подсчет или отслеживание отдельных объектов.
Да. Если твой датасет использует полигональные метки Ultralytics YOLO (один
.txtна изображение), пропустиmasks_dirв YAML-файле датасета и убедись, что рядом с твоими изображениями в корне датасета не существует папкиmasks/(одно ее присутствие активирует режим PNG-масок даже без установленногоmasks_dir). Загрузчик тогда автоматически преобразует полигоны в покадровые семантические маски на лету. Для датасетов с несколькими классами (N > 1) дополнительный классbackgroundдобавляется кnamesавтоматически. Для датасетов с одним классом (N == 1) обучение остается на уровне 1 класса — твой объявленный класс становится1в маске, а незакрашенные пиксели становятся0. Подробности см. в Руководстве по датасетам семантической сегментации.Ultralytics YOLO26 предоставляет встроенные конфигурации для нескольких наборов данных семантической сегментации:
- Cityscapes: городские уличные сцены с 19 классами, широко используемые для исследований в области автономного вождения.
- ADE20K: крупномасштабный датасет парсинга сцен с 150 классами.
Ты также можешь использовать любой пользовательский набор данных, который предоставляет аннотации масок в формате PNG, где значения пикселей соответствуют ID классов.
Проверь предварительно обученную модель семантической сегментации YOLO26 с помощью YAML-файла набора данных, используемого для оценки:
Примерfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-sem.pt") # Validate the model metrics = model.val(data="cityscapes.yaml") print("Mean IoU:", metrics.miou) print("Pixel Accuracy:", metrics.pixel_accuracy)Эти шаги предоставят тебе метрики валидации, такие как среднее пересечение по объединению (mIoU) и точность по пикселям, которые являются стандартными мерами для оценки производительности семантической сегментации.
Экспортируй модель семантической сегментации YOLO26 в формат ONNX с помощью Python или команд CLI:
Примерfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-sem.pt") # Export the model to ONNX format model.export(format="onnx")Для получения дополнительной информации об экспорте в различные форматы обратись к странице Экспорт.