PicoDet
PicoDet est un détecteur à une étape conçu pour les CPU mobiles et edge : un backbone ESNet, un neck CSP-PAN et une tête Generalized Focal Loss partagée. LibreYOLO le prend en charge pour la détection.
- Tâches
- detection
- Tailles
- s, m, l at 320 to 640 px
- Installer
pip install libreyolo- Niveau de support
- Pris en charge, depuis v. Modèles entraînables complémentaires : maintenus au vert dans la CI, avec des fonctionnalités ajoutées selon les occasions.
- Licences
- Code Apache-2.0, poids Apache-2.0. Usage commercial
Installer
PicoDet ne nécessite aucun extra en plus du paquet de base.
pip install libreyoloPrédire
Les poids sont téléchargés depuis Hugging Face à la première utilisation et mis en cache localement.
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=TrueL'objet Results renvoyé est le même pour toutes les familles, remplacer le
détecteur ne demande donc de modifier qu'une ligne. conf définit le seuil de
confiance et iou le seuil NMS. Consultez la prédiction pour
les sources, le streaming et le traitement des résultats.
Variantes
Trois tailles sont proposées, chacune avec sa propre résolution d'entrée fixe :
s est la plus petite et l la plus grande. La résolution augmente avec la
taille. Les checkpoints plus grands sont donc aussi plus coûteux à exécuter par
image, en plus de contenir davantage de paramètres.
| Checkpoint | Entrée (px) | mAP 50-95 | Paramètres (M) |
|---|---|---|---|
| LibrePICODETs | 320 | 29.5 | 0.99 |
| LibrePICODETm | 416 | 37.6 | 2.15 |
| LibrePICODETl | 640 | 44.2 | 3.31 |
COCO val2017, 500 images. Mesuré par le banc de benchmark de LibreYOLO et publié sur Vision Analysis, où sont comparées la latence selon le matériel et les runtimes et où sont conservés les enregistrements complets des exécutions.
Entraîner
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.train( data="my-dataset.yaml", epochs=300, batch=16, lr0=0.01,)# Il est utile de définir imgsz : la CLI utilise 640 par défaut, alors que# la résolution native du checkpoint s est 320.libreyolo train model=LibrePICODETs.pt data=my-dataset.yaml imgsz=320 epochs=300 batch=16 lr0=0.01Les composants de la loss et l'assigneur suivent la recette amont : VFL, DFL, GIoU et SimOTA, avec une pondération par qualité de classification et des cibles VFL à IoU dynamique. L'inférence est équivalente bit à bit à la version amont sur le même checkpoint.
Comme l'indique la propre docstring de train(), les éléments suivants n'ont pas
été vérifiés : la convergence sur un dataset complet, le comportement multi-GPU
et toute augmentation autre que le retournement horizontal. À sa résolution
native de 320, le checkpoint s n'a pas non plus dépassé de manière fiable le
seuil d'exactitude de LibreYOLO sur l'échantillon de 30 images et deux classes
avec lequel la bibliothèque teste les petits fine-tunings. Cette taille convient
mieux à l'échelle de COCO complet.
train() accepte également un argument pretrained, mais sa valeur n'est
jamais lue dans la méthode : l'entraînement reprend toujours à partir des poids
avec lesquels le modèle a été construit, et pretrained=False ne réinitialise
donc pas le réseau. Si vous ne définissez pas imgsz en Python, il prend la
résolution native du checkpoint chargé : 320 pour s, 416 pour m et 640 pour
l. La CLI envoie toujours un imgsz, qui vaut 640 par défaut ; définissez-le
donc dans ce cas afin qu'il corresponde au checkpoint.
Avec les autres réglages par défaut, l'entraîneur exécute 300 époques avec SGD à
lr0=0.01, une quantité de mouvement de 0.9, un weight decay de 4e-5 et un
warmup d'une époque selon un planning cosinus. Le retournement horizontal est la
seule augmentation appliquée.
Consultez l'entraînement pour les datasets, l'augmentation, le multi-GPU et les loggers.
Valider
val() renvoie un dictionnaire de clés metrics/ couvrant la précision, le
rappel, la mAP 50 et la mAP 50-95, mesurés sur tout dataset dans le format
utilisé pour l'entraînement.
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.yamlExporter
| Tâche | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX : pris en charge | Detection to TorchScript : pris en charge | Detection to ExecuTorch : pris en charge | Detection to TensorRT : pris en charge | Detection to OpenVINO : pris en charge | Detection to Paddle : non pris en charge | Detection to MNN : non pris en charge | Detection to RKNN : pris en charge | Detection to ncnn : pris en charge | Detection to TFLite : non pris en charge | Detection to CoreML : non pris en charge | Detection to Core AI : pris en charge |
Un artefact exporté se recharge par LibreYOLO() à partir de son suffixe de
fichier. Un fichier .onnx ou .engine se comporte donc comme un checkpoint et
renvoie le même objet Results. L'exécution du graphe dans un runtime brut, sans
installation de LibreYOLO, est également prise en charge, mais vous devez alors
écrire vous-même le prétraitement et le post-traitement.
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 # La factory utilise le suffixe du fichier : un artefact exporté se charge# comme tout checkpoint et renvoie le même objet Results.model = LibreYOLO("LibrePICODETs.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)Checkpoints
Tous les fichiers de poids publiés pour cette famille.
| Fichier | Entrée (px) | Licence des poids |
|---|---|---|
| Detection | ||
| LibrePICODETs.pt | 320 | apache-2.0 |
| LibrePICODETm.pt | 416 | apache-2.0 |
| LibrePICODETl.pt | 640 | apache-2.0 |
Tous les fichiers ci-dessus sont actuellement disponibles dans l<link>organisation LibreYOLO</link> et sont téléchargés à la première utilisation.
Licence
Vérifiez la licence dans le dépôt Hugging Face des poids précis que vous téléchargez. Chaque checkpoint de l<link>organisation LibreYOLO</link> en possède une, et elles ne sont pas toujours identiques au sein dune même famille. Ce dépôt fait autorité ; le résumé ci-dessous décrit les conditions applicables lors de la dernière vérification de cette page.
Ceci décrit les licences concernées et ne constitue pas un conseil juridique. Si la réponse a une importance commerciale, lisez vous-même les licences et consultez votre propre avocat.
- Travail d'origine
- PP-PicoDet, PaddlePaddle (Baidu)
- Licence du projet d'origine
- Apache-2.0
- Source du projet d'origine
- github.com/PaddlePaddle/PaddleDetection
- Code de LibreYOLO
- MIT
- Poids
- Apache-2.0, republiés sur huggingface.co/LibreYOLO
- Interprétation
- 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.
Le portage de LibreYOLO suit Bo396543018/Picodet_Pytorch, une réimplémentation PyTorch du PP-PicoDet original de PaddleDetection. mmcv a été retiré et chaque activation reproduite exactement, afin que les checkpoints PaddlePaddle convertis par le pipeline de Bo se chargent sans dérive numérique. Les deux sources sont soumises aux mêmes conditions Apache-2.0 que celles des auteurs de l'article.
Citation
@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}
}Copié depuis le bloc de citation des auteurs sur github.com/PaddlePaddle/PaddleDetection/blob/release/2.8/configs/picodet/README_en.md#cite-pp-picodet.