Ultralytics YOLO27 :

Prédiction de modèles avec Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Introduction#

Dans le domaine de l'apprentissage automatique et de la vision par ordinateur, le processus consistant à interpréter des données visuelles est souvent appelé inférence ou prédiction. Ultralytics YOLO26 propose une fonctionnalité puissante appelée mode prédiction, conçue pour l'inférence haute performance en temps réel sur un large éventail de sources de données.

Consulte l'aperçu non publié de YOLO27 pour des exemples d'inférence prévus.



Watch: How to Extract Results from Ultralytics YOLO26 Tasks for Custom Projects 🚀

Applications concrètes#

FabricationSportSécurité
Détection de pièces détachées automobilesDétection de joueurs de footballDétection des chutes de personnes

Pourquoi utiliser Ultralytics YOLO pour l'inférence ?#

Voici pourquoi tu devrais envisager le mode prédiction de YOLO26 pour tes différents besoins d'inférence :

  • Polyvalence : capable d'effectuer des inférences sur des images, des vidéos et même des flux en direct.
  • Performances : conçu pour un traitement en temps réel et à haute vitesse, sans sacrifier la précision.
  • Facilité d'utilisation : interfaces Python et CLI intuitives pour un déploiement et des tests rapides.
  • Hautement personnalisable : différents paramètres et réglages pour ajuster le comportement d'inférence du modèle en fonction de tes besoins spécifiques.
  • Prêt pour la production : déploie les modèles en tant qu'endpoints d'inférence de la plateforme Ultralytics avec mise à l'échelle automatique et supervision, ou exécute l'inférence localement.

Fonctionnalités clés du mode prédiction#

Le mode prédiction de YOLO26 est conçu pour être robuste et polyvalent, avec notamment :

  • Compatibilité avec plusieurs sources de données : que tes données prennent la forme d'images individuelles, d'une collection d'images, de fichiers vidéo ou de flux vidéo en temps réel, le mode prédiction répond à tes besoins.
  • Mode streaming : utilise la fonctionnalité de streaming pour générer un générateur économe en mémoire d'objets Results. Active cette fonctionnalité en définissant stream=True dans la méthode d'appel du prédicteur. Contrairement au comportement par défaut (stream=False), qui renvoie une liste contenant tous les résultats, stream=True renvoie les résultats un par un, ce qui est particulièrement utile pour les vidéos longues et les flux en direct.
  • Traitement par lots : traite plusieurs images ou images vidéo dans un seul lot afin de réduire davantage la durée totale de l'inférence.
  • Facilité d'intégration : s'intègre facilement aux pipelines de données existants et à d'autres composants logiciels grâce à son API flexible.

Les modèles Ultralytics YOLO renvoient soit une liste Python d'objets Results, soit un générateur économe en mémoire d'objets Results lorsque stream=True est transmis au modèle pendant l'inférence :

Prédiction
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # pretrained YOLO26n model

# Run batched inference on a list of images
results = model(["image1.jpg", "image2.jpg"])  # return a list of Results objects

# Process results list
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename="result.jpg")  # save to disk

Sources d'inférence#

YOLO26 peut traiter différents types de sources d'entrée pour l'inférence, comme indiqué dans le tableau ci-dessous. Ces sources comprennent des images statiques, des flux vidéo et différents formats de données. Le tableau indique également si chaque source peut être utilisée en mode streaming avec l'argument stream=True ✅. Le mode streaming est utile pour traiter des vidéos ou des flux en direct, car il crée un générateur de résultats au lieu de charger toutes les images en mémoire.

Conseil

Utilise stream=True pour traiter de longues vidéos ou de grands jeux de données et gérer efficacement la mémoire. Lorsque stream=False, les résultats de toutes les images ou de tous les points de données sont stockés en mémoire, ce qui peut rapidement s'accumuler et provoquer des erreurs de mémoire insuffisante pour les entrées volumineuses. En revanche, stream=True utilise un générateur qui ne conserve en mémoire que les résultats de l'image ou du point de données courant, réduisant ainsi considérablement la consommation mémoire et évitant les problèmes de mémoire insuffisante.

SourceExempleTypeRemarques
image'image.jpg'str ou PathFichier image unique.
URL'https://ultralytics.com/images/bus.jpg'strURL vers une image.
screenshot'screen'strCapture une capture d'écran.
PILImage.open('image.jpg')PIL.ImageFormat HWC avec des canaux RGB.
OpenCVcv2.imread('image.jpg')np.ndarrayFormat HWC avec des canaux BGR uint8 (0-255).
NumPynp.zeros((640,1280,3))np.ndarrayFormat HWC avec des canaux BGR uint8 (0-255).
torchtorch.zeros(16,3,320,640)torch.TensorFormat BCHW avec des canaux RGB float32 (0.0-1.0).
CSV'sources.csv'str ou PathFichier CSV contenant les chemins vers des images, des vidéos ou des répertoires.
vidéo ✅'video.mp4'str ou PathFichier vidéo dans des formats tels que MP4, AVI, etc.
répertoire ✅'path/'str ou PathChemin vers un répertoire contenant des images ou des vidéos.
glob ✅'path/*.jpg'strMotif glob permettant de faire correspondre plusieurs fichiers. Utilise le caractère * comme caractère générique.
YouTube ✅'https://youtu.be/LNwODJXcvt4'strURL vers une vidéo YouTube.
flux ✅'rtsp://example.com/media.mp4'strURL pour des protocoles de streaming tels que RTSP, RTMP, TCP ou une adresse IP.
flux multiples ✅'list.streams'str ou PathFichier texte *.streams contenant une URL de flux par ligne ; ainsi, 8 flux s'exécuteront avec une taille de lot de 8.
webcam ✅0intIndex du périphérique caméra connecté sur lequel exécuter l'inférence.

Voici des exemples de code pour utiliser chaque type de source :

Sources de prédiction

Exécute l'inférence sur un fichier image.

from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Define path to the image file
source = "path/to/image.jpg"

# Run inference on the source
results = model(source)  # list of Results objects

Arguments d'inférence#

model.predict() accepte plusieurs arguments qui peuvent être transmis au moment de l'inférence pour remplacer les valeurs par défaut :

Taille fixe ou rectangle minimal (rect)#

Par défaut, predict utilise rect=True, ce qui active si possible le remplissage en rectangle minimal. L'image est mise à l'échelle pour tenir dans imgsz et complétée uniquement jusqu'au multiple de stride supérieur le plus proche ; le tenseur final peut donc être plus petit que imgsz. Le remplissage en rectangle minimal est utilisé uniquement lorsque toutes les images du lot ont la même forme et que le backend le prend en charge (PyTorch .pt, ou ONNX / Triton dynamique). Sinon, les images sont complétées jusqu'à la cible imgsz complète.

Utilise rect=False pour toujours compléter jusqu'à la cible imgsz complète. Cette option est recommandée lorsque tu as besoin d'une taille d'entrée fixe correspondant aux modèles exportés (ONNX, TensorRT, etc.).

Entier ou tuple imgsz

  • Un entier imgsz=640 devient une cible carrée (640, 640) après l'arrondi au stride.
  • Un tuple imgsz=(384, 672) définit une cible rectangulaire. Avec rect=True et auto=True, le tenseur réel peut être plus petit que cette cible.

Entraînement ou prédiction/export

L’entraînement accepte uniquement un entier imgsz (une liste [h, w] est convertie en sa valeur maximale). La prédiction et l’exportation acceptent soit un entier, soit un tuple (height, width).

Exemple
from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Run inference on 'bus.jpg' with arguments
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.25)

Arguments d’inférence :

ArgumentTypeValeur par défautDescription
sourcestr ou int ou NoneNoneIndique la source de données pour l’inférence. Il peut s’agir d’un chemin d’image, d’un fichier vidéo, d’un répertoire, d’une URL ou d’un identifiant de périphérique pour les flux en direct. Si cette valeur est omise, un avertissement est journalisé et le modèle utilise les ressources de démonstration intégrées (ultralytics/assets, ou une URL de démonstration pour OBB). Prend en charge un large éventail de formats et de sources, ce qui permet une utilisation flexible avec différents types d’entrées.
conffloat0.25Définit le seuil de confiance minimal pour les détections. Les objets détectés avec une confiance inférieure à ce seuil sont ignorés. Ajuster cette valeur peut contribuer à réduire les faux positifs.
ioufloat0.7Seuil d’Intersection over Union (IoU) pour la suppression non maximale (NMS). Des valeurs plus faibles produisent moins de détections en éliminant les boîtes qui se chevauchent, ce qui est utile pour réduire les doublons.
imgszint ou tuple640Cible du letterbox. Un entier donne un N×N carré ; un tuple donne (height, width). Avec rect=True, le tenseur réel peut être plus petit que cette cible en raison du remplissage en rectangle minimal. Utilise rect=False pour une taille fixe. Consulte Forme fixe ou rectangle minimal.
rectboolTrueSi True, utilise si possible un remplissage en rectangle minimal (lot de même forme et backend pris en charge). Si False, complète toujours jusqu’à imgsz. Consulte Forme fixe ou rectangle minimal.
quantizeint ou strNonePrécision d'inférence : 16/"fp16" et 32/"fp32"/non défini sélectionnent le calcul en FP16 ou FP32 pour les modèles PyTorch et TorchScript ; les autres formats calculent à la précision que leur artefact et leur environnement d'exécution sélectionnent. À 16, OpenVINO arrondit toujours l'entrée en FP16 côté client et l'élargit à nouveau en FP32, sans modifier la précision du calcul dans l'environnement d'exécution. La quantification INT8/PTQ se configure lors de l'exportation, puis s'utilise en chargeant le modèle exporté. Remplace l'indicateur obsolète half.
devicestrNoneIndique le périphérique utilisé pour l’inférence (par ex. cpu, cuda:0, 0, npu ou npu:0). Permet de choisir entre le CPU, un GPU spécifique, le NPU Huawei Ascend ou d’autres périphériques de calcul pour l’exécution du modèle.
dnnboolFalseSi True, utilise le module DNN d’OpenCV au lieu d’ONNX Runtime pour l’inférence de modèles ONNX.
datastrNoneChemin vers un fichier YAML de jeu de données (par ex. coco8.yaml), lu uniquement pour son names, et seulement lorsque le modèle chargé ne contient pas ses propres noms de classes : un export tiers ou un export Ultralytics séparé des métadonnées fournies avec celui-ci. Un tel modèle indique sinon class0, class1, etc.
batchint1Indique la taille de lot pour l’inférence (fonctionne uniquement lorsque la source est un répertoire, un fichier vidéo ou un fichier .txt). Une taille de lot plus grande peut offrir un débit supérieur et réduire la durée totale nécessaire à l’inférence.
max_detint300Nombre maximal de détections autorisées par image. Limite le nombre total d’objets que le modèle peut détecter lors d’une seule inférence, afin d’éviter des sorties excessives dans les scènes denses.
vid_strideint1Pas entre les images pour les entrées vidéo. Permet d’ignorer des images dans les vidéos afin d’accélérer le traitement, au prix de la résolution temporelle. Une valeur de 1 traite chaque image ; les valeurs supérieures ignorent des images.
stream_bufferboolFalseDétermine s’il faut mettre en file d’attente les images entrantes des flux vidéo. Si False, les anciennes images sont supprimées pour faire place aux nouvelles (optimisé pour les applications en temps réel). Si True, les nouvelles images sont placées dans un tampon, ce qui garantit qu’aucune image n’est ignorée, mais ajoute de la latence si le nombre d’images par seconde de l’inférence est inférieur à celui du flux.
visualizeboolFalseEnregistre une carte thermique d’activation de classe à côté de chaque prédiction, indiquant quels pixels ont augmenté les scores de la classe prédite. Respecte conf et classes, de sorte que classes=[0] ne mappe que cette classe. Disponible uniquement pour les modèles PyTorch Ultralytics.
augmentboolFalseActive l’augmentation au moment du test (TTA) pour les prédictions, ce qui peut améliorer la robustesse des détections au prix de la vitesse d’inférence. Disponible uniquement pour les modèles PyTorch Ultralytics.
agnostic_nmsboolFalseActive la suppression non maximale (NMS) agnostique aux classes, en supprimant les boîtes superposées ayant les scores les plus bas entre différentes classes plutôt que seulement au sein de la même classe. Utile dans les scénarios de détection multi-classes où le chevauchement de classes est courant. Avec l'inférence sans NMS (nms=False sur YOLO26 ou YOLOv10), cela empêche uniquement la même détection d'apparaître avec plusieurs étiquettes de classe (doublons IoU=1,0) et n'effectue pas de suppression basée sur le seuil d'IoU entre des boîtes distinctes.
classeslist[int]NoneFiltre les prédictions selon un ensemble d’identifiants de classe. Seules les détections appartenant aux classes spécifiées sont renvoyées. Utile pour se concentrer sur les objets pertinents dans les tâches de détection multiclasse.
retina_masksboolFalseRenvoie des masques de segmentation haute résolution. Lorsque l’option est activée, les masques renvoyés (masks.data) correspondent à la taille de l’image d’origine. Si elle est désactivée, ils ont la taille de l’image utilisée pendant l’inférence.
embedlist[int]NoneIndique les couches à partir desquelles extraire les vecteurs de caractéristiques ou les représentations. Utilise model.embed(source) pour les représentations de l’avant-dernière couche, ou model.predict(source, embed=[layer]) pour sélectionner des couches spécifiques. Utile pour les tâches en aval comme le clustering ou la recherche par similarité. Disponible uniquement pour les modèles PyTorch Ultralytics.
projectstrNoneNom du répertoire de projet où les sorties de prédiction sont enregistrées si save est activé.
namestrNoneNom de l’exécution de prédiction. Utilisé pour créer un sous-répertoire dans le dossier du projet, où les sorties de prédiction sont stockées si save est activé.
streamboolFalseActive un traitement économe en mémoire pour les vidéos longues ou les nombreuses images en renvoyant un générateur d’objets Results au lieu de charger toutes les images en mémoire simultanément.
verboseboolTrueContrôle l’affichage des journaux détaillés d’inférence dans le terminal et fournit un retour en temps réel sur le processus de prédiction.
compilebool ou strFalseActive la compilation de graphes torch.compile de PyTorch 2.x avec backend='inductor'. Accepte True"default", False → désactive, ou un mode sous forme de chaîne tel que "default", "reduce-overhead", "max-autotune-no-cudagraphs". Repasse en mode eager avec un avertissement si la fonctionnalité n’est pas prise en charge.
channels_lastboolNoneUtilise le format mémoire channels_last (NHWC) pour l’inférence PyTorch native. None l’active automatiquement sur les processeurs Linux et Windows x86 avec oneDNN et PyTorch 1.13 ou version ultérieure, False le désactive et True le demande sur les processeurs x86 ou périphériques CUDA pris en charge. ARM64, MPS, les anciennes versions de PyTorch, les processeurs sans oneDNN et les formats exportés tels que TensorRT et ONNX restent inchangés.
nmsbool, optionnelNoneExécute l'inférence one-to-many avec NMS par défaut (None ou True). Définis False pour utiliser la tête one-to-one sans NMS lorsqu'elle est disponible. Consulte le guide de détection de bout en bout pour plus de détails.

Arguments de visualisation :

ArgumentTypeValeur par défautDescription
showboolFalseSi True, affiche les images ou vidéos annotées dans une fenêtre. Utile pour obtenir un retour visuel immédiat pendant le développement ou les tests.
saveboolFalse or TrueActive l’enregistrement des images ou vidéos annotées dans des fichiers. Utile pour la documentation, l’analyse ultérieure ou le partage des résultats. Vaut True par défaut avec la CLI et False avec Python.
save_framesboolFalseLors du traitement de vidéos, enregistre les images individuelles sous forme de fichiers image. Utile pour extraire des images spécifiques ou effectuer une analyse détaillée image par image.
save_txtboolFalseEnregistre les résultats de détection dans un fichier texte, selon le format [class] [x_center] [y_center] [width] [height] [confidence]. Utile pour l’intégration avec d’autres outils d’analyse.
save_confboolFalseInclut les scores de confiance dans les fichiers texte enregistrés. Augmente le niveau de détail disponible pour le post-traitement et l’analyse.
save_cropboolFalseEnregistre des images recadrées des détections. Utile pour l’augmentation de jeu de données, l’analyse ou la création de jeux de données ciblés pour des objets spécifiques.
show_labelsboolTrueAffiche les étiquettes de chaque détection dans la sortie visuelle. Permet d’identifier immédiatement les objets détectés.
show_confboolTrueAffiche le score de confiance de chaque détection à côté de son étiquette. Donne un aperçu du degré de certitude du modèle pour chaque détection.
show_boxesboolTrueDessine des boîtes englobantes autour des objets détectés. Essentiel pour identifier visuellement les objets et les localiser dans les images ou les images vidéo.
line_widthint or NoneNoneIndique la largeur de ligne des boîtes englobantes. Si None, la largeur de ligne est ajustée automatiquement selon la taille de l’image. Permet de personnaliser l’affichage pour une meilleure lisibilité.

Formats d’images et de vidéos#

YOLO26 prend en charge différents formats d’images et de vidéos, comme indiqué dans ultralytics/data/utils.py. Consulte les tableaux ci-dessous pour connaître les suffixes valides et voir des exemples de commandes predict.

Images#

Le tableau ci-dessous contient les formats d’image Ultralytics valides.

Remarque

Les formats HEIC/HEIF nécessitent pi-heif, qui est installé automatiquement lors de la première utilisation. AVIF est pris en charge nativement par Pillow.

Suffixes d’imageExemple de commande predictRéférence
.avifyolo predict source=image.avifFormat de fichier image AV1
.bmpyolo predict source=image.bmpFormat de fichier BMP de Microsoft
.dngyolo predict source=image.dngAdobe DNG
.heicyolo predict source=image.heicFormat d’image à haute efficacité
.heifyolo predict source=image.heifFormat d’image à haute efficacité
.jp2yolo predict source=image.jp2JPEG 2000
.jpegyolo predict source=image.jpegJPEG
.jpgyolo predict source=image.jpgJPEG
.mpoyolo predict source=image.mpoObjet multi-image
.pngyolo predict source=image.pngGraphiques réseau portables
.tifyolo predict source=image.tifFormat de fichier image balisé
.tiffyolo predict source=image.tiffFormat de fichier image balisé
.webpyolo predict source=image.webpWebP

Vidéos#

Le tableau ci-dessous contient les formats vidéo Ultralytics valides.

Suffixes vidéoExemple de commande predictRéférence
.asfyolo predict source=video.asfFormat des systèmes avancés
.aviyolo predict source=video.aviEntrelacement audio-vidéo
.gifyolo predict source=video.gifFormat d’échange graphique
.m4vyolo predict source=video.m4vMPEG-4 partie 14
.mkvyolo predict source=video.mkvMatroska
.movyolo predict source=video.movFormat de fichier QuickTime
.mp4yolo predict source=video.mp4MPEG-4 partie 14 - Wikipédia
.mpegyolo predict source=video.mpegMPEG-1 partie 2
.mpgyolo predict source=video.mpgMPEG-1 partie 2
.tsyolo predict source=video.tsFlux de transport MPEG
.wmvyolo predict source=video.wmvWindows Media Video
.webmyolo predict source=video.webmProjet WebM

Utilisation des résultats#

Tous les appels predict() d’Ultralytics renvoient une liste d’objets Results :

Résultats
from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")
results = model(
    [
        "https://ultralytics.com/images/bus.jpg",
        "https://ultralytics.com/images/zidane.jpg",
    ]
)  # batch inference

Les objets Results possèdent les attributs suivants :

AttributTypeDescription
orig_imgnp.ndarrayL’image originale sous forme de tableau NumPy.
orig_shapetupleLa forme de l’image originale au format (hauteur, largeur).
boxesBoxes, optionalUn objet Boxes contenant les boîtes englobantes des détections.
masksMasks, optionalUn objet Masks contenant les masques des détections.
probsProbs, optionalUn objet Probs contenant les probabilités de chaque classe pour la tâche de classification.
keypointsKeypoints, optionalUn objet Keypoints contenant les points clés détectés pour chaque objet.
obbOBB, optionalUn objet OBB contenant les boîtes englobantes orientées.
semantic_maskSemanticMask, optionalUn objet SemanticMask contenant une carte de classes dense par pixel.
speeddictUn dictionnaire associant les vitesses de prétraitement, d’inférence et de post-traitement, en millisecondes par image.
namesdictUn dictionnaire associant les indices de classe aux noms de classe.
pathstrLe chemin vers le fichier image.
save_dirstr, optionalRépertoire dans lequel enregistrer les résultats.

Résultats par tâche#

Les champs renseignés ci-dessous dépendent de la tâche de ton modèle — compare detection, segmentation, semantic segmentation, depth estimation, classification, pose, and OBB si tu n'en as pas encore choisi une. Chaque prédiction renvoie un objet Results par image ou par trame. Les champs communs ci-dessus sont toujours disponibles, tandis que les données de prédiction spécifiques à la tâche sont stockées dans les champs ci-dessous. Les tenseurs de coordonnées et de confiance YOLO sont de type torch.float32 ; les tenseurs de probabilité sont de type torch.float32 (sauf en cas d'utilisation de la demi-précision, auquel cas il s'agit de torch.float16). Après result.numpy(), les tenseurs deviennent des tableaux NumPy dotés de types de données (dtypes) NumPy correspondants. Les masques d'instance sont des tenseurs binaires torch.uint8, tandis que les masques sémantiques utilisent le plus petit type de données entier pratique pour les identifiants de classe : torch.uint8, torch.int16 ou torch.int32, selon le nombre de classes.

AttributTypeFormeDescription
result.boxesBoxes(N)Boîtes de détection.
result.boxes.datatorch.float32(N,6/7)[x1,y1,x2,y2,conf,cls] brut, avec un ID de suivi facultatif.
result.boxes.xyxytorch.float32(N,4)Boîtes de pixels xyxy.
result.boxes.conftorch.float32(N,)Scores de confiance.
result.boxes.clstorch.float32(N,)ID de classe ; convertis en int pour obtenir les noms.

Les objets Results disposent des méthodes suivantes :

MéthodeType de retourDescription
update()NoneMet à jour l’objet Results avec de nouvelles données telles que les boîtes, les masques, les probabilités, les OBB, les points clés ou les masques sémantiques.
cpu()ResultsRenvoie une copie de l’objet Results avec tous les tenseurs déplacés vers la mémoire CPU.
numpy()ResultsRenvoie une copie de l’objet Results avec tous les tenseurs convertis en tableaux NumPy.
cuda()ResultsRenvoie une copie de l’objet Results avec tous les tenseurs déplacés vers la mémoire GPU.
to()ResultsRenvoie une copie de l’objet Results avec les tenseurs déplacés vers le device et le dtype spécifiés.
new()ResultsCrée un nouvel objet Results avec les mêmes attributs d’image, de chemin, de noms et de vitesse.
plot()np.ndarrayTrace les résultats de détection sur une image BGR d’entrée et renvoie l’image annotée.
show()NoneAffiche l’image avec les résultats d’inférence annotés.
save()strEnregistre l’image des résultats d’inférence annotés dans un fichier et renvoie le nom du fichier.
verbose()strRenvoie une chaîne de journal pour chaque tâche, détaillant les résultats de détection et de classification.
save_txt()strEnregistre les résultats de détection dans un fichier texte et renvoie le chemin du fichier enregistré.
save_crop()NoneEnregistre les images de détection recadrées dans le répertoire spécifié.
summary()List[Dict[str, Any]]Convertit les résultats d’inférence en dictionnaire récapitulatif, avec normalisation facultative.
to_df()DataFrameConvertit les résultats de détection en DataFrame Polars.
to_csv()strConvertit les résultats de détection au format CSV.
to_json()strConvertit les résultats de détection au format JSON.

Pour plus de détails, consulte la documentation de la classe Results.

Boîtes#

L’objet Boxes peut être utilisé pour indexer, manipuler et convertir les boîtes englobantes dans différents formats.

Boîtes
from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.boxes)  # print the Boxes object containing the detection bounding boxes

Voici un tableau des méthodes et propriétés de la classe Boxes, avec leur nom, leur type et leur description :

NomTypeDescription
cpu()MéthodeDéplace l’objet vers la mémoire CPU.
numpy()MéthodeConvertit l’objet en tableau NumPy.
cuda()MéthodeDéplace l’objet vers la mémoire CUDA.
to()MéthodeDéplace l’objet vers le device spécifié.
xyxyPropriété (torch.Tensor)Renvoie les boîtes au format xyxy.
confPropriété (torch.Tensor)Renvoie les valeurs de confiance des boîtes.
clsPropriété (torch.Tensor)Renvoie les valeurs de classe des boîtes.
idPropriété (torch.Tensor)Renvoie les ID de suivi des boîtes (s’ils sont disponibles).
xywhPropriété (torch.Tensor)Renvoie les boîtes au format xywh.
xyxynPropriété (torch.Tensor)Renvoie les boîtes au format xyxy normalisées par rapport à la taille de l’image d’origine.
xywhnPropriété (torch.Tensor)Renvoie les boîtes au format xywh normalisées par rapport à la taille de l’image d’origine.

Pour plus de détails, consulte la documentation de la classe Boxes.

Masques#

L’objet Masks peut être utilisé pour indexer, manipuler et convertir les masques en segments.

Masques
from ultralytics import YOLO

# Load a pretrained YOLO26n-seg Segment model
model = YOLO("yolo26n-seg.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.masks)  # print the Masks object containing the detected instance masks

Voici un tableau des méthodes et propriétés de la classe Masks, avec leur nom, leur type et leur description :

NomTypeDescription
dataPropriété (torch.Tensor)Tenseur de masque binaire torch.uint8 de forme (N,H,W) et de valeurs 0 ou 1.
cpu()MéthodeRenvoie le tenseur des masques dans la mémoire CPU.
numpy()MéthodeRenvoie le tenseur des masques sous forme de tableau NumPy.
cuda()MéthodeRenvoie le tenseur des masques dans la mémoire GPU.
to()MéthodeRenvoie le tenseur des masques avec le device et le dtype spécifiés.
xynPropriété (list[np.ndarray])Une liste de polygones de masques normalisés.
xyPropriété (list[np.ndarray])Une liste de polygones de masques en coordonnées de pixels.

Pour plus de détails, consulte la documentation de la classe Masks.

SemanticMask#

SemanticMask stocke une carte dense des classes pour les résultats de segmentation sémantique. Contrairement à Masks, il ne contient pas un masque binaire par objet et ne fournit pas d’utilitaires pour les polygones.

SemanticMask
from ultralytics import YOLO

# Load a pretrained YOLO26n-sem Semantic model
model = YOLO("yolo26n-sem.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.semantic_mask.data)  # print the H x W class-ID map
NomTypeDescription
dataPropriété (torch.Tensor)Carte des ID de classe de forme (H,W). Le dtype est torch.uint8, torch.int16 ou torch.int32, choisi selon le nombre de classes.
shapePropriété (tuple)Forme de la carte des classes, correspondant généralement à result.orig_shape.
cpu()MéthodeRenvoie le tenseur du masque sémantique dans la mémoire CPU.
numpy()MéthodeRenvoie le tenseur du masque sémantique sous forme de tableau NumPy.
cuda()MéthodeRenvoie le tenseur du masque sémantique dans la mémoire GPU.
to()MéthodeRenvoie le tenseur du masque sémantique avec le device et le dtype spécifiés.

Points clés#

L’objet Keypoints peut être utilisé pour indexer, manipuler et normaliser les coordonnées.

Points clés
from ultralytics import YOLO

# Load a pretrained YOLO26n-pose Pose model
model = YOLO("yolo26n-pose.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.keypoints)  # print the Keypoints object containing the detected keypoints

Voici un tableau des méthodes et propriétés de la classe Keypoints, avec leur nom, leur type et leur description :

NomTypeDescription
cpu()MéthodeRenvoie le tenseur des points clés dans la mémoire CPU.
numpy()MéthodeRenvoie le tenseur des points clés sous forme de tableau NumPy.
cuda()MéthodeRenvoie le tenseur des points clés dans la mémoire GPU.
to()MéthodeRenvoie le tenseur des points clés avec le device et le dtype spécifiés.
xynPropriété (torch.Tensor)Une liste de points clés normalisés représentés sous forme de tenseurs.
xyPropriété (torch.Tensor)Une liste de points clés en coordonnées de pixels représentés sous forme de tenseurs.
confPropriété (torch.Tensor)Renvoie les valeurs de confiance des points clés si elles sont disponibles, sinon None.

Pour plus de détails, consulte la documentation de la classe Keypoints.

Probabilités#

L’objet Probs peut être utilisé pour obtenir les indices et scores de classification top1 et top5.

Probabilités
from ultralytics import YOLO

# Load a pretrained YOLO26n-cls Classify model
model = YOLO("yolo26n-cls.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.probs)  # print the Probs object containing the detected class probabilities

Voici un tableau récapitulatif des méthodes et propriétés de la classe Probs :

NomTypeDescription
cpu()MéthodeRenvoie une copie du tenseur des probabilités dans la mémoire CPU.
numpy()MéthodeRenvoie une copie du tenseur des probabilités sous forme de tableau NumPy.
cuda()MéthodeRenvoie une copie du tenseur des probabilités dans la mémoire GPU.
to()MéthodeRenvoie une copie du tenseur des probabilités avec le device et le dtype spécifiés.
top1Propriété (int)Indice de la classe principale.
top5Propriété (list[int])Indices des 5 classes principales.
top1confPropriété (torch.Tensor)Confiance de la classe principale.
top5confPropriété (torch.Tensor)Confiances des 5 classes principales.

Pour plus de détails, consulte la documentation de la classe Probs.

OBB#

L’objet OBB peut être utilisé pour indexer, manipuler et convertir des BBox orientées dans différents formats.

OBB
from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n-obb.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/boats.jpg")  # results list

# View results
for r in results:
    print(r.obb)  # print the OBB object containing the oriented detection bounding boxes

Voici un tableau des méthodes et propriétés de la classe OBB, avec leur nom, leur type et leur description :

NomTypeDescription
cpu()MéthodeDéplace l’objet vers la mémoire CPU.
numpy()MéthodeConvertit l’objet en tableau NumPy.
cuda()MéthodeDéplace l’objet vers la mémoire CUDA.
to()MéthodeDéplace l’objet vers le device spécifié.
confPropriété (torch.Tensor)Renvoie les valeurs de confiance des boîtes.
clsPropriété (torch.Tensor)Renvoie les valeurs de classe des boîtes.
idPropriété (torch.Tensor)Renvoie les ID de suivi des boîtes (s’ils sont disponibles).
xyxyPropriété (torch.Tensor)Renvoie les BBox horizontales au format xyxy.
xywhrPropriété (torch.Tensor)Renvoie les BBox pivotées au format xywhr.
xyxyxyxyPropriété (torch.Tensor)Renvoie les BBox pivotées au format xyxyxyxy.
xyxyxyxynPropriété (torch.Tensor)Renvoie les BBox pivotées au format xyxyxyxy, normalisées par rapport aux dimensions de l’image.

Pour plus de détails, consulte la documentation de la classe OBB.

Tracé des résultats#

La méthode plot() des objets Results facilite la visualisation des prédictions en superposant les objets détectés (tels que les BBox, les masques, les points clés et les probabilités) sur l’image d’origine. Cette méthode renvoie l’image annotée sous forme de tableau NumPy, ce qui permet de l’afficher ou de l’enregistrer facilement.

Tracé
from PIL import Image

from ultralytics import YOLO

# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")

# Run inference on 'bus.jpg'
results = model(["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"])  # results list

# Visualize the results
for i, r in enumerate(results):
    # Plot results image
    im_bgr = r.plot()  # BGR-order numpy array
    im_rgb = Image.fromarray(im_bgr[..., ::-1])  # RGB-order PIL image

    # Show results to screen (in supported environments)
    r.show()

    # Save results to disk
    r.save(filename=f"results{i}.jpg")

Paramètres de la méthode plot()#

La méthode plot() accepte différents arguments pour personnaliser la sortie :

ArgumentTypeDescriptionValeur par défaut
confboolInclut les scores de confiance des détections.True
line_widthfloatLargeur de ligne des BBox. S’adapte aux dimensions de l’image si None.None
font_sizefloatTaille de police du texte. S’adapte aux dimensions de l’image si None.None
fontstrNom de la police utilisée pour les annotations textuelles.'Arial.ttf'
pilboolRenvoie l’image sous forme d’objet PIL Image.False
imgnp.ndarray | torch.TensorImage alternative. Les tenseurs doivent être contigus au format HWC BGR uint8.None
kpt_radiusintRayon des points clés dessinés.5
kpt_lineboolRelie les points clés par des lignes.True
labelsboolInclut les étiquettes de classe dans les annotations.True
boxesboolSuperpose les BBox sur l’image.True
masksboolSuperpose les masques sur l’image.True
probsboolInclut les probabilités de classification.True
showboolAffiche directement l’image annotée à l’aide de la visionneuse d’images par défaut.False
saveboolEnregistre l’image annotée dans le fichier spécifié par filename.False
filenamestrChemin et nom du fichier dans lequel enregistrer l’image annotée si save vaut True.None
color_modestrSpécifie le mode de couleur, par exemple « instance » ou « class ».'class'
txt_colortuple[int, int, int]Couleur du texte BGR pour la BBox et l’étiquette de classification de l’image.(255, 255, 255)

Inférence thread-safe#

Garantir la sécurité des threads pendant l’inférence est essentiel lorsque tu exécutes plusieurs modèles YOLO en parallèle sur différents threads. Une inférence thread-safe garantit que les prédictions de chaque thread sont isolées et n’interfèrent pas les unes avec les autres, ce qui évite les conditions de concurrence et assure des sorties cohérentes et fiables.

Lorsque tu utilises des modèles YOLO dans une application multithread, il est important d’instancier des objets de modèle distincts pour chaque thread ou d’utiliser un stockage local au thread afin d’éviter les conflits :

Inférence thread-safe

Instancie un seul modèle dans chaque thread pour garantir une inférence thread-safe :

from threading import Thread

from ultralytics import YOLO

def thread_safe_predict(model, image_path):
    """Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
    model = YOLO(model)
    results = model.predict(image_path)
    # Process results

# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image2.jpg")).start()

Pour découvrir en détail l’inférence thread-safe avec les modèles YOLO et suivre des instructions étape par étape, consulte notre guide de l’inférence thread-safe avec YOLO. Ce guide te fournira toutes les informations nécessaires pour éviter les pièges courants et garantir le bon déroulement de ton inférence multithread.

Boucle for sur une source en streaming#

Voici un script Python utilisant OpenCV (cv2) et YOLO pour effectuer l’inférence sur des images vidéo. Ce script suppose que tu as déjà installé les packages nécessaires (opencv-python et ultralytics).

Boucle for en streaming
import cv2

from ultralytics import YOLO

# Load the YOLO model
model = YOLO("yolo26n.pt")

# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLO inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLO Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

Ce script effectue des prédictions sur chaque image de la vidéo, visualise les résultats et les affiche dans une fenêtre. Tu peux quitter la boucle en appuyant sur « q ».

Et ensuite ?#

Prêt à aller au-delà d’un modèle préentraîné ? Vérifie que ta tâche correspond à ton problème, formate tes propres données avec le guide des jeux de données, puis entraîne ton modèle avec celles-ci.

FAQ#

  • Ultralytics YOLO est un modèle de pointe pour la détection d’objets, la segmentation d’instances, la segmentation sémantique, l’estimation de profondeur et la classification en temps réel. Son mode predict permet d’effectuer des inférences à haute vitesse sur diverses sources de données, telles que des images, des vidéos et des flux en direct. Conçu pour offrir performances et polyvalence, il propose également des modes de traitement par lots et de streaming. Pour plus d’informations sur ses fonctionnalités, consulte le mode predict d’Ultralytics YOLO.

  • Ultralytics YOLO peut traiter un large éventail de sources de données, notamment des images individuelles, des vidéos, des répertoires, des URL et des flux. Tu peux spécifier la source de données dans l’appel model.predict(). Par exemple, utilise 'image.jpg' pour une image locale ou 'https://ultralytics.com/images/bus.jpg' pour une URL. Consulte les exemples détaillés concernant les différentes sources d’inférence dans la documentation.

  • Pour optimiser la vitesse d’inférence et gérer efficacement la mémoire, tu peux utiliser le mode streaming en définissant stream=True dans la méthode d’appel du prédicteur. Le mode streaming génère un générateur économe en mémoire d’objets Results au lieu de charger toutes les images en mémoire. Ce mode est particulièrement utile pour traiter de longues vidéos ou de grands jeux de données. Pour en savoir plus, consulte le mode streaming.

  • La méthode model.predict() de YOLO accepte différents arguments, tels que conf, iou, imgsz, device, entre autres. Ces arguments te permettent de personnaliser le processus d’inférence en définissant des paramètres tels que les seuils de confiance, la taille de l’image et le dispositif utilisé pour les calculs. Tu trouveras une description détaillée de ces arguments dans la section arguments d’inférence.

  • Utilise model.embed(source) pour extraire les embeddings de caractéristiques de l’avant-dernière couche, ou transmets embed=[layer_index] à model.predict() pour sélectionner des couches spécifiques.

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    source = "https://ultralytics.com/images/bus.jpg"
    
    results = model.predict(source)  # Results objects
    embeddings = model.embed(source)  # list of torch.Tensor embeddings
  • Après avoir effectué une inférence avec YOLO, les objets Results contiennent des méthodes permettant d’afficher et d’enregistrer les images annotées. Tu peux utiliser des méthodes telles que result.show() et result.save(filename="result.jpg") pour visualiser et enregistrer les résultats. Les répertoires parents manquants du chemin de fichier sont créés automatiquement (par exemple, result.save("path/to/result.jpg")). Pour obtenir la liste complète de ces méthodes, consulte la section utilisation des résultats.

Commentaires