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 instances | Segmentation des instances + 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
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 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.