OpenAI CLIPモデルポケット版、24MBでテキスト画像マッチングを実現、iPhoneでも実行可能

OpenAI CLIPモデルポケット版、24MBでテキスト画像マッチングを実現、iPhoneでも実行可能

OpenAI の CLIP モデルは、画像とテキスト カテゴリのマッチングに非常に優れていますが、元の CLIP モデルは 4 億を超える画像とテキストのペアでトレーニングされており、多くの計算能力を消費します。 PicCollage の研究者は最近、CLIP モデルのサイズを縮小する研究を行い、優れた結果を達成しました。

今年1月初旬、OpenAIは自然言語と視覚の間の次元の壁を打ち破り、テキストと画像を結びつける2つのニューラルネットワークDALL·EとCLIPを相次いでリリースした。後者は画像とテキストのカテゴリをマッチングできる。 CLIP は、さまざまな視覚認識タスクを確実に実行でき、言語で表現された一連のカテゴリが与えられると、それらのカテゴリの特定のデータに対して標準的なニューラル ネットワークを微調整する必要なく、画像をそれらのカテゴリの 1 つに瞬時に一致させることができます。

CLIP モデルの効果のいくつかの例。画像出典: OpenAI

その後、OpenAI は CLIP モデルでマルチモーダルニューロンを発見しました。これらのニューロンは、テキスト、シンボル、または概念の形で提示される同じ概念に反応することができます。たとえば、「スパイダーマン」ニューロン (ハル・ベリー ニューロンに類似) は、クモの画像、「スパイダー」というテキストの画像、および漫画のキャラクター「スパイダーマン」に反応することができます。

CLIP モデルは画像とテキスト カテゴリのマッチングに非常に優れていますが、4 億を超える画像とテキストのペアでトレーニングされ、大量の計算能力が使用され、トレーニングには 2 週間で 256 個の GPU が必要でした。これは普通の開発者には想像もできないことです。では、パフォーマンスを犠牲にすることなく CLIP モデルのサイズを縮小することは可能でしょうか?

最近、PicCollage の研究者がこのテーマについて調査を行いました。彼らは独自のコンテンツ製品で CLIP モデルのパフォーマンスをテストし、満足のいく結果を達成しました。しかし、私たちはすぐに CLIP モデルの奇妙な点を発見しました。それは、検索クエリにおいて、意味の類似性よりもテキストの類似性を優先するという点です。彼らは、より関連性の高い検索結果を得るために、CLIP モデルがテキストの類似性を過度に重視する問題に対処したいと考えていました。

さらに、研究者らは CLIP モデルのサイズを縮小し、iOS デバイスへの展開の可能性を探りたいと考えています。彼らはモデル蒸留法を使用して CLIP のサイズを縮小しました。350 MB の元のモデル (教師モデルと呼ばれる) は、蒸留後に 48 MB (生徒モデル) に縮小され、FP32 の精度が得られました。そして、単一の P100 GPU で数週間トレーニングした後、48 MB の学生モデルを CoreML 形式に変換し、FP16 精度の 24 MB モデルを再度取得しましたが、パフォーマンスの変化はほとんど無視できるほどでした。研究者らは、精製モデルはiPhoneなどのiOSデバイス上で実行できると述べた。

次に、研究者の探索プロセスを詳しく説明します。

画像内のテキストの強調

次の 3 つの画像を考慮した簡単な設定でこれを説明しましょう。

  • 「Cat」という単語が書かれた画像。
  • 「Gat」という単語が書かれた画像。
  • 猫と一緒に撮った写真。
[[418218]]

「cat」という単語を検索すると、CLIP はこのテキストをベクトル text_vector に変換します。上記の 3 つの画像ベクトルの text_vector のコサイン類似度は次のようになります。

検索用語と画像の類似性は、次の 2 つの方法で表現できると結論付けることができます。

  • 画像には検索用語に類似したテキストが含まれています。つまり、テキストは類似しています。
  • 画像と検索用語は意味的に類似しています。つまり、意味的に類似しています。

検索機能を構築する場合、研究者はテキストの類似性よりも意味の類似性を優先する場合があります。研究者たちは、CLIP は類似したテキストを含む画像に高いスコアを与える傾向があることを発見しました。

解決策 画像内のテキストの強調

共有ベクトル空間には、画像の「テキスト性」プロパティが大きく変化し、他の(意味的)プロパティは一定のままである方向が存在すると仮定します。この方向を見つけることができれば、その方向を指すベクトルを使用してそれをすべての画像ベクトル (またはテキスト ベクトル) に追加し、それらを正規化してコサイン類似度を計算できます。このベクトルを textness_bias ベクトルと呼びます。

つまり、次のことを行う前に:

  1. image_vectors /= np.linalg.norm(image_vectors, axis=- 1 , keepdims=True)
  2. cosine_similarities = テキストベクトル@画像ベクトル

まず、次のことを行う必要があります。

  1. # 画像ベクトルにバイアスを加える
  2. 画像ベクトル += スケール * テキストバイアス
  3. # またはテキストベクトルにバイアスを追加する
  4. テキストベクトル += スケール * テキストバイアス

次の質問は、textess_bias ベクトルをどのように見つけるかということです。ここでは、同様の答えにつながる 2 つの異なるアプローチを示します。 2番目の方法は次のとおりです。

  1. 「テキスト性」の削減: 隠れ層のない小さなモデルのトレーニング
  2. 私たちは、テキストを含む画像と含まない画像のデータセットを作成しました。モデルをトレーニングし、モデルの重みをテキストバイアスの指標として使用するというアイデアです。
  3. クラスModel(nn.Module):
  4. def __init__(self, dim= 512 ):
  5. super (モデル、self).__init__()
  6. 自己線形 = nn.Linear(dim, 2 )
  7. def forward(self, x):
  8. self.linear(x)を返す
  9. モデル = モデル()
  10. 次に、肯定的なラベルを予測する重みベクトルをテキスト性バイアスとして使用しました。もう 1 つの興味深い発見は、バイアスをテキスト ベクトルに追加すると、画像ベクトルに追加するよりもはるかに効果的であるということです。
  11. テキストネスバイアス = モデル.線形.重み[ 1 ]
  12. テキストベクトル += スケール * テキストバイアス
  13. 規模が大きいほど、CLIP はテキストの類似性を重視します。結果のいくつかを見てみましょう。
  14. 検索におけるテキストの類似性を制御した結果
  15. 検索語ごとに、スケールの値を次のように順番に変えました: - 2 、 - 1012 。スケールの値ごとに、上位 10 件の結果を 1 行に保存しました。したがって、検索語ごと、各行がスケールの値に対応し、そのスケール上位 10 件の結果を含む画像のグリッドが得られました。上の行から下の行に行くにつれて、テキストの類似性優先順位が上がることに注目してください。

「テキスト」を減らす: 隠れ層のない小さなモデルをトレーニングする

テキストを含む画像と含まない画像のデータセットを作成します。モデルをトレーニングし、モデルの重みをテキストバイアス指標として使用するというアイデアです。

  1. クラスModel(nn.Module):
  2. def __init__(self, dim= 512 ):
  3. super (モデル、self).__init__()
  4. 自己線形 = nn.Linear(dim, 2 )
  5. def forward(self, x):
  6. self.linear(x)を返す
  7. モデル = モデル()

次に、重みベクトルを使用して、テキストバイアスとして正のラベルを予測します。また、バイアスをテキストベクトルに追加すると、画像ベクトルに追加するよりも効果的であることがわかります。

  1. テキストネスバイアス = モデル.線形.重み[ 1 ]
  2. テキストベクトル += スケール * テキストバイアス

スケールが大きいほど、CLIP はテキストの類似性を強調します。いくつかの結果を見てみましょう。

検索におけるテキストの類似性を制御する

検索用語ごとに、スケールの値を次のように変更します: -2、-1、0、1、2。各スケール値について、上位 10 件の結果を 1 行に保存します。したがって、検索用語ごとに、各行がスケール値に対応し、そのスケール値の上位 10 件の結果が含まれる画像グリッドが表示されます。

ViTモデルの蒸留

CLIP の強力な機能を考慮して、研究者は次にモデル蒸留を使用してサイズを縮小することにしました。タスクにはいくつかの詳細が含まれています:

蒸留を使用したアプローチ: CLIP モデルは、実際には、ViT (画像をベクトルに変換) と Transformer (テキストをベクトルに変換) という、互いに分離したパラメータ セットを持つ 2 つのモデルです。 ViT モデル (約 350 MB、FP32 精度) でモデル蒸留を実行することにしました。学生 ViT モデルのサイズは 50 MB 未満であると決定されます。

学生モデル: 元の ViT モデルは、VisualTransformer というクラスによって定義されます。モデルは次のコードに従って作成されます。

  1. teacher_clip = VisualTransformer(入力解像度= 224 、パッチサイズ= 32 、幅= 768 、レイヤー= 12 、ヘッド= 12 、出力寸法= 512 )

学生モデルを作成するために、この研究では層の幅と数を 2 分の 1 に削減しました。ヘッドの数は不確実であるため、この研究では、教師モデルと同じ数のヘッドを持つバージョンと、教師モデルの 2 倍のヘッドを持つバージョンの 2 つを定義します。これは、ヘッドを追加することでモデルのパフォーマンスにどのような影響があるかを理解するためです。

  1. student_clip_12_heads = VisualTransformer(入力解像度= 224 、パッチサイズ= 32 、幅= 768 //2、レイヤー=12//2、ヘッド=12、出力寸法=512)student_clip_24_heads = VisualTransformer(入力解像度= 224、パッチサイズ= 32、幅= 768//2、レイヤー=12//2、ヘッド=24、出力寸法=512)

この研究では、まずstudent_clip_12_headsをトレーニングします。

  • トレーニングに使用されたデータ: この研究は、さまざまなソースから取得した約 200,000 枚の画像のデータセットから始まりました。約 10 エポック後、有望な結果が得られ始めると、トレーニング データセットは 800,000 枚以上の画像に増加しました。
  • 使用される損失関数: KLD + L1 損失の合計がモデルのトレーニングに使用されます。最初の 10 エポックでは、温度は 4 に設定され、その後 2 に下げられます。

研究では、student_clip_12_heads をトレーニングした後、student_clip_24_heads の重みを微調整しました。この研究が直面した大きな課題は、多種多様な画像をカバーするデータを収集することだった。オリジナルの CLIP は 4 億枚の画像でトレーニングされました。このような大規模な画像を収集するのは現実的ではありませんが、この研究では標準的なオープンソース データセットから画像を収集することに重点を置きました。大量の画像が必要になることを回避するため、この研究ではゼロショット蒸留法も試したが、うまくいかなかった。

CLIPでViTモデルを抽出した結果

この研究では、COCO テスト データセットを使用して、各検索語の上位 20 件の結果を調べることで、抽出された CLIP モデルのパフォーマンスを調べました。平均精度 (MAP) も、元の CLIP と抽出された CLIP の上位 N 件の結果に基づいて評価されました。N は各検索語に対して 10 ~ 20 の範囲でした。研究では、N の値ごとに MAP は約 0.012 であることがわかりました。このような低い値は、元の CLIP と抽出された CLIP の結果に共通する結果があまりないことを示しています。これは気が滅入るかもしれませんが、抽出された CLIP モデルの結果は非常に有望に見えます。どちらのモデルも意味的に意味のある結果を提供しますが、両方のモデルの上位 20 件の結果をざっと見てみると、MAP 値が低い理由がわかります。

教師モデルにおける「bird」という単語の結果:

学生モデルにおける「bird」という単語の結果:

上記の 2 つの図に示されているように、2 つのモデルはほぼ同じ結果を生成しませんが、各モデルの結果は有意義です。

<<:  Google がニューラル ネットワーク コーデック SoundStream を発表、オープンソース プロジェクト Lyra に統合される予定

>>:  強化学習は、抽象的思考を行うときに脳がどのように機能するかを明らかにする

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

このような秩序だったニューロンは、皆さんがよくご存知の再帰型ニューラル ネットワークに似ていますか?

本論文では、これまでの RNN モデル研究に基づいて、隠れ状態ニューロン間の更新頻度の順序を強制し、...

ハッカーはAIの顔を変える技術を使って就職活動を行っている。人工知能のセキュリティ問題は無視できない

米国での流行後、多くの企業が「在宅勤務」(WFH)モデルを採用しました。 FBIの刑事告訴センターは...

Java プログラミング スキル - データ構造とアルゴリズム「分割統治アルゴリズム」

[[398991]]アルゴリズムの紹介分割統治アルゴリズムは非常に重要です。文字通りの説明は「分割...

...

IBM Cloud Pack for Data が Wunderman Thompson の再開ガイドの作成を支援

[[338356]]世界中のコミュニティや企業がコロナウイルスの経済的影響を理解し、最終的な回復に備...

...

...

TensorRT はどのようにしてより高速なアーキテクチャを実現するのでしょうか?

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

...

人工知能 (AI) ソリューションを購入または構築する際に尋ねるべき 5 つの重要な質問

人工知能などの新興テクノロジーには、マーケティング上の約束が実際の成果を上回らないようにすることと、...

...

失業よりも悪い:人工知能の新たな進歩

劉慈欣には『鏡』という短編小説があり、次のような物語が語られています。気象庁のソフトウェアエンジニア...

2022年に注目すべき5つのAI活用法

AI インフラストラクチャの継続的な革新と開発により、今日の仕事のやり方は変化しました。人工知能は...

...