Etiquetado automático de conjuntos de datos de detección de objetos mediante GroundingDino |  por Lihi Gur Arie, PhD |  febrero de 2024

Ingeniería rápida

El modelo GroundingDino codifica indicaciones de texto en un espacio latente aprendido. La modificación de las indicaciones puede dar lugar a diferentes características del texto, lo que puede afectar el rendimiento del detector. Para mejorar el rendimiento de la predicción, es recomendable experimentar con varias indicaciones y elegir la que ofrezca los mejores resultados. Es importante tener en cuenta que mientras escribía este artículo tuve que probar varias sugerencias antes de encontrar la ideal, y a veces encontré resultados inesperados.

Empezando

Para empezar, clonaremos el Repositorio GroundingDino desde GitHub, configure el entorno instalando las dependencias necesarias y descargue los pesos del modelo previamente entrenado.

# 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

Inferencia sobre una imagen

Comenzaremos nuestra exploración del algoritmo de detección de objetos aplicándolo a una sola imagen de tomates. Nuestro objetivo inicial es detectar todos los tomates en la imagen, por lo que usaremos el mensaje de texto. tomato. Si desea utilizar diferentes nombres de categorías, puede separarlos con un punto .. Tenga en cuenta que los colores de los cuadros delimitadores son aleatorios y no tienen ningún significado particular.

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'
Anotaciones con el ‘tomate‘ inmediato. Imagen por Markus Spiske.

GroundingDino no sólo detecta objetos como categorías, como el tomate, sino que también comprende el texto de entrada, una tarea conocida como comprensión de expresiones de referencia (REC). Cambiemos el mensaje de texto de tomato a ripened tomatoy obtener el resultado:

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'
Anotaciones con el ‘tomate maduro‘ inmediato. Imagen por Markus Spiske.

Sorprendentemente, el modelo puede “comprender” el texto y diferenciar entre un “tomate” y un “tomate maduro”. Incluso etiqueta tomates parcialmente maduros que no están completamente rojos. Si nuestra tarea requiere etiquetar sólo tomates rojos completamente maduros, podemos ajustar el box_threshold del valor predeterminado de 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'
Anotaciones con el ‘tomate maduro‘ rápido, con box_threshold = 0.5. Imagen por Markus Spiske.

Generación de conjunto de datos etiquetados

Aunque GroundingDino tiene capacidades notables, es un modelo grande y lento. Si se necesita detección de objetos en tiempo real, considere utilizar un modelo más rápido como YOLO. Entrenar YOLO y modelos similares requiere una gran cantidad de datos etiquetados, cuya producción puede resultar costosa y llevar mucho tiempo. Sin embargo, si sus datos no son únicos, puede usar GroundingDino para etiquetarlos. Para obtener más información sobre la formación YOLO eficiente, consulte mi artículo anterior. [4].

El repositorio GroundingDino incluye un script para anotar conjuntos de datos de imágenes en el formato cocoque es adecuado para YOLOx, por ejemplo.

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: si se establece en Verdadero, las anotaciones en formato COCO se guardarán en un directorio llamado ‘coco_dataset’.
  • view_dataset: si se establece en Verdadero, el conjunto de datos anotado se mostrará para su visualización en la aplicación FiftyOne.
  • export_annotated_images: si se establece en Verdadero, las imágenes anotadas se almacenarán en un directorio llamado ‘images_with_bounding_boxes’.
  • submuestra (int): si se especifica, solo se anotará esta cantidad de imágenes del conjunto de datos.

Los diferentes algoritmos de YOLO requieren diferentes formatos de anotación. Si planeas entrenar YOLOv5 o YOLOv8, necesitarás exportar tu conjunto de datos en el Formato YOLOv5. Aunque el tipo de exportación está codificado en el script principal, puede cambiarlo fácilmente ajustando el dataset_type argumento en create_coco_dataset.mainde fo.types.COCODetectionDataset a fo.types.YOLOv5Dataset(línea 72). Para mantener todo organizado, también cambiaremos el nombre del directorio de salida de ‘coco_dataset’ a ‘yolov5_dataset’. Después de cambiar el script, ejecute create_coco_dataset.main de nuevo.

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

GroundingDino ofrece un salto significativo en las anotaciones de detección de objetos mediante el uso de mensajes de texto. En este tutorial, exploramos cómo utilizar el modelo para el etiquetado automatizado de una imagen o de un conjunto de datos completo. Sin embargo, es fundamental revisar y verificar manualmente estas anotaciones antes de utilizarlas en el entrenamiento de modelos posteriores.

_________________________________________________________________

Para su comodidad, se incluye un cuaderno Jupyter fácil de usar que contiene el código completo:

¿Querer aprender más?

[1] Conexión a tierra de DINO: combinación de DINO con entrenamiento previo conectado a tierra para la detección de objetos en conjunto abierto2023.

[2] Dino: Detr con cuadros de anclaje de eliminación de ruido mejorados para la detección de objetos de un extremo a otro2022.

[3] Un canal abierto y completo para la detección y puesta a tierra unificada de objetos2023.

[4] La guía práctica para la Detección de Objetos con el algoritmo YOLOv5por la Dra. Lihi Gur Arie.