Skip to content

Segmentation et suivi des instances à l'aide de Ultralytics YOLO11 🚀

Qu'est-ce que la segmentation des instances?

Ultralytics La segmentation d'instance YOLO11 consiste à identifier et à délimiter des objets individuels dans une image, ce qui permet de comprendre en détail la distribution spatiale. Contrairement à la segmentation sémantique, elle étiquette de façon unique et délimite précisément chaque objet, ce qui est crucial pour des tâches telles que la détection d'objets et l'imagerie médicale.

Il existe deux types de suivi de la segmentation des instances disponibles sur le site Ultralytics :

  • Segmentation des instances à l'aide d'objets de classe : Chaque objet de classe se voit attribuer une couleur unique pour une séparation visuelle claire.

  • Segmentation des instances avec des traces d'objets : Chaque trace est représentée par une couleur distincte, ce qui facilite l'identification et le suivi.



Regarde : Segmentation des instances avec suivi des objets à l'aide de Ultralytics YOLO11

Échantillons

Segmentation des instancesSegmentation des instances + suivi des objets
Ultralytics Segmentation des instancesUltralytics Segmentation des instances avec suivi des objets
Ultralytics Segmentation des instances 😍Ultralytics Segmentation d'instances avec suivi d'objets 🔥

Segmentation et suivi des instances

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()
from collections import defaultdict

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

track_history = defaultdict(lambda: [])

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 Arguments

NomTypeDéfautDescription
maskarrayNoneCoordonnées du masque de segmentation
mask_colorRGB(255, 0, 255)Couleur du masque pour chaque boîte segmentée
labelstrNoneÉtiquette pour l'objet segmenté
txt_colorRGBNoneCouleur de l'étiquette pour l'objet segmenté et suivi

Note

Pour toute demande de renseignements, n'hésite pas à poster tes questions dans la section des problèmes deUltralytics ou dans la section de discussion mentionnée ci-dessous.

FAQ

Comment effectuer une segmentation des instances à l'aide de Ultralytics YOLO11 ?

Pour effectuer une segmentation d'instance à l'aide de Ultralytics YOLO11, initialise le modèle YOLO avec une version de segmentation de YOLO11 et traite les images vidéo à travers lui. Voici un exemple de code simplifié :

Exemple

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

Pour en savoir plus sur la segmentation des instances, consulte le guideUltralytics YOLO11.

Quelle est la différence entre la segmentation des instances et le suivi des objets dans Ultralytics YOLO11 ?

La segmentation d'instance identifie et délimite les objets individuels dans une image, en donnant à chaque objet une étiquette et un masque uniques. Le suivi d'objet étend ce principe en attribuant des étiquettes cohérentes aux objets sur l'ensemble des images vidéo, ce qui facilite le suivi continu des mêmes objets au fil du temps. Pour en savoir plus sur ces distinctions, consulte la documentation deUltralytics YOLO11.

Pourquoi devrais-je utiliser Ultralytics YOLO11 pour la segmentation et le suivi par exemple plutôt que d'autres modèles comme Mask R-CNN ou Faster R-CNN ?

Ultralytics YOLO11 offre des performances en temps réel, une précision supérieure et une facilité d'utilisation par rapport à d'autres modèles comme Mask R-CNN ou Faster R-CNN. YOLO11 offre une intégration transparente avec Ultralytics HUB, ce qui permet aux utilisateurs de gérer efficacement les modèles, les ensembles de données et les pipelines de formation. Découvre plus en détail les avantages de YOLO11 dans le blogUltralytics .

Comment puis-je mettre en œuvre le suivi d'objets à l'aide de Ultralytics YOLO11 ?

Pour mettre en œuvre le suivi des objets, utilise le model.track et s'assurer que l'ID de chaque objet est attribué de manière cohérente d'une image à l'autre. Voici un exemple simple :

Exemple

from collections import defaultdict

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

track_history = defaultdict(lambda: [])

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

Tu trouveras plus d'informations dans la section Segmentation et suivi des instances.

Existe-t-il des ensembles de données fournis par Ultralytics qui conviennent à l'entraînement des modèles YOLO11, par exemple pour la segmentation et le suivi ?

Oui, Ultralytics propose plusieurs ensembles de données adaptés à l'entraînement des modèles YOLO11, y compris des ensembles de données de segmentation et de suivi. Des exemples de jeux de données, des structures et des instructions d'utilisation sont disponibles dans la documentationUltralytics Datasets.

📅 C réé il y a 11 mois ✏️ Mis à jour il y a 1 mois

Commentaires