Todo lo que necesitas saber sobre OpenAI CLIP

Todo lo que necesitas saber sobre OpenAI CLIP

CLIP (Contrastive Language-Image Pre-training) de OpenAI es un modelo que aprende a asociar imágenes y sus descripciones textuales. Al analizar cómo funciona y cómo implementar CLIP, tendrás una comprensión completa de OpenAI CLIP.

Introducción

En enero de 2021, OpenAI presentó CLIP (Contrastive Language-Image Pre-Training), un clasificador zero-shot que utiliza su comprensión del idioma inglés para clasificar imágenes sin necesidad de ser entrenado en un conjunto de datos específico. Este modelo aplica avances recientes en transformers a gran escala, similares a GPT-3, al campo de la visión.

Los resultados son notablemente impresionantes. Hemos preparado un tutorial de CLIP y un cuaderno de Colab para que puedas experimentar con el modelo en tus propias imágenes.

¿Qué es OpenAI CLIP?

CLIP, que significa Contrastive Language-Image Pre-training, es un método eficiente para aprender a partir de supervisión de lenguaje natural. Presentado en 2021 en el artículo “Learning Transferable Visual Models From Natural Language Supervision”, CLIP es un modelo conjunto de incrustación (embedding) de imágenes y texto.

CLIP se entrena en 400 millones de pares de imágenes y texto de manera autosupervisada, mapeando tanto texto como imágenes al mismo espacio de incrustación. Por ejemplo, una imagen de un perro y la frase “una imagen de un perro” tendrían incrustaciones muy similares y estarían cerca entre sí en el espacio vectorial. Esta capacidad es significativa, ya que permite crear diversas aplicaciones, como buscar en una base de datos de imágenes con una descripción o viceversa.

Rendimiento de CLIP

Eficiencia de entrenamiento: CLIP es uno de los modelos más eficientes, alcanzando una precisión del 41 % con 400 millones de imágenes. Supera a otros modelos, como Bag of Words Prediction (27 %) y Transformer Language Model (16 %), con la misma cantidad de imágenes. Esto indica que CLIP entrena significativamente más rápido que otros modelos en su dominio.

Generalización: CLIP ha sido entrenado en una amplia variedad de estilos de imagen, lo que lo hace mucho más flexible que modelos como ImageNet. Es importante tener en cuenta que CLIP generaliza bien con imágenes con las que fue entrenado, pero puede no funcionar tan eficazmente con imágenes fuera de su dominio de entrenamiento. A continuación se muestran ejemplos de algunos de los diferentes estilos de imagen:

Cómo funciona CLIP

Arquitectura

El modelo CLIP consta de dos componentes principales: un codificador de texto y un codificador de imagen. El codificador de texto utiliza un Transformer, una arquitectura que ha revolucionado el PLN desde 2017, por lo que su inclusión no es sorprendente. Para una excelente explicación visual, consulta el siguiente blog.

Para el codificador de imagen, los autores experimentaron con dos modelos diferentes: ResNet-50 y Vision Transformer (ViT). ResNet-50, basado en redes neuronales convolucionales (CNN), fue la arquitectura original de última generación para la clasificación de imágenes. ViT, una adaptación más reciente del Transformer para imágenes, divide cada imagen en una secuencia de parches, tratándolos como una secuencia de tokens. Los autores descubrieron que ViT entrenaba más rápido.

El modelo ResNet más grande, RN50x64, tardó 18 días en entrenarse en 592 GPU V100, mientras que el Vision Transformer más grande tardó 12 días en 256 GPU V100.

Tanto el codificador de texto como el de imagen se entrenaron desde cero.

Entrenamos CLIP desde cero sin inicializar el codificador de imagen con pesos de ImageNet ni el codificador de texto con pesos preentrenados.

Entrenamiento

Los autores inicialmente intentaron entrenar un modelo de leyenda de imágenes que predijera la leyenda o descripción exacta para una imagen dada.

Nuestro enfoque inicial, similar a VirTex, entrenó conjuntamente una CNN de imagen y un transformer de texto desde cero para predecir la leyenda de una imagen. Sin embargo, encontramos dificultades para escalar este método de manera eficiente.

Sin embargo, descubrieron que entrenar un modelo de leyenda de imágenes con los 400 millones de pares (imagen, texto) no era escalable. En su lugar, optaron por un enfoque de aprendizaje contrastivo de representación. El objetivo de este enfoque es aprender un espacio de incrustación donde los pares de muestras similares estén cerca entre sí, mientras que los disímiles estén separados.

En una configuración de aprendizaje contrastivo típica, se le dan al modelo ejemplos en la forma (ancla, positivo, negativo). Aquí, el ancla es una imagen de una clase, como un perro, el positivo es otra imagen de la misma clase (otro perro), y el negativo es una imagen de una clase diferente, como un pájaro. Las imágenes se incrustan, y el modelo se entrena para minimizar la distancia entre las incrustaciones de la misma clase (distancia(ancla, positivo)) y maximizar la distancia entre incrustaciones de diferentes clases (distancia(ancla, negativo)). Esto alienta al modelo a producir incrustaciones muy similares para los mismos objetos e incrustaciones distintas para objetos diferentes.

Una visualización del aprendizaje contrastivo. Fuente: https://www.v7labs.com/blog/contrastive-learning-guide

El mismo enfoque se puede aplicar al texto, así como a combinaciones de texto e imágenes. Por ejemplo, en CLIP, un solo ejemplo de entrenamiento podría consistir en un ancla (una imagen de un perro), un positivo (la leyenda “una imagen de un perro”) y un negativo (la leyenda “una imagen de un pájaro”).

CLIP generaliza aún más este enfoque utilizando una pérdida N-pair multiclase, una extensión del método estándar que involucra múltiples negativos y positivos para cada ancla. Como se describe en el artículo:

Dado un lote de N pares (imagen, texto), CLIP se entrena para predecir cuál de las N × N posibles combinaciones (imagen, texto) en un lote realmente ocurrió. Para hacer esto, CLIP aprende un espacio de incrustación multimodal entrenando conjuntamente un codificador de imagen y un codificador de texto para maximizar la similitud coseno de las incrustaciones de imagen y texto de los N pares reales en el lote, mientras minimiza la similitud coseno de las incrustaciones de las N² − N combinaciones incorrectas. Optimiza una pérdida de entropía cruzada simétrica sobre estos puntajes de similitud.

Ingeniería de prompts y ensamblaje

Con el auge de los modelos de lenguaje, la ingeniería de prompts se ha convertido en una práctica común para obtener buenos resultados de los modelos generativos. Dado que el codificador de texto en CLIP es un modelo transformer, los autores encontraron que la ingeniería de prompts era crucial para lograr un buen rendimiento zero-shot. Observaron que en su conjunto de datos de preentrenamiento era relativamente raro que el texto emparejado con la imagen fuera una sola palabra, como “perro” representando una etiqueta de clase. Más a menudo, el texto era una oración completa, como una leyenda o descripción de la imagen. Como resultado, los autores encontraron que el prompt “una foto de un {objeto}” era un buen valor predeterminado, aunque prompts más especializados funcionaban mejor en ciertos casos. Por ejemplo, para imágenes satelitales, “una foto satelital de un {objeto}” era más efectivo.

Los autores también experimentaron con el ensamblaje de modelos, una técnica donde se combinan las predicciones de múltiples modelos para producir la salida final. Este enfoque se usa comúnmente en el aprendizaje automático para abordar problemas de alta varianza y bajo sesgo (sobreajuste) en los modelos. Para CLIP, el ensamblaje se construyó utilizando muchos prompts diferentes para crear clasificadores.

Tanto la ingeniería de prompts como el ensamblaje mejoraron significativamente el rendimiento en ImageNet.

En ImageNet, ensamblamos 80 prompts de contexto diferentes y esto mejora el rendimiento en un 3.5 % adicional en comparación con el prompt predeterminado único discutido anteriormente. Cuando se consideran juntos, la ingeniería de prompts y el ensamblaje mejoran la precisión de ImageNet en casi un 5 %.

Aplicaciones de OpenAI CLIP

OpenAI CLIP tiene una amplia gama de aplicaciones y casos de uso en el análisis de imagen-texto. Algunas de las aplicaciones y casos de uso clave de CLIP incluyen:

  • Clasificación de imágenes: CLIP puede clasificar imágenes en diferentes clases o categorías según su contenido. Puede predecir la etiqueta de clase más relevante para una imagen dada.
  • Recuperación de imágenes: CLIP puede recuperar imágenes relevantes basándose en una consulta de texto dada. Puede encontrar imágenes que sean semánticamente similares al texto de entrada.
  • Moderación de contenido: CLIP se puede utilizar para detectar y moderar automáticamente contenido inapropiado u objetable en imágenes y texto.
  • Leyendas de imágenes: CLIP puede generar leyendas o descripciones para imágenes según su contenido.
  • Respuesta visual a preguntas: CLIP puede responder preguntas sobre imágenes en función de su contenido.

Implementación de OpenAI CLIP con Huggingface Transformers

Puedes utilizar CLIP en tu máquina local con solo unas pocas líneas de código utilizando la biblioteca HuggingFace Transformers. ¡Comienza importando la biblioteca y cargando el modelo preentrenado!

import transformers

model = transformers.CLIPModel.from_pretrained(“openai/clip-vit-base-patch32”)
processor = transformers.CLIPProcessor.from_pretrained(“openai/clip-vit-base-patch32”)

A continuación, crea dos listas: una que contenga leyendas o descripciones, y otra que contenga imágenes. Las imágenes se pueden representar como URLs o imágenes PIL.

import PIL.Image

images = [PIL.Image(“for_example_a_dog_image.jpeg”)]
possible_classes = [“an image of a bird”, “an image of a dog”, “an image of a cat”]

Invoca el procesador, que tokeniza tanto los textos como las imágenes y los prepara para la entrada al modelo. Este proceso se asemeja a llamar a un tokenizador en el caso estándar de solo texto. Dado un lote de descripciones, se aplica padding para asegurar que todas tengan la misma longitud para el almacenamiento en tensor, y se usa truncation para limitar cualquier oración larga a la longitud máxima de secuencia (que, como se mencionó anteriormente, es 76). Finalmente, pasa las entradas tokenizadas al modelo, que luego las alimenta a través de los codificadores de texto e imagen.

with torch.no_grad():
inputs = processor(text=descriptions, images=images, return_tensors=“pt”, padding=True, truncation=True)
outputs = model(**inputs)

Ahora, podemos obtener la matriz de productos punto utilizando dos funciones diferentes. Utiliza `logits_per_image` para recuperar una matriz de productos punto con la forma [num_of_images, num_of_text], y `logits_per_text` para obtener la matriz con la forma [num_of_text, num_of_images].

dot_products_per_image = outputs.logits_per_image
dot_products_per_text = outputs.logits_per_text

Por último, si se desea, podemos aplicar una función softmax a estas matrices para obtener una distribución de probabilidad para cada imagen.

probabilities = dot_products_per_image.softmax(dim=1)

Limitaciones del uso de OpenAI CLIP

Si bien el artículo profundiza en numerosos experimentos y resultados, es importante reconocer que CLIP tiene varias limitaciones.

En primer lugar, debido a la decisión de diseño mencionada anteriormente, CLIP no es un modelo generativo y no puede realizar tareas como la generación de leyendas de imágenes. Sin embargo, otras IA generativas pueden realizar más trabajo que OpenAI CLIP. Por ejemplo:

novita.ai LLM realizando leyendas de imágenes

otras IA generativas como novita.ai pueden compensar las deficiencias de CLIP aplicando las API correspondientes.

Los autores señalan que CLIP todavía está lejos de ser el estado del arte y solo es comparable a un ResNet con una capa lineal encima. Generaliza mal a ciertas tareas; por ejemplo, alcanza solo un 88 % de precisión en el fácil conjunto de datos de reconocimiento de dígitos manuscritos MNIST, probablemente porque no hay imágenes similares en sus datos de entrenamiento y CLIP hace poco para abordar este problema.

CLIP se entrena en pares de imagen-texto no filtrados ni seleccionados de Internet, lo que resulta en que el modelo aprenda muchos sesgos sociales. Estas preocupaciones son similares a las de los grandes modelos de lenguaje (LLM) actualmente, para los cuales técnicas como RLFHF (Robust Low-Frequency Hacking Framework) y Direct Preference Optimization intentan mitigar.

Además, en la implementación original, la longitud máxima de secuencia para el codificador de texto Transformer estaba limitada a 76. Esta limitación surge porque el conjunto de datos consiste principalmente en imágenes y leyendas cortas. Por lo tanto, usar el modelo de preentrenamiento estándar puede no funcionar bien con textos más largos, ya que se truncarían después de 76 tokens, dado que el modelo fue entrenado con textos cortos.

Direcciones futuras en el análisis de imagen-texto con CLIP

El éxito de OpenAI CLIP ha abierto nuevas posibilidades para el futuro del análisis de imagen-texto. Los investigadores y desarrolladores están explorando continuamente aplicaciones innovadoras y avances en este campo.

Una dirección futura es la integración de CLIP con otras modalidades, como audio y video, para permitir el análisis multimodal. Esto permitiría a CLIP comprender y analizar datos multimedia complejos, lo que conduciría a resultados más completos y precisos.

Además, los avances en el aprendizaje autosupervisado y el aprendizaje de representaciones no supervisado pueden mejorar aún más el rendimiento y las capacidades de generalización de CLIP. Estos avances pueden desbloquear un nuevo potencial para CLIP en diversos dominios, incluidos la atención médica, la robótica y el análisis de contenido multimedia.

El futuro del análisis de imagen-texto con CLIP es prometedor, y la investigación y el desarrollo continuos seguirán ampliando los límites de este emocionante campo.

Conclusión

OpenAI CLIP marca un avance significativo en el análisis de imagen-texto, utilizando transformers a gran escala y aprendizaje contrastivo para clasificar imágenes basándose en descripciones en lenguaje natural. Su versatilidad permite numerosas aplicaciones innovadoras, aunque enfrenta limitaciones como dificultades con tareas fuera de su dominio de entrenamiento, una longitud de secuencia máxima para texto y sesgos sociales heredados de sus datos de entrenamiento no filtrados.

Técnicas como la ingeniería de prompts y el ensamblaje han mejorado su rendimiento, y los avances futuros en la integración de otras modalidades, como audio y video, junto con el aprendizaje autosupervisado y no supervisado, prometen mejorar aún más las capacidades de CLIP. La investigación y el desarrollo continuos en este campo sugieren un futuro brillante para un análisis multimedia más completo y preciso.

novita.ai, la plataforma integral para la creatividad ilimitada que te brinda acceso a más de 100 API. Desde generación de imágenes y procesamiento de lenguaje hasta mejora de audio y manipulación de video, con pago por uso económico, te libera de las molestias del mantenimiento de GPU mientras construyes tus propios productos. Pruébalo gratis.

Lectura recomendada

¿Cuál es la diferencia entre LLM y GPT?

Predicciones del LLM Leaderboard 2024 reveladas

Novita AI LLM Inference Engine: el mayor rendimiento y la inferencia más barata disponible