facebook/deformable-detr-detic

facebook
Detección de objetos

El modelo Deformable DEtection TRansformer (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 liberado por primera vez en este repositorio. Este modelo corresponde al punto de control 'Detic_DeformDETR_R50_4x' liberado en el repositorio original. El modelo DETR es un transformer de codificador-decodificador con un backbone convolucional. Se añaden dos cabezales 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 un MLP (perceptrón multicapa) para las cajas delimitadoras. El modelo utiliza consultas de objetos para detectar objetos en una imagen. Cada consulta de objeto busca un objeto en particular en la imagen. Para COCO, el número de consultas de objeto está fijado en 100. El modelo se entrena utilizando una 'pérdida de emparejamiento bipartito': se comparan las clases + cajas delimitadoras predichas de cada una de las N = 100 consultas de objeto con las anotaciones de la verdad del terreno, rellenadas hasta la misma longitud N (así que si una imagen solo contiene 4 objetos, 96 anotaciones solo tendrán un 'no objeto' como clase y 'sin caja delimitadora' como caja). El algoritmo de emparejamiento húngaro se usa para crear un mapeo óptimo uno a uno entre cada una de las consultas N y cada una de las anotaciones N. Luego, se usan la entropía cruzada estándar (para las clases) y una combinación lineal de la pérdida L1 y la pérdida IoU generalizada (para las cajas delimitadoras) para optimizar los parámetros del modelo.

Como usar

Aquí se explica cómo 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-detic")
model = DeformableDetrForObjectDetection.from_pretrained("facebook/deformable-detr-detic")

inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)

# convert outputs (bounding boxes and class logits) to COCO API
# let's only keep detections with score > 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

Transformador de codificador-decodificador con backbone convolucional
Capas lineales y MLP para etiquetas de clase y cajas delimitadoras
Uso de consultas de objetos para detectar objetos en una imagen
Pérdida de emparejamiento bipartito
Algoritmo de emparejamiento húngaro para mapear consultas a anotaciones

Casos de uso

Detección de objetos en imágenes
Aplicaciones de visión por computadora que requieren detección precisa de objetos
Proyectos de investigación y desarrollo en supervisión a nivel de imagen para clases masivamente variadas