Tudo o que Você Precisa Saber sobre o OpenAI CLIP

Tudo o que Você Precisa Saber sobre o OpenAI CLIP

O CLIP (Contrastive Language-Image Pre-training) da OpenAI é um modelo que aprende a associar imagens e suas descrições textuais. Analisando como funciona e como implementar o CLIP, você terá uma compreensão completa do OpenAI CLIP.

Introdução

Em janeiro de 2021, a OpenAI apresentou o CLIP (Contrastive Language-Image Pre-Training), um classificador zero-shot que utiliza seu conhecimento da língua inglesa para classificar imagens sem precisar ser treinado em um conjunto de dados específico. Este modelo aplica avanços recentes em transformers de grande escala, similares ao GPT-3, ao campo da visão.

Os resultados são notavelmente impressionantes. Preparamos um tutorial do CLIP e um notebook CLIP Colab para você experimentar o modelo com suas próprias imagens.

O que é o OpenAI CLIP

CLIP, que significa Contrastive Language-Image Pre-training, é um método eficiente para aprender a partir de supervisão de linguagem natural. Introduzido em 2021 no artigo “Learning Transferable Visual Models From Natural Language Supervision”, o CLIP é um modelo de embedding conjunto de imagens e texto.

O CLIP é treinado em 400 milhões de pares de imagem e texto de forma auto-supervisionada, mapeando tanto texto quanto imagens para o mesmo espaço de embedding. Por exemplo, uma imagem de um cachorro e a frase “uma imagem de um cachorro” teriam embeddings muito similares e estariam próximos um do outro no espaço vetorial. Essa capacidade é significativa, pois permite a criação de várias aplicações, como pesquisar um banco de imagens com uma descrição ou o inverso.

Desempenho do CLIP

Eficiência de Treinamento: O CLIP é um dos modelos mais eficientes, alcançando uma precisão de 41% com 400 milhões de imagens. Ele supera outros modelos, como Bag of Words Prediction (27%) e Transformer Language Model (16%), com o mesmo número de imagens. Isso indica que o CLIP treina significativamente mais rápido do que outros modelos em seu domínio.

Generalização: O CLIP foi treinado em uma gama diversificada de estilos de imagem, tornando-o muito mais flexível do que modelos como o ImageNet. É importante notar que o CLIP generaliza bem com imagens nas quais foi treinado, mas pode não ter um desempenho tão eficaz com imagens fora de seu domínio de treinamento. Abaixo estão exemplos de alguns dos diferentes estilos de imagem:

Como o CLIP funciona

Arquitetura

O modelo CLIP consiste em dois componentes principais: um codificador de texto e um codificador de imagem. O codificador de texto usa um Transformer, uma arquitetura que revolucionou o PLN desde 2017, tornando sua inclusão pouco surpreendente. Para uma excelente explicação visual, consulte o blog a seguir.

Para o codificador de imagem, os autores experimentaram dois modelos diferentes: ResNet-50 e Vision Transformer (ViT). O ResNet-50, baseado em Redes Neurais Convolucionais (CNNs), era a arquitetura de ponta original para classificação de imagens. O ViT, uma adaptação mais recente do Transformer para imagens, divide cada imagem em uma sequência de patches, tratando-os como uma sequência de tokens. Os autores descobriram que o ViT treinava mais rápido.

O maior modelo ResNet, o RN50x64, levou 18 dias para treinar em 592 GPUs V100, enquanto o maior Vision Transformer levou 12 dias em 256 GPUs V100.

Tanto o codificador de texto quanto o de imagem foram treinados do zero.

Nós treinamos o CLIP do zero sem inicializar o codificador de imagem com pesos do ImageNet ou o codificador de texto com pesos pré-treinados.

Treinamento

Os autores inicialmente tentaram treinar um modelo de legenda de imagens que prevê a legenda ou descrição exata para uma determinada imagem.

Nossa abordagem inicial, similar ao VirTex, treinou conjuntamente uma CNN de imagem e um transformer de texto do zero para prever a legenda de uma imagem. No entanto, encontramos dificuldades para escalar este método de forma eficiente.

No entanto, eles descobriram que treinar um modelo de legenda de imagens nos 400 milhões de pares (imagem, texto) não era escalável. Em vez disso, optaram por uma abordagem de aprendizado contrastivo de representações. O objetivo dessa abordagem é aprender um espaço de embedding onde pares de amostras semelhantes estejam próximos, enquanto pares dissimilares estejam distantes.

Em uma configuração típica de aprendizado contrastivo, o modelo recebe exemplos na forma de (âncora, positivo, negativo). Aqui, a âncora é uma imagem de uma classe, como um cachorro, o positivo é outra imagem da mesma classe (outro cachorro), e o negativo é uma imagem de uma classe diferente, como um pássaro. As imagens são embedadas, e o modelo é treinado para minimizar a distância entre embeddings da mesma classe (distância(âncora, positivo)) e maximizar a distância entre embeddings de classes diferentes (distância(âncora, negativo)). Isso incentiva o modelo a produzir embeddings muito semelhantes para os mesmos objetos e embeddings distintos para objetos diferentes.

Uma visualização do aprendizado contrastivo. Fonte: https://www.v7labs.com/blog/contrastive-learning-guide

A mesma abordagem pode ser aplicada ao texto, bem como a combinações de texto e imagem. Por exemplo, no CLIP, um único exemplo de treinamento poderia consistir em uma âncora (uma imagem de um cachorro), um positivo (a legenda “uma imagem de um cachorro”) e um negativo (a legenda “uma imagem de um pássaro”).

O CLIP generaliza ainda mais essa abordagem usando uma perda N-pair multiclasse, uma extensão do método padrão que envolve múltiplos negativos e positivos para cada âncora. Conforme descrito no artigo:

Dado um lote de N pares (imagem, texto), o CLIP é treinado para prever qual dos N × N pares (imagem, texto) possíveis no lote realmente ocorreu. Para fazer isso, o CLIP aprende um espaço de embedding multimodal treinando conjuntamente um codificador de imagem e um codificador de texto para maximizar a similaridade cosseno dos embeddings de imagem e texto dos N pares reais no lote, enquanto minimiza a similaridade cosseno dos embeddings dos N² − N pares incorretos. Ele otimiza uma perda de entropia cruzada simétrica sobre essas pontuações de similaridade.

Engenharia de Prompt e Ensemble

Com o aumento dos modelos de linguagem, a engenharia de prompt tornou-se uma prática comum para obter bons resultados de modelos generativos. Dado que o codificador de texto no CLIP é um modelo transformer, os autores consideraram a engenharia de prompt crucial para alcançar um bom desempenho zero-shot. Eles observaram que em seu conjunto de dados de pré-treinamento, era relativamente raro que o texto pareado com a imagem fosse uma única palavra, como “cachorro” representando um rótulo de classe. Mais frequentemente, o texto era uma frase completa, como uma legenda ou descrição da imagem. Como resultado, os autores descobriram que o prompt “uma foto de um {objeto}” era um bom padrão, embora prompts mais especializados funcionassem melhor em certos casos. Por exemplo, para imagens de satélite, “uma foto de satélite de um {objeto}” era mais eficaz.

Os autores também experimentaram ensemble de modelos, uma técnica onde as previsões de múltiplos modelos são combinadas para produzir a saída final. Essa abordagem é comumente usada em aprendizado de máquina para lidar com problemas de alta variância e baixo viés (overfitting) dos modelos. Para o CLIP, o ensemble foi construído usando muitos prompts diferentes para criar classificadores.

Tanto a engenharia de prompt quanto o ensemble melhoraram significativamente o desempenho no ImageNet.

No ImageNet, fazemos ensemble de 80 prompts de contexto diferentes e isso melhora o desempenho em 3,5% adicionais em relação ao prompt padrão único discutido acima. Quando considerados juntos, a engenharia de prompt e o ensemble melhoram a precisão do ImageNet em quase 5%.

Aplicações do OpenAI CLIP

O OpenAI CLIP tem uma ampla gama de aplicações e casos de uso em análise de imagem-texto. Algumas das principais aplicações e casos de uso do CLIP incluem:

  • Classificação de imagens: O CLIP pode classificar imagens em diferentes classes ou categorias com base em seu conteúdo. Ele pode prever o rótulo de classe mais relevante para uma determinada imagem.
  • Recuperação de imagens: O CLIP pode recuperar imagens relevantes com base em uma consulta de texto. Ele pode encontrar imagens semanticamente semelhantes ao texto de entrada.
  • Moderação de conteúdo: O CLIP pode ser usado para detectar e moderar automaticamente conteúdo impróprio ou ofensivo em imagens e texto.
  • Legendagem de imagens: O CLIP pode gerar legendas ou descrições para imagens com base em seu conteúdo.
  • Resposta a perguntas visuais: O CLIP pode responder perguntas sobre imagens com base em seu conteúdo.

Implementando o OpenAI CLIP com Huggingface Transformers

Você pode utilizar o CLIP em sua máquina local com apenas algumas linhas de código usando a biblioteca HuggingFace Transformers! Comece importando a biblioteca e carregando o modelo pré-treinado.

import transformers

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

Em seguida, crie duas listas: uma contendo legendas ou descrições, e outra contendo imagens. As imagens podem ser representadas como URLs ou imagens 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”]

Invoque o processor, que tokeniza tanto os textos quanto as imagens e os prepara para entrada no modelo. Esse processo se assemelha a chamar um tokenizer no caso padrão apenas de texto. Dado um lote de descrições, o padding é aplicado para garantir que todas tenham o mesmo comprimento para armazenamento em tensor, e o truncamento é usado para limitar frases longas ao comprimento máximo da sequência (que, como mencionado anteriormente, é 76). Por fim, passe as entradas tokenizadas para o modelo, que então as alimenta através dos codificadores de texto e imagem.

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

Agora, podemos obter a matriz de produtos escalares usando duas funções diferentes. Utilize logits_per_image para recuperar uma matriz de produtos escalares com a forma [num_of_images, num_of_text], e logits_per_text para obter a matriz com a forma [num_of_text, num_of_images].

dot_products_per_image = outputs.logits_per_image
dot_products_per_text = outputs.logits_per_text

Por fim, se desejado, podemos aplicar uma função softmax a essas matrizes para obter uma distribuição de probabilidade para cada imagem.

probabilities = dot_products_per_image.softmax(dim=1)

Limitações do Uso do OpenAI CLIP

Embora o artigo aborde numerosos experimentos e resultados, é importante reconhecer que o CLIP tem várias limitações.

Primeiramente, devido à decisão de design mencionada anteriormente, o CLIP não é um modelo generativo e não pode realizar tarefas como legendagem de imagens. No entanto, outras IAs generativas podem realizar mais trabalho do que o OpenAI CLIP faz. Por exemplo:

novita.ai LLM realizando legendagem de imagens

outras IAs generativas, como a novita.ai, podem compensar as deficiências do CLIP aplicando APIs correspondentes.

Os autores observam que o CLIP ainda está longe de ser estado da arte e é apenas comparável a um ResNet com uma camada linear no topo. Ele generaliza mal para certas tarefas; por exemplo, alcança apenas 88% de precisão no conjunto de dados fácil de reconhecimento de dígitos manuscritos MNIST, provavelmente porque não há imagens semelhantes em seus dados de treinamento e o CLIP faz pouco para resolver esse problema.

O CLIP é treinado em pares de imagem-texto não filtrados e não curados da internet, resultando em o modelo aprender muitos vieses sociais. Essas preocupações são semelhantes às dos grandes modelos de linguagem (LLMs) atualmente, para as quais técnicas como RLFHF (Robust Low-Frequency Hacking Framework) e Direct Preference Optimization tentam mitigar.

Além disso, na implementação original, o comprimento máximo da sequência para o codificador de texto Transformer foi limitado a 76. Essa limitação surge porque o conjunto de dados consiste principalmente de imagens e legendas curtas. Portanto, usar o modelo pré-treinado pronto para uso pode não ter um bom desempenho com textos mais longos, pois eles seriam truncados após 76 tokens, dado que o modelo foi treinado com textos curtos.

Direções Futuras na Análise de Imagem-Texto com CLIP

O sucesso do OpenAI CLIP abriu novas possibilidades para o futuro da análise de imagem-texto. Pesquisadores e desenvolvedores estão continuamente explorando aplicações inovadoras e avanços neste campo.

Uma direção futura é a integração do CLIP com outras modalidades, como áudio e vídeo, para permitir análise multimodal. Isso permitiria que o CLIP entendesse e analisasse dados multimídia complexos, levando a resultados mais abrangentes e precisos.

Além disso, avanços no aprendizado auto-supervisionado e na aprendizagem de representação não supervisionada podem aprimorar ainda mais o desempenho e as habilidades de generalização do CLIP. Esses avanços podem desbloquear novo potencial para o CLIP em vários domínios, incluindo saúde, robótica e análise de conteúdo multimídia.

O futuro da análise de imagem-texto com CLIP é promissor, e a pesquisa e desenvolvimento contínuos continuarão a expandir os limites deste campo empolgante.

Conclusão

O CLIP da OpenAI marca um salto significativo na análise de imagem-texto, utilizando transformers de grande escala e aprendizado contrastivo para classificar imagens com base em descrições em linguagem natural. Sua versatilidade permite inúmeras aplicações inovadoras, embora enfrente limitações como dificuldades com tarefas fora de seu domínio de treinamento, um comprimento de sequência limitado para texto e vieses sociais herdados de seus dados de treinamento não filtrados.

Técnicas como engenharia de prompt e ensemble melhoraram seu desempenho, e avanços futuros na integração de outras modalidades, como áudio e vídeo, juntamente com aprendizado auto-supervisionado e não supervisionado, são promissores para aprimorar ainda mais as capacidades do CLIP. A pesquisa e desenvolvimento contínuos neste campo sugerem um futuro brilhante para uma análise multimídia mais abrangente e precisa.

novita.ai, a plataforma única para criatividade ilimitada que oferece acesso a mais de 100 APIs. Desde geração de imagens e processamento de linguagem até aprimoramento de áudio e manipulação de vídeo, com pagamento por uso acessível, ela libera você das preocupações com manutenção de GPU enquanto constrói seus próprios produtos. Experimente gratuitamente.

Leitura recomendada

Qual é a diferença entre LLM e GPT

Previsões do LLM Leaderboard 2024 Reveladas

Novita AI LLM Inference Engine: a maior taxa de transferência e a inferência mais barata disponível