Segmentazione e tracciamento delle istanze tramite Ultralytics YOLOv8 🚀
Cos'è la segmentazione delle istanze?
Ultralytics YOLOv8 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 oggetto, un aspetto cruciale per compiti come il rilevamento di oggetti e l'imaging medico.
Ci sono due tipi di tracciamento della segmentazione delle istanze disponibili nel pacchetto Ultralytics :
-
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 ne facilita l'identificazione e il tracciamento.
Guarda: Segmentazione delle istanze con tracciamento degli oggetti utilizzando Ultralytics YOLOv8
Campioni
Segmentazione dell'istanza | Segmentazione dell'istanza + tracciamento dell'oggetto |
---|---|
Ultralytics Segmentazione dell'istanza 😍 | Ultralytics Segmentazione delle istanze con tracciamento degli oggetti 🔥 |
Segmentazione e tracciamento delle istanze
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
model = YOLO("yolov8n-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("yolov8n-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 chiarimento, non esitare a postare le tue domande nella sezione Problemi diUltralytics o nella sezione di discussione indicata di seguito.
DOMANDE FREQUENTI
Come si esegue la segmentazione delle istanze utilizzando Ultralytics YOLOv8 ?
Per eseguire la segmentazione dell'istanza utilizzando Ultralytics YOLOv8 , inizializza il modello YOLO con una versione di segmentazione di YOLOv8 ed elabora 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("yolov8n-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, consulta la guidaUltralytics YOLOv8 .
Qual è la differenza tra la segmentazione delle istanze e il tracciamento degli oggetti in Ultralytics YOLOv8 ?
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 questo concetto assegnando etichette coerenti agli oggetti nei vari fotogrammi del video, facilitando il tracciamento continuo degli stessi oggetti nel tempo. Per saperne di più sulle distinzioni, consulta la documentazione di Ultralytics YOLOv8 .
Perché dovrei utilizzare Ultralytics YOLOv8 per esempio per la segmentazione e il tracciamento rispetto ad altri modelli come Mask R-CNN o Faster R-CNN?
Ultralytics YOLOv8 offre prestazioni in tempo reale, accuratezza superiore e facilità d'uso rispetto ad altri modelli come Mask R-CNN o Faster R-CNN. YOLOv8 offre una perfetta integrazione con Ultralytics HUB, consentendo agli utenti di gestire in modo efficiente modelli, dataset e pipeline di addestramento. Scopri di più sui vantaggi di YOLOv8 nel blogUltralytics .
Come posso implementare il tracciamento degli oggetti utilizzando Ultralytics YOLOv8 ?
Per implementare il tracciamento degli oggetti, usa il metodo model.track
e assicurati che l'ID di ogni oggetto sia assegnato in modo coerente in tutti i fotogrammi. Di seguito è riportato un semplice esempio:
Esempio
from collections import defaultdict
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors
track_history = defaultdict(lambda: [])
model = YOLO("yolov8n-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ù, consulta la sezione Segmentazione e tracciamento delle istanze.
Esistono set di dati forniti da Ultralytics adatti all'addestramento dei modelli di YOLOv8 , ad esempio per la segmentazione e il tracciamento?
Sì, Ultralytics offre diversi dataset adatti all'addestramento dei modelli di YOLOv8 , tra cui dataset di segmentazione e di tracciamento. Esempi di dataset, strutture e istruzioni per l'uso si trovano nella documentazione diUltralytics Datasets.