Du laboratoire à la production
Installe Ultralytics, exécute YOLO26 sur tes propres images, vérifie les résultats par rapport à tes spécifications et choisis la prochaine étape.
Dix minutes avec un modèle préentraîné suffisent à répondre à la question qui détermine tout ton plan : un modèle prêt à l’emploi couvre-t-il déjà tes classes et ta caméra, ou as-tu besoin de tes propres données ? Ici, tu installes Ultralytics, exécutes YOLO26 sur des images réelles et vérifies le résultat par rapport aux spécifications rédigées dans la première leçon.
Pratique
Installation#
pip install ultralytics
yolo checksLa première ligne installe le paquet Python ultralytics et la commande yolo, ainsi que PyTorch s’il n’est pas déjà installé. yolo checks affiche les versions de Python, PyTorch et CUDA, ainsi que le matériel qu’Ultralytics utilisera, pour que tu puisses vérifier la configuration avant de lancer quoi que ce soit. Utilise un nouvel environnement virtuel ; le guide de démarrage rapide couvre conda, Docker et les configurations GPU.
Le paquet ultralytics s’installe avec Python 3.8 et les versions ultérieures, mais les versions actuelles de PyTorch nécessitent Python 3.10 ou une version ultérieure. Si ton environnement est plus ancien, crée d’abord un nouvel environnement virtuel avec une version récente de Python.

Symptôme : yolo checks indique CPU sur une machine équipée d’un GPU NVIDIA, et l’inférence est lente. Cause : une version de PyTorch réservée au CPU — par exemple, la roue pip installée par défaut sous Windows. Solution : sélectionne ton système d’exploitation, ton gestionnaire de paquets et ta version de CUDA dans le sélecteur PyTorch ci-dessus, exécute la commande affichée, puis réinstalle ultralytics. Sur un Mac, comme dans la capture d’écran, la version installée par défaut convient ; Ultralytics s’exécute sur le CPU, sauf si tu passes device=mps pour utiliser le GPU Apple.
Une première prédiction#
from ultralytics import YOLO
model = YOLO("yolo26n.pt") # télécharge le modèle nano d’environ 5 Mo à la première utilisation
results = model("https://ultralytics.com/images/bus.jpg", save=True)
for box in results[0].boxes:
print(model.names[int(box.cls)], round(float(box.conf), 2))Les deux affichent un résumé sur une ligne par image et enregistrent l’image annotée dans runs/detect/predict :
image 1/1 .../bus.jpg: 640x480 4 persons, 1 bus, 19.7ms
Speed: 0.9ms preprocess, 19.7ms inference, 0.4ms postprocess per image at shape (1, 3, 640, 480)
Results saved to runs/detect/predictDétail ligne par ligne : l’image a été redimensionnée en 640×480 pour l’inférence ; le modèle a détecté quatre personnes et un bus ; l’inférence a pris environ 20 ms sur le processeur d’un ordinateur portable. La ligne Speed est ta première vérification de latence : compare-la à la fréquence d’images indiquée dans la ligne d’entrée de tes spécifications. Ouvre l’image enregistrée : chaque boîte affiche la classe, la boîte et la confiance présentées dans la leçon sur la détection.
Vérifie les résultats par rapport à tes spécifications#
| Question | Si oui | Si non |
|---|---|---|
| Tes classes font-elles partie des 80 classes COCO que le modèle connaît ? | Créer un prototype sans aucun entraînement | Tu as besoin de données annotées et d’un ajustement fin (guide sur l’ajustement fin) |
| Sur tes images, les boîtes dont le score dépasse ton seuil encadrent-elles les bons objets ? | La tâche et le point de vue correspondent | Attends-toi à un écart de domaine : collecte des données provenant de tes caméras |
| Le type de sortie est-il celui dont ta règle de décision a besoin ? | Conserve la tâche | Change de poids : -seg, -sem, -depth, -pose, -obb ou -cls |
| La vitesse est-elle suffisante pour ta fréquence d’images sur le matériel cible ? | Passe à la suite | Essaie un modèle plus petit ou un format d’export optimisé |
La première question a une réponse précise : model.names répertorie toutes les classes connues du modèle préentraîné. Pour les spécifications du chariot élévateur, person est une classe COCO, contrairement à forklift ; aucun seuil ne permettra donc au modèle préentraîné de détecter un chariot élévateur. C’est le résultat le plus courant lors d’un premier essai — le modèle couvre une partie des spécifications — et la bonne approche consiste à créer un prototype de la logique de décision avec les classes disponibles, tout en constituant le jeu de données pour les autres.
Ce qui change en production#
Un modèle déployé est confronté à des conditions qui n’ont jamais été échantillonnées dans son jeu de données : nouvelles caméras, saisons, produits, uniformes. Sans réentraînement, la précision se dégrade ; avec un réentraînement régulier à partir des données observées en production, elle remonte :

Chaque leçon de ce cours contribue à cette boucle : les spécifications définissent un échec, l’audit de couverture indique où chercher, le vérificateur d’annotations et les consignes rendent les nouvelles données utiles, et des séparations et métriques fiables permettent de vérifier si le modèle réentraîné est réellement meilleur. Deux habitudes permettent de faire fonctionner cette boucle dès le premier jour : consigne un échantillon d’entrées et de prédictions, y compris celles à faible confiance, et conserve le jeu de test figé afin que chaque modèle soit comparé sur les mêmes images. Le cours Observabilité et dérive aborde en détail la surveillance de la dérive des données.
Quelle est la suite ?#
| Cours | À suivre quand |
|---|---|
| Créer des jeux de données YOLO hautes performances | Tes classes ne sont pas préentraînées ou tes scènes diffèrent de COCO |
| Entraîne ton premier modèle YOLO | Tu as un jeu de données annoté et tu souhaites effectuer un ajustement fin |
| Ultralytics YOLO en production | Tu as un modèle et tu as besoin de l’exporter, d’effectuer du suivi et de le surveiller |
| Développe avec Ultralytics Platform | Tu veux gérer les données, l’annotation, l’entraînement et le déploiement au même endroit |
Tu préfères un flux de travail dans un navigateur ? Ultralytics Platform exécute la même boucle — importer, annoter, entraîner, déployer — sans installation locale :
Afficher la solution
from pathlib import Path
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
# 1. Which classes in your output line does the pretrained model already know?
spec_classes = {"person", "forklift"}
known = set(model.names.values())
print(f"pretrained: {sorted(spec_classes & known)} needs your own data: {sorted(spec_classes - known)}")
# 2. What does it find on your images?
sources = [
"https://ultralytics.com/images/bus.jpg", # replace with your own images
"https://ultralytics.com/images/zidane.jpg",
]
for source, result in zip(sources, model.predict(sources, conf=0.25, save=True, verbose=False)):
names = [result.names[int(c)] for c in result.boxes.cls]
print(f"{Path(source).name}: {len(names)} detections -> {sorted(set(names))}")pretrained: ['person'] needs your own data: ['forklift']
bus.jpg: 5 detections -> ['bus', 'person']
zidane.jpg: 3 detections -> ['person', 'tie']Pour les spécifications du chariot élévateur : person est couvert, forklift ne l’est pas. Prochaine étape : crée dès maintenant un prototype de la règle de zone sur les personnes avec le modèle préentraîné, et commence le cours Créer des jeux de données YOLO hautes performances pour collecter et annoter des chariots élévateurs filmés par les caméras de l’entrepôt.