RTMDet
RTMDet est un détecteur à une étape qui prédit à partir d'un prior fondé sur un point par emplacement de grille, sans ancres, au moyen d'une tête dont les convolutions sont partagées entre les niveaux de caractéristiques. LibreYOLO le prend en charge pour la détection et la segmentation d'instances RTMDet-Ins.
- Tâches
- detection, instance segmentation
- Tailles
- t, s, m, l, x at 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
RTMDet 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("LibreRTMDets.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes: print(box.cls, box.conf, box.xyxy)libreyolo predict model=LibreRTMDets.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=Truefrom libreyolo import LibreYOLO, SAMPLE_IMAGE # Le suffixe -seg du nom sélectionne la tête de masque RTMDet-Ins,# aucun argument task n'est donc nécessaire ici.model = LibreYOLO("LibreRTMDets-seg.pt")result = model(SAMPLE_IMAGE, save=True) print(result.masks.data.shape)L'objet Results renvoyé est le même pour toutes les familles, remplacer le
détecteur ne demande donc de modifier qu'une ligne. Un nom de fichier contenant
-seg sélectionne de lui-même la tâche RTMDet-Ins, et result.masks contient
alors les masques d'instances en plus des boîtes. 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
Cinq tailles, de t à x, partagent une même architecture à une résolution
d'entrée commune. Cette famille ne comporte aucun tableau de benchmark ici :
comparez les tailles selon celle des fichiers de checkpoint dans le tableau
ci-dessous.
Entraîner
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.train( data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.004,)libreyolo train model=LibreRTMDets.pt data=my-dataset.yaml imgsz=640 epochs=300 batch=16 lr0=0.004La détection s'entraîne par train(). Les composants QualityFocalLoss, GIoU et
DynamicSoftLabelAssigner sont portés depuis mmdetection en amont. La passe et
l'export ONNX lui sont équivalents bit à bit, avec un post-traitement qui
correspond à la sortie de mmdet à moins de 0.001 mAP sur des sous-ensembles de
val2017.
Comme l'indique la propre docstring de train(), les éléments suivants n'ont pas
été vérifiés : la convergence du fine-tuning sur un petit dataset, la parité avec
l'article pour l'entraînement à partir de zéro, le comportement multi-GPU, le
débit de Mosaic et MixUp mis en cache, la transition stricte du pipeline amont en
deux étapes, ainsi que les remplacements paramétrés de weight decay qui
annulent le decay sur les paramètres de normalisation et de biais.
RTMDet-Ins ne possède aucun chemin d'entraînement. Appeler train() sur un
checkpoint -seg, ou avec task="segment", lève NotImplementedError ; la
segmentation d'instances prend uniquement en charge l'inférence et la validation.
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.
Avec les autres réglages par défaut, l'entraîneur exécute 300 époques avec AdamW
à lr0=0.004 et weight_decay=0.05, un warmup d'une époque selon un planning
cosinus, tandis que Mosaic et MixUp sont désactivés pour les 20 dernières
époques.
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("LibreRTMDets.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreRTMDets.pt data=my-dataset.yamlfrom libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets-seg.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95(M)"]) # masquesprint(metrics["metrics/mAP50-95(B)"]) # boîtesAvec un checkpoint -seg, la clé simple metrics/mAP50-95 contient le score
des masques. La même exécution rapporte aussi les boîtes sous (B) et les
masques sous (M), afin que les deux soient disponibles en une seule passe.
Exporter
| 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 : non pris en charge | Detection to ncnn : non pris en charge | Detection to TFLite : non pris en charge | Detection to CoreML : non pris en charge | Detection to Core AI : pris en charge |
| Instance segmentation | Instance segmentation to ONNX : non pris en charge | Instance segmentation to TorchScript : non pris en charge | Instance segmentation to ExecuTorch : non pris en charge | Instance segmentation to TensorRT : non pris en charge | Instance segmentation to OpenVINO : non pris en charge | Instance segmentation to Paddle : non pris en charge | Instance segmentation to MNN : non pris en charge | Instance segmentation to RKNN : non pris en charge | Instance segmentation to ncnn : non pris en charge | Instance segmentation to TFLite : non pris en charge | Instance segmentation to CoreML : non pris en charge | Instance segmentation to Core AI : non pris en charge |
La détection s'exporte vers la plupart des formats, tandis que la segmentation
d'instances ne s'exporte actuellement vers aucun d'eux ; la matrice ci-dessus
reflète cette distinction. Un artefact de détection 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("LibreRTMDets.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreRTMDets.pt format=onnx imgsz=640libreyolo export model=LibreRTMDets.pt format=tensorrt imgsz=640 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("LibreRTMDets.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 | ||
| LibreRTMDett.pt | 640 | apache-2.0 |
| LibreRTMDets.pt | 640 | apache-2.0 |
| LibreRTMDetm.pt | 640 | apache-2.0 |
| LibreRTMDetl.pt | 640 | apache-2.0 |
| LibreRTMDetx.pt | 640 | apache-2.0 |
| Instance segmentation | ||
| LibreRTMDett-seg.pt | 640 | apache-2.0 |
| LibreRTMDets-seg.pt | 640 | apache-2.0 |
| LibreRTMDetm-seg.pt | 640 | apache-2.0 |
| LibreRTMDetl-seg.pt | 640 | apache-2.0 |
| LibreRTMDetx-seg.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
- RTMDet, OpenMMLab
- Licence du projet d'origine
- Apache-2.0
- Source du projet d'origine
- github.com/open-mmlab/mmdetection
- 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. The published RTMDet and RTMDet-Ins checkpoints are converted from mmdetection's own COCO weights, trained by OpenMMLab under the same license.
Citation
@misc{lyu2022rtmdet,
title={RTMDet: An Empirical Study of Designing Real-Time Object Detectors},
author={Chengqi Lyu and Wenwei Zhang and Haian Huang and Yue Zhou and Yudong Wang and Yanyi Liu and Shilong Zhang and Kai Chen},
year={2022},
eprint={2212.07784},
archivePrefix={arXiv},
primaryClass={cs.CV}
}Copié depuis le bloc de citation des auteurs sur github.com/open-mmlab/mmdetection/tree/main/configs/rtmdet#citation.