Lectura: 4 minutos
En esta entrada os mostraremos los aspectos técnicos de nuestra anterior publicación sobre la demo de Art-Explorer. Hemos elaborado una introducción al aprendizaje contrastivo con CLIP, donde explicaremos qué es el contrastive learning, qué problemas soluciona dentro del campo de la #IA y, por supuesto, qué relación tiene con nuestra demo.
La arquitectura CLIP (Contrastive Language–Image Pre-training) fue introducida a principios del año pasado y supuso toda una revolución en la forma en que podemos trabajar con datos multimodales, concretamente imágenes y texto.
Aunque el deep learning ha desencadenado un boom en el campo de la computer vision y el procesamiento de lenguaje natural, los enfoques actuales presentan algunas desventajas. Los datasets necesarios para entrenar requieren de abundantes cantidades de imágenes anotadas y los modelos solo son buenos en tareas muy concretas, requiriendo un esfuerzo significativo para adaptarse a nuevas tareas.
El modelo CLIP trata de aliviar los problemas anteriores: está entrenado en una enorme variedad de pares de (imagen, texto) disponibles en internet. Por construcción, la red neuronal puede ser instruida en lenguaje natural para realizar cualquier tarea de clasificación, o de búsqueda semántica. Sin tener que entrenar directamente sobre la tarea concreta.
Esto es lo que se llama “zero-shot” learning, técnica que ha sido popularizada por otros modelos como GPT-3.
¿Cómo funciona?
El dataset de pares de imágenes y texto que fue empleado para pre-entrenar CLIP no se encuentra disponible públicamente, pero se conoce su magnitud: en torno a 400 millones de pares de ejemplos.
Para cada par de ejemplos (imagen, texto), se utilizan respectivos encoders que obtienen un vector de embedding para la imagen y otro para el texto:

Para la parte de texto, el encoder está basado en BERT, y para la parte de visión puede ser una ResNet o un transformer adaptado a imágenes como ViT. Estos vectores de embeddings tienen la misma dimensión, que puede ser 512 ó 768 en función del tamaño del modelo CLIP.
Pero aquí está la gracia: cómo hemos proyectado la imagen y el texto a un mismo espacio, podemos ahora realizar comparaciones entre vectores. No sólo para comparar textos entre sí, o imágenes entre sí, como ya era habitual, sino también para saber qué texto está más cerca de cierta imagen.
¿Y cómo se pre-entrenó CLIP? Pues dado un mini-batch de (imagen, texto), se obtienen los respectivos vectores de embeddings. Con ellos, se usa una función de coste similar a la cross-correlation, para acercar los embeddings de pares correctos (azul en la diagonal de la siguiente Figura), y alejar los embeddings cuando la imagen no coincida con el texto asociado (fuera de la diagonal):

A diferencia del aprendizaje supervisado tradicional, esto es lo que se conoce como aprendizaje contrastivo y es lo que da fuerza a los modelos recientes como CLIP.
Ahora bien, una vez ya está pre-entrenado, supongamos que queremos clasificar nuevas imágenes, de forma zero-shot. La idea original es tratar la clase a clasificar como si fuera el “texto” asociado a las imágenes. Esto lo hacemos para cada clase, por lo que si estamos clasificando en N clases, tenemos N vectores de embeddings de texto:

Y luego, para cada imagen, calcularemos su embedding:

Para ver qué texto está más cerca de la imagen, basta con que calculemos la similaridad (mediante el producto escalar de los vectores normalizados). Estas similaridades ya las podemos interpretar como logits de una red neuronal estándar:

La clase que tenga mayor logit, esa será la predicha por el modelo. En la siguiente Figura se muestra un esquema de lo anterior:

Pero las posibilidades con CLIP no terminan en clasificación. Con un enfoque similar podemos hacer aplicaciones de búsqueda semántica, como la que se encuentra por debajo de nuestra aplicación del Art Explorer.
En vez de fijar las etiquetas textuales y hacer queries con las imágenes, podemos hacer lo opuesto. Calcular primero los correspondientes embeddings visuales de las imágenes que queramos indexar, y luego hacer consultas con diferentes textos. Éstos, son proporcionados por el usuario en una aplicación de búsqueda como la anterior.
Esencialmente, esto es una búsqueda glorificada de vecinos más próximos (kNN), pero en un espacio de representaciones muy ricas, aprendidas gracias al dataset masivo en el que CLIP fue pre-entrenado.
A modo de ejemplo, en la siguiente Figura representamos dos embeddings visuales de dos cuadros, y otros tres embeddings textuales de posibles descripciones de esos cuadros. Vemos cómo unos están razonablemente más cerca de otros.

Aquí terminamos nuestra exploración de la arquitectura CLIP y de las posibilidades que nos ofrece pero, ¡pronto habrá más!
Mientras tanto, si te ha entrado alguna duda o curiosidad acerca de este modelo, o de las posibilidades que pueda ofrecerte, te invitamos a contactar con nosotros en consulta@komorebi.ai . Si lo deseas, sin compromiso, un investigador de nuestro equipo de expertos estará encantado de mantener una charla contigo para asesorarte y resolver todas tus dudas.
Referencias
Radford, Alec, et al. «Learning transferable visual models from natural language supervision.» International Conference on Machine Learning. PMLR, 2021.
https://art-explorer.komorebi.ai