Segmentazione e tracciamento delle istanze utilizzando Ultralytics YOLO11 🚀
Che cos'è la segmentazione delle istanze?
Ultralytics YOLO11 La segmentazione delle istanze consiste nell'identificare e delineare i singoli oggetti in un'immagine, fornendo una comprensione dettagliata della distribuzione spaziale. A differenza della segmentazione semantica, essa etichetta in modo univoco e delinea con precisione ogni singolo oggetto, un aspetto cruciale per compiti come il rilevamento di oggetti e l'imaging medico.
Nel pacchetto Ultralytics sono disponibili due tipi di tracciamento della segmentazione delle istanze:
-
Segmentazione delle istanze con gli oggetti di classe: A ogni oggetto di classe viene assegnato un colore unico per una chiara separazione visiva.
-
Segmentazione delle istanze con tracce di oggetti: Ogni traccia è rappresentata da un colore distinto, che facilita l'identificazione e il tracciamento.
Guarda: Segmentazione delle istanze con tracciamento degli oggetti utilizzando Ultralytics YOLO11
Campioni
Segmentazione delle istanze | Segmentazione delle istanze + tracciamento degli oggetti |
---|---|
Ultralytics Segmentazione dell'istanza 😍 | Ultralytics Segmentazione di istanze con tracciamento di oggetti 🔥 |
Segmentazione e tracciamento delle istanze
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
Argomenti
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
mask |
array |
None |
Coordinate della maschera di segmentazione |
mask_color |
RGB |
(255, 0, 255) |
Colore della maschera per ogni casella segmentata |
label |
str |
None |
Etichetta per l'oggetto segmentato |
txt_color |
RGB |
None |
Colore dell'etichetta per l'oggetto segmentato e tracciato |
Nota
Per qualsiasi richiesta, non esitate a postare le vostre domande nella sezione Problemi diUltralytics o nella sezione di discussione indicata di seguito.
FAQ
Come si esegue la segmentazione delle istanze utilizzando Ultralytics YOLO11 ?
Per eseguire la segmentazione dell'istanza utilizzando Ultralytics YOLO11 , inizializzare il modello YOLO con una versione di segmentazione di YOLO11 ed elaborare i fotogrammi video attraverso di esso. Ecco un esempio di codice semplificato:
Esempio
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()
Per saperne di più sulla segmentazione delle istanze, consultare la guidaUltralytics YOLO11 .
Qual è la differenza tra la segmentazione delle istanze e il tracciamento degli oggetti in Ultralytics YOLO11 ?
La segmentazione delle istanze identifica e delinea i singoli oggetti all'interno di un'immagine, assegnando a ciascun oggetto un'etichetta e una maschera uniche. Il tracciamento degli oggetti estende questa funzione assegnando etichette coerenti agli oggetti nei vari fotogrammi video, facilitando il tracciamento continuo degli stessi oggetti nel tempo. Per ulteriori informazioni sulle distinzioni, consultare la documentazione di Ultralytics YOLO11 .
Perché utilizzare Ultralytics YOLO11 per esempio per la segmentazione e il tracciamento rispetto ad altri modelli come Mask R-CNN o Faster R-CNN?
Ultralytics YOLO11 offre prestazioni in tempo reale, accuratezza superiore e facilità d'uso rispetto ad altri modelli come Mask R-CNN o Faster R-CNN. YOLO11 offre una perfetta integrazione con Ultralytics HUB, consentendo agli utenti di gestire in modo efficiente modelli, dataset e pipeline di addestramento. Per saperne di più sui vantaggi di YOLO11 visitate il blogUltralytics .
Come si può implementare il tracciamento degli oggetti utilizzando Ultralytics YOLO11 ?
Per implementare il tracciamento degli oggetti, utilizzare l'opzione model.track
e assicurarsi che l'ID di ogni oggetto sia assegnato in modo coerente tra i fotogrammi. Di seguito è riportato un semplice esempio:
Esempio
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()
Per saperne di più, consultate la sezione Segmentazione e tracciamento delle istanze.
Esistono dataset forniti da Ultralytics adatti all'addestramento dei modelli di YOLO11 , ad esempio per la segmentazione e il tracciamento?
Sì, Ultralytics offre diversi insiemi di dati adatti all'addestramento dei modelli di YOLO11 , compresi quelli per la segmentazione e il tracciamento. Esempi di dataset, strutture e istruzioni per l'uso si trovano nella documentazione diUltralytics Datasets.