Skip to content

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

Qu'est-ce que la segmentation des instances?

Ultralytics YOLO11 La segmentation d'instance implique l'identification et la délimitation d'objets individuels dans une image, ce qui permet de comprendre en détail la distribution spatiale. Contrairement à la segmentation sémantique, elle étiquette et délimite chaque objet de manière unique, ce qui est crucial pour des tâches telles que la détection d'objets et l'imagerie médicale.

Deux types de suivi de la segmentation des instances sont disponibles sur le site Ultralytics :

  • Segmentation des instances à l'aide d'objets de classe : Une couleur unique est attribuée à chaque objet de classe pour une séparation visuelle claire.

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



Regarder : Segmentation d'instances avec suivi d'objets à l'aide de Ultralytics YOLO11

Échantillons

Segmentation des instances Segmentation des instances + suivi des objets
Ultralytics Segmentation des instances Ultralytics Segmentation d'instances avec suivi d'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()
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 Arguments

Nom Type Défaut Description
mask array None Coordonnées du masque de segmentation
mask_color RGB (255, 0, 255) Couleur du masque pour chaque boîte segmentée
label str None Étiquette pour l'objet segmenté
txt_color RGB None Couleur de l'étiquette pour l'objet segmenté et suivi

Note

Pour toute question, n'hésitez pas à poster vos questions dans la section "Ultralytics Issue Section" 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 , initialisez le modèle YOLO avec une version de segmentation de YOLO11 et traitez 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, consultez le guideUltralytics YOLO11 .

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

La segmentation des instances permet d'identifier et de délimiter des objets individuels dans une image, en donnant à chaque objet une étiquette et un masque uniques. Le suivi d'objets va plus loin 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, consultez la documentationUltralytics 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 tels que Mask R-CNN ou Faster R-CNN. YOLO11 offre une intégration transparente avec Ultralytics HUB, permettant aux utilisateurs de gérer efficacement les modèles, les ensembles de données et les pipelines d'entraînement. Pour en savoir plus sur les avantages de YOLO11 , consultez 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, utilisez la fonction model.track et s'assurer que l'identifiant de chaque objet est attribué de manière cohérente d'une image à l'autre. Voici un exemple simple :

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

Pour en savoir plus, consultez 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 , notamment 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 12 mois ✏️ Mis à jour il y a 10 jours

Commentaires