CLIP (Contrastive Language-Image Pre-training)
CLIP é o modelo da OpenAI que incorpora imagens e texto em um mesmo espaço compartilhado, permitindo classificar imagens com rótulos em linguagem simples. Veja como funcionam o treinamento e o zero-shot.
CLIP (pré-treinamento contrastivo de linguagem e imagem) é um modelo da OpenAI que aprende a associar imagens às respectivas descrições textuais. Ele combina um codificador de imagem com um codificador de texto e treina ambos para que uma imagem e uma legenda que a descreva sejam mapeadas para vetores próximos em um espaço compartilhado de embeddings. Treinado com 400 milhões de pares de imagem e legenda coletados na internet, o CLIP pode classificar imagens em categorias fornecidas apenas como texto, sem exemplos rotulados dessas categorias — uma capacidade chamada aprendizado zero-shot. No artigo de 2021, seu melhor modelo alcançou 76,2% de precisão top-1 zero-shot no ImageNet, igualando o ResNet-50 original totalmente supervisionado sem usar nenhuma das 1,28 milhão de imagens rotuladas com que o ResNet-50 foi treinado.
Como o CLIP é treinado#
O CLIP tem dois codificadores. O codificador de imagem é um ResNet ou um Vision Transformer (ViT), e o codificador de texto é um transformer de 12 camadas com 63 milhões de parâmetros em sua versão base. Uma projeção linear mapeia a saída de cada codificador para o espaço compartilhado, onde cada vetor é normalizado para ter comprimento unitário.
O treinamento usa aprendizado contrastivo em lotes de 32.768 pares de imagem e legenda. Para um lote de N pares, o CLIP calcula a similaridade de cosseno entre cada imagem e cada legenda, gerando uma matriz N×N cuja diagonal contém os pares verdadeiros. Uma perda de entropia cruzada com softmax em cada linha faz com que cada imagem selecione sua própria legenda entre N opções; uma segunda perda em cada coluna faz com que cada legenda selecione sua imagem. Uma temperatura aprendida escala as similaridades antes do softmax.
Como as legendas são textos livres, o CLIP aprende com tudo o que a web descreve, incluindo objetos, cenas, estilos artísticos, texto em imagens e ações, em vez de uma lista fixa de classes.
Classificação zero-shot#
Para classificar uma imagem, o CLIP transforma cada rótulo candidato em um enunciado curto, como "uma foto de um cachorro", transforma a imagem em um embedding e escolhe o rótulo com a maior similaridade de cosseno. A formulação do prompt é importante: o artigo relata que apenas o modelo "Uma foto de {label}." melhorou a precisão no ImageNet em 1,3%, e que a média dos embeddings de texto de 80 modelos acrescentou mais 3,5%. O pipeline Hugging Face Transformers abaixo envolve cada rótulo no modelo "This is a photo of {}." e executa o modelo ViT-B/32 original:
from transformers import pipeline
# Load OpenAI's CLIP ViT-B/32 for zero-shot image classification
classifier = pipeline("zero-shot-image-classification", model="openai/clip-vit-base-patch32")
# The classes are free-form text, chosen at inference time
labels = ["a city bus", "a tram", "a delivery truck", "a bicycle"]
predictions = classifier("https://ultralytics.com/images/bus.jpg", candidate_labels=labels)
# Scores are a softmax over the image's similarity to each caption
for prediction in predictions:
print(f"{prediction['label']}: {prediction['score']:.3f}")Ele exibe a city bus: 0.657, a tram: 0.341, a delivery truck: 0.001 e a bicycle: 0.000. O bonde, outro veículo grande de passageiros, recebe quase toda a probabilidade restante, e um novo conjunto de rótulos exige apenas uma nova lista de strings.
Aplicações no mundo real#
- Busca semântica: as coleções de imagens são convertidas em embeddings uma vez e armazenadas em um banco de dados vetorial. Uma consulta de texto, como "tênis vermelhos em um piso de madeira", é transformada em embedding no momento da busca e comparada com eles, permitindo encontrar imagens pelo conteúdo sem etiquetas manuais.
- Geração de texto para imagem: o Stable Diffusion 1.x condiciona seu gerador de imagens aos embeddings de texto do CLIP ViT-L/14, e a similaridade do CLIP é amplamente usada para avaliar o quanto uma imagem gerada corresponde ao prompt.
- Detecção de vocabulário aberto: Os modelos YOLO-World do Tencent AI Lab, executados no pacote Ultralytics, codificam os nomes das classes enviados para
set_classescom o codificador de texto ViT-B/32 do CLIP, permitindo que um detector treinado uma única vez encontre "mochila vermelha" ou "empilhadeira" pelo nome. O OWLv2 do Google se baseia nos codificadores de imagem e texto pré-treinados do CLIP, e o VLM Leaderboard o compara com outros detectores de vocabulário aberto e VLMs em conjuntos de dados de detecção do mundo real. - Codificadores de visão para VLMs: muitos modelos de visão e linguagem partem de um codificador de imagem CLIP pré-treinado. O LLaVA, por exemplo, fornece recursos do CLIP ViT-L/14 a um modelo de linguagem.
- Filtragem de conjuntos de dados: grandes conjuntos abertos de imagem e texto, como o LAION-5B, mantêm apenas os pares da web cuja similaridade entre imagem e texto no CLIP ultrapassa um limiar, removendo legendas que não descrevem a imagem.
CLIP versus abordagens relacionadas#
- Classificadores de aprendizado supervisionado: um classificador padrão tem uma saída por classe de treinamento e não consegue pontuar uma classe que nunca viu. O "classificador" do CLIP é o conjunto de embeddings de texto, portanto, muda sempre que os rótulos mudam.
- SigLIP: a variante do Google substitui o softmax aplicado ao lote inteiro do CLIP por uma perda sigmoide que pontua cada par de imagem e texto independentemente; isso usa menos memória e funciona melhor com lotes pequenos.
- Aprendizado contrastivo autossupervisionado: métodos como o SimCLR contrastam duas versões aumentadas da mesma imagem e aprendem apenas com imagens. O CLIP contrasta duas modalidades, associando os recursos da imagem às palavras.
- VLMs generativos: o CLIP pontua a similaridade entre imagem e texto e não consegue escrever uma legenda nem responder a uma pergunta. Os modelos generativos conectam um modelo de linguagem a um codificador de imagem, muitas vezes o próprio codificador do CLIP.
Limitações#
A precisão zero-shot do CLIP cai em categorias detalhadas, como modelos de aeronaves ou carros, ao contar objetos e em tarefas abstratas, como estimar distâncias. Ele também aprende os vieses das legendas da web. Como o CLIP aprendeu a ler texto em imagens, esse texto pode enganá-lo: na pesquisa sobre neurônios multimodais da OpenAI, uma maçã com uma etiqueta manuscrita dizendo "iPod" foi classificada como um iPod.










