upfeatmediainc/owlv2-base-patch16-ensemble
El modelo OWLv2 (abreviatura de Localización de Mundo Abierto) fue propuesto en el artículo 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 zero-shot condicionado por texto que se puede usar para consultar una imagen con una o varias consultas de texto. El modelo utiliza CLIP como su columna vertebral multimodal, con un Transformer tipo ViT para obtener características visuales y un modelo de lenguaje causal para obtener las características del texto. Para usar CLIP para la detección, OWL-ViT elimina la capa de agrupamiento de tokens finales del modelo de visión y agrega una cabeza ligera de clasificación y caja a cada token de salida del transformer. La clasificación de vocabulario abierto se habilita reemplazando los pesos de la capa de clasificación fija con las incrustaciones de nombres de clase obtenidas del modelo de texto. Los autores entrenan primero CLIP desde cero y lo ajustan de extremo a extremo con las cabezas de clasificación y caja en conjuntos de datos estándar de detección utilizando una pérdida de coincidencia bipartita. Se pueden usar una o múltiples consultas de texto por imagen para realizar la detección de objetos condicionada por texto sin necesidad de entrenamiento adicional.
Como usar
import requests
from PIL import Image
import torch
from transformers import Owlv2Processor, Owlv2ForObjectDetection
processor = Owlv2Processor.from_pretrained("google/owlv2-base-patch16-ensemble")
model = Owlv2ForObjectDetection.from_pretrained("google/owlv2-base-patch16-ensemble")
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, anchura) para reescalar las predicciones de cajas [tamaño_del_lote, 2]
target_sizes = torch.Tensor([image.size[::-1]])
# Convertir salidas (cajas de delimitación y logit de clase) 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"Detectado {text[label]} con confianza {round(score.item(), 3)} en la ubicación {box}")
Funcionalidades
- Detección de objetos zero-shot condicionado por texto
- Utiliza la columna vertebral CLIP multimodal
- Transformer tipo ViT como codificador de imágenes
- Modelo de lenguaje causal como codificador de texto
- Clasificación de vocabulario abierto mediante la incrustación de nombres de clase del modelo de texto
- Entrenado y afinado en conjuntos de datos estándar de detección de objetos
Casos de uso
- Investigación en detección de objetos zero-shot condicionado por texto
- Estudios interdisciplinarios sobre el impacto de modelos de detección de objetos de vocabulario abierto
- Exploración de la robustez, la generalización y otras capacidades de los modelos de visión por computadora
- Identificación de objetos cuyos etiquetas no estuvieron disponibles durante el entrenamiento