detr-resnet-101-fixed

Sembiance
Detección de objetos

Modelo DETR (DEtection TRansformer) entrenado de principio a fin en la detección de objetos de COCO 2017 (118k imágenes anotadas). Fue presentado en el artículo End-to-End Object Detection with Transformers por Carion et al. y lanzado por primera vez en este repositorio. El modelo DETR es un transformador encoder-decoder con una base convolucional. Dos cabeceras se añaden sobre las salidas del decodificador para realizar la detección de objetos: una capa lineal para las etiquetas de clase y un MLP (multi-layer perceptron) 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 emparejamiento bipartita': se comparan las clases y cuadros delimitadores predichos de cada una de las N = 100 consultas de objetos con las anotaciones de referencia, rellenadas hasta la misma longitud N. El algoritmo de emparejamiento húngaro se utiliza para crear un mapeo óptimo uno a uno entre cada una de las N consultas y cada una de las N anotaciones. 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 los cuadros delimitadores para optimizar los parámetros del modelo.

Como usar

Aquí está cómo usar este modelo:

from transformers import DetrFeatureExtractor, DetrForObjectDetection
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)

feature_extractor = DetrFeatureExtractor.from_pretrained('facebook/detr-resnet-101')
model = DetrForObjectDetection.from_pretrained('facebook/detr-resnet-101')

inputs = feature_extractor(images=image, return_tensors='pt')
outputs = model(**inputs)

# convertir salidas (cuadros delimitadores y logits de clase) a API COCO
target_sizes = torch.tensor([image.size[::-1]])
results = feature_extractor.post_process(outputs, target_sizes=target_sizes)[0]

for score, label, box in zip(results['scores'], results['labels'], results['boxes']):
    box = [round(i, 2) for i in box.tolist()]
    # solo mantenemos detecciones con puntuación > 0.9
    if score > 0.9:
        print(f'Detected {model.config.id2label[label.item()]} with confidence {round(score.item(), 3)} at location {box}')

Esto debería mostrar algo como:

Detected cat with confidence 0.998 at location [344.06, 24.85, 640.34, 373.74]
Detected remote with confidence 0.997 at location [328.13, 75.93, 372.81, 187.66]
Detected remote with confidence 0.997 at location [39.34, 70.13, 175.56, 118.78]
Detected cat with confidence 0.998 at location [15.36, 51.75, 316.89, 471.16]
Detected couch with confidence 0.995 at location [-0.19, 0.71, 639.73, 474.17]

Funcionalidades

Modelo DETR con base ResNet-101
Transformador encoder-decoder
Detección de objetos
Entrenado en COCO 2017
Capa lineal para etiquetas de clase
MLP para cuadros delimitadores
Consultas de objetos

Casos de uso

Detección de objetos en imágenes.

Recibe las últimas noticias y actualizaciones sobre el mundo de IA directamente en tu bandeja de entrada.