PIDNet

Трёхветвевая сеть семантической сегментации, которая добавляет отдельную ветвь границ к архитектуре, вдохновлённой пропорционально-интегрально-дифференциальным регулятором, и нацелена на инференс в реальном времени. LibreYOLO поставляет её только для семантической сегментации.

Задачи
semantic
Размеры
s, m, l at 1024 px
Установка
pip install libreyolo
Уровень поддержки
Только инференс, начиная с v. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
Исходный проект
PIDNet от Jiacong Xu, MIT. Статья, исходный код
Лицензии
Код: MIT, веса: MIT. Коммерческое использование

Установка

PIDNet не требует опциональных extra. Всё, что он импортирует, входит в базовую установку.

bash
pip install libreyolo

Предсказание

Веса скачиваются с Hugging Face при первом запуске и кэшируются локально. Суффикс -sem в имени файла обязателен для этого семейства.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibrePIDNets-sem.pt")result = model(SAMPLE_IMAGE, save=True) mask = result.semantic_maskprint(mask.data.shape)   # (H, W) id классовprint(mask.classes)      # отсортированные id классов, присутствующих на изображении
CLI
libreyolo predict model=LibrePIDNets-sem.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

Семантическая сегментация возвращает по одному id класса на пиксель, а не рамки, поэтому result.semantic_mask хранит массив (H, W) в .data и список id классов, присутствующих на изображении, в .classes. conf, iou и max_det принимаются ради совместимости API, но ни на что не влияют: модель назначает класс каждому пикселю по argmax, без порога уверенности и без шага NMS. Про источники, стриминг и обработку результатов см. предсказание.

Варианты

Три размера, все с фиксированным входом 1024 px. Опубликованные чекпойнты — это конвертации официальных весов PIDNet на Cityscapes, 19 классов.

LibreYOLO не обучает PIDNet: train() вызывает NotImplementedError для этого семейства, и уровень поддержки выше помечает его как только инференс.

Валидация

val() возвращает metrics/mIoU и metrics/pixel_accuracy, измеренные на любом датасете в том формате, в котором вы обучали.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePIDNets-sem.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mIoU"])print(metrics["metrics/pixel_accuracy"])
CLI
libreyolo val model=LibrePIDNets-sem.pt data=my-dataset.yaml

Экспорт

ЗадачаONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
semanticsemantic to ONNX: поддерживаетсяsemantic to TorchScript: поддерживаетсяsemantic to ExecuTorch: поддерживаетсяsemantic to TensorRT: поддерживаетсяsemantic to OpenVINO: поддерживаетсяsemantic to Paddle: не поддерживаетсяsemantic to MNN: не поддерживаетсяsemantic to RKNN: не поддерживаетсяsemantic to ncnn: поддерживаетсяsemantic to TFLite: поддерживаетсяsemantic to CoreML: не поддерживаетсяsemantic to Core AI: поддерживается

Экспортированный артефакт загружается обратно через LibreYOLO() по расширению файла, поэтому файл .onnx или .engine ведёт себя как чекпойнт и возвращает тот же Results. Экспорт перечисляет аргументы, которые принимает каждый формат.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePIDNets-sem.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)
CLI
libreyolo export model=LibrePIDNets-sem.pt format=onnxlibreyolo export model=LibrePIDNets-sem.pt format=tensorrt half=True
Использование экспортированного файла
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по расширению файла, поэтому# экспортированный артефакт загружается как любой чекпойнт и# возвращает тот же объект Results.model = LibreYOLO("LibrePIDNets-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)

Чекпойнты

Все опубликованные файлы весов этого семейства.

ФайлВход (пикс.)Лицензия весов
semantic
LibrePIDNets-sem.pt1024mit
LibrePIDNetm-sem.pt1024mit
LibrePIDNetl-sem.pt1024mit

Все перечисленные выше файлы уже доступны в организации LibreYOLO и скачиваются при первом использовании.

Лицензирование

Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.

Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.

Оригинальная работа
PIDNet, Jiacong Xu
Лицензия исходного проекта
MIT
Исходный код проекта
github.com/XuJiacong/PIDNet
Код LibreYOLO
MIT
Веса
MIT, повторно опубликованы на huggingface.co/LibreYOLO
Толкование
MIT is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks only that you keep the copyright and license notice with any copy you redistribute. LibreYOLO's checkpoints are conversions of the official PIDNet Cityscapes weights, which upstream licenses as MIT. The Cityscapes dataset itself carries separate research-oriented terms and is not redistributed by LibreYOLO.

Цитирование

@misc{xu2022pidnet,
      title={PIDNet: A Real-time Semantic Segmentation Network Inspired from PID Controller}, 
      author={Jiacong Xu and Zixiang Xiong and Shankar P. Bhattacharyya},
      year={2022},
      eprint={2206.02066},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Скопировано из блока цитирования авторов на странице github.com/XuJiacong/PIDNet#bibtex-citation.

Проверено с LibreYOLO v1.5.0. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.