Aller au contenu

Prédiction de Modèle avec Ultralytics YOLO

Écosystème et intégrations Ultralytics YOLO

Introduction

Dans l'univers de l'apprentissage automatique et de la vision par ordinateur, le processus de donner du sens aux données visuelles est appelé 'inférence' ou 'prédiction'. Ultralytics YOLOv8 propose une fonctionnalité puissante connue sous le nom de mode de prédiction adapté pour l'inférence en temps réel et haute performance sur une large gamme de sources de données.



Regardez : Comment Extraire les Sorties du Modèle Ultralytics YOLOv8 pour des Projets Personnalisés.

Applications Réelles

Fabrication Sports Sécurité
Détection des Pièces de Véhicules Détection des Joueurs de Football Détection de Chutes de Personnes
Détection des Pièces de Véhicules Détection des Joueurs de Football Détection de Chutes de Personnes

Pourquoi Utiliser Ultralytics YOLO pour l'Inférence ?

Voici pourquoi vous devriez considérer le mode de prédiction YOLOv8 pour vos besoins variés en inférence :

  • Polyvalence : Capable de faire des inférences sur des images, des vidéos et même des flux en direct.
  • Performance : Conçu pour le traitement en temps réel à grande vitesse sans sacrifier la précision.
  • Facilité d'Utilisation : Interfaces Python et CLI intuitives pour un déploiement et des tests rapides.
  • Très Personnalisable : Divers paramètres et réglages pour ajuster le comportement d'inférence du modèle selon vos besoins spécifiques.

Caractéristiques Clés du Mode de Prédiction

Le mode de prédiction YOLOv8 est conçu pour être robuste et polyvalent, avec des fonctionnalités telles que :

  • Compatibilité avec Plusieurs Sources de Données : Que vos données soient sous forme d'images individuelles, d'une collection d'images, de fichiers vidéo ou de flux vidéo en temps réel, le mode de prédiction répond à vos besoins.
  • Mode Streaming : Utilisez la fonctionnalité de streaming pour générer un générateur efficace en termes de mémoire d'objets Results. Activez-le en réglant stream=True dans la méthode d'appel du prédicteur.
  • Traitement par Lots : La capacité de traiter plusieurs images ou trames vidéo dans un seul lot, accélérant ainsi le temps d'inférence.
  • Facile à Intégrer : S'intègre facilement dans les pipelines de données existants et autres composants logiciels, grâce à son API souple.

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

Prédire

from ultralytics import YOLO

# Charger un modèle
model = YOLO('yolov8n.pt')  # modèle YOLOv8n pré-entraîné

# Exécuter une inférence par lots sur une liste d'images
results = model(['im1.jpg', 'im2.jpg'])  # renvoie une liste d'objets Results

# Traiter la liste des résultats
for result in results:
    boxes = result.boxes  # Objet Boxes pour les sorties bbox
    masks = result.masks  # Objet Masks pour les masques de segmentation
    keypoints = result.keypoints  # Objet Keypoints pour les sorties de pose
    probs = result.probs  # Objet Probs pour les sorties de classification
from ultralytics import YOLO

# Charger un modèle
model = YOLO('yolov8n.pt')  # modèle YOLOv8n pré-entraîné

# Exécuter une inférence par lots sur une liste d'images
results = model(['im1.jpg', 'im2.jpg'], stream=True)  # renvoie un générateur d'objets Results

# Traiter le générateur de résultats
for result in results:
    boxes = result.boxes  # Objet Boxes pour les sorties bbox
    masks = result.masks  # Objet Masks pour les masques de segmentation
    keypoints = result.keypoints  # Objet Keypoints pour les sorties de pose
    probs = result.probs  # Objet Probs pour les sorties de classification

Sources d'Inférence

YOLOv8 peut traiter différents types de sources d'entrée pour l'inférence, comme illustré dans le tableau ci-dessous. Les sources incluent des images statiques, des flux vidéos et divers 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 bénéfique 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 tous les cadres en mémoire.

Astuce

Utilisez stream=True pour traiter des vidéos longues ou des jeux de données volumineux afin de gérer efficacement la mémoire. Quand stream=False, les résultats pour tous les cadres ou 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 de grandes entrées. En revanche, stream=True utilise un générateur, qui ne garde que les résultats du cadre ou point de données actuel en mémoire, réduisant considérablement la consommation de mémoire et prévenant les problèmes de mémoire insuffisante.

Source Argument Type Notes
image 'image.jpg' str ou Path Fichier image unique.
URL 'https://ultralytics.com/images/bus.jpg' str URL vers une image.
capture d'écran 'screen' str Prendre une capture d'écran.
PIL Image.open('im.jpg') PIL.Image Format HWC avec canaux RGB.
OpenCV cv2.imread('im.jpg') np.ndarray Format HWC avec canaux BGR uint8 (0-255).
numpy np.zeros((640,1280,3)) np.ndarray Format HWC avec canaux BGR uint8 (0-255).
torch torch.zeros(16,3,320,640) torch.Tensor Format BCHW avec canaux RGB float32 (0.0-1.0).
CSV 'sources.csv' str ou Path Fichier CSV contenant des chemins vers des images, vidéos ou répertoires.
vidéo ✅ 'video.mp4' str ou Path Fichier vidéo dans des formats comme MP4, AVI, etc.
répertoire ✅ 'chemin/' str ou Path Chemin vers un répertoire contenant des images ou des vidéos.
motif global ✅ 'chemin/*.jpg' str Motif glob pour faire correspondre plusieurs fichiers. Utilisez le caractère * comme joker.
YouTube ✅ 'https://youtu.be/LNwODJXcvt4' str URL vers une vidéo YouTube.
flux ✅ 'rtsp://exemple.com/media.mp4' str URL pour des protocoles de streaming comme RTSP, RTMP, TCP, ou une adresse IP.
multi-flux ✅ 'liste.streams' str ou Path Fichier texte *.streams avec une URL de flux par ligne, c'est-à-dire que 8 flux s'exécuteront avec une taille de lot de 8.

Ci-dessous des exemples de code pour utiliser chaque type de source :

Sources de prédiction

Exécutez une inférence sur un fichier image.

from ultralytics import YOLO

# Charger un modèle YOLOv8n pré-entraîné
model = YOLO('yolov8n.pt')

# Définir le chemin vers le fichier image
source = 'chemin/vers/image.jpg'

# Exécuter une inférence sur la source
results = model(source)  # liste d'objets Results

Exécutez une inférence sur le contenu actuel de l'écran sous forme de capture d'écran.

from ultralytics import YOLO

# Charger un modèle YOLOv8n pré-entraîné
model = YOLO('yolov8n.pt')

# Définir la capture d'écran actuelle comme source
source = 'screen'

# Exécuter une inférence sur la source
results = model(source)  # liste d'objets Results

Exécutez une inférence sur une image ou vidéo hébergée à distance via URL.

from ultralytics import YOLO

# Charger un modèle YOLOv8n pré-entraîné
model = YOLO('yolov8n.pt')

# Définir l'URL d'une image ou vidéo distante
source = 'https://ultralytics.com/images/bus.jpg'

# Exécuter une inférence sur la source
results = model(source)  # liste d'objets Results

Exécutez une inférence sur une image ouverte avec la bibliothèque Python Imaging Library (PIL).

from PIL import Image
from ultralytics import YOLO

# Charger un modèle YOLOv8n pré-entraîné
model = YOLO('yolov8n.pt')

# Ouvrir une image avec PIL
source = Image.open('chemin/vers/image.jpg')

# Exécuter une inférence sur la source
results = model(source)  # liste d'objets Results

Exécutez une inférence sur une image lue avec OpenCV.

import cv2
from ultralytics import YOLO

# Charger un modèle YOLOv8n pré-entraîné
model = YOLO('yolov8n.pt')

# Lire une image avec OpenCV
source = cv2.imread('chemin/vers/image.jpg')

# Exécuter une inférence sur la source
results = model(source)  # liste d'objets Results

Exécutez une inférence sur une image représentée sous forme de tableau numpy.

import numpy as np
from ultralytics import YOLO

# Charger un modèle YOLOv8n pré-entraîné
model = YOLO('yolov8n.pt')

# Créer un tableau numpy aléatoire de forme HWC (640, 640, 3) avec des valeurs dans l'intervalle [0, 255] et de type uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype='uint8')

# Exécuter une inférence sur la source
results = model(source)  # liste d'objets Results

Exécutez une inférence sur une image représentée sous forme de tenseur PyTorch. ```python import torch from ultralytics import YOLO

Charger un modèle YOLOv8n pré-entraîné

model = YOLO('yolov8n.pt')

Créer un tenseur aléatoire torch de forme BCHW (1, 3, 640, 640) avec des valeurs dans l'intervalle [0, 1] et de type float32

source = torch.rand(1, 3, 640, 640, dtype=torch.float32)

Exécuter une inférence sur la source

results = model(source) # liste d'objets Results


Created 2023-11-13, Updated 2023-11-18
Authors: glenn-jocher (2)

Commentaires