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.
Origine
PP-PicoDet par PaddlePaddle (Baidu), Apache-2.0. Article, source
Licences
Code Apache-2.0, poids Apache-2.0. Usage commercial

Installer

PicoDet ne nécessite aucun extra en plus du paquet de base.

bash
pip install libreyolo

Prédire

Les poids sont téléchargés depuis Hugging Face à la première utilisation et mis en cache localement.

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

L'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.

CheckpointEntrée (px)mAP 50-95Paramètres (M)
LibrePICODETs32029.50.99
LibrePICODETm41637.62.15
LibrePICODETl64044.23.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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibrePICODETs.pt")model.train(    data="my-dataset.yaml",    epochs=300, batch=16, lr0=0.01,)
CLI
# 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.01

Les 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.

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

Exporter

TâcheONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX : pris en chargeDetection to TorchScript : pris en chargeDetection to ExecuTorch : pris en chargeDetection to TensorRT : pris en chargeDetection to OpenVINO : pris en chargeDetection to Paddle : non pris en chargeDetection to MNN : non pris en chargeDetection to RKNN : pris en chargeDetection to ncnn : pris en chargeDetection to TFLite : non pris en chargeDetection to CoreML : non pris en chargeDetection 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.

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
Utiliser le fichier exporté
from 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.

FichierEntrée (px)Licence des poids
Detection
LibrePICODETs.pt320apache-2.0
LibrePICODETm.pt416apache-2.0
LibrePICODETl.pt640apache-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.

Vérifié avec LibreYOLO v1.5.0. Les tableaux de support, les checkpoints et les chiffres de benchmark de cette page sont générés à partir de la bibliothèque publiée et des poids publiés, et non rédigés à la main.