O Contrastive Language-Image Pre-training (CLIP, do inglês Pré-treinamento de Imagem-Linguagem Contrastivo) é uma técnica para treinar um par de modelos de rede neural artificial, um voltado para a compreensão de imagens e outro para a compreensão de textos, utilizando um objetivo contrastivo. Este método viabilizou aplicações abrangentes em múltiplos domínios, incluindo busca transmodal (cross-modal retrieval), geração de texto para imagem (text-to-image), e classificação estética de imagens.
Algoritmo
O método CLIP treina um par de modelos de maneira contrastiva. Um dos modelos recebe um bloco de texto como entrada e gera um único vetor que representa o seu conteúdo semântico. O outro modelo recebe uma imagem e, de forma análoga, gera um único vetor que fornece uma síntese de seu conteúdo visual. Os modelos são otimizados de forma que os vetores correspondentes a pares de imagem e texto semanticamente semelhantes fiquem próximos em um espaço vetorial compartilhado, enquanto os vetores que correspondem a pares dissemelhantes fiquem distantes estruturalmente. Para treinar um par de modelos CLIP, inicia-se com a preparação de um grande conjunto de dados composto por pares de imagens e suas respectivas legendas descritivas. Durante o treinamento, as redes processam lotes de
N
{\displaystyle N}
pares de imagem e legenda. Sejam as saídas dos modelos de texto e imagem representadas, respectively, por
v
1
, ... ,
v
N
{\displaystyle v_{1},\dots ,v_{N}}
e
w
1
, ... ,
w
N
{\displaystyle w_{1},\dots ,w_{N}}
. Dois vetores são considerados "semelhantes" se o seu produto escalar for elevado. A perda acumulada (loss) calculada sobre esse lote é a perda de N-pares multiclasse, que consiste em uma perda de entropia cruzada simétrica aplicada sobre as pontuações de similaridade:
−
1 N
∑
i
ln
e
v
i
⋅
w
i
/
T
∑
j
e
v
i
⋅
w
j
/
T
−
1 N
∑
j
ln
e
v
j
⋅
w
j
/
T
∑
i
e
v
i
⋅
w
j
/
T
{\displaystyle -{\frac {1}{N}}\sum _{i}\ln {\frac {e^{v_{i}\cdot w_{i}/T}}{\sum _{j}e^{v_{i}\cdot w_{j}/T}}}-{\frac {1}{N}}\sum _{j}\ln {\frac {e^{v_{j}\cdot w_{j}/T}}{\sum _{i}e^{v_{i}\cdot w_{j}/T}}}}
Em essência, esta função de perda incentiva o produto escalar entre vetores correspondentes de imagem e texto (
v
i
⋅
w
i
{\displaystyle v_{i}\cdot w_{i}}
) a ser alto, ao mesmo tempo que penaliza produtos escalares elevados entre pares incompatíveis. O parâmetro
T > 0
{\displaystyle T>0}
representa a temperatura, que é parametrizada no modelo original do CLIP como
T =
e
− τ
{\displaystyle T=e^{-\tau }}
, onde
τ ∈
R
{\displaystyle \tau \in \mathbb {R} }
é um parâmetro aprendido durante o treinamento. Outras funções de perda também são aplicadas no ecossistema. Por exemplo, a variante Sigmoid CLIP (SigLIP) propõe a seguinte função de perda baseada na função sigmoide:
L =
1 N
∑
i , j ∈ 1 : N
f ( ( 2
δ
i , j
− 1 ) (
e
τ
w
i
⋅
v
j
+ b ) )
{\displaystyle L={\frac {1}{N}}\sum _{i,j\in 1:N}f((2\delta _{i,j}-1)(e^{\tau }w_{i}\cdot v_{j}+b))}
onde
f ( x ) = ln ( 1 +
e
− x
)
{\displaystyle f(x)=\ln(1+e^{-x})}
é a perda sigmoide de logaritmo negativo, e o símbolo do Delta de Dirac
δ
i , j
{\displaystyle \delta _{i,j}}
assume o valor 1 se
i = j
{\displaystyle i=j}
e 0 caso contrário.
Modelos CLIP Embora o modelo original tenha sido desenvolvido pela OpenAI, modelos subsequentes e de código aberto foram treinados por outras organizações independentes.
Modelo de imagem
Os modelos de codificação de imagem empregados no CLIP são tipicamente transformers de visão (ViT). A convenção de nomenclatura dessas arquiteturas frequentemente reflete a estrutura específica do ViT adotado. Por exemplo, a denominação "ViT-L/14" indica um modelo de escala "vision transformer large" (em comparação com outros modelos da mesma série) com um tamanho de remendo (patch size) de 14, significando que a imagem de entrada é subdividida em blocos de 14 por 14 pixels antes de ser processada pelas camadas do Transformer. Os indicadores de tamanho seguem a escala crescente B, L, H, G (base, large, huge, giant), nessa ordem exata. Além dos ViTs, o modelo de imagem pode ser composto por uma Rede neural convolucional, como a ResNet (na série original desenvolvida pela OpenAI) ou a ConvNeXt (na série de modelos OpenCLIP mantida pela comunidade LAION). Como os vetores de saída do modelo de imagem e do modelo de texto precisam possuir exatamente a mesma dimensão para viabilizar o cálculo do produto escalar, ambos os codificadores geram vetores de saída de comprimento fixo, denominado no relatório original como "dimensão de incorporação" (embedding dimension). Na série original lançada pela OpenAI, os modelos baseados em ResNet possuem dimensões de incorporação que variam de 512 a 1024, e para os ViTs, adotam dimensões entre 512 e 768.
A arquitetura ViT implementada no CLIP segue a estrutura original da literatura, introduzindo uma camada de normalização por camada (LayerNorm) imediatamente após a adição das incorporações posicionais aos remendos de imagem iniciais. A implementação das redes ResNet seguiu a estrutura clássica, contendo 3 modificações principais:
No bloco inicial da rede convolucional (stem), utilizaram três convoluções encadeadas de tamanho 3x3 em substituição a uma única convolução de 7x7, conforme sugerido na literatura. Introdução de uma camada de agrupamento médio (average pooling) com passo 2 no início de cada camada convolucional de subamostragem (técnica denominada rect-2 blur pooling). Isso tem o efeito de borrar as imagens antes da subamostragem, servindo para o antisserrilhamento (antialiasing). A camada convolucional final é sucedida por um mecanismo de agrupamento por atenção de múltiplas cabeças (multiheaded attention pooling). O modelo ALIGN, desenvolvido de forma paralela por pesquisadores do Google, adotou como codificador de imagens a arquitetura convolucional EfficientNet.
Modelo de texto
Os codificadores de texto empregados no CLIP baseiam-se na arquitetura Transformer. No relatório original da OpenAI, os pesquisadores reportaram o uso de um Transformer (63M de parâmetros, 12 camadas, largura oculta de 512, 8 cabeças de atenção) operando com o algoritmo de Codificação de par de bytes (BPE) em caixa baixa com tamanho de vocabulário igual a 49.152. O comprimento máximo de contexto foi limitado em 76 por motivos de eficiência computacional. À semelhança da série GPT, o modelo utiliza um formato puramente decodificador (decoder-only), aplicando máscaras causais na autoatenção. Sua arquitetura estrutural de blocos base segue o design do GPT-2. À semelhança do BERT, as sequências de texto de entrada são delimitadas por dois tokens especiais de controle: [SOS] (start of sequence, início da sequência) e [EOS] (end of sequence, fim da sequência). O vetor de características final é extraído aplicando uma camada de normalização (LayerNorm) e uma projeção linear subsequente sobre as ativações geradas pelo token [EOS] na última camada do Transformer. A projeção linear final mapeia a saída para uma dimensão de vetor igual à do codificador visual ao qual está emparelhado. Todos estes modelos finais apresentaram comprimento de contexto de 77 e tamanho de vocabulário de 49.408. O modelo ALIGN utilizou a arquitetura BERT de tamanhos variados.
Conjunto de dados
WebImageText Os modelos CLIP originais disponibilizados pela OpenAI foram treinados em um conjunto de dados proprietário denominado "WebImageText" (WIT), composto por 400 milhões de pares de imagens e suas respectivas legendas extraídas de raspagens da internet. O volume total de palavras desse conjunto de dados assemha-se em escala ao córpus WebText utilizado no treinamento do GPT-2. O banco de dados foi estruturado a partir de 500.000 consultas de texto (text-queries), limitando-se ao teto de 20.000 pares de imagem e texto por consulta. O vocabulário de consultas foi definido coletando termos que ocorressem ao menos 100 vezes na Wikipédia em inglês, estendido por bigramas de alta informação mútua, títulos de artigos da Wikipédia com alto volume de busca e conceitos contidos na base de dados WordNet. Este córpus permanece privado e não foi compartilhado publicamente pela organização.
Pré-processamento de dados Para os modelos de imagem do CLIP, as imagens de entrada são pré-processadas dividindo inicialmente cada um dos valores das matrizes R, G, B pelo valor máximo possível, de modo que caiam no intervalo entre 0 e 1. Posteriormente, realiza-se a subtração pelos valores de média [0.48145466, 0.4578275, 0.40821073] e a divisão pelos desvios padrão [0.26862954, 0.26130258, 0.27577711]. A lógica desse procedimento é que estes representam os valores exatos de média e desvio padrão das imagens contidas no córpus WebImageText, fazendo com que esta etapa atue como uma transformação de branqueamento do tensor da imagem. Esses números diferem ligeiramente do padrão para o ImageNet, que adota as médias [0.485, 0.456, 0.406] e desvios [0.229, 0.224, 0.225]. Caso a imagem de entrada não possua o mesmo formato que a resolução nativa do modelo (224×224 pixels para a maioria, com exceção do ViT-L/14@336px que adota 336×336 pixels), a imagem é primeiramente redimensionada por meio de Interpolação bicúbica de modo que seu lado menor se iguale à resolução nativa, realizando-se em seguida o corte (crop) do quadrado central.
Outros conjuntos de dados O modelo ALIGN do Google utilizou mais de 1 bilhão de pares de imagem e texto obtidos de rastreamentos da web, extraindo as imagens e seus respectivos atributos alt (alt tags). O método assemelhou-se à construção do córpus *Conceptual Captions*, mas em vez de aplicar filtros complexos de linguagem, os pesquisadores optaram apenas por uma filtragem baseada na frequência dos termos de alt-text. Modelos subsequentes desenvolvidos de forma aberta por outras organizações tiveram suas bases de dados publicadas. Como exemplo, a comunidade LAION treinou a série OpenCLIP utilizando os conjuntos de dados abertos LAION-400M, LAION-2B e o DataComp-1B.
Treinamento No relatório original da OpenAI, os pesquisadores reportaram o treinamento de 5 models baseados em ResNet e 3 baseados em Vision Transformer (ViT-B/32, ViT-B/16 e ViT-L/14). Cada arquitetura foi treinada ao longo de 32 épocas. O maior modelo ResNet exigiu 18 dias de processamento em um cluster composto por 592 GPUs NVIDIA V100. Por sua vez, o maior modelo ViT levou 12 dias para concluir o treinamento utilizando 256 GPUs V100. Todos os modelos ViT foram inicialmente treinados sob a resolução de imagem de 224×224 pixels. O modelo ViT-L/14 foi subsequentemente aprimorado para operar na resolução de 336×336 pixels por meio della técnica FixRes, sendo referenciado no relatório de forma alternada como ViT-L/14-336px e ViT-L/14@336px de forma inconsistente. Os autores constataram que esta configuração apresentou o melhor desempenho geral entre todos os modelos testados. Na série OpenCLIP, o modelo ViT-L/14 foi treinado utilizando 384 GPUs NVIDIA A100 sobre o conjunto de dados LAION-2B ao longo de 160 épocas, totalizando a exposição do modelo a 32 bilhões de amostras.
Aplicações
Busca transmodal O alinhamento coerente de dados visuais e textuais promovido pelo CLIP em seu espaço latente compartilhado permite realizar buscas bidirecionais complexas sem a necessidade de anotações manuais prévias em imagens:
Busca de Texto para Imagem: O usuário insere uma consulta descritiva em linguagem natural, o codificador gera o vetor de texto correspondente e o sistema recupera as imagens do banco de dados cujos vetores visuais exibam maior proximidade geométrica. Busca de Imagem para Texto: Processo inverso, no qual uma imagem de entrada é fornecida para mapear e recuperar as legendas ou descrições textuais mais associadas a ela. Esta capacidade de conectar dados visuais e linguísticos encontrou ampla aplicação em motores de busca multimídia, sistemas de descoberta de conteúdo e de recomendação.
Classificação de imagens de disparo zero (Zero-shot) O CLIP é capaz de executar tarefas de classificação de imagens de forma direta sem ter sido treinado especificamente nas classes do domínio-alvo (zero-shot classification). Isso é alcançado fornecendo ao codificador de texto os nomes das classes estruturados em um comando padrão, como por exemplo: `"A photo of a {classe}."`. O vetor gerado pela imagem de entrada é comparado com os vetores de texto de todas as classes disponíveis através do produto escalar; a classe que registrar a maior pontuação de produto escalar é emitida como a previsão do modelo.
CLIP para aprendizado multimodal O CLIP tornou-se um componente vital no desenvolvimento de sistemas de aprendizado multimodal. Durante o treinamento do modelo Flamingo (2022) desenvolvido pela Google DeepMind, os autores treinaram um par CLIP composto pelo BERT como codificador de texto e uma arquitetura *NormalizerFree ResNet F6* como codificador visual. Posteriormente, os parâmetros do codificador visual foram congelados e o codificador de texto foi descartado. Esse extrator visual de parâmetros congelados foi então acoplado ao modelo de linguagem de larga escala Chinchilla por meio de parametrizações adicionais que conectam os dois modelos congelados.
Aplicações em outros domínios **Extração de Características:** O codificador de imagens do CLIP atua como um extrator de características (*featurizer*) pré-treinado de alto desempenho, cujos vetores gerados podem servir de entrada para alimentar outros modelos analíticos ou de inteligência artificial secundários. **Modelos de Difusão:** Modelos de geração de imagens como o Stable Diffusion utilizam o codificador de texto do CLIP para processar e converter os comandos de texto (*prompts*) dos usuários em matrizes de incorporação ocultas que guiam o processo de desintermediação de ruído latente para gerar a imagem final. O CLIP também pode ser empregado diretamente como um sinal de gradiente para guiar o processo de amostragem da difusão (técnica conhecida como *CLIP guidance*) ou em outras vertentes de arte celular generativa. **Filtragem Estética:** Modelos CLIP ajustados podem ser usados para classificar e ranquear imagens com base em sua qualidade estética, servindo como uma etapa para filtrar grandes conjuntos de dados brutos em subconjuntos menores de maior refinamento visual. **Legendagem de Imagens:** O CLIP pode ser integrado a modelos autorregressivos de linguagem para atuar na geração automatizada de legendas descritivas para imagens (*image captioning*), alinhando os vetores visuais extraídos com os prefixos gerados pelo modelo de texto.
Notas
Referências
Ligações externas (em inglês) Página oficial do CLIP na OpenAI (em inglês) Repositório oficial do OpenCLIP no GitHub (em inglês) The Annotated CLIP — Análise detalhada de engenharia e equações do modelo.