Zum Inhalt springen

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 Instanz-Segmentierung Ultralytics Instanzsegmentierung mit 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.

📅 Erstellt vor 12 Monaten ✏️ Aktualisiert vor 10 Tagen

Kommentare