CLIP:言語と画像のマルチモーダル基盤モデル

「基盤モデル×Robotics」 Advent Calendar 2022 2日目

この記事は 基盤モデル×Robotics Advent Calendar 2022 2日目の記事です

はじめに

みなさんこんばんは1. 松尾研究室博士課程3年の松嶋達也です.TRAILに関するあれこれをやっています.

今日の記事では,基盤モデルをロボットに活用した研究で幅広く使われているCLIPに関して紹介します.

目次

CLIPとは

CLIPは,2021年2月にOpenAIによって公開された,言語と画像のマルチモーダルモデルです.

インターネットから集めた画像とテキストの40億ペアからなるデータセットからモデルを学習することで,多くの下流タスクに対するゼロショット性能を高めることが可能になりました.

学習時の言語情報に生のテキストを利用しているため,事前学習モデルとして柔軟な応用が可能です. 例えば,多くの画像認識モデルではあらかじめ決められたクラスを予測するように学習されていますが2,CLIPでは入力するテキストを工夫することであとから問題に合わせた分類器を作れます.

実装や学習済みモデルもGithubで公開されているので,簡単に試せます.

CLIPはロボティクスに限らず,画像とテキストを両方扱うさまざまな領域で活用されているため,英語・日本語含めさまざまな解説資料があります. 例えば,DL輪読会の小林範久さんによる資料が参考になると思います.

[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision from Deep Learning JP

モデルの概要

CLIPの事前学習

CLIPの基本的なアイデアは,言語情報(テキスト)とペアになっている画像の対照学習によって,よい言語と画像の表現(embedding)を学習する点にあります(図1).

CLIPの事前学習(出典:[OpenAIのブログ](https://openai.com/blog/clip/))
CLIPの事前学習(出典:OpenAIのブログ

このアイデア自体はどのようなモデル同士の組み合わせでも実現できるはずですが,CLIPのテキストのエンコーダには,transformerを利用しています. また,画像のエンコーダにはResNetをベースのモデル,Vision Transformer (ViT) を提案モデルとして利用して比較しています(著者実装では,ResNet版もViT版も両方学習済みモデルが利用可能です).

学習時には,図2のように,テキストと画像のペアのミニバッチを作成し,テキストと画像のそれぞれの表現に関して,コサイン類似度を計算し3,正しいペアに関しては大きくなるように,間違ったペアに関しては小さくなるように学習されていきます.

対照学習の疑似コード(出典:[CLIPの元論文](https://arxiv.org/abs/2103.00020)のFigure 3)
対照学習の疑似コード(出典:CLIPの元論文のFigure 3)

CLIPの活用

上記のように事前学習されたCLIPは,画像とテキストが対応するような表現(共有表現)が学習されていると考えられます. このモデルを画像分類に活用する場合を考えてみましょう(図2).

飛行機(plane),自動車(car),…の分類器を作る場合は,まずそれぞれの画像を説明するテキスト(a photo of plane, a photo of car, …)のembeddingを作成します(図2上部).

そして,分類したい画像を画像のエンコーダに入力した際のembeddingと,それぞれのテキストとのコサイン類似度を計算し,最大になるクラスを選択することで,分類ができます(図2下部).

このようにして,対象となるdownstreamの分類タスクに関するデータセットを集めてfine-tuningすることなしに,zero-shotで目的のデータセットに関する分類器を(理想的には)構成できます4

CLIPを用いて画像分類機を作成する例(出典:[OpenAIのブログ](https://openai.com/blog/clip/))
CLIPを用いて画像分類機を作成する例(出典:OpenAIのブログ

Prompt Engineering

個人的にCLIPがなかなか良いと思っているのは,一回作った分類器の出力結果を見て,失敗しているケースに関する分析をもとに,テキストの方を変更することでモデルの再学習なしに分類結果を変更できるところです.

分類したい対象に関する事前知識がある場合,それをテキストの情報に追加することで分類器に導入可能です. 論文では,ペットに関する分類器を作る場合は,“a photo of a {label}, a type of pet”,衛星画像の分類では,“a satelite photo of a {label}“として性能を向上させる例が紹介されています.

クラスに関する説明を工夫し,それをアンサンブルすることで性能向上が見られる(36種類のデータセットでの比較.出典:[CLIPの元論文](https://arxiv.org/abs/2103.00020)のFigure 4)
クラスに関する説明を工夫し,それをアンサンブルすることで性能向上が見られる(36種類のデータセットでの比較.出典:CLIPの元論文のFigure 4)

CLIPの利用例

言語から画像の生成

CLIPは画像生成で話題になったDALL-Eでも活用されています(CLIPとDALL-Eは同じタイミングでarXivで公開されています).

本記事の本筋から外れてしまうため今回は詳細な説明はしませんが5,DALL-Eでは,CLIPは生成された画像のリランキングに用いられています.

DALL-Eで生成されたアボカド型の椅子(出典:[OpenAiのブログ](https://openai.com/blog/dall-e/))
DALL-Eで生成されたアボカド型の椅子(出典:OpenAiのブログ

その後,2022年4月に公開されたDALL-E2では,CLIPとdiffusion modelベースの画像生成モデルであるGLIDEを組み合わせて画像生成を行なっています.DALL-E2では,CLIPで得られたテキストのembeddingは,画像生成のpriorとして用いられ,priorモデルの出力がdecodeされます.

DALL-E2ではCLIPの表現は画像生成のpriorに用いられる(点線下.出典:[CLIPの元論文](https://arxiv.org/abs/2204.06125)のFigure 2)
DALL-E2ではCLIPの表現は画像生成のpriorに用いられる(点線下.出典:CLIPの元論文のFigure 2)

これもDL輪読会で紹介されていたのでスライドを差し込んでおきます.

【DL輪読会】Hierarchical Text-Conditional Image Generation with CLIP Latents from Deep Learning JP

ロボティクスでの利用例

WRSにおける物体認識への応用

まず,手前味噌で申し訳ないですが,我々の使用事例を紹介します.

我々のグループでは,2021年9月に行われたWRSでは物体認識モジュールにCLIPを利用しました.

モデルの再学習をせずとも,クラスに関する言語情報を変更するだけで簡単に分類結果をチューニングできる(prompt engineering)性質は,その場での対応が重要になる競技会などの場面で適した性質だと感じました.

一方で,経験上の話ですが,CLIP自体が大規模なデータセットからの学習をしているからか,ロボットから撮影した画像で光の当たり方が変わったりすると出力(分類)結果が安定しないように感じられました. これに関しては,少量の学習データを用意して,data augmentationした上で最終層に追加したMLPをfine-tuningするだけでもだいぶ改善しました(余力があればこのあたりの検証をまたブログでしてみたいと思います).

イチゴと桃を混同してしまっていたので,イチゴの説明を"a photo of a red strawberry with green stem, a type of fruit"に変更することで分類結果を改善
イチゴと桃を混同してしまっていたので,イチゴの説明を"a photo of a red strawberry with green stem, a type of fruit"に変更することで分類結果を改善
画像分類では色に結果が影響されることが多いが,プロンプトを加えることによってちゃんとテクスチャを反映してくれるようになった(それぞれ,"a photo of a red apple, a type of fruit","a photo of a lego","a photo of a colored wood blocks")
画像分類では色に結果が影響されることが多いが,プロンプトを加えることによってちゃんとテクスチャを反映してくれるようになった(それぞれ,"a photo of a red apple, a type of fruit","a photo of a lego","a photo of a colored wood blocks")

この事例の詳細は,先日,英文誌Advanced Roboticsで公開された論文で紹介していますので,ご興味があればぜひ読んでみてください(プレプリント版はarXivで読めます).

セマンティックマッピング・ナビゲーションへの利用

最近のロボットでのCLIPの利用を探していくと,言語指示とロボットのカメラから得られた画像を対応させるために利用されることが多いように感じます. とくに,マッピングに利用したり,言語で指示された場所(ランドマーク)に移動するために使われている例を見かけます.

LM-Nav

LM-Navは,移動ロボットにCLIPを用いた研究です. 移動ロボットのカメラから得られた視覚情報を,言語指示からパースされたランドマークと対応させるためにCLIPを利用しています(図9のVLM:Vision-Language Modelの部分).

LM-Navの概要.言語指示からパースされたランドマークとカメラ画像の対応をとるためにCLIPを利用している(出典:[LM-Navの元論文](https://arxiv.org/abs/2207.04429)のFigure 3)
LM-Navの概要.言語指示からパースされたランドマークとカメラ画像の対応をとるためにCLIPを利用している(出典:LM-Navの元論文のFigure 3)

著者によるわかりやすい論文解説があったので埋め込んでおきます.

CLIP-Fields

CLIP-Fieldsは,移動ロボットによるセマンティックマッピングに,CLIPによるセマンティックな表現と,NeRFのようなimplicitなシーン表現を組み合わせた表現を利用しています. 詳細はおそらく,このアドベントカレンダーの5日目に池田悠也さんが紹介してくれると思います(予定).

CLIP-Fieldsの概要.指示(query)とマップに記録されたセマンティックな情報を対応させてタスクをこなす(出典:[CLIP-Fieldsの元論文](https://arxiv.org/abs/2210.05663)のFigure 1)
CLIP-Fieldsの概要.指示(query)とマップに記録されたセマンティックな情報を対応させてタスクをこなす(出典:CLIP-Fieldsの元論文のFigure 1)

まとめ

家庭内で生活支援を行うロボットなどを考えるとき,多様な環境やタスクに適応してほしいという気持ちが芽生えます. その場合,ロボットのタスクをいかに設定するかが問題になるのですが,人間がロボットにやってほしいことを伝える上で最も簡単な方法の一つが,言語で伝えるという方法ではないでしょうか6. その中で,CLIPは言語情報と画像の両方を扱える柔軟なモデルとして,ロボットの領域でも重宝されている印象を受けます.

これまで,普段からブログを書くことはあんまりなかったので,いざ書いてみると難しいですね.今後,TRAILでは日々の活動に関してブログでの発信に力を入れてゆく予定ですので,活動を暖かく見守っていただけるとありがたいです.


  1. 12/2の夜にこの記事を更新しています.ギリギリでごめんなさい!自戒のために我らが指導教官である松尾先生の名著を貼っておきます.絶賛真夜中の懺悔大会中. ↩︎

  2. 例えば,ResNetをCIFAR10で学習すると,0:飛行機,1:自動車…といったクラスラベルを予測するような分類器が得られます.得られた分類器を他のデータの分類(例えば,0:ピザ,1:寿司…)に利用しようとすると,後者のデータセットを用いてfine-tuningが必要になります. ↩︎

  3. 図2の擬似コードでは,ノルムが1になるように正規化しているので,内積を計算すればコサイン類似度と一致します. ↩︎

  4. もちろんfine-tuningすることも可能です. ↩︎

  5. DALL-Eの論文 https://arxiv.org/abs/2102.12092 ↩︎

  6. 実際に,家庭内のサービスロボットの競技会であるRoboCup@Homeのタスクの多くは,人間がロボットに対してやってほしいことを発話して伝えることで進行していきます. ↩︎

松嶋 達也
松嶋 達也
特任研究員

人間と共生できるような適応的なロボットの開発と,そのようなロボットを作ることにより生命性や知能を構成的に理解することに興味があります.