Einleitung
In einem vorangegangenen Artikel wurde der Prozess des Transfer Learnings unter Verwendung des NVIDIA TAO Toolkits beschrieben. Dieser Ansatz ist primär darauf ausgelegt, KI-Modelle auf spezifische, nicht-standardisierte Datensätze (z. B. industrielle Defekterkennung) zu trainieren.
Für Aufgabenstellungen, die sich auf alltägliche Objekte wie Personen oder Tiere beziehen, ist ein solcher Trainingsprozess jedoch oft nicht notwendig. Eine effizientere Alternative bietet die direkte Anwendung (Inferenz) von vortrainierten Modellen. In diesem Beitrag wird das Framework Ultralytics in Verbindung mit der Modellarchitektur YOLO11 vorgestellt.
Was ist Ultralytics?
Ultralytics ist ein Unternehmen und gleichzeitig der Name eines Open-Source-Frameworks, das auf der Deep-Learning-Bibliothek PyTorch basiert. Es fungiert als High-Level-API (Schnittstelle), die komplexe Prozesse der Computer Vision abstrahiert.
Während Frameworks wie TensorFlow oder natives PyTorch eine detaillierte Definition der neuronalen Netzarchitektur und der Trainingsschleifen erfordern, stellt Ultralytics standardisierte Methoden für Training, Validierung und Inferenz bereit. Der Fokus liegt auf der Anwendbarkeit der YOLO-Algorithmen (You Only Look Once). Das Framework ermöglicht die Integration auf verschiedenen Hardware-Architekturen (CPU, NVIDIA GPU, Apple Silicon) mit minimalem Konfigurationsaufwand, da Abhängigkeiten und Treiber-Schnittstellen weitgehend automatisiert verwaltet werden.
Die Architektur: YOLO11
YOLO (You Only Look Once) bezeichnet eine Familie von „Single-Stage-Detectors“. Im Gegensatz zu zweistufigen Verfahren, die zuerst Regionen vorschlagen und diese dann klassifizieren, analysiert YOLO das gesamte Bild in einem einzigen Durchlauf des neuronalen Netzes.
YOLO11 ist die zum Zeitpunkt dieses Artikels aktuelle Iteration dieser Architektur. Die wesentlichen Merkmale sind:
- Grid-basierte Vorhersage
Das Bild wird in ein Raster unterteilt. Jede Zelle des Rasters ist dafür verantwortlich, Objekte zu detektieren. - Object Detection
Bounding Boxes (Rechtecke) um Objekte. - Instance Segmentation
Pixelgenaue Maskierung der Objektkonturen. - Pose Estimation
Erkennung von Skelettpunkten bei Personen.
Warum kein Training notwendig ist
Der entscheidende Unterschied zur im NVIDIA TAO-Artikel beschriebenen Methode liegt im verwendeten Datenbestand. Das hier eingesetzte Modell (yolo11l-seg.pt) wurde bereits umfassend auf dem COCO-Datensatz (Common Objects in Context) trainiert. Der COCO-Datensatz ist ein Standard in der Computer-Vision-Forschung und umfasst über 330.000 Bilder, 1.5 Millionen annotierte Objektinstanzen und 80 Objektkategorien (Class ID 0: Person, Class ID 9: Hund).
Beispiel
import cv2
from ultralytics import YOLO
# 1. Lade das Modell
# Das Modell wird beim ersten Start automatisch heruntergeladen.
model = YOLO('yolo11l.pt') # 'l' steht für Large = sehr präzise
# 2. Pfad zu deinem Video
video_path = "./videos/walk1.mp4"
cap = cv2.VideoCapture(video_path)
# Video-Eigenschaften für das Speichern
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
out = cv2.VideoWriter('tracked_walk1.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
while cap.isOpened():
success, frame = cap.read()
if not success:
break
# 3. Tracking ausführen
# persist=True ist wichtig, damit das Tracking über Frames hinweg funktioniert
# classes=[0, 16] filtert nur nach Person (ID 0) und Hund (ID 16) im COCO-Datensatz
results = model.track(frame, persist=True, classes=[0, 16], conf=0.5)
# 4. Ergebnisse auf das Bild zeichnen
annotated_frame = results[0].plot()
# Anzeigen (Optional - Fenster mit 'q' schließen)
cv2.imshow("Tracking", annotated_frame)
# Speichern
out.write(annotated_frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
out.release()
cv2.destroyAllWindows()
print("Fertig! Video wurde als output_tracking.mp4 gespeichert.")