YOLOv9

YOLOv9 est un détecteur convolutionnel mono-étape : une passe attribue un score à une grille dense de bounding boxes et la NMS supprime les doublons. LibreYOLO en propose trois variantes, dont une sans étape de NMS.

Tâches
detection
Tailles
yolo9: t, s, m, c at 640 px; yolo9_p2: t, s at 640 px
Installer
pip install libreyolo
Niveau de support
Fer de lance, depuis v1.0.0. Les fonctionnalités sont d'abord conçues et entièrement validées sur GPU ici.
Origine
YOLOv9 par MultimediaTechLab, MIT. Article, source
Licences
Code MIT, poids MIT. Usage commercial

Installer

YOLOv9 ne nécessite aucun extra au-delà du package 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("LibreYOLO9s.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLO9s.pt save=True \  source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg
Sans NMS
from libreyolo import LibreYOLO, SAMPLE_IMAGE # Même appel, autre checkpoint. La tête de bout en bout renvoie ses propres# prédictions aux scores les plus élevés, aucune NMS ne s'exécute donc et iou est ignoré.model = LibreYOLO("LibreYOLO9E2Es.pt")result = model(SAMPLE_IMAGE, conf=0.25, max_det=300) print(len(result.boxes))

L'objet Results renvoyé est celui de toutes les familles, le remplacement du détecteur ne demande donc de modifier qu'une ligne. Sur les modèles de base et de stride 4, conf définit le seuil de confiance et iou le seuil de NMS. Le modèle de bout en bout n'exécute aucune NMS et ignore iou\u00a0; conf et max_det déterminent donc sa sortie. Consultez la prédiction pour les sources, le streaming et la gestion des résultats.

Variantes

Trois variantes partagent un backbone. Toutes trois effectuent uniquement de la détection et acceptent les mêmes arguments.

Le modèle de base prédit sur trois échelles de caractéristiques et élimine les bounding boxes dupliquées avec la NMS.

Le modèle de bout en bout conserve cette tête et lui ajoute une branche d'appariement un-à-un. L'inférence lit uniquement cette branche et conserve ses prédictions aux scores les plus élevés, aucune NMS n'est donc exécutée. Choisissez-le lorsque le runtime de déploiement ne possède pas d'opérateur NMS.

Le modèle de stride 4 expose un niveau plus haut dans le backbone, prolonge le neck jusqu'à celui-ci et prédit sur quatre échelles au lieu de trois. L'échelle supplémentaire cible les objets qui couvrent peu de pixels\u00a0; l'unique checkpoint publié pour ce modèle est entraîné sur des images aériennes. Les checkpoints de détection de base peuvent y être transférés\u00a0: le backbone et le neck sont chargés sans modification, les trois tours de tête pré-entraînées sont décalées d'un emplacement et la tour de stride 4 part d'une initialisation aléatoire.

CheckpointEntrée (px)mAP 50-95Paramètres (M)
LibreYOLO9c64056.425.5
LibreYOLO9m64055.320.12
LibreYOLO9s64055.97.2
LibreYOLO9t64054.02.02

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("LibreYOLO9s.pt")model.train(data="my-dataset.yaml", epochs=100, imgsz=640, batch=16)
CLI
libreyolo train model=LibreYOLO9s.pt data=my-dataset.yaml \  epochs=100 imgsz=640 batch=16
Petits objets
from libreyolo import LibreYOLO9P2 # La variante de stride 4 n'a pas de checkpoint COCO propre, utilisez donc le nom# d'un checkpoint de détection de base : son backbone et son neck se chargent sans# modification et la tour de tête de stride 4 part d'une initialisation aléatoire.model = LibreYOLO9P2(None, size="s")model.train(data="my-dataset.yaml", epochs=100, pretrained="LibreYOLO9s.pt")

pretrained détermine le point de départ de l'exécution. Transmettez True pour charger le checkpoint publié du même modèle et de la même taille, ou un nom ou chemin pour tout autre fichier. Les tenseurs dont la forme ne correspond pas sont ignorés plutôt que refusés, et l'exécution consigne le nombre de tenseurs chargés. Un checkpoint entraîné avec un nombre de classes différent reste donc un point de départ utilisable.

Le modèle de stride 4 n'a aucun checkpoint COCO publié qui lui soit propre. Pour celui-ci, True se résout donc en un fichier inexistant et le téléchargement échoue. Indiquez plutôt le nom d'un checkpoint de détection de base.

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 au format utilisé pour l'entraînement.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLO9s.pt data=my-dataset.yaml
Sur COCO
# Le YAML COCO fourni contient un script de téléchargement intégré, il nécessite donc# une autorisation explicite sauf si le dataset est déjà présent localement.libreyolo val model=LibreYOLO9c.pt data=coco.yaml imgsz=640 \  allow_download_scripts=True

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 : pris en chargeDetection to MNN : pris en chargeDetection to RKNN : non 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

Une coche s'applique aux trois variantes\u00a0; lorsqu'elles diffèrent, la matrice indique la prise en charge la plus faible des trois.

Un artefact exporté se recharge dans LibreYOLO() grâce au suffixe de son fichier. Un fichier .onnx ou .engine se comporte donc comme un checkpoint et renvoie les mêmes Results. Vous pouvez également exécuter le graphe dans un runtime nu, sans installer LibreYOLO, mais vous devez alors écrire vous-même le prétraitement et le post-traitement.

Pour le modèle de détection de base, la moitié post-traitement peut être intégrée au graphe. nms=True lors d'un export ONNX place la suppression dans le modèle et la première sortie devient un tenseur fixe (1, max_det, 6) dont les lignes sont x1, y1, x2, y2, score, class, complétées par des zéros après le nombre de détections. Ce graphe utilise un batch de 1 et ne comporte aucun axe dynamique. Les modèles de bout en bout et de stride 4 n'acceptent pas ce paramètre.

Chaque format installe un extra différent et accepte quelques arguments qui lui sont propres. Ces deux aspects sont décrits sur la page du format concerné.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO9s.pt")model.export(format="onnx", imgsz=640)
CLI
libreyolo export model=LibreYOLO9s.pt format=onnx imgsz=640
Avec la NMS dans le graphe
libreyolo export model=LibreYOLO9s.pt format=onnx nms=True \  conf=0.25 iou=0.45 max_det=300
Utiliser le fichier exporté
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La fabrique détermine le chemin selon le suffixe du fichier ; un artefact exporté se charge# donc comme tout checkpoint et renvoie le même objet Results.model = LibreYOLO("LibreYOLO9s.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
LibreYOLO9t.pt640mit
LibreYOLO9s.pt640mit
LibreYOLO9m.pt640mit
LibreYOLO9c.pt640mit
LibreYOLO9E2Et.pt640mit
LibreYOLO9E2Es.pt640mit
LibreYOLO9E2Em.pt640mit
LibreYOLO9E2Ec.pt640mit
LibreYOLO9P2s-visdrone.ptcc-by-nc-sa-3.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
YOLOv9, MultimediaTechLab
Licence du projet d'origine
MIT
Source du projet d'origine
github.com/MultimediaTechLab/YOLO
Code de LibreYOLO
MIT
Poids
MIT, republiés sur huggingface.co/LibreYOLO
Interprétation
MIT is a permissive license, so these weights can be used in commercial and closed-source products. The one standing obligation is to keep the license text and the copyright notice, Kin-Yiu Wong and Hao-Tang Tsui, with any copy you redistribute. It places no condition on your own application code, and a model you train yourself on your own data is yours. Two things are worth knowing beyond that. The port follows the authors' MIT re-release of YOLOv9, not the GPL-3.0 repository that carries the same model, so the permissive terms come from the source LibreYOLO actually derives from. And one checkpoint in this family is not MIT: the stride-4 model trained on VisDrone2019-DET inherits that dataset's CC BY-NC-SA 3.0 terms, which rule out commercial use and require share-alike on anything derived from it.

Un checkpoint présenté ici n'est pas sous licence MIT. Le modèle de stride 4 entraîné sur VisDrone2019-DET hérite des conditions CC BY-NC-SA 3.0 de ce dataset\u00a0: usage non commercial uniquement, partage dans les mêmes conditions de tout élément qui en dérive, hors de la licence permissive utilisée par le reste de cette famille. Il prédit les classes aériennes VisDrone plutôt que celles de COCO. La bibliothèque affiche toutes ces informations avant de télécharger le fichier.

Citation

@inproceedings{wang2024yolov9,
      title={{YOLOv9}: Learning What You Want to Learn Using Programmable Gradient Information},
      author={Wang, Chien-Yao and Yeh, I-Hau and Liao, Hong-Yuan Mark},
      year={2024},
      booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
}

Copié depuis le bloc de citation des auteurs sur github.com/MultimediaTechLab/YOLO#citations.

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.