Vai al contenuto

Panoramica dei dataset di Instance Segmentation

La segmentazione delle istanze è un'attività di visione artificiale che implica l'identificazione e la delineazione di singoli oggetti all'interno di un'immagine. Questa guida fornisce una panoramica dei formati di dataset supportati da Ultralytics YOLO per le attività di segmentazione delle istanze, insieme alle istruzioni su come preparare, convertire e utilizzare questi dataset per l'addestramento dei tuoi modelli.

Formati di dataset supportati

Formato Ultralytics YOLO

Il formato delle etichette del dataset utilizzato per l'addestramento dei modelli di segmentazione YOLO è il seguente:

  1. Un file di testo per immagine: Ogni immagine nel set di dati ha un file di testo corrispondente con lo stesso nome del file immagine e l'estensione ".txt".
  2. Una riga per oggetto: Ogni riga nel file di testo corrisponde a un'istanza di oggetto nell'immagine.
  3. Informazioni sull'oggetto per riga: ogni riga contiene le seguenti informazioni sull'istanza dell'oggetto:
    • Indice della classe dell'oggetto: un numero intero che rappresenta la classe dell'oggetto (ad esempio, 0 per persona, 1 per auto, ecc.).
    • Coordinate di delimitazione dell'oggetto: le coordinate di delimitazione attorno all'area della maschera, normalizzate per essere comprese tra 0 e 1.

Il formato per una singola riga nel file del dataset di segmentazione è il seguente:

<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>

In questo formato, <class-index> è l'indice della classe per l'oggetto, e <x1> <y1> <x2> <y2> ... <xn> <yn> sono le coordinate di delimitazione della maschera di segmentazione dell'oggetto. Le coordinate sono separate da spazi.

Ecco un esempio del formato del set di dati YOLO per una singola immagine con due oggetti costituiti da un segmento a 3 punti e un segmento a 5 punti.

0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104

Suggerimento

  • La lunghezza di ogni riga non deve essere uguale.
  • Ogni etichetta di segmentazione deve avere un minimo di 3 punti xy: <class-index> <x1> <y1> <x2> <y2> <x3> <y3>

Formato YAML del Dataset

Il framework Ultralytics utilizza un formato di file YAML per definire la configurazione del dataset e del modello per l'addestramento di modelli di segmentazione. Ecco un esempio del formato YAML utilizzato per definire un dataset di segmentazione:

ultralytics/cfg/datasets/coco8-seg.yaml

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg/
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8-seg ← downloads here (1 MB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus
  6: train
  7: truck
  8: boat
  9: traffic light
  10: fire hydrant
  11: stop sign
  12: parking meter
  13: bench
  14: bird
  15: cat
  16: dog
  17: horse
  18: sheep
  19: cow
  20: elephant
  21: bear
  22: zebra
  23: giraffe
  24: backpack
  25: umbrella
  26: handbag
  27: tie
  28: suitcase
  29: frisbee
  30: skis
  31: snowboard
  32: sports ball
  33: kite
  34: baseball bat
  35: baseball glove
  36: skateboard
  37: surfboard
  38: tennis racket
  39: bottle
  40: wine glass
  41: cup
  42: fork
  43: knife
  44: spoon
  45: bowl
  46: banana
  47: apple
  48: sandwich
  49: orange
  50: broccoli
  51: carrot
  52: hot dog
  53: pizza
  54: donut
  55: cake
  56: chair
  57: couch
  58: potted plant
  59: bed
  60: dining table
  61: toilet
  62: tv
  63: laptop
  64: mouse
  65: remote
  66: keyboard
  67: cell phone
  68: microwave
  69: oven
  70: toaster
  71: sink
  72: refrigerator
  73: book
  74: clock
  75: vase
  76: scissors
  77: teddy bear
  78: hair drier
  79: toothbrush

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip

Il train e val campi specificano i percorsi delle directory contenenti rispettivamente le immagini di training e di validazione.

names è un dizionario di nomi di classi. L'ordine dei nomi deve corrispondere all'ordine degli indici delle classi di oggetti nei file del dataset YOLO.

Utilizzo

Esempio

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640

Dataset supportati

Ultralytics YOLO supporta vari set di dati per attività di segmentazione delle istanze. Ecco un elenco di quelli più comunemente usati:

  • COCO: Un dataset completo per object detection, segmentazione e captioning, con oltre 200.000 immagini etichettate in un'ampia gamma di categorie.
  • COCO8-seg: Un sottoinsieme compatto di 8 immagini di COCO progettato per test rapidi dell'addestramento del modello di segmentazione, ideale per i controlli CI e la convalida del flusso di lavoro in ultralytics repository.
  • COCO128-seg: Un dataset più piccolo per attività di segmentazione di istanze, contenente un sottoinsieme di 128 immagini COCO con annotazioni di segmentazione.
  • Carparts-seg: Un dataset specializzato focalizzato sulla segmentazione di parti di automobili, ideale per applicazioni nel settore automobilistico. Include una varietà di veicoli con annotazioni dettagliate dei singoli componenti dell'auto.
  • Crack-seg: Un dataset creato su misura per la segmentazione di crepe in varie superfici. Essenziale per la manutenzione delle infrastrutture e il controllo qualità, fornisce immagini dettagliate per l'addestramento di modelli per identificare le debolezze strutturali.
  • Package-seg: Un dataset dedicato alla segmentazione di diversi tipi di materiali e forme di imballaggio. È particolarmente utile per la logistica e l'automazione del magazzino, aiutando nello sviluppo di sistemi per la gestione e lo smistamento dei pacchi.

Aggiunta del tuo dataset

Se possiedi un dataset e desideri utilizzarlo per addestrare modelli di segmentazione con il formato Ultralytics YOLO, assicurati che sia conforme al formato specificato sopra in "Formato Ultralytics YOLO". Converti le tue annotazioni nel formato richiesto e specifica i percorsi, il numero di classi e i nomi delle classi nel file di configurazione YAML.

Importa o converti formati di etichette

Formato Dataset COCO in Formato YOLO

Puoi convertire facilmente le etichette dal popolare formato di dataset COCO al formato YOLO usando il seguente frammento di codice:

Esempio

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

Questo strumento di conversione può essere utilizzato per convertire il dataset COCO o qualsiasi dataset in formato COCO nel formato Ultralytics YOLO.

Ricorda di verificare se il set di dati che desideri utilizzare è compatibile con il tuo modello e segue le convenzioni di formato necessarie. Set di dati formattati correttamente sono fondamentali per addestrare modelli di object detection di successo.

Auto-Annotazione

L'auto-annotazione è una funzionalità essenziale che ti consente di generare un dataset di segmentazione utilizzando un modello di rilevamento pre-addestrato. Ti consente di annotare rapidamente e accuratamente un gran numero di immagini senza la necessità di etichettatura manuale, risparmiando tempo e fatica.

Genera un set di dati di segmentazione utilizzando un modello di rilevamento

Per annotare automaticamente il tuo set di dati utilizzando il framework Ultralytics, puoi utilizzare il auto_annotate funzione come mostrato di seguito:

Esempio

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Argomento Tipo Predefinito Descrizione
data str richiesto Percorso della directory contenente le immagini di destinazione per l'annotazione o la segmentazione.
det_model str 'yolo11x.pt' Percorso del modello di rilevamento YOLO per il rilevamento iniziale degli oggetti.
sam_model str 'sam_b.pt' Percorso del modello SAM per la segmentazione (supporta le varianti SAM, SAM2 e i modelli mobile_sam).
device str '' Dispositivo di calcolo (ad esempio, 'cuda:0', 'cpu' o '' per il rilevamento automatico del dispositivo).
conf float 0.25 Soglia di confidenza del rilevamento YOLO per filtrare i rilevamenti deboli.
iou float 0.45 Soglia IoU per la Non-Maximum Suppression per filtrare i riquadri sovrapposti.
imgsz int 640 Dimensione di input per il ridimensionamento delle immagini (deve essere un multiplo di 32).
max_det int 300 Numero massimo di rilevamenti per immagine per efficienza della memoria.
classes list[int] None Elenco degli indici di classe da rilevare (ad esempio, [0, 1] per persone e biciclette).
output_dir str None Salva la directory per le annotazioni (il valore predefinito è './labels' relativo al percorso dei dati).

Il auto_annotate La funzione accetta il percorso delle tue immagini, insieme ad argomenti opzionali per specificare i modelli di rilevamento pre-addestrati, ad es. YOLO11, YOLOv8 o altro models e modelli di segmentazione, ad esempio, SAM, SAM2 oppure MobileSAM, il dispositivo su cui eseguire i modelli e la directory di output per salvare i risultati annotati.

Sfruttando la potenza dei modelli pre-addestrati, l'annotazione automatica può ridurre significativamente i tempi e gli sforzi necessari per la creazione di set di dati di segmentazione di alta qualità. Questa funzionalità è particolarmente utile per ricercatori e sviluppatori che lavorano con grandi raccolte di immagini, in quanto consente loro di concentrarsi sullo sviluppo e sulla valutazione del modello piuttosto che sull'annotazione manuale.

Visualizza le annotazioni del set di dati

Prima di addestrare il tuo modello, è spesso utile visualizzare le annotazioni del tuo set di dati per assicurarti che siano corrette. Ultralytics fornisce una funzione di utilità per questo scopo:

from ultralytics.data.utils import visualize_image_annotations

label_map = {  # Define the label map with all annotated class labels.
    0: "person",
    1: "car",
}

# Visualize
visualize_image_annotations(
    "path/to/image.jpg",  # Input image path.
    "path/to/annotations.txt",  # Annotation file path for the image.
    label_map,
)

Questa funzione disegna i riquadri di delimitazione, etichetta gli oggetti con i nomi delle classi e regola il colore del testo per una migliore leggibilità, aiutandoti a identificare e correggere eventuali errori di annotazione prima dell'addestramento.

Conversione delle maschere di segmentazione in formato YOLO

Se hai maschere di segmentazione in formato binario, puoi convertirle nel formato di segmentazione YOLO usando:

from ultralytics.data.converter import convert_segment_masks_to_yolo_seg

# For datasets like COCO with 80 classes
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)

Questa utility converte le immagini di maschere binarie nel formato di segmentazione YOLO e le salva nella directory di output specificata.

FAQ

Quali formati di dataset supporta Ultralytics YOLO per la segmentazione delle istanze?

Ultralytics YOLO supporta diversi formati di dataset per la segmentazione delle istanze, con il formato Ultralytics YOLO proprietario come principale. Ogni immagine nel tuo dataset necessita di un file di testo corrispondente con le informazioni sull'oggetto segmentate in più righe (una riga per oggetto), che elenca l'indice di classe e le coordinate di delimitazione normalizzate. Per istruzioni più dettagliate sul formato del dataset YOLO, visita la Panoramica dei dataset per la segmentazione delle istanze.

Come posso convertire le annotazioni del dataset COCO nel formato YOLO?

La conversione delle annotazioni in formato COCO nel formato YOLO è semplice grazie agli strumenti Ultralytics. Puoi utilizzare la funzione convert_coco funzione dal ultralytics.data.converter module:

from ultralytics.data.converter import convert_coco

convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)

Questo script converte le annotazioni del tuo dataset COCO nel formato YOLO richiesto, rendendolo adatto all'addestramento dei tuoi modelli YOLO. Per maggiori dettagli, consulta Importa o converti formati di etichetta.

Come posso preparare un file YAML per l'addestramento di modelli Ultralytics YOLO?

Per preparare un file YAML per l'addestramento di modelli YOLO con Ultralytics, è necessario definire i percorsi del set di dati e i nomi delle classi. Ecco un esempio di configurazione YAML:

# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg/
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco8-seg ← downloads here (1 MB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus
  6: train
  7: truck
  8: boat
  9: traffic light
  10: fire hydrant
  11: stop sign
  12: parking meter
  13: bench
  14: bird
  15: cat
  16: dog
  17: horse
  18: sheep
  19: cow
  20: elephant
  21: bear
  22: zebra
  23: giraffe
  24: backpack
  25: umbrella
  26: handbag
  27: tie
  28: suitcase
  29: frisbee
  30: skis
  31: snowboard
  32: sports ball
  33: kite
  34: baseball bat
  35: baseball glove
  36: skateboard
  37: surfboard
  38: tennis racket
  39: bottle
  40: wine glass
  41: cup
  42: fork
  43: knife
  44: spoon
  45: bowl
  46: banana
  47: apple
  48: sandwich
  49: orange
  50: broccoli
  51: carrot
  52: hot dog
  53: pizza
  54: donut
  55: cake
  56: chair
  57: couch
  58: potted plant
  59: bed
  60: dining table
  61: toilet
  62: tv
  63: laptop
  64: mouse
  65: remote
  66: keyboard
  67: cell phone
  68: microwave
  69: oven
  70: toaster
  71: sink
  72: refrigerator
  73: book
  74: clock
  75: vase
  76: scissors
  77: teddy bear
  78: hair drier
  79: toothbrush

# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip

Assicurati di aggiornare i percorsi e i nomi delle classi in base al tuo dataset. Per maggiori informazioni, consulta la sezione Formato YAML del Dataset.

Cos'è la funzionalità di auto-annotazione in Ultralytics YOLO?

L'auto-annotazione in Ultralytics YOLO consente di generare annotazioni di segmentazione per il tuo dataset utilizzando un modello di rilevamento pre-addestrato. Ciò riduce significativamente la necessità di etichettatura manuale. Puoi utilizzare la funzione auto_annotate funzione come segue:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")  # or sam_model="mobile_sam.pt"

Questa funzione automatizza il processo di annotazione, rendendolo più rapido ed efficiente. Per maggiori dettagli, esplora il Auto-Annotate Reference.



📅 Creato 1 anno fa ✏️ Aggiornato 10 giorni fa

Commenti