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.
Origine
RTMDet par OpenMMLab, Apache-2.0. Article, source
Licences
Code Apache-2.0, poids Apache-2.0. Usage commercial

Installer

RTMDet 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("LibreRTMDets.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreRTMDets.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True
Segmentation d'instances
from 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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.train(    data="my-dataset.yaml",    epochs=300, imgsz=640, batch=16, lr0=0.004,)
CLI
libreyolo train model=LibreRTMDets.pt data=my-dataset.yaml imgsz=640 epochs=300 batch=16 lr0=0.004

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

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreRTMDets.pt data=my-dataset.yaml
Segmentation d'instances
from 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îtes

Avec 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â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 : non pris en chargeDetection to ncnn : non pris en chargeDetection to TFLite : non pris en chargeDetection to CoreML : non pris en chargeDetection to Core AI : pris en charge
Instance segmentationInstance segmentation to ONNX : non pris en chargeInstance segmentation to TorchScript : non pris en chargeInstance segmentation to ExecuTorch : non pris en chargeInstance segmentation to TensorRT : non pris en chargeInstance segmentation to OpenVINO : non pris en chargeInstance segmentation to Paddle : non pris en chargeInstance segmentation to MNN : non pris en chargeInstance segmentation to RKNN : non pris en chargeInstance segmentation to ncnn : non pris en chargeInstance segmentation to TFLite : non pris en chargeInstance segmentation to CoreML : non pris en chargeInstance 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.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreRTMDets.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreRTMDets.pt format=onnx imgsz=640libreyolo export model=LibreRTMDets.pt format=tensorrt imgsz=640 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("LibreRTMDets.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
LibreRTMDett.pt640apache-2.0
LibreRTMDets.pt640apache-2.0
LibreRTMDetm.pt640apache-2.0
LibreRTMDetl.pt640apache-2.0
LibreRTMDetx.pt640apache-2.0
Instance segmentation
LibreRTMDett-seg.pt640apache-2.0
LibreRTMDets-seg.pt640apache-2.0
LibreRTMDetm-seg.pt640apache-2.0
LibreRTMDetl-seg.pt640apache-2.0
LibreRTMDetx-seg.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
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.

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.