CLIP
CLIP (Contrastive Language-Image Pre-training) は、image と text を共通の embedding 空間で対応づける foundation model です。OpenAI が 2021 年に提案し、Vision-Language Models の標準的な出発点になりました。
何を学ぶのか
CLIP は、
- Image encoder (ViT / ResNet)
- Text encoder (Transformer)
の 2 つを持ち、(image, caption) pair を対応づけるように対比的に学習します。
(image-to-text と text-to-image の対称な softmax 損失の和)
なぜ zero-shot ができるのか
CLIP の image / text encoder は、共通の embedding 空間を共有します。したがって、未知の class でも、
- Class name を「a photo of a
{class}」のような text prompt にして encode - Image を image encoder で embedding
- Cosine similarity が最大の class を選ぶ
という手順で zero-shot classification ができます。
何がインパクトだったのか
- ImageNet などの固定 class set に縛られない
- Caption データだけで強い visual representation が得られる
- 多様な downstream に prompt 一つで適用できる
- 後続の DALL·E / Stable Diffusion など、generative model の text encoder としても使われる
- Open-vocabulary detection / segmentation / 3D perception の出発点になる
弱点
- 細かい属性 (counting、relation、negation) は弱い
- Compositional understanding が限定的
- Caption noise に依存
- 単純 cosine similarity では fine-grained matching が不安定
これらに対する改良が、SigLIP、EVA-CLIP、SigLIP 2 などにつながります。
数式で見る CLIP の対称 contrastive loss
CLIP は、image encoder と text encoder が出力した embedding を normalize して同じ空間に置き、batch 内の (image, text) pair を対応付けます。Batch 内の embedding を 、 とすると、similarity matrix は次のように書けます。
ここで、 は学習可能な temperature です。Image を query にしたときと、text を query にしたときの cross-entropy をそれぞれ書くと、次のようになります。
最終的な loss は対称な和です。
各項の意味は次の通りです。
- は、画像と text を同じ空間に置いた embedding です。
- は softmax の鋭さを決め、似ている度合いをどれくらい厳しく比べるかを決めます。
- 分母には batch 内の全 text または全 image が入るため、batch 内の他 sample が negative の役割を担います。
- は「画像が正しい text を選べるか」、 は「text が正しい画像を選べるか」を学習します。
この式の気持ちは、「同じ意味の image-text pair の類似度を上げ、無関係な pair の類似度を相対的に下げる」というものです。Batch を大きくするほど negative が増え、表現空間がより細かく押し広げられます。
数式で見る zero-shot classification
CLIP の zero-shot 分類は、各 class について prompt (例: "a photo of a {class}")を作り、text embedding を計算します。Query 画像 に対しては、image embedding を作り、次の分布から class を選びます。
この式の気持ちは、「画像 embedding に最も近い class prompt embedding を選ぶ」ということです。Class set を入れ替えるだけで分類対象を変えられるため、fine-tuning なしで新しい task に転用できます。
関連ページ
主なソース
- CLIP paper: https://arxiv.org/abs/2103.00020
- OpenAI CLIP repository: https://github.com/openai/CLIP
- OpenCLIP repository: https://github.com/mlfoundations/open_clip