PIDNet
Трёхветвевая сеть семантической сегментации, которая добавляет отдельную ветвь границ к архитектуре, вдохновлённой пропорционально-интегрально-дифференциальным регулятором, и нацелена на инференс в реальном времени. LibreYOLO поставляет её только для семантической сегментации.
- Задачи
- semantic segmentation
- Размеры
- s, m, l at 1024 px
- Установка
pip install libreyolo- Уровень поддержки
- Только инференс, начиная с v1.3.1. Только предсказание, валидация и экспорт. Функции обучения неприменимы.
- Исходный проект
- PIDNet от Jiacong Xu, MIT. Статья, исходный код
- Лицензии
- Код: MIT, веса: MIT. Коммерческое использование
Установка
PIDNet не требует опциональных extra. Всё, что он импортирует, входит в базовую установку.
pip install libreyoloПредсказание
Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.
Суффикс -sem в имени файла обязателен для этого семейства.
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 классов, присутствующих на изображении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, измеренные на
любом датасете в том формате, в котором вы обучали.
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"])libreyolo val model=LibrePIDNets-sem.pt data=my-dataset.yamlЭкспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Semantic segmentation | Semantic segmentation to ONNX: поддерживается | Semantic segmentation to TorchScript: поддерживается | Semantic segmentation to ExecuTorch: поддерживается | Semantic segmentation to TensorRT: поддерживается | Semantic segmentation to OpenVINO: поддерживается | Semantic segmentation to Paddle: не поддерживается | Semantic segmentation to MNN: не поддерживается | Semantic segmentation to RKNN: не поддерживается | Semantic segmentation to ncnn: поддерживается | Semantic segmentation to TFLite: поддерживается | Semantic segmentation to CoreML: не поддерживается | Semantic segmentation to Core AI: поддерживается |
Экспортированный артефакт загружается обратно через LibreYOLO() по расширению
файла, поэтому файл .onnx или .engine ведёт себя как чекпойнт и возвращает
тот же Results. Экспорт перечисляет аргументы, которые
принимает каждый формат.
from libreyolo import LibreYOLO model = LibreYOLO("LibrePIDNets-sem.pt")model.export(format="onnx")model.export(format="tensorrt", half=True)libreyolo export model=LibrePIDNets-sem.pt format=onnxlibreyolo export model=LibrePIDNets-sem.pt format=tensorrt half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика выбирает загрузчик по расширению файла, поэтому# экспортированный артефакт загружается как любой чекпойнт и# возвращает тот же объект Results.model = LibreYOLO("LibrePIDNets-sem.onnx")result = model(SAMPLE_IMAGE) print(result.semantic_mask.data.shape)Чекпойнты
Все опубликованные файлы весов этого семейства.
| Файл | Вход (пикс.) | Лицензия весов |
|---|---|---|
| Semantic segmentation | ||
| LibrePIDNets-sem.pt | 1024 | mit |
| LibrePIDNetm-sem.pt | 1024 | mit |
| LibrePIDNetl-sem.pt | 1024 | mit |
Все перечисленные выше файлы уже доступны в организации 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.