Segmentierung und Verfolgung von Instanzen mit Ultralytics YOLO11 🚀
Was ist Instanzsegmentierung?
Ultralytics YOLO11 Bei der Instanzsegmentierung werden einzelne Objekte in einem Bild identifiziert und umrissen, was ein detailliertes Verständnis der räumlichen Verteilung ermöglicht. Anders als bei der semantischen Segmentierung wird 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 Instanzsegmentierungsverfolgung, 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 eindeutige Farbe dargestellt, was eine einfache Identifizierung und Verfolgung ermöglicht.
Beobachten: Instanz-Segmentierung mit Objektverfolgung durch Ultralytics YOLO11
Proben
Instanz-Segmentierung | Instanz-Segmentierung + Objektverfolgung |
---|---|
Ultralytics Segmentierung der Instanz 😍. | Ultralytics Instanzsegmentierung mit Objektverfolgung 🔥 |
Segmentierung und Verfolgung von Instanzen
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n-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()
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n-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 Sie Fragen haben, können Sie diese gerne im BereichUltralytics oder im unten genannten Diskussionsbereich stellen.
FAQ
Wie führe ich eine Instanzsegmentierung mit Ultralytics YOLO11 durch?
Um eine Instanzsegmentierung mit Ultralytics YOLO11 durchzuführen, initialisieren Sie das Modell YOLO mit einer Segmentierungsversion von YOLO11 und verarbeiten Sie Videobilder damit. Hier ist ein vereinfachtes Code-Beispiel:
Beispiel
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n-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()
Weitere Informationen über die Segmentierung von Instanzen finden Sie in der AnleitungUltralytics YOLO11 .
Was ist der Unterschied zwischen Instanzsegmentierung und Objektverfolgung in Ultralytics YOLO11 ?
Bei der Instanzsegmentierung werden einzelne Objekte innerhalb eines Bildes identifiziert und umrissen, wobei jedem Objekt eine eindeutige Kennzeichnung und Maske zugewiesen wird. Die Objektverfolgung erweitert dies, indem sie Objekten über Videobilder hinweg konsistente Beschriftungen zuweist, was eine kontinuierliche Verfolgung derselben Objekte über die Zeit hinweg erleichtert. Weitere Informationen zu den Unterschieden finden Sie in der DokumentationUltralytics YOLO11 .
Warum sollte ich Ultralytics YOLO11 zum Beispiel für Segmentierung und Tracking gegenüber anderen Modellen wie Mask R-CNN oder Faster R-CNN verwenden?
Ultralytics YOLO11 bietet Echtzeitleistung, überragende Genauigkeit und Benutzerfreundlichkeit im Vergleich zu anderen Modellen wie Mask R-CNN oder Faster R-CNN. YOLO11 bietet eine nahtlose Integration mit Ultralytics HUB, wodurch Benutzer Modelle, Datensätze und Trainingspipelines effizient verwalten können. Erfahren Sie mehr über die Vorteile von YOLO11 im Ultralytics Blog.
Wie kann ich die Objektverfolgung mit Ultralytics YOLO11 implementieren?
Um die Objektverfolgung zu implementieren, verwenden Sie die model.track
Methode und stellen Sie sicher, dass die ID jedes Objekts in allen Frames einheitlich zugewiesen wird. Im Folgenden finden Sie ein einfaches Beispiel:
Beispiel
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolo11n-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()
Weitere Informationen finden Sie im Abschnitt Segmentierung und Verfolgung von Instanzen.
Gibt es Datensätze, die von Ultralytics zur Verfügung gestellt werden und für das Training von YOLO11 -Modellen, z. B. für Segmentierung und Tracking, geeignet sind?
Ja, Ultralytics bietet mehrere Datensätze, die sich für das Training von YOLO11 Modellen eignen, darunter Segmentierungs- und Tracking-Datensätze. Beispiele für Datensätze, Strukturen und Anweisungen für die Verwendung finden Sie in der DokumentationUltralytics Datasets.