Overslaan naar inhoud

Segmenteren en volgen van instanties met behulp van Ultralytics YOLOv8 🚀

Wat is Instance Segmentatie?

Ultralytics YOLOv8 Bij segmentatie worden individuele objecten in een afbeelding geïdentificeerd en omlijnd, waardoor een gedetailleerd inzicht wordt verkregen in de ruimtelijke verdeling. In tegenstelling tot semantische segmentatie wordt elk object uniek gelabeld en nauwkeurig afgebakend, wat cruciaal is voor taken als objectdetectie en medische beeldvorming.

Er zijn twee soorten instance segmentation tracking beschikbaar in het Ultralytics pakket:

  • Segmentatie van instanties met klasseobjecten: Elk klasseobject krijgt een unieke kleur voor een duidelijke visuele scheiding.

  • Segmentatie van instanties met objectsporen: Elk spoor wordt weergegeven door een aparte kleur, waardoor identificatie en tracering eenvoudiger worden.



Kijken: Segmentatie van instanties met objecttracering met behulp van Ultralytics YOLOv8

Monsters

Instance segmentatie Segmentatie van instanties + volgen van objecten
Ultralytics Instance segmentatie Ultralytics Segmentatie van instanties met volgen van objecten
Ultralytics Instance segmentatie 😍 Ultralytics Segmentatie van instanties met volgen van objecten 🔥

Segmentatie en tracering van instanties

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 Argumenten

Naam Type Standaard Beschrijving
mask array None Coördinaten segmentatiemasker
mask_color RGB (255, 0, 255) Maskerkleur voor elk gesegmenteerd vak
label str None Label voor gesegmenteerd object
txt_color RGB None Label color for segmented and tracked object

Opmerking

Als je vragen hebt, voel je dan vrij om deze te stellen in de Ultralytics Issue Section of in de discussiesectie hieronder.

FAQ

Hoe kan ik instantiesegmentatie uitvoeren met Ultralytics YOLOv8 ?

Om instantiesegmentatie uit te voeren met Ultralytics YOLOv8 , initialiseer je het YOLO model met een segmentatieversie van YOLOv8 en verwerk je er videoframes doorheen. Hier is een vereenvoudigd codevoorbeeld:

Voorbeeld

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()

Lees meer over instance segmentatie in de Ultralytics YOLOv8 gids.

Wat is het verschil tussen segmentatie van instanties en het volgen van objecten in Ultralytics YOLOv8 ?

Segmentatie identificeert en omlijnt individuele objecten binnen een afbeelding, waarbij elk object een uniek label en masker krijgt. Objecten volgen breidt dit uit door consistente labels toe te kennen aan objecten in videoframes, waardoor dezelfde objecten in de loop van de tijd continu gevolgd kunnen worden. Meer informatie over het onderscheid vind je in de Ultralytics YOLOv8 documentatie.

Waarom zou ik Ultralytics YOLOv8 gebruiken voor bijvoorbeeld segmentatie en tracking in plaats van andere modellen zoals Mask R-CNN of Faster R-CNN?

Ultralytics YOLOv8 biedt realtime prestaties, superieure nauwkeurigheid en gebruiksgemak in vergelijking met andere modellen zoals Mask R-CNN of Faster R-CNN. YOLOv8 biedt een naadloze integratie met Ultralytics HUB, waardoor gebruikers modellen, datasets en trainingspijplijnen efficiënt kunnen beheren. Ontdek meer over de voordelen van YOLOv8 in de Ultralytics blog.

Hoe kan ik objecttracering implementeren met Ultralytics YOLOv8 ?

Om het volgen van objecten te implementeren, gebruik je de model.track methode en zorg ervoor dat de ID van elk object consistent wordt toegewezen in frames. Hieronder staat een eenvoudig voorbeeld:

Voorbeeld

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()

Meer informatie vind je in de sectie Instance Segmentation and Tracking.

Zijn er datasets van Ultralytics die geschikt zijn voor het trainen van YOLOv8 modellen voor bijvoorbeeld segmentatie en tracking?

Ja, Ultralytics biedt verschillende datasets die geschikt zijn voor het trainen van YOLOv8 modellen, waaronder segmentatie en tracking datasets. Voorbeelden, structuren en instructies voor het gebruik van datasets zijn te vinden in de documentatie overUltralytics Datasets.



Created 2023-12-18, Updated 2024-07-14
Authors: RizwanMunawar (2), glenn-jocher (10), IvorZhu331 (1)

Reacties