Vai al contenuto

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 delle istanze Ultralytics Segmentazione delle istanze con 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.

📅C reato 11 mesi fa ✏️ Aggiornato 6 giorni fa

Commenti