Etichettatura automatica dei set di dati di rilevamento degli oggetti utilizzando GroundingDino |  di Lihi Gur Arie, PhD |  Febbraio 2024

 | Intelligenza-Artificiale

Ingegneria rapida

Il modello GroundingDino codifica i suggerimenti di testo in uno spazio latente appreso. La modifica delle istruzioni può portare a caratteristiche di testo diverse, che possono influire sulle prestazioni del rilevatore. Per migliorare le prestazioni della previsione, è consigliabile sperimentare più prompt, scegliendo quello che fornisce i risultati migliori. È importante notare che durante la stesura di questo articolo ho dovuto provare diversi suggerimenti prima di trovare quello ideale, riscontrando talvolta risultati inaspettati.

Iniziare

Per iniziare, cloneremo il file Archivio GroundingDino da GitHub, configura l’ambiente installando le dipendenze necessarie e scarica i pesi del modello preaddestrato.

# Clone:
!git clone https://github.com/IDEA-Research/GroundingDINO.git

# Install
%cd GroundingDINO/
!pip install -r requirements.txt
!pip install -q -e .

# Get weights
!wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth

Inferenza su un’immagine

Inizieremo la nostra esplorazione dell’algoritmo di rilevamento degli oggetti applicandolo a una singola immagine di pomodori. Il nostro obiettivo iniziale è rilevare tutti i pomodori nell’immagine, quindi utilizzeremo il messaggio di testo tomato. Se desideri utilizzare nomi di categoria diversi, puoi separarli con un punto .. Tieni presente che i colori dei riquadri di delimitazione sono casuali e non hanno alcun significato particolare.

python3 demo/inference_on_a_image.py \
--config_file 'groundingdino/config/GroundingDINO_SwinT_OGC.py' \
--checkpoint_path 'groundingdino_swint_ogc.pth' \
--image_path 'tomatoes_dataset/tomatoes1.jpg' \
--text_prompt 'tomato' \
--box_threshold 0.35 \
--text_threshold 0.01 \
--output_dir 'outputs'
Annotazioni con ‘pomodoro‘ richiesta. Immagine di Markus Spike.

GroundingDino non solo rileva gli oggetti come categorie, come il pomodoro, ma comprende anche il testo di input, un’attività nota come Referring Expression Comprehension (REC). Cambiamo il messaggio di testo da tomato A ripened tomatoe ottenere il risultato:

python3 demo/inference_on_a_image.py \
--config_file 'groundingdino/config/GroundingDINO_SwinT_OGC.py' \
--checkpoint_path 'groundingdino_swint_ogc.pth' \
--image_path 'tomatoes_dataset/tomatoes1.jpg' \
--text_prompt 'ripened tomato' \
--box_threshold 0.35 \
--text_threshold 0.01 \
--output_dir 'outputs'
Annotazioni con ‘pomodoro maturo‘ richiesta. Immagine di Markus Spike.

Sorprendentemente, il modello può “comprendere” il testo e distinguere tra un “pomodoro” e un “pomodoro maturo”. Contrassegna anche i pomodori parzialmente maturi che non sono completamente rossi. Se il nostro compito richiede l’etichettatura solo dei pomodori rossi completamente maturi, possiamo modificare il file box_threshold dal valore predefinito 0,35 a 0,5.

python3 demo/inference_on_a_image.py \
--config_file 'groundingdino/config/GroundingDINO_SwinT_OGC.py' \
--checkpoint_path 'groundingdino_swint_ogc.pth' \
--image_path 'tomatoes_dataset/tomatoes1.jpg' \
--text_prompt 'ripened tomato' \
--box_threshold 0.5 \
--text_threshold 0.01 \
--output_dir 'outputs'
Annotazioni con ‘pomodoro maturo‘ pronto, con box_threshold = 0.5. Immagine di Markus Spike.

Generazione di set di dati contrassegnati

Anche se GroundingDino ha capacità notevoli, è un modello grande e lento. Se è necessario il rilevamento degli oggetti in tempo reale, prendi in considerazione l’utilizzo di un modello più veloce come YOLO. L’addestramento di YOLO e modelli simili richiedono molti dati taggati, la cui produzione può essere costosa e richiedere molto tempo. Tuttavia, se i tuoi dati non sono univoci, puoi utilizzare GroundingDino per taggarli. Per saperne di più sull’allenamento YOLO efficiente, fai riferimento al mio articolo precedente (4).

Il repository GroundingDino include uno script per annotare i set di dati di immagini nel file Formato COCOche è adatto per YOLOx, per esempio.

from demo.create_coco_dataset import main

main(image_directory= 'tomatoes_dataset',
text_prompt= 'tomato',
box_threshold= 0.35,
text_threshold = 0.01,
export_dataset = True,
view_dataset = False,
export_annotated_images = True,
weights_path = 'groundingdino_swint_ogc.pth',
config_path = 'groundingdino/config/GroundingDINO_SwinT_OGC.py',
subsample = None
)

  • export_dataset — Se impostato su True, le annotazioni in formato COCO verranno salvate in una directory denominata “coco_dataset”.
  • view_dataset: se impostato su True, il set di dati annotato verrà visualizzato per la visualizzazione nell’app FiftyOne.
  • export_annotated_images — Se impostato su True, le immagini annotate verranno archiviate in una directory denominata “images_with_bounding_boxes”.
  • subsample (int) — Se specificato, verrà annotato solo questo numero di immagini dal set di dati.

Diversi algoritmi YOLO richiedono diversi formati di annotazione. Se hai intenzione di addestrare YOLOv5 o YOLOv8, dovrai esportare il tuo set di dati nel Formato YOLOv5. Sebbene il tipo di esportazione sia codificato nello script principale, puoi modificarlo facilmente modificando il file dataset_type argomento in create_coco_dataset.mainda fo.types.COCODetectionDataset A fo.types.YOLOv5Dataset(riga 72). Per mantenere le cose organizzate, cambieremo anche il nome della directory di output da “coco_dataset” a “yolov5_dataset”. Dopo aver modificato lo script, esegui create_coco_dataset.main Ancora.

  if export_dataset:
dataset.export(
'yolov5_dataset',
dataset_type=fo.types.YOLOv5Dataset
)

GroundingDino offre un passo avanti significativo nelle annotazioni di rilevamento degli oggetti utilizzando istruzioni di testo. In questo tutorial abbiamo esplorato come utilizzare il modello per l’etichettatura automatizzata di un’immagine o di un intero set di dati. È fondamentale, tuttavia, rivedere e verificare manualmente queste annotazioni prima che vengano utilizzate nell’addestramento dei modelli successivi.

_________________________________________________________________

Per tua comodità è incluso un notebook Jupyter di facile utilizzo contenente il codice completo:

Vuoi saperne di più?

(1) Grounding DINO: sposare DINO con il pre-addestramento Grounded per il rilevamento di oggetti a set aperto2023.

(2) Dino: Detr con scatole di ancoraggio antirumore migliorate per il rilevamento di oggetti end-to-end2022.

(3) Una pipeline aperta e completa per la messa a terra e il rilevamento unificati di oggetti2023.

(4) La guida pratica per il Rilevamento Oggetti con l’algoritmo YOLOv5del Dr. Lihi Gur Sì.

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *