owlv2-base-patch16

vvmnnnkv
Detección de objetos

El modelo OWLv2 (abreviatura de Localización de Mundo Abierto) fue propuesto en Scaling Open-Vocabulary Object Detection por Matthias Minderer, Alexey Gritsenko y Neil Houlsby. OWLv2, al igual que OWL-ViT, es un modelo de detección de objetos text-condicionado de cero disparos que se puede utilizar para consultar una imagen con una o múltiples consultas de texto. El modelo utiliza CLIP como su infraestructura multimodal, con un Transformer similar a ViT para obtener características visuales y un modelo de lenguaje causal para obtener las características del texto. Para usar CLIP para detección, OWL-ViT elimina la capa de agrupamiento de tokens finales del modelo de visión y adjunta una cabeza de clasificación ligera y una cabeza de caja a cada token de salida del transformador. La clasificación de vocabulario abierto se habilita al reemplazar los pesos de la capa de clasificación fija con las incrustaciones de nombres de clase obtenidas del modelo de texto. Los autores primero entrenan CLIP desde cero y lo ajustan de extremo a extremo con las cabezas de clasificación y de caja en conjunto, utilizando una pérdida de emparejamiento bipartita. Una o múltiples consultas de texto por imagen se pueden usar para realizar detección de objetos text-condicionados de cero disparos.

Como usar

import requests
from PIL import Image
import torch
from transformers import Owlv2Processor, Owlv2ForObjectDetection

processor = Owlv2Processor.from_pretrained("google/owlv2-base-patch16")
model = Owlv2ForObjectDetection.from_pretrained("google/owlv2-base-patch16")

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
texts = [["una foto de un gato", "una foto de un perro"]]
inputs = processor(text=texts, images=image, return_tensors="pt")
outputs = model(**inputs)

# Tamaños de imagen objetivo (altura, ancho) para reescalar las predicciones de caja [batch_size, 2]
target_sizes = torch.Tensor([image.size[::-1]])
# Convertir salidas (cajas delimitadoras y logit de clases) a la API COCO
results = processor.post_process_object_detection(outputs=outputs, threshold=0.1, target_sizes=target_sizes)

i = 0  # Recuperar predicciones para la primera imagen para las consultas de texto correspondientes
text = texts[i]
boxes, scores, labels = results[i]["boxes"], results[i]["scores"], results[i]["labels"]

# Imprimir objetos detectados y coordenadas de caja reescaladas
for box, score, label in zip(boxes, scores, labels):
    box = [round(i, 2) for i in box.tolist()]
    print(f"Detected {text[label]} with confidence {round(score.item(), 3)} at location {box}")

Funcionalidades

Detección de objetos
Textos-condicionado de cero disparos
Usa una infraestructura multimodal CLIP
Arquitectura Transformer similar a ViT
Modelo de lenguaje causal para características de texto
Clasificación de vocabulario abierto

Casos de uso

Investigación en la detección de objetos de cero disparos.
Estudios interdisciplinarios del impacto potencial de modelos de detección de objetos text-condicionados.
Explorar la robustez, generalización y otras capacidades, sesgos y restricciones de los modelos de visión por computadora.