PicoDet

PicoDet, це одноетапний детектор для мобільних і периферійних CPU: бекбон ESNet, шия 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

Складники втрат і призначувач відповідають рецепту upstream: VFL, DFL, GIoU і SimOTA зі зважуванням за якістю класифікації та цілями VFL із динамічним IoU. Інференс побітово відповідає upstream на тій самій контрольній точці.

Згідно з власною документацією train(), не перевірено збіжність на повному датасеті, поведінку з кількома 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, спадом ваг 4e-5, прогріванням протягом 1 епохи та косинусним розкладом. Єдина аугментація, горизонтальне віддзеркалення.

Датасети, аугментацію, кілька GPU й логери описано в розділі навчання.

Валідація

val() повертає словник ключів metrics/ для precision, recall, 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, повторній реалізації оригінального PP-PicoDet із PaddleDetection у PyTorch, з вилученим 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. Таблиці підтримки, контрольні точки й результати бенчмарків на цій сторінці згенеровано з випущеної бібліотеки та опублікованих ваг, а не написано вручну.