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 thumb|316x316px|Visão geral da arquitetura do modelo 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 pares de imagem e legenda. Sejam as saídas dos modelos de texto e imagem representadas, respectively, por e . 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:

Em essência, esta função de perda incentiva o produto escalar entre vetores correspondentes de imagem e texto () a ser alto, ao mesmo tempo que penaliza produtos escalares elevados entre pares incompatíveis. O parâmetro representa a temperatura, que é parametrizada no modelo original do CLIP como , onde é 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:

onde é a perda sigmoide de logaritmo negativo, e o símbolo do Delta de Dirac assume o valor 1 se 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 thumb|Arquitetura do Vision Transformer. O vetor de saída Rep<CLS> é utilizado como a codificação da imagem para o CLIP 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).Este conceito de dimensão de incorporação (embedding dimension) é estritamente análogo à dimensão de incorporação oculta (*hidden dimension*) dos tokens de texto usada internamente em modelos baseados em Transformers convencionais da literatura.

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.

+ Modelos disponibilizados pela OpenAIDemonstração em Python para extrair de forma programática os metadados internos de tamanho e contagem de parâmetros das redes neurais da OpenAI: import torch import clip from PIL import Image import numpy as np

device = "cuda" if torch.cuda.is_available() else "cpu" for m in clip.available_models(): model, preprocess = clip.load(m, device=device) input_resolution = model.visual.input_resolution context_length = model.context_length vocab_size = model.vocab_size n_params_vision = sum(p.numel() for p in model.visual.parameters()) n_params_text = sum(p.numel() for p in model.transformer.parameters()) print(f"Model: {m}, #vision parameters: {n_params_vision:,}, #text parameters: {n_params_text:,}") Nome do modelo Resolução Parâmetros totais (milhões) Parâmetros (Visão) Parâmetros (Texto) Dimensão de incorporação Tamanho (MB) Data de lançamento RN50 224 102 38,3 63,1 1024 244 2021-01 RN101 224 120 56,3 63,1 512 278 2021-03 RN50x4 288 178 87,1 90,7 640 402 2021-03 RN50x16 384 291 167,3 123,0 768 630 2021-07 RN50x64 448 623 420,4 201,8 1024 1260 2022-01 ViT-B/32 224 151 87,8 63,1 512 338 2021-01 ViT-B/16 224 150 86,2 63,1 512 335 2021-07 ViT-L/14 224 428 304,0 123,0 768 890 2022-01 ViT-L/14@336px 336 428 304,3 123,0 768 891 2022-04

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 thumb|Uma camada de decodificador. O Transformer usado no codificador de texto do CLIP foi desenvolvido removendo o módulo de atenção cruzada e empilhando o bloco restante 12 vezes 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.Este conjunto de dados proprietário e fechado da OpenAI não deve ser sob nenhuma hipótese confundido com o Wikipedia-based Image Text Dataset (também abreviado pela sigla WIT), que é um banco de dados aberto, multilíngue e mantido de forma pública pelo Google.

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.