Segmentierung und Verfolgung von Instanzen mit Ultralytics YOLOv8 🚀
Was ist Instanzsegmentierung?
Ultralytics YOLOv8 Bei der Instanzsegmentierung geht es darum, einzelne Objekte in einem Bild zu identifizieren und abzugrenzen, um ein detailliertes Verständnis der räumlichen Verteilung zu erhalten. Anders als bei der semantischen Segmentierung wird dabei jedes Objekt eindeutig gekennzeichnet und genau abgegrenzt, was für Aufgaben wie die Objekterkennung und die medizinische Bildgebung entscheidend ist.
Es gibt zwei Arten der Instanzsegmentierung, die im Paket Ultralytics verfügbar sind:
-
Instanzsegmentierung mit Klassenobjekten: Jedem Klassenobjekt wird eine eindeutige Farbe zugewiesen, um eine klare visuelle Trennung zu ermöglichen.
-
Instanzsegmentierung mit Objektspuren: Jede Spur wird durch eine bestimmte Farbe dargestellt, was die Identifizierung und Verfolgung erleichtert.
Pass auf: Instanz-Segmentierung mit Objektverfolgung mit Ultralytics YOLOv8
Proben
Instanz-Segmentierung | Instanz-Segmentierung + Objektverfolgung |
---|---|
Ultralytics Instanz-Segmentierung 😍. | Ultralytics Instanzsegmentierung mit Objektverfolgung 🔥 |
Segmentierung und Verfolgung von Instanzen
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolov8n-seg.pt") # segmentation model
names = model.model.names
cap = cv2.VideoCapture("path/to/video/file.mp4")
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("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
print("Video frame is empty or video processing has been successfully completed.")
break
results = model.predict(im0)
annotator = Annotator(im0, line_width=2)
if results[0].masks is not None:
clss = results[0].boxes.cls.cpu().tolist()
masks = results[0].masks.xy
for mask, cls in zip(masks, clss):
color = colors(int(cls), True)
txt_color = annotator.get_txt_color(color)
annotator.seg_bbox(mask=mask, mask_color=color, label=names[int(cls)], txt_color=txt_color)
out.write(im0)
cv2.imshow("instance-segmentation", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
out.release()
cap.release()
cv2.destroyAllWindows()
from collections import defaultdict
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
track_history = defaultdict(lambda: [])
model = YOLO("yolov8n-seg.pt") # segmentation model
cap = cv2.VideoCapture("path/to/video/file.mp4")
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("instance-segmentation-object-tracking.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
print("Video frame is empty or video processing has been successfully completed.")
break
annotator = Annotator(im0, line_width=2)
results = model.track(im0, persist=True)
if results[0].boxes.id is not None and results[0].masks is not None:
masks = results[0].masks.xy
track_ids = results[0].boxes.id.int().cpu().tolist()
for mask, track_id in zip(masks, track_ids):
color = colors(int(track_id), True)
txt_color = annotator.get_txt_color(color)
annotator.seg_bbox(mask=mask, mask_color=color, label=str(track_id), txt_color=txt_color)
out.write(im0)
cv2.imshow("instance-segmentation-object-tracking", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
out.release()
cap.release()
cv2.destroyAllWindows()
seg_bbox
Argumente
Name | Typ | Standard | Beschreibung |
---|---|---|---|
mask |
array |
None |
Koordinaten der Segmentierungsmaske |
mask_color |
RGB |
(255, 0, 255) |
Maskenfarbe für jede segmentierte Box |
label |
str |
None |
Etikett für segmentiertes Objekt |
txt_color |
RGB |
None |
Beschriftungsfarbe für segmentierte und verfolgte Objekte |
Hinweis
Wenn du Fragen hast, kannst du sie im BereichUltralytics oder im unten stehenden Diskussionsbereich stellen.
FAQ
Wie führe ich eine Instanzsegmentierung mit Ultralytics YOLOv8 durch?
Um eine Instanzsegmentierung mit Ultralytics YOLOv8 durchzuführen, initialisiere das Modell YOLO mit einer Segmentierungsversion von YOLOv8 und verarbeite die Videobilder damit. Hier ist ein vereinfachtes Codebeispiel:
Beispiel
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolov8n-seg.pt") # segmentation model
cap = cv2.VideoCapture("path/to/video/file.mp4")
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("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
break
results = model.predict(im0)
annotator = Annotator(im0, line_width=2)
if results[0].masks is not None:
clss = results[0].boxes.cls.cpu().tolist()
masks = results[0].masks.xy
for mask, cls in zip(masks, clss):
annotator.seg_bbox(mask=mask, mask_color=colors(int(cls), True), det_label=model.model.names[int(cls)])
out.write(im0)
cv2.imshow("instance-segmentation", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
out.release()
cap.release()
cv2.destroyAllWindows()
Erfahre mehr über die Segmentierung von Instanzen im Ultralytics YOLOv8 Leitfaden.
Was ist der Unterschied zwischen Instanzsegmentierung und Objektverfolgung in Ultralytics YOLOv8 ?
Die Instanzensegmentierung identifiziert und umreißt einzelne Objekte in einem Bild und gibt jedem Objekt eine eindeutige Kennzeichnung und Maske. Die Objektverfolgung erweitert dies, indem sie den Objekten über alle Videobilder hinweg einheitliche Beschriftungen zuweist und so eine kontinuierliche Verfolgung der gleichen Objekte über die Zeit hinweg ermöglicht. Weitere Informationen zu den Unterschieden findest du in der DokumentationUltralytics YOLOv8 .
Warum sollte ich Ultralytics YOLOv8 zum Beispiel für Segmentierung und Tracking gegenüber anderen Modellen wie Mask R-CNN oder Faster R-CNN verwenden?
Ultralytics YOLOv8 bietet im Vergleich zu anderen Modellen wie Mask R-CNN oder Faster R-CNN Leistung in Echtzeit, überragende Genauigkeit und Benutzerfreundlichkeit. YOLOv8 bietet eine nahtlose Integration mit Ultralytics HUB, so dass Benutzer Modelle, Datensätze und Trainingspipelines effizient verwalten können. Erfahre mehr über die Vorteile von YOLOv8 im Ultralytics Blog.
Wie kann ich die Objektverfolgung mit Ultralytics YOLOv8 implementieren?
Um die Objektverfolgung zu implementieren, verwendest du die model.track
Methode und stelle sicher, dass die ID jedes Objekts in allen Frames einheitlich zugewiesen wird. Im Folgenden findest du ein einfaches Beispiel:
Beispiel
from collections import defaultdict
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
track_history = defaultdict(lambda: [])
model = YOLO("yolov8n-seg.pt") # segmentation model
cap = cv2.VideoCapture("path/to/video/file.mp4")
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("instance-segmentation-object-tracking.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))
while True:
ret, im0 = cap.read()
if not ret:
break
annotator = Annotator(im0, line_width=2)
results = model.track(im0, persist=True)
if results[0].boxes.id is not None and results[0].masks is not None:
masks = results[0].masks.xy
track_ids = results[0].boxes.id.int().cpu().tolist()
for mask, track_id in zip(masks, track_ids):
annotator.seg_bbox(mask=mask, mask_color=colors(track_id, True), track_label=str(track_id))
out.write(im0)
cv2.imshow("instance-segmentation-object-tracking", im0)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
out.release()
cap.release()
cv2.destroyAllWindows()
Mehr dazu findest du im Abschnitt Instance-Segmentierung und Tracking.
Gibt es Datensätze, die von Ultralytics zur Verfügung gestellt werden und für das Training von YOLOv8 Modellen geeignet sind, z. B. für Segmentierung und Tracking?
Ja, Ultralytics bietet mehrere Datensätze, die sich für das Training von YOLOv8 Modellen eignen, darunter Segmentierungs- und Tracking-Datensätze. Beispiele für Datensätze, Strukturen und Anleitungen zur Verwendung findest du in der DokumentationUltralytics Datasets.