Deformable DETR entrenado en LVIS
Transformador DEtection deformable (DETR), entrenado en LVIS (incluyendo 1203 clases). Fue introducido en el artículo 'Detecting Twenty-thousand Classes using Image-level Supervision' por Zhou et al. y lanzado por primera vez en este repositorio. Este modelo corresponde al punto de control 'Box-Supervised_DeformDETR_R50_4x' publicado en el repositorio original. El modelo DETR es un transformador encoder-decoder con una columna vertebral convolucional. Se añaden dos cabezas en la parte superior de las salidas del decodificador para realizar la detección de objetos: una capa lineal para las etiquetas de clase y una MLP (perceptrón multicapa) para los cuadros delimitadores. El modelo utiliza las llamadas consultas de objetos para detectar objetos en una imagen. Cada consulta de objeto busca un objeto particular en la imagen. Para COCO, el número de consultas de objetos se establece en 100. El modelo se entrena utilizando una 'pérdida de coincidencia bipartita': se comparan las clases previstas + las cajas delimitadoras de cada una de las N = 100 consultas de objetos con las anotaciones de verdad en el terreno, rellenadas hasta la misma longitud N. El algoritmo de coincidencia húngaro se usa para crear una asignación óptima uno a uno entre cada una de las N consultas y cada una de las N anotaciones. Luego, se utilizan la entropía cruzada estándar (para las clases) y una combinación lineal de las pérdidas L1 e IoU generalizada (para las cajas delimitadoras) para optimizar los parámetros del modelo.
Como usar
Aquí hay una forma de usar este modelo:
from transformers import AutoImageProcessor, DeformableDetrForObjectDetection
import torch
from PIL import Image
import requests
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
processor = AutoImageProcessor.from_pretrained("facebook/deformable-detr-box-supervised")
model = DeformableDetrForObjectDetection.from_pretrained("facebook/deformable-detr-box-supervised")
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
# convierte las salidas (cuadros delimitadores y logits de clase) a la API de COCO
# solo conservamos las detecciones con una puntuación > 0.7
target_sizes = torch.tensor([image.size[::-1]])
results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.7)[0]
for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
box = [round(i, 2) for i in box.tolist()]
print(f"Detected {model.config.id2label[label.item()]} with confidence "
f"{round(score.item(), 3)} at location {box}")
Funcionalidades
- Modelo transformador encoder-decoder con una columna vertebral convolucional.
- Dos cabezas añadidas para la detección de objetos: una capa lineal para etiquetas de clase y una MLP para cuadros delimitadores.
- Utiliza consultas de objetos para detectar objetos en una imagen.
- Algoritmo de coincidencia húngaro para mapeo óptimo uno a uno entre consultas de objetos y anotaciones.
- Pérdida de coincidencia bipartita, entropía cruzada estándar y combinación de pérdidas L1 e IoU generalizada para optimización.
Casos de uso
- Detección de objetos en imágenes
- Aplicaciones de visión artificial