aifield / CV_News

Computer Vision系勉強会用のリポジトリです。
3 stars 1 forks source link

#3 Learning Transferable Visual Models From Natural Language Supervision (CLIP) #3

Open mitsu-h opened 2 years ago

mitsu-h commented 2 years ago

論文情報

一言説明

モチベーション

(用語補足)zero-shot transferとは?

技術や手法のキモ

本論文はモデルの改良がメインではなく、VirTexを参考に、ConVIRTをシンプルにしたモデルを利用している。そのため、詳細なネットワーク構造の変更は割愛し、学習機構を中心に記載する

Contrastive Language-Image Pre-training(CLIP)

CLIPの学習機構の概要は以下の様になる

clip_architecture

ポイント

画像エンコーダとテキストエンコーダから出力されたベクトルにて、ペアとなるデータのコサイン類似度を最大化しつつ、それ以外の$N^2-N$個の特徴の類似度を最小化するように学習する。これにより、画像に一致するテキスト表現を予測するタスクよりも学習効率が4倍高くなる。

擬似コードは以下のようになる

# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - minibatch of aligned images
# T[n, l] - minibatch of aligned texts
# W_i[d_i, d_e] - learned proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter
# extract feature representations of each modality
I_f = image_encoder(I) #[n, d_i]
T_f = text_encoder(T) #[n, d_t]
# joint multimodal embedding [n, d_e]
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)
# scaled pairwise cosine similarities [n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t)
# symmetric loss function
labels = np.arange(n)
loss_i = cross_entropy_loss(logits, labels, axis=0)
loss_t = cross_entropy_loss(logits, labels, axis=1)
loss = (loss_i + loss_t)/2

学習

画像エンコーダ

本研究では、画像エンコーダは5つのResNetと3つのVision Transformerを用いて実験を行い、それぞれ32エポック学習を行った。以下にそのモデルを記載する。

テキストエンコーダ

Transformerを利用。パラメータは以下のようになる

データセット

インターネットから集められた画像-テキスト4億ペアのデータセットを使用している。収集条件は以下になる

学習時間

実験

本論文では様々な実験・検証を行っているため、以下の評価をピックアップして記載する

Prompt EngineeringとEnsembling

スクリーンショット 2022-07-23 23 31 24

画像のラベルが名詞のみの場合に、そのままテキストエンコーダに入力するのではなく、"A photo of a {label}"という形に変更する。これにより、1.3%の精度向上が行える。

また、対象ラベルのカテゴリーやデータセットの情報を含めることで3.5%の精度向上が行える。

Prompt Engineeringとensemblingを組み合わせることで、約5%の精度向上を行うことが出来る

zero shot vs linear probe ResNet

CLIPと、ImageNetで学習を行ったResNet-50を、linear probeでそれぞれのデータセットでチューニングしたモデルと精度比較を行った。比較は30個のデータセットを用いて行った。

(用語補足)linear probeとは?

学習済みモデルの最終層の出力を特徴量として、別のデータセットでロジスティクス回帰を学習する方法。これにより、どの特徴量が分類に寄与しているか定量化出来るため、説明可能なAIの手法として用いられる。

https://openreview.net/pdf?id=HJ4-rAVtl

結果

結果のグラフは以下のようになる

スクリーンショット 2022-07-23 23 32 15

グラフは、zero-shotのCLIPの正解率からLinear ProbeのResNet-50の正解率を引いた値となる。30のデータセットの内、16のデータセットでResNet50よりも高い精度で分類を行うことが出来る。

few shot performance

次に、few-shotで学習したモデルと、zero-shotのCLIPとの精度比較を行った。本実験では、1クラスあたりのサンプル数を1,2,4,8,16と増やしていき、平均スコアを比較した。

スクリーンショット 2022-07-23 23 32 25

注目すべきは、zero-shotのCLIPと同程度の精度になるLinear Probe CLIPは、各クラス4サンプル以上必要ということがわかる。更に、次点でスコアの高いBiT-Mの場合、16-shotで同等の性能になることがわかる。このことから、few-shotでのチューニングよりも、zero-shot CLIPの方が平均して高いスコア を出せる。

zero shotと同程度の精度になるデータ数

zero-shot CLIPと同等の精度を出すのに必要な各クラスのサンプル数を、データセット毎に調べた。ここでは厳密に精度を比較して必要なサンプル数を求めるのではなく、1,2,4,8,16,全データ、で精度を計算し、それを対数線形補間することで求めている。 スクリーンショット 2022-07-23 23 32 35

グラフにも書いてあるとおり、平均20.8、中央地5.4となっている。一方で、EuroSATとFlowers102データセットでは、1サンプルでもzero-shot CLIPよりも高い精度を実現できるものもある。

更に、全データを用いたlinear probeとzero shot CLIPでの比較と、相関を取った図が以下になる。

スクリーンショット 2022-07-23 23 32 43

破線の$y = x$線は、全データで学習したLinear Probeと同等の性能を持つ最適なzero-shot分類機を表す。全データを用いたLinear Probe CLIPと比較すると、10~25%程度zero-shot CLIPの方が精度が悪化することがわかる。

課題

CLIPはzero-shotでも比較的高いパフォーマンスを発揮できている。しかし、以下の課題がある。

読んだ所感

まとめきれなかった内容

以下の内容は割愛したため、必要があれば追加でのまとめを行いたい。

参考文献・読んだ記事