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 🔥 |
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.