Семантическая сегментация#
Семантическая сегментация присваивает метку класса каждому пикселю изображения, создавая плотную карту классов, которая покрывает всю сцену. В отличие от экземплярной сегментации, которая разделяет отдельные объекты, семантическая сегментация группирует все пиксели одного класса вместе, независимо от того, сколько отдельных объектов присутствует.
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 - Метрики скорости усреднены по валидационным изображениям Cityscapes с использованием инстанса RTX3090.
Воспроизведи с помощьюyolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 - Значения Params и FLOPs указаны для объединенной (fused) модели после
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 указаны для объединенной (fused) модели после
model.fuse(), которая объединяет слои Conv и BatchNorm. Предобученные чекпоинты сохраняют полную архитектуру обучения и могут показывать более высокие значения.
Обучение#
Обучи YOLO26n-sem на наборе данных Cityscapes8 в течение 100 эпох при размере изображения 1024. Полный список доступных аргументов смотри на странице Конфигурация.
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 cloud training.
Формат набора данных#
В наборах данных для семантической сегментации используются одноканальные маски (обычно в формате PNG), где каждое значение пикселя соответствует ID класса. Пиксели со значением 255 игнорируются и исключаются из расчета функции потерь. В YAML-файле набора данных укажи пути к изображениям и соответствующим им папкам с масками. Подробности формата смотри в Semantic Segmentation Dataset Guide. Поддерживаются такие наборы данных, как Cityscapes и ADE20K. Ты можешь управлять и размечать наборы данных для семантической сегментации с помощью Ultralytics Platform annotation.
Валидация#
Проверь точность обученной модели 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 смотри на странице 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 |
Смотри подробную информацию об export на странице Export.
FAQ#
Как обучить модель семантической сегментации YOLO26 на собственном наборе данных?#
Чтобы обучить модель семантической сегментации 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?#
Проверь предварительно обученную модель семантической сегментации 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?#
Экспортируй модель семантической сегментации 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")Для получения подробной информации об экспорте в различные форматы обратись к странице Экспорт.