CLIP (Contrastive Language-Image Pre-training)
CLIPは、画像とテキストを共通の空間に埋め込むOpenAIのモデルで、プレーンテキストのラベルによる画像分類を可能にします。学習方法とゼロショットの仕組みを解説します。
CLIP(対照型言語画像事前学習)は、画像とそのテキスト説明の対応関係を学習するOpenAIのモデルです。画像エンコーダーとテキストエンコーダーを組み合わせ、画像とその説明文が共通の埋め込み空間内で近いベクトルになるように、両方を学習させます。インターネットから収集した4億組の画像とキャプションで学習したCLIPは、カテゴリのラベル付き例がなくても、テキストだけで画像を分類できます。この能力はゼロショット学習と呼ばれます。2021年の論文では、CLIPの最良モデルがImageNetのゼロショットtop-1精度で76.2%を達成しました。これは、ResNet-50が学習に使った128万枚のラベル付き画像を一切使わずに、元の完全教師ありResNet-50に匹敵する結果です。
CLIPの学習方法#
CLIPには2つのエンコーダーがあります。画像エンコーダーはResNetまたはVision Transformer(ViT)で、テキストエンコーダーは基本サイズで6,300万個のパラメーターを持つ12層のTransformerです。線形射影によって各エンコーダーの出力を共通の空間に写像し、すべてのベクトルを単位長に正規化します。
学習では、32,768組の画像とキャプションからなるバッチを使った対照学習を行います。N組のペアからなるバッチについて、CLIPはすべての画像とすべてのキャプションのコサイン類似度を計算し、対角成分に正しいペアが並ぶN×N行列を作ります。各行に対するsoftmax交差エントロピー損失は、各画像がN個の中から対応するキャプションを選ぶように促します。さらに、各列に対する2つ目の損失は、各キャプションが対応する画像を選ぶように促します。学習可能な温度パラメーターによって、softmaxの前に類似度をスケーリングします。
キャプションは自由形式のテキストであるため、CLIPは固定のクラス一覧ではなく、ウェブ上で説明されているあらゆるものから学習します。これには、物体、風景、アートスタイル、画像内の文字、動作が含まれます。
ゼロショット分類#
画像を分類する際、CLIPは「a photo of a dog」のような短い文として各候補ラベルを埋め込み、画像も埋め込み、コサイン類似度が最も高いラベルを選びます。プロンプトの表現は重要です。論文によると、「A photo of a {label}.」というテンプレートだけでImageNetの精度が1.3%向上し、80種類のテンプレートのテキスト埋め込みを平均すると、さらに3.5%向上しました。以下のHugging Face Transformersパイプラインは、各ラベルを「This is a photo of {}.」というテンプレートに当てはめ、元のViT-B/32モデルを実行します。
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}")a city bus: 0.657、a tram: 0.341、a delivery truck: 0.001、a bicycle: 0.000が出力されます。残りの確率のほぼすべては、もう1つの大型乗用車である路面電車が占めます。新しいラベルセットが必要な場合は、文字列のリストを新しく用意するだけです。
実際のアプリケーション#
- セマンティック検索:画像コレクションを一度埋め込み、ベクトルデータベースに保存します。「木の床にある赤いスニーカー」のようなテキストクエリは、検索時に埋め込んで保存済みの画像と照合するため、手動でタグを付けなくても内容に基づいて画像を見つけられます。
- テキストからの画像生成:Stable Diffusion 1.xは、CLIP ViT-L/14のテキスト埋め込みを画像生成の条件として用います。また、生成画像がプロンプトにどの程度忠実かを評価するために、CLIPの類似度が広く使われています。
- オープンボキャブラリー検出: Ultralyticsパッケージで動作するTencent AI LabのYOLO-Worldモデルは、
set_classesに渡されたクラス名をCLIPのViT-B/32テキストエンコーダーでエンコードします。そのため、1度学習した検出器で「赤いバックパック」や「フォークリフト」を名前で検出できます。GoogleのOWLv2は、CLIPの事前学習済み画像・テキストエンコーダーを基盤とし、VLM Leaderboardでは、実世界の検出データセットで他のオープンボキャブラリー検出器やVLMと比較します。 - VLM向けビジョンエンコーダー:多くの視覚言語モデルは、学習済みのCLIP画像エンコーダーをベースにしています。たとえばLLaVAは、CLIP ViT-L/14の特徴量を言語モデルに入力します。
- データセットのフィルタリング:LAION-5Bなどの大規模なオープン画像・テキストデータセットでは、CLIPの画像・テキスト類似度がしきい値を超えるウェブ上のペアだけを残し、画像の内容を説明していないキャプションを取り除きます。
CLIPと関連手法の比較#
- 教師あり学習による分類器:標準的な分類器は学習クラスごとに1つの出力を持ち、学習時に見ていないクラスをスコア付けできません。CLIPの「分類器」はテキスト埋め込みの集合であるため、ラベルが変わるたびに変化します。
- SigLIP:Googleの派生モデルであるSigLIPは、バッチ全体に適用するCLIPのsoftmaxを、画像とテキストの各ペアを個別に評価するシグモイド損失に置き換えています。これによりメモリ使用量が減り、小さいバッチサイズでの性能が向上します。
- 自己教師あり対照学習:SimCLRなどの手法は、同じ画像に拡張を適用した2つのビューを対比し、画像だけから学習します。CLIPは2つのモダリティを対比することで、画像特徴量を単語と結び付けます。
- 生成型VLM:CLIPは画像とテキストの類似度を評価しますが、キャプションの作成や質問への回答はできません。生成モデルは画像エンコーダーに言語モデルを接続します。画像エンコーダーには、CLIP自体のものが使われることもよくあります。
制限事項#
CLIPのゼロショット精度は、航空機や車種などの細分類、物体の数え上げ、距離の推定などの抽象的なタスクで低下します。また、ウェブ上のキャプションに含まれるバイアスも学習します。CLIPは画像内の文字を読み取るように学習しているため、文字に惑わされることがあります。OpenAIのマルチモーダルニューロン研究では、「iPod」と手書きされたラベルのあるリンゴが、iPodと分類されました。










