Implementación oficial de PyTorch de " DINO a tierra: casarse con DINO con entrenamiento previo a tierra para la detección de objetos de conjunto abierto " : Detector de objetos de conjunto abierto SoTA .
Directorio de artículos
一、Tutorial útil
Dirección en papel:
https://arxiv.org/abs/2303.05499
Mira el video de presentación en YouTube:
https://www.youtube.com/watch?v=wxWDt5UiwY8&feature=youtu.be
Pruebe la demostración de Colab:
https://colab.research.google.com/github/roboflow-ai/notebooks/blob/main/notebooks/zero-shot-object-detection-with-grounding-dino.ipynb
Pruebe la demostración oficial de Huggingface:
https://huggingface.co/spaces/ShilongLiu/Grounding_DINO_demo
2. Papeleo relacionado
2.1 Recopilación de documentos relacionados
- Grounded-SAM: Casarse con Grounding DINO con Segment Anything
- Puesta a tierra de DINO con difusión estable
- Puesta a tierra de DINO con GLIGEN para edición de imágenes controlable
- OpenSeeD: un modelo de segmentación de conjunto abierto simple y sólido
- PARECER: segmentar todo en todas partes a la vez
- X-GPT: agente visual conversacional compatible con X-Decoder
- GLIGEN: Generación de texto a imagen con conexión a tierra de conjunto abierto
- LLaVA: Asistente de Lenguaje Grande y Visión
2.2 Aspectos destacados del artículo
Lo más destacado de este trabajo:
- Detección de conjuntos abiertos. ¡Detecta todo con el lenguaje!
- Alto Rendimiento. COCO zero-shot 52.5 AP (¡entrenamiento sin datos COCO!). COCO afina 63.0 AP.
- Flexible. Colaboración con Stable Diffusion para edición de imágenes.
2.3 Introducción al artículo
2.4 Casarse con Grounding DINO y GLIGEN
2.5 Notas/consejos sobre entradas y salidas
- Grounding DINO acepta un par (imagen, texto) como entradas.
- Produce 900 cajas de objetos (por defecto). Cada cuadro tiene puntuaciones de similitud en todas las palabras de entrada. (como se muestra en las Figuras a continuación).
- Por defecto, elegimos las cajas cuyas similitudes más altas son más altas que box_threshold.
- Extraemos las palabras cuyas similitudes son más altas que text_threshold como etiquetas predichas.
- Si desea obtener objetos de frases específicas, como los perros en la oración dos perros con un palo, puede seleccionar las casillas con mayor similitud de texto con perros como resultados finales.
- Tenga en cuenta que cada palabra se puede dividir en más de un token con tokenlizers diferentes. La cantidad de palabras en una oración puede no ser igual a la cantidad de tokens de texto.
- Sugerimos separar los diferentes nombres de categorías con . para puesta a tierra DINO.
3. Proceso de configuración del entorno
3.1 Mi entorno
Sistema: El último sistema ubuntu
Tarjeta gráfica: 3090
CUDA:11.3
Si tiene un entorno CUDA, asegúrese de que la variable de entorno CUDA_HOME esté configurada. Si no hay CUDA disponible, se compilará en modo solo CPU.
3.2 Proceso de configuración
3.2.1 Clonar el repositorio GroundingDINO de GitHub
git clone https://github.com/IDEA-Research/GroundingDINO.git
Después de la descarga, puede encontrar la carpeta correspondiente:
3.2.2 Cambiar el directorio actual a la carpeta GroundingDINO
cd GroundingDINO/
3.2.3 Instalar las dependencias requeridas en el directorio actual
pip3 install -q -e .
¡No sé por qué, mi descarga sigue reportando errores! Cambiar a un nuevo método de descarga:
python setup.py install
¡Pero también será rojo!
No tenga miedo en este momento, si encuentra un paquete incorrecto, simplemente use pip para descargarlo directamente, sea paciente y finalmente ejecute el comando de instalación anterior, ¡y tendrá éxito!
3.2.4 Cree un nuevo directorio llamado "pesos" para almacenar los pesos del modelo
mkdir weights
Cambie el directorio actual a la carpeta "pesos":
cd weights
Descargue el archivo de pesos del modelo:
wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth
4. prueba
Verifique su ID de GPU (solo si está usando una GPU):
nvidia-smi
Reemplace { GPU ID }, image_you_want_to_detect.jpg y "dir you want to save the output" con los valores apropiados en el siguiente comando:
CUDA_VISIBLE_DEVICES={
GPU ID} python demo/inference_on_a_image.py \
-c /GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py \
-p /GroundingDINO/weights/groundingdino_swint_ogc.pth \
-i image_you_want_to_detect.jpg \
-o "dir you want to save the output" \
-t "chair"
[--cpu-only] # open it for cpu mode
Por supuesto, también podemos usar Python para probar:
from groundingdino.util.inference import load_model, load_image, predict, annotate
import cv2
model = load_model("./GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py", "./GroundingDINO/weights/groundingdino_swint_ogc.pth")
IMAGE_PATH = "./GroundingDINO/weights/1.png"
TEXT_PROMPT = "person . bike . bottle ."
BOX_TRESHOLD = 0.35
TEXT_TRESHOLD = 0.25
image_source, image = load_image(IMAGE_PATH)
boxes, logits, phrases = predict(
model=model,
image=image,
caption=TEXT_PROMPT,
box_threshold=BOX_TRESHOLD,
text_threshold=TEXT_TRESHOLD
)
annotated_frame = annotate(image_source=image_source, boxes=boxes, logits=logits, phrases=phrases)
cv2.imwrite("./GroundingDINO/weights/annotated_image.jpg", annotated_frame)
Nuestra imagen original de prueba es:
La imagen después de la prueba es: