OpenAI CLIPについて知っておくべきすべて

OpenAI CLIPについて知っておくべきすべて

OpenAIのCLIP(Contrastive Language-Image Pre-training)は、画像とそのテキスト記述を関連付けることを学習するモデルです。その仕組みと実装方法を分析することで、OpenAI CLIPを完全に理解できます。

はじめに

2021年1月、OpenAIはCLIP(Contrastive Language-Image Pre-Training)を発表しました。これは、特定のデータセットで学習する必要なく、英語の理解を利用して画像を分類するゼロショット分類器です。このモデルは、GPT-3と同様の大規模トランスフォーマーの最近の進歩を視覚分野に応用しています。

その結果は驚くほど印象的です。ご自身の画像でモデルを試すためのCLIPチュートリアルとCLIP Colabノートブックを用意しました。

OpenAI CLIPとは

CLIPはContrastive Language-Image Pre-trainingの略で、自然言語による教師信号から学習する効率的な方法です。2021年に論文「Learning Transferable Visual Models From Natural Language Supervision」で紹介されたCLIPは、画像とテキストの共同埋め込みモデルです。

CLIPは4億組の画像とテキストのペアで自己教師あり学習され、テキストと画像の両方を同じ埋め込み空間にマッピングします。例えば、犬の画像と「犬の画像」という文は非常に類似した埋め込みを持ち、ベクトル空間内で互いに近くなります。この機能は、説明文による画像データベースの検索やその逆など、さまざまなアプリケーションを可能にするため重要です。

CLIPのパフォーマンス

学習効率: CLIPは最も効率的なモデルの1つで、4億枚の画像で41%の精度を達成しています。同じ画像数の場合、Bag of Words Prediction(27%)やTransformer Language Model(16%)などの他のモデルを上回っています。これは、CLIPがその分野の他のモデルよりも大幅に高速に学習することを示しています。

汎化性能: CLIPは多様な画像スタイルで学習されているため、ImageNetなどのモデルよりもはるかに柔軟です。CLIPは学習した画像に対しては良好に汎化しますが、学習ドメイン外の画像では効果が低い可能性があることに注意が必要です。以下に、さまざまな画像スタイルの例を示します。

CLIPの仕組み

アーキテクチャ

CLIPモデルは、テキストエンコーダと画像エンコーダの2つの主要コンポーネントで構成されています。テキストエンコーダはTransformerを使用しています。Transformerは2017年以降NLPに革命をもたらしたアーキテクチャであり、その採用は驚くべきことではありません。優れた可視化説明については、以下のブログを参照してください。

画像エンコーダには、著者らはResNet-50とVision Transformer(ViT)の2つの異なるモデルを実験しました。ResNet-50は畳み込みニューラルネットワーク(CNN)に基づいており、画像分類のための元々の最先端アーキテクチャでした。ViTは、画像にTransformerを適用したより最近の適応で、各画像をパッチのシーケンスに分割し、それらをトークンのシーケンスのように扱います。著者らは、ViTの方が学習が速いことを発見しました。

最大のResNetモデルであるRN50x64は、592台のV100 GPUで18日間の学習を要しましたが、最大のVision Transformerは256台のV100 GPUで12日間でした。

テキストエンコーダと画像エンコーダの両方は、スクラッチから学習されました。

我々は、画像エンコーダをImageNetの重みで初期化したり、テキストエンコーダを事前学習済みの重みで初期化したりせずに、CLIPをスクラッチから学習します。

学習

著者らは当初、与えられた画像に対して正確なキャプションや説明を予測する画像キャプショニングモデルを学習しようと試みました。

VirTexと同様の我々の初期のアプローチでは、画像CNNとテキストトランスフォーマーをスクラッチから共同学習し、画像のキャプションを予測しました。しかし、この方法を効率的にスケールすることは困難でした。

しかし、4億組の(画像、テキスト)ペアで画像キャプショニングモデルを学習することはスケーラブルではないことがわかりました。代わりに、対照表現学習(contrastive representation learning)アプローチを採用しました。このアプローチの目標は、類似したサンプルペアが互いに近く、異なるものは遠くなるような埋め込み空間を学習することです。

典型的な対照学習の設定では、モデルに(アンカー、ポジティブ、ネガティブ)の形式で例が与えられます。ここで、アンカーは犬などあるクラスの画像、ポジティブは同じクラスの別の画像(別の犬)、ネガティブは異なるクラスの画像(鳥など)です。画像は埋め込まれ、モデルは同じクラスの埋め込み間の距離(distance(anchor, positive))を最小化し、異なるクラスの埋め込み間の距離(distance(anchor, negative))を最大化するように学習されます。これにより、モデルは同じオブジェクトに対して非常に類似した埋め込みを、異なるオブジェクトに対しては明確に異なる埋め込みを生成するようになります。

対照学習の可視化。出典: https://www.v7labs.com/blog/contrastive-learning-guide

同じアプローチはテキスト、およびテキストと画像の組み合わせにも適用できます。例えば、CLIPでは、1つの学習例はアンカー(犬の画像)、ポジティブ(「犬の画像」というキャプション)、ネガティブ(「鳥の画像」というキャプション)で構成されます。

CLIPはこのアプローチをさらに一般化し、マルチクラスNペア損失を使用します。これは、各アンカーに対して複数のネガティブとポジティブを含む標準的な方法の拡張です。論文に記載されている通りです。

N個の(画像、テキスト)ペアのバッチが与えられたとき、CLIPはバッチ内で実際に発生したN × N通りの可能な(画像、テキスト)ペアリングのうちどれかを予測するように学習されます。そのために、CLIPは画像エンコーダとテキストエンコーダを共同で学習し、バッチ内のN個の実際のペアの画像とテキストの埋め込みのコサイン類似度を最大化し、N² − N個の誤ったペアリングの埋め込みのコサイン類似度を最小化するマルチモーダル埋め込み空間を学習します。これらの類似度スコアに対して対称なクロスエントロピー損失を最適化します。

プロンプトエンジニアリングとアンサンブル

言語モデルの台頭により、生成モデルから良い出力を得るためにプロンプトエンジニアリングが一般的な手法となっています。CLIPのテキストエンコーダがトランスフォーマーモデルであることを考慮すると、著者らは優れたゼロショット性能を達成するためにプロンプトエンジニアリングが重要であることを発見しました。彼らは、事前学習データセットでは、画像とペアになるテキストが「犬」のような単一の単語(クラスラベルを表す)であることは比較的稀であることを観察しました。多くの場合、テキストはキャプションや画像の説明などの完全な文でした。その結果、著者らは「a photo of a {object}」というプロンプトが良いデフォルトであることを発見しましたが、特定の場合にはより特殊なプロンプトがより効果的でした。例えば、衛星画像の場合、「a satellite photo of a {object}」の方が効果的でした。

著者らはまた、モデルアンサンブルを実験しました。これは、複数のモデルの予測を組み合わせて最終出力を生成する手法です。このアプローチは、高分散・低バイアス(過学習)モデルの問題に対処するために機械学習で一般的に使用されます。CLIPでは、多くの異なるプロンプトを使用して分類器を作成することでアンサンブルを構築しました。

プロンプトエンジニアリングとアンサンブルの両方がImageNetの性能を大幅に向上させました。

ImageNetでは、80種類の異なるコンテキストプロンプトをアンサンブルし、上記の単一のデフォルトプロンプトと比較してさらに3.5%の性能向上を達成しました。プロンプトエンジニアリングとアンサンブルを合わせると、ImageNetの精度はほぼ5%向上します。

OpenAI CLIPの応用

OpenAI CLIPは画像テキスト分析において幅広い応用とユースケースを持っています。主な応用とユースケースは以下の通りです。

  • 画像分類: CLIPは画像の内容に基づいて異なるクラスやカテゴリに分類できます。与えられた画像に対して最も関連性の高いクラスラベルを予測できます。
  • 画像検索: CLIPは与えられたテキストクエリに基づいて関連画像を検索できます。入力テキストと意味的に類似した画像を見つけることができます。
  • コンテンツモデレーション: CLIPは画像やテキスト内の不適切または不快なコンテンツを自動的に検出し、モデレートするために使用できます。
  • 画像キャプショニング: CLIPは画像の内容に基づいてキャプションや説明を生成できます。
  • 視覚的質問応答: CLIPは画像の内容に関する質問に答えることができます。

Huggingface Transformers を使用した OpenAI CLIP の実装

HuggingFace Transformersライブラリを使用して、わずか数行のコードでローカルマシン上でCLIPを利用できます!まずライブラリをインポートし、事前学習済みモデルをロードします。

import transformers

model = transformers.CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
processor = transformers.CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")

次に、2つのリストを作成します。1つはキャプションや説明を含むリスト、もう1つは画像を含むリストです。画像はURLまたはPIL画像として表現できます。

import PIL.Image

images = [PIL.Image.open("for_example_a_dog_image.jpeg")]
possible_classes = ["an image of a bird", "an image of a dog", "an image of a cat"]

プロセッサを呼び出します。これによりテキストと画像の両方がトークン化され、モデルへの入力として準備されます。このプロセスは、標準的なテキストのみのユースケースでトークナイザを呼び出すのと似ています。説明のバッチが与えられた場合、すべてがテンソル格納のために同じ長さになるようにパディングが適用され、長い文章は最大シーケンス長(前述の通り76)に制限するためにトランケーションが使用されます。最後に、トークン化された入力をモデルに渡します。モデルはそれらをテキストエンコーダと画像エンコーダに通します。

with torch.no_grad():
    inputs = processor(text=descriptions, images=images, return_tensors="pt", padding=True, truncation=True)
    outputs = model(**inputs)

次に、2つの異なる関数を使用してドット積の行列を取得できます。logits_per_image を使用すると、形状が [num_of_images, num_of_text] のドット積行列が得られ、logits_per_text を使用すると、形状が [num_of_text, num_of_images] の行列が得られます。

dot_products_per_image = outputs.logits_per_image
dot_products_per_text = outputs.logits_per_text

最後に、必要に応じてこれらの行列にソフトマックス関数を適用し、各画像の確率分布を得ることができます。

probabilities = dot_products_per_image.softmax(dim=1)

OpenAI CLIP の限界

この論文は多くの実験と結果を詳述していますが、CLIPにはいくつかの限界があることを認識することが重要です。

第一に、前述の設計上の決定により、CLIPは生成モデルではなく、画像キャプショニングなどのタスクを実行できません。しかし、他の生成AIはOpenAI CLIPよりも多くの作業を実行できます。例えば以下の通りです。

novita.ai LLM による画像キャプショニングの実行

novita.ai などの他の生成AIは、対応するAPIを適用することでCLIPの欠点を補うことができます。

著者らは、CLIPはまだ最先端には程遠く、線形層を追加したResNetに匹敵するだけであると指摘しています。特定のタスクに対する汎化性能は低く、例えば簡単なMNIST手書き数字認識データセットでは88%の精度しか達成しません。これは、学習データに類似した画像がなく、CLIPがこの問題をほとんど解決しないためと考えられます。

CLIPはインターネット上のフィルタリングされていないキュレーションされていない画像テキストペアで学習されており、その結果、モデルは多くの社会的バイアスを学習します。これらの懸念は現在の大規模言語モデル(LLM)と同様であり、RLFHF(Robust Low-Frequency Hacking Framework)やDirect Preference Optimizationなどの手法で緩和が試みられています。

さらに、元の実装では、Transformerテキストエンコーダの最大シーケンス長は76に制限されていました。この制限は、データセットが主に画像と短いキャプションで構成されているために生じています。したがって、市販の事前学習モデルを長いテキストで使用すると、モデルが短いテキストで学習されているため、76トークンで切り捨てられ、うまく機能しない可能性があります。

CLIPによる画像テキスト分析の将来の方向性

OpenAI CLIPの成功は、画像テキスト分析の未来に新たな可能性を開きました。研究者や開発者は、この分野で革新的な応用と進歩を継続的に模索しています。

一つの将来の方向性は、CLIPをオーディオやビデオなどの他のモダリティと統合し、マルチモーダル分析を可能にすることです。これにより、CLIPは複雑なマルチメディアデータを理解し分析できるようになり、より包括的で正確な結果が得られるでしょう。

また、自己教師あり学習や教師なし表現学習の進歩により、CLIPの性能と汎化能力をさらに向上させることができます。これらの進歩により、ヘルスケア、ロボティクス、マルチメディアコンテンツ分析など、さまざまな分野でCLIPの新たな可能性が開かれるでしょう。

CLIPによる画像テキスト分析の未来は有望であり、継続的な研究開発がこのエキサイティングな分野の限界を押し広げ続けるでしょう。

結論

OpenAIのCLIPは、大規模トランスフォーマーと対照学習を活用して自然言語の説明に基づいて画像を分類することで、画像テキスト分析における大きな飛躍を示しています。その多用途性は数多くの革新的なアプリケーションを可能にしますが、学習ドメイン外のタスクでの苦戦、テキストのシーケンス長の制限、フィルタリングされていない学習データから継承された社会的バイアスなどの限界に直面しています。

プロンプトエンジニアリングやアンサンブルなどの手法により性能が向上しており、オーディオやビデオなどの他のモダリティの統合、自己教師あり学習や教師なし学習の進歩は、CLIPの能力をさらに強化する可能性を秘めています。この分野の継続的な研究開発は、より包括的で正確なマルチメディア分析の明るい未来を示唆しています。

novita.ai は、100以上のAPIにアクセスできる、無限の創造性のためのワンストッププラットフォームです。画像生成、言語処理、オーディオ強化、ビデオ操作に至るまで、従量課金制で低コスト、GPUメンテナンスの手間から解放されながら自社製品を構築できます。無料でお試しください。

おすすめの記事

LLMとGPTの違いは何ですか?

LLM Leaderboard 2024の予測が明らかに

Novita AI LLM推論エンジン:最大のスループットと最安の推論を実現