Architecture et avantages de YOLO12-M
YOLO12-M se distingue par son empreinte mémoire minimael d'environ 40 Mo, tout en conservant une capacité de détection robuste sur les 80 classes du jeu de données COCO. Contrairement aux réseaux de neurones convolutifs volumineux qui exigent des infrastructures matérielles coûteuses, cette itération intègre des mécanismes d'attention optimisés permettant une exécution fluide sur des GPU grand public. Cette approche garantit un équilibre optimal entre la latence d'inférence et la précision spatiale, facilitant ainsi le déploiement sur des dispositifs périphériques ou des serveurs à ressources limitées.
Configuration de l'environnement
Prérequis matériels et logiciels
Avant d'initialiser le pipeline, vérifiez la compatibilité de votre système :
- Accélérateur graphique : NVIDIA RTX 3060 ou supérieur (minimum 8 Go de VRAM).
- Système d'exploitation : Distribution Linux basée sur Debian (Ubuntu 20.04+ recommandé).
- Runtime Python : Version 3.9 ou ultérieure.
- Toolkit CUDA : Version 11.8+ pour l'accélération matérielle.
Installation des dépendances
Exécutez les commandes suivantes dans votre terminal pour isoler l'environnement et installer les bibliothèques requises :
# Initialisation de l'environnement virtuel
python3 -m venv env_yolo12
source env_yolo12/bin/activate
# Installation de PyTorch avec support CUDA 11.8
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
# Installation du framework Ultralytics et des utilitaires visuels
pip install ultralytics opencv-python-headless
# Validation de l'installation
python -c "import torch; print(f'Backend CUDA disponible: {torch.cuda.is_available()}')"
Inférence sur image unique
Pour effectuer une prédiction sur une image statique, le framework Ultralytics propose une API haut niveau qui gère automatiquement le prétraitement et le post-traitement des tenseurs.
from ultralytics import YOLO
import cv2
# Chargement des poids pré-entraînés
detector = YOLO("yolo12m.pt")
# Exécution de l'inférence
predictions = detector("sample_scene.jpg")
# Affichage et export des résultats
for result in predictions:
result.show()
result.save("annotated_scene.jpg")
print("Pipeline d'inférence terminé avec succès.")
Lors de la première exécution, le fichier de poids yolo12m.pt est téléchargé automatiquement. Les sorties console détailleront les classes identifiées ainsi que leurs scores de confiance respectifs.
Traitement de flux vidéo et traitement par lots
Flux vidéo en direct
L'exploitation de YOLO12-M pour l'analyse de flux vidéo nécessite une boucle de capture optimisée pour minimiser la latence entre l'acquisition de la trame et le rendu des boîtes englobantes.
import cv2
from ultralytics import YOLO
net = YOLO("yolo12m.pt")
stream = cv2.VideoCapture(0)
while stream.isOpened():
success, frame = stream.read()
if not success:
break
# Prédiction sur la trame courante
preds = net(frame, verbose=False)
visual = preds[0].plot()
cv2.imshow("Live Object Tracking", visual)
# Interruption via la touche 'q'
if cv2.waitKey(1) & 0xFF == ord('q'):
break
stream.release()
cv2.destroyAllWindows()
Parcours de répertoire pour images multiples
Pour l'analyse de grands volumes de données statiques, l'itération sur un répertoire local permet d'automatiser l'export des annotations.
import os
from ultralytics import YOLO
from pathlib import Path
predictor = YOLO("yolo12m.pt")
src_dir = Path("raw_dataset")
dst_dir = Path("processed_dataset")
dst_dir.mkdir(parents=True, exist_ok=True)
# Itération sur les fichiers JPEG
for img_file in src_dir.glob("*.[jJ][pP][gG]"):
res = predictor(img_file)
output_path = dst_dir / f"out_{img_file.name}"
res[0].save(output_path)
print(f"Traitement terminé pour: {img_file.name}")
Ajustement des hyperparamètres et filtrage
Optimisation des seuils
La modification des seuils de confiance et d'Intersection over Union (IoU) permet d'adapter le comportement du modèle aux spécificités de votre cas d'usage.
from ultralytics import YOLO
mdl = YOLO("yolo12m.pt")
# Configuration personnalisée de l'inférence
tuned_preds = mdl(
"complex_scene.jpg",
conf=0.45, # Relèvement du seuil de confiance pour éliminer les faux positifs
iou=0.60, # Ajustement de la suppression des non-maxima (NMS)
imgsz=512 # Redimensionnement de l'entrée pour accélérer le traitement
)
tuned_preds[0].save("tuned_output.jpg")
Ciblage de classes spécifiques
Si l'application ne nécessite que la détection d'entités particulières, le filtrage par identifiant de classe réduit la charge de post-traitement.
# Isolation des piétons (0) et des véhicules automobiles (2)
filtered_preds = mdl("street_view.jpg", classes=[0, 2])
Cas d'usage industriels
Système de vidéosurveillance intelligente
Dans un contexte de sécurité, le modèle peut être configuré pour déclencher des alertes lors de l'intrusion de personnes dans une zone surveillée, en échantillonnant les trames pour préserver les ressources.
import cv2
from ultralytics import YOLO
from datetime import datetime
security_model = YOLO("yolo12m.pt")
cam = cv2.VideoCapture(0)
frame_idx = 0
while cam.isOpened():
ret, frame = cam.read()
if not ret:
break
# Échantillonnage : analyse toutes les 15 trames
if frame_idx % 15 == 0:
res = security_model(frame, classes=[0], verbose=False)
if len(res[0].boxes) > 0:
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
print(f"[ALERTE] Présence humaine détectée à {ts}")
cv2.imwrite(f"security_breach_{ts}.png", frame)
frame_idx += 1
cam.release()
Inventaire automatisé dans le commerce de détail
Le comptage d'objets sur des étagères peut être automatisé en agrégeant les occurrences de chaque classe détectée dans l'image.
from ultralytics import YOLO
from collections import Counter
retail_model = YOLO("yolo12m.pt")
def tally_shelf_items(image_path):
preds = retail_model(image_path)
# Extraction des labels pour chaque boîte englobante
labels = [retail_model.names[int(box.cls)] for box in preds[0].boxes]
inventory = Counter(labels)
print("Rapport d'inventaire :")
for item, qty in inventory.items():
print(f"-> {item} : {qty} unités")
return inventory
tally_shelf_items("shelf_display.jpg")
Résolution des problèmes courants
Amélioration du débit d'inférence
Si le framerate est insuffisant, l'activation de la précision mixte ou la réduction de la résolution d'entrée peuvent améliorer significativement le débit.
# Inférence en demi-précision (FP16)
fast_preds = mdl("frame.jpg", half=True)
# Réduction de la résolution spatiale
low_res_preds = mdl("frame.jpg", imgsz=320)
Gestion de la mémoire VRAM
En cas d'erreur CUDA out of memory, il est nécessaire de restreindre la taille des lots ou de basculer sur une exécution CPU pour les tâches non critiques.
# Forcer une taille de lot unitaire
safe_preds = mdl("heavy_image.jpg", batch=1)
# Bascule sur le processeur central
cpu_fallback_model = YOLO("yolo12m.pt", device="cpu")
Détection de petits objets
Les artefacts de petite taille nécessitent une résolution d'entrée plus élevée et l'activation de l'augmentation de données lors du test (TTA) pour maximiser le rappel.
# Augmentation de la résolution et activation du Test-Time Augmentation
small_obj_preds = mdl("wide_angle.jpg", imgsz=1280, augment=True, conf=0.15)