microsoft/conditional-detr-resnet-50
Conditional DEtection TRansformer (DETR) modelo entrenado de extremo a extremo en la detección de objetos COCO 2017 (118k imágenes anotadas). Fue introducido en el artículo Conditional DETR for Fast Training Convergence de Meng et al. y fue lanzado por primera vez en este repositorio. El enfoque recién desarrollado DETR aplica la arquitectura del codificador y decodificador del transformador a la detección de objetos y logra un rendimiento prometedor. En este artículo, abordamos el problema crítico de la lenta convergencia del entrenamiento y presentamos un mecanismo de atención cruzada condicional para el entrenamiento rápido de DETR. Nuestro enfoque se motiva por la alta dependencia de la atención cruzada en DETR de las incrustaciones de contenido para localizar las cuatro extremidades y predecir la caja, lo que aumenta la necesidad de incrustaciones de contenido de alta calidad y, por lo tanto, la dificultad de entrenamiento. Nuestro enfoque, denominado DETR condicional, aprende una consulta espacial condicional a partir de la incrustación del decodificador para la atención cruzada de múltiples cabezas del decodificador. El beneficio es que, a través de la consulta espacial condicional, cada cabeza de atención cruzada puede atender a una banda que contiene una región distinta, por ejemplo, una extremidad de objeto o una región dentro de la caja del objeto. Esto reduce el rango espacial para localizar las regiones distintas para la clasificación de objetos y la regresión de cajas, reduciendo así la dependencia en las incrustaciones de contenido y facilitando el entrenamiento. Los resultados empíricos muestran que el DETR condicional converge 6.7× más rápido para los backbones R50 y R101 y 10× más rápido para los backbones más fuertes DC5-R50 y DC5-R101.
Como usar
Aquí está cómo usar este modelo:
from transformers import AutoImageProcessor, ConditionalDetrForObjectDetection
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("microsoft/conditional-detr-resnet-50")
model = ConditionalDetrForObjectDetection.from_pretrained("microsoft/conditional-detr-resnet-50")
inputs = processor(images=image, return_tensors="pt")
outputs = model(**inputs)
# convertir salidas (cajas de delimitación y logits de clase) a la API de COCO
# solo mantengamos 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}"
)
Esto debería generar:
Detected remote with confidence 0.833 at location [38.31, 72.1, 177.63, 118.45]
Detected cat with confidence 0.831 at location [9.2, 51.38, 321.13, 469.0]
Detected cat with confidence 0.804 at location [340.3, 16.85, 642.93, 370.95]
Actualmente, tanto el extractor de características como el modelo son compatibles con PyTorch.
Funcionalidades
- atención cruzada condicional
- arquitectura de codificador y decodificador del transformador
- convergencia de entrenamiento más rápida
- dependencia reducida en incrustaciones de contenido
Casos de uso
- Detección de objetos
- Clasificación de objetos
- Regresión de cajas