YOLOS (modelo de tamaño pequeño)
El modelo YOLOS ha sido ajustado finamente en la detección de objetos en COCO 2017 (118,000 imágenes anotadas). Fue introducido en el artículo 'You Only Look at One Sequence: Rethinking Transformer in Vision through Object Detection' por Fang et al. y publicado por primera vez en este repositorio. YOLOS es un Transformer de Visión (ViT) entrenado utilizando la pérdida de DETR. A pesar de su simplicidad, un modelo YOLOS de tamaño base puede alcanzar 42 AP en la validación de COCO 2017 (similar a DETR y marcos más complejos como Faster R-CNN). El modelo está entrenado utilizando una 'pérdida de emparejamiento bipartito': uno compara las clases predichas + los cuadros delimitadores de cada una de las N = 100 consultas de objetos con las anotaciones de verdad, rellenas hasta la misma longitud N (así que si una imagen solo contiene 4 objetos, 96 anotaciones solo tendrán una clase 'sin objeto' y un 'sin cuadro' como cuadro delimitador). El algoritmo de emparejamiento húngaro se usa para crear un mapeo óptimo 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 la pérdida L1 y la pérdida IoU generalizada (para los cuadros delimitadores) para optimizar los parámetros del modelo.
Como usar
from transformers import YolosImageProcessor, YolosForObjectDetection
from PIL import Image
import torch
import requests
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
model = YolosForObjectDetection.from_pretrained('hustvl/yolos-tiny')
image_processor = YolosImageProcessor.from_pretrained("hustvl/yolos-tiny")
inputs = image_processor(images=image, return_tensors="pt")
outputs = model(**inputs)
# modelo predice cuadros delimitadores y clases COCO correspondientes
logits = outputs.logits
bboxes = outputs.pred_boxes
# imprimir resultados
target_sizes = torch.tensor([image.size[::-1]])
results = image_processor.post_process_object_detection(outputs, threshold=0.9, 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()]
print(
f"Detectado {model.config.id2label[label.item()]} con una confianza "
f"{round(score.item(), 3)} en la ubicación {box}"
)
Funcionalidades
- Transformers de Visión (ViT)
- Pérdida de DETR
- Algoritmo de emparejamiento húngaro
Casos de uso
- Detección de objetos en imágenes
- Procesamiento y reconocimiento de imágenes.
- Aplicaciones de visión por computadora