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'
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 tomato
e 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'
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'
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 mainmain(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.main
da 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ù?
(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