PicoDet
PicoDet, це одноетапний детектор для мобільних і периферійних CPU: бекбон ESNet, шия CSP-PAN і спільна голова Generalized Focal Loss. LibreYOLO підтримує його для виявлення.
- Задачі
- detection
- Розміри
- s, m, l at 320 to 640 px
- Встановлення
pip install libreyolo- Рівень підтримки
- Підтримуваний, починаючи з v. Додаткові придатні до навчання моделі: тести CI підтримують справними, а функції додають за нагоди.
- Ліцензії
- Код: Apache-2.0, ваги: Apache-2.0. Комерційне використання
Встановлення
PicoDet не потребує нічого понад базовий пакет.
pip install libreyoloПередбачення
Під час першого використання ваги завантажуються з Hugging Face і кешуються локально.
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)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 | Параметри (млн) |
|---|---|---|---|
| LibrePICODETs | 320 | 29.5 | 0.99 |
| LibrePICODETm | 416 | 37.6 | 2.15 |
| LibrePICODETl | 640 | 44.2 | 3.31 |
COCO val2017, 500 images. Виміряно засобами бенчмарку LibreYOLO й опубліковано на сторінці Vision Analysis, де порівнюють затримку на різному обладнанні та в різних середовищах виконання, а також зберігають повні записи запусків.
Навчання
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.train( data="my-dataset.yaml", epochs=300, batch=16, lr0=0.01,)# 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, виміряних на будь-якому датасеті у форматі навчання.
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibrePICODETs.pt data=my-dataset.yamlЕкспорт
| Задача | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection 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 також підтримується, але тоді попередню й
подальшу обробку потрібно написати самостійно.
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.export(format="onnx", imgsz=320)model.export(format="tensorrt", imgsz=320, half=True)libreyolo export model=LibrePICODETs.pt format=onnx imgsz=320libreyolo export model=LibrePICODETs.pt format=tensorrt imgsz=320 half=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Фабрика вибирає маршрут за суфіксом файла, тому експортований артефакт# завантажується як контрольна точка й повертає той самий об'єкт Results.model = LibreYOLO("LibrePICODETs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Контрольні точки
Усі опубліковані файли ваг для цього сімейства.
| Файл | Вхід (пікс.) | Ліцензія ваг |
|---|---|---|
| Detection | ||
| LibrePICODETs.pt | 320 | apache-2.0 |
| LibrePICODETm.pt | 416 | apache-2.0 |
| LibrePICODETl.pt | 640 | apache-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.