🐶

Learning Transferable Visual Models From Natural Language Supervision

2022/10/29に公開

概要

大量のテキストと画像のペアを用いて、テキストと画像の埋め込み表現を紐づけることができるCLIP(Contrastive Language-Image Pre-training)を提案した論文。本論文では、CLIPがZero-shotの画像分類モデルとして当時のSotA画像分類モデルと比肩することが示されている。

書誌情報

  • Radford, Alec, et al. "Learning transferable visual models from natural language supervision." International Conference on Machine Learning. PMLR, 2021.
  • 公式実装
    • 学習済みモデルが公開されておりZero-shot分類を手軽に試すことができる。
  • https://arxiv.org/abs/2103.00020

ポイント

手法

CLIPでは、大量のテキスト・画像ペアを用意し、そこからTextEncoder(Transformerベース)を通して得られるTextEmbedding(T_1, T_2, ..., T_N)とImageEncoder(ResNetベースまたはViTベース)を通して得られるImageEmbedding(I_1, I_2, ..., T_N)が近くなるように対照学習を行う。
ここで、Nはミニバッチのサイズであるが、N=32,768という大きい数字が使われている。

TextEmbeddingとImageEmbeddingはそれぞれ線形変換されて次元を揃えられており、ミニバッチ内の各ペアでコサイン類似度を計算し、CrossEntropy損失を用いて真のペアでもっとも類似度が高くなるように訓練される。コサイン類似度はミニバッチ内のテキスト×画像のペアの数であるN \times N個計算され、訓練対象である温度パラメーターをかけたのちに、2軸それぞれでCrossEntropy損失が算出される。以下が具体的な損失計算の流れとなっており、非常にシンプルといえる。

このようにして訓練されたモデルを使用することで、Zero-shot画像分類モデルを簡単に作成することができる。たとえば、TextEncoderへの入力として"A photo of a {object}"というテキスト(これをpromptという)をデータセット内のすべてのクラスについて作成し、それらに関するTextEmbeddingを得ておく。画像をImageEncoderに入力して得られるImageEmbeddingと各クラスのTextEmbeddingを比較し、もっともコサイン類似度の大きいクラスが、分類器の予測結果となる。

さまざまなデータセットでのZero-shot精度が以下のようにまとめられている。なお、ResNet系の「x64」のような表記は、EfficientNetに倣った、チャンネル幅の拡大率を表す。

データセット

本研究では、新たに大規模なデータセットを提案している。

CLIPの訓練に使用されているWIT(WebImageText)は、本研究で独自に整備された、4億のテキスト・画像ペアからなる大規模なデータセットとなっている。もっとも、このデータセットは権利上の問題から公開される予定はないとのことだ。

実験

本論文では、CLIPによるZero-shotモデルの精度測定や、表現学習としての評価、few-shotやファインチューニングについての議論、多様なデータ分布シフトに対する頑健性、人間との性能比較、データリークの可能性についての分析など多くの実験を行なっている。
本稿では、以下の3つの観点からまとめる。

  • Zero-shot分類モデルの性能
  • Zero-shot分類の頑健性
  • データリークの影響についての分析

Zero-shot分類モデルの性能

CLIPをZero-shot分類モデルとして使用するときに、どのようなpromptをテキスト入力として用いるのかが問題となる。公式リポジトリに、各データセットのでこのようなpromptを使いました、ということがまとめてある。

単にクラス名をpromptとして用いるよりも、"a photo of a {object}"というテキストが有効だということが示されている。一方で、promptを作るときに気を付けるべき問題として、多義性が指摘されている。たとえば、"boxer"という単語は、ボクシング選手を意味すると同時に、犬種のボクサーも意味する。そのため、たとえば、OxfordPetデータセットに対するpromptとして"a photo of a {object}, a type of pet."のようにタイプを指定することで、正確なTextEmbeddingが得られるとしている。また、OCR系のデータセットに対しては、{object}の部分をダブルクオートで囲んだpromptにすることで精度が向上したと言っている。

ImageNet系のデータセットに関するpromptは、80ものテンプレートを使い、それらから得られたTextEmbeddingの平均を各クラスの埋め込み表現として用いている。これによって、単一のpromptを用いるよりも、3.6%もTop1精度が向上した、としている。

以下はさまざまなデータセットに関する、ResNet-50を用いてCLIPを訓練したときと、スクラッチで訓練したときの精度の比較となっている。さまざまな画像分類データセットでZero-shotモデルが上回る一方で、CLEVRCountsのようにモノの数を数えるようなタスクや、衛星写真という特殊な写真を対象としたタスク、車間距離の推定を行うKITTI Distance、専門家でないと判断が難しいPatchCamelyonなど、苦手なタスクもたくさんあることが示されている。

Zero-shot分類の頑健性

下図には、各種モデルをFew-shotで学習したときにどのあたりでZero-shot CLIPに追いつくのか、という検証を行った結果が示されている。なお、Linear Probe CLIPは、CLIPの学習したImageEncoderの表現についての性能を示すために、線形層を接続してそこのみを訓練したモデルだ。縦軸の平均精度は、各クラスあたり少なくとも16のサンプルを含んでいる20のデータセットでの精度を平均したものになっている。

この図から導かれる事実は、下手にFew-shotで訓練するよりも、Zero-shot CLIPのほうが高精度だということだ。Linear Probe CLIPでは、1-shotだと精度が大きく劣化し、4-shotになるまで精度は回復しない。また、BiT-Mのようなモデルをスクラッチで訓練する場合、16-shotでやっとCLIPのZero-shotに精度的に追いつくことができる。

似たような現象が、ImageNetの亜種に対する頑健性の実験で示されている。実験では、ImageNetと似たクラスを持つ、ImageNetV2、Youtube-BB、やや特殊な画像を集めた5つのデータセット(分布シフトデータセット)の7つのデータセットに対する精度比較を行っている。理想的なモデルでは、ImageNetでの精度と7つのデータセットでの精度が一致するが、実際のモデルでは特殊なデータを含むのデータセットの精度は下がってしまう。さまざまなサイズのCLIPモデルを使用したZero-shot分類は、標準的なImageNetの訓練を行ったモデルと比べて、より特殊な分布のデータセットにも強いことが確認できる。

さらに、CLIPのZero-shot分類の頑健性を示したのが、下図に示される実験だ。CLIPで得られたImageEncoderをImageNet全体を使ってファインチューニングすると、赤線に示されるように、ImageNetに対する精度は9%近く上昇する一方で、7つのデータセットに対する平均精度はやや劣化する。下図右上には、各データセットで具体的に精度がどのぐらい変化するかが示されているが、ImageNetV2のようなImageNetと同じプロセスで作成されたデータセットでは向上するものの、分布シフトデータセットでは精度が軒並み劣化してしまうことがわかる。つまり、ImageNetにオーバーフィットしてしまっていると言える。

また、上図の紫で示されている線は、Zero-shot CLIPに使用するpromptを、各データセットが与えているクラス名に準拠させるとどうなるかを示したものだ。Youtube-BBやImageNet Vid、ObjectNetでは、通常のImageNetデータセットのクラスとはやや異なる粒度のクラスが割り振られており、それに合わせてpromptも変えることで、精度が向上すると示されている。

以上のような結果は、下手にCLIPをファインチューニングするよりも、promptを適切に設定したZero-shotのまま使う方が効果的である可能性を示していると言える。

データリークの影響についての分析

ここまでCLIPのZero-shot分類が非常に優れていることを見てきたが、大量のデータを使用して訓練されたモデルであるため、評価対象の画像が訓練データに入ってしまっていたという可能性は十分に考えられる。

著者らは重複画像の検出器を構築し、各評価用データセットに含まれる訓練画像の重複割合を確認している。CLEVRCountsのようなCGによる人工的な画像データセットの場合、重複は0%だが、Country211のようなCLIPの訓練で一部使用しているYFCC100M経由で作られたデータセットだと、重複は21.5%にのぼる。各データセットを3種類に分けて、全体をALL、重複検出にかかったものをOVERLAP、それ以外をCLEANとしている。

OVERLAPとCLEANについてZero-shot CLIP(RN50x64)で精度の差を比較したのが下図左になる。横軸は重複率、縦軸が重複の有無による精度の差異になっており、高いほど重複による精度向上があった(リークの可能性がある)と言える。99.5% Clopper-Pearsonの信頼区間を見てみると、明らかに精度が変わったと言えるデータセットは35のデータセットのうち5つだけで、そのうちの3件がリークの可能性ありと読み取れる。Kinetics-700のようなCLEANの方がむしろ高精度になるというデータセットは、重複検出器が動画中の暗いフレームを検知し、むしろそう言った無意味な画像が取り除かれたことによって精度が向上した、という可能性があると分析されている。

また、下図右側は、横軸が左側と同様の重複率、縦軸がALLとCLEANの精度の差を表している。ここで、「H_0: \text{ALL精度} \leq \text{CLEAN精度}, H_1: \text{ALL精度} > \text{CLEAN精度}」という片側二項検定を行い、ボンフェローニ補正を適用したp値を出している。もしもp値が十分に小さくて帰無仮説H_0が棄却されれば、ALLの方がCLEANより精度が高い、つまりデータリークの可能性があった、と言える。

多くのデータセットに関しては帰無仮説は棄却されないが、いくつかの赤やオレンジで示された7つのデータセットに関しては、ALLの精度の方がCLEANの精度より高いと言えるが、統計的に有意な精度差が確認されたのは2つのデータセットのみであった。しかし、いずれにせよ精度の差はBirdsnapの0.6%がもっとも大きく、データリークによる精度の向上は無視できる範囲と言える。

もちろん、重複検出器は完璧な性能というわけではないので、以上の分析結果についても注意が必要だ。いずれの分析でも重複によるデータリークの可能性があると確認できたのはCIFAR-100とSUN397だが、CIFAR-100については、低解像度のために重複検出で誤検出されたことによる影響が出ている可能性がある。

Discussion