PicoDet

PicoDet — одностадийный детектор, сделанный под мобильные и периферийные CPU: бэкбон ESNet, neck CSP-PAN и общая голова с Generalized Focal Loss. LibreYOLO поддерживает его для детекции.

Задачи
detection
Размеры
s, m, l at 320 to 640 px
Установка
pip install libreyolo
Уровень поддержки
Поддерживаемый, начиная с v. Дополнительные обучаемые модели: тесты CI поддерживаются в рабочем состоянии, а функции добавляются по возможности.
Исходный проект
PP-PicoDet от PaddlePaddle (Baidu), Apache-2.0. Статья, исходный код
Лицензии
Код: Apache-2.0, веса: Apache-2.0. Коммерческое использование

Установка

PicoDet не требует ничего сверх базового пакета.

bash
pip install libreyolo

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

Веса скачиваются с Hugging Face при первом запуске и кэшируются локально.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibrePICODETs.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibrePICODETs.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

Возвращаемый объект Results — тот же, что возвращает любое семейство, поэтому замена на другой детектор занимает одну строку. conf задаёт порог уверенности, а iou — порог NMS. Про источники, стриминг и обработку результатов см. предсказание.

Варианты

Три размера, каждый на своём фиксированном входном разрешении: s — самый маленький, l — самый большой. Разрешение растёт вместе с размером, поэтому крупные чекпойнты не только несут больше параметров, но и обходятся дороже на каждом изображении.

ЧекпойнтВход (пикс.)mAP 50-95Параметры (млн)
LibrePICODETs32029.50.99
LibrePICODETm41637.62.15
LibrePICODETl64044.23.31

COCO val2017, 500 images. Измерено системой бенчмарков LibreYOLO и опубликовано на Vision Analysis, где сравниваются задержки на разном оборудовании и в разных средах выполнения и хранятся полные записи запусков.

Обучение

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.train(    data="my-dataset.yaml",    epochs=300, batch=16, lr0=0.01,)
CLI
# imgsz стоит задать: в CLI по умолчанию стоит 640, тогда как у# чекпойнта s родное разрешение — 320.libreyolo train model=LibrePICODETs.pt data=my-dataset.yaml imgsz=320 epochs=300 batch=16 lr0=0.01

Компоненты функции потерь и назначение целей повторяют апстрим-рецепт: VFL, DFL, GIoU и SimOTA, со взвешиванием по качеству классификации и целями VFL по динамическому IoU. Инференс побитово совпадает с апстримом на одном и том же чекпойнте.

Что не проверялось, если верить самому docstring у train(): сходимость на полном датасете, поведение при multi-GPU и любая аугментация, кроме горизонтального отражения. Чекпойнт s на своём родном 320 к тому же не всегда проходит нижний порог точности LibreYOLO на тестовой выборке из 30 изображений и двух классов, на которой библиотека проверяет небольшие дообучения. Этот размер лучше подходит для масштаба полного COCO.

train() принимает и аргумент pretrained, но внутри метода его значение нигде не читается: обучение всегда продолжается с тех весов, с которыми модель была создана, поэтому pretrained=False не переинициализирует сеть. Если не задавать imgsz в Python, берётся родное разрешение загруженного чекпойнта: 320 для s, 416 для m и 640 для l. CLI всегда передаёт imgsz, по умолчанию 640, поэтому там его нужно выставить под чекпойнт.

Если больше ничего не трогать, обучение идёт 300 эпох на SGD с lr0=0.01, моментом 0.9, weight decay 4e-5 и прогревом в одну эпоху по косинусному расписанию. Единственная применяемая аугментация — горизонтальное отражение.

Про датасеты, аугментацию, multi-GPU и логгеры см. обучение.

Валидация

val() возвращает словарь с ключами metrics/, которые покрывают точность, полноту, mAP 50 и mAP 50-95, посчитанные на любом датасете в том формате, на котором шло обучение.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibrePICODETs.pt data=my-dataset.yaml

Экспорт

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

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

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

Чекпойнты

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

ФайлВход (пикс.)Лицензия весов
Detection
LibrePICODETs.pt320apache-2.0
LibrePICODETm.pt416apache-2.0
LibrePICODETl.pt640apache-2.0

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

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

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

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

Оригинальная работа
PP-PicoDet, PaddlePaddle (Baidu)
Лицензия исходного проекта
Apache-2.0
Исходный код проекта
github.com/PaddlePaddle/PaddleDetection
Код LibreYOLO
MIT
Веса
Apache-2.0, повторно опубликованы на huggingface.co/LibreYOLO
Толкование
Apache-2.0 is a permissive license, so these weights can be used in commercial and closed-source products. It asks you to keep its license text and attribution notices with any copy of the weights you redistribute, and it grants a patent license. It places no obligation on your own application code, and weights you train yourself on your own data are yours. LibreYOLO's port follows Bo396543018/Picodet_Pytorch, a PyTorch re-implementation of PaddleDetection's original PP-PicoDet, and both carry the same Apache-2.0 terms as the paper's authors.

Порт в LibreYOLO следует за Bo396543018/Picodet_Pytorch — переписанной на PyTorch реализацией оригинального PP-PicoDet из PaddleDetection, из которой убран mmcv и в которой все активации сведены один в один, так что чекпойнты PaddlePaddle, сконвертированные через пайплайн Bo, загружаются без числового расхождения. Оба источника распространяются на тех же условиях Apache-2.0, что и у авторов статьи.

Цитирование

@misc{yu2021pppicodet,
      title={PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices},
      author={Guanghua Yu and Qinyao Chang and Wenyu Lv and Chang Xu and Cheng Cui and Wei Ji and Qingqing Dang and Kaipeng Deng and Guanzhong Wang and Yuning Du and Baohua Lai and Qiwen Liu and Xiaoguang Hu and Dianhai Yu and Yanjun Ma},
      year={2021},
      eprint={2111.00902},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Скопировано из блока цитирования авторов на странице github.com/PaddlePaddle/PaddleDetection/blob/release/2.8/configs/picodet/README_en.md#cite-pp-picodet.

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