Abrir en Google Colab
|
Descargar notebook
|
BLIP (Bootstrapping Language-Image Pre-training)
La arquitectura BLIP combina varios componentes que hemos visto anteriormente:
Vision Transformer (ViT)
Text Encoder: Similar al que vimos con la arquitectura de BERT, codifica el texto para el modelo.
Image-Grounded Text Encoder: Este componente particularmente es nuevo en este curso, aunque su idea es simple. Combina la información del texto con la información de la imagen dentro del espacio de embeddings, generando asi una representación latente multimodal.
Image-Grounded Text Decoder: Se trata del componente homologo al encoder anterior. Este decoder es entrenado via una función de perdida de cross-entropy de forma autoregresiva para resolver tareas de generación de texto como podria ser generación de subtitulos o generación de texto como respuestas a preguntas (visual-question answering).
En este ejemplo, veremos como utilizar estos componentes para realizar tareas de vision-question answering.
Preparación del ambiente
Instalemos las librerias necesarias:
[ ]:
%pip install -U transformers datasets evaluate --quiet
Recordar reiniciar la sessión si se encuentra trabajando en Google Colab.
Utilizando el modelo BLIP
Para comenzar, descargaremos el modelos preentrenado de BLIP desde HuggingFace. Este modelo fue propuesto por la empresa Salesforce.
[ ]:
import torch
from transformers import BlipForConditionalGeneration
model = BlipForConditionalGeneration.from_pretrained(
"Salesforce/blip-image-captioning-base", torch_dtype=torch.float16
).to("cuda")
Como vimos anteriormente, descargamos el modelo y el procesador de imagenes y texto asociado al mismo. Recuerde que estos objetos en la libraría transformers nos permiten realizar el mismo procesamiento sobre las imagenes de entrada que se realizó sobre el modelo en cuestión.
[ ]:
from transformers import BlipProcessor
processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
Aplicando BLIP para taras de visual question-answering
Utilicemos una imagen de ejemplo:
[ ]:
from google.colab import files
from PIL import Image
from pprint import pprint
uploaded = files.upload()
for fn in uploaded.keys():
try:
img = Image.open(fn)
except Exception as e:
print(f'Error al cargar la imagen: {e}')
Saving 000000039769.jpg to 000000039769 (4).jpg
[ ]:
img
CLIP es un modelo capaz de computar la similaridad pares de textos e imagenes. Utilicemos el modelo para procesar pares de textos con una determinada imagen y ver cual de ellos se encuentra mas cercano:
[ ]:
prompt = "Question: How many remotes are there? Answer:"
inputs = processor(images=img, text=prompt, return_tensors="pt")
Una vez que preprocesamos nuestras entradas, podemos ejecutar el modelo:
[ ]:
with torch.no_grad():
outputs = model.generate(**inputs)
Utilicemos ahore el componente de decoding para generar texto a partir de la salida del modelo.
[ ]:
generation = processor.tokenizer.batch_decode(outputs, skip_special_tokens=True)
print(generation)
Abrir en Google Colab
Descargar notebook