2023-11-09 ML勉強会
BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language ModelsAbstract by GPT-4Intoroduction先行研究1. End-to-end Vision-Language Pre-training2. Modular Vision-Language Pre-trainingMethodモデル構造事前学習1事前学習 2事前学習設定実験課題感想
BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models
Junnan Li, Dongxu Li, Silvio Savarese, Steven Hoi, Salesforce Research
ICML 2023
Abstract by GPT-4
- 論文の概要: BLIP-2は、大規模モデルのエンドツーエンドトレーニングのコストが増大している問題に対処するため、事前にトレーニングされた画像エンコーダーと大規模言語モデルを活用した効率的な事前学習戦略を提案しています。この軽量なQuerying Transformerは、モダリティギャップを埋めるために2段階で事前学習されており、様々な視覚言語タスクで最先端のパフォーマンスを実現しています。
- 先行研究にどのようなものがあったか: 近年、視覚言語事前学習(VLP)は大規模なモデルを用いたエンドツーエンドトレーニングにより、計算コストが高くなっている状況が見られます。これらのモデルは、異なるタスクに対して様々なアーキテクチャが提案されていますが、柔軟性に欠け、ユニモーダルな事前学習モデルの利用が困難です。
- 先行研究に比べた優位性: BLIP-2は事前学習されたユニモーダルモデルを凍結させた状態で効果的に利用し、新しい二段階の事前学習戦略であるQuerying Transformerを使用して視覚言語アライメントを実現しています。これにより、既存の手法よりも計算効率が高く、訓練パラメータが少ないにもかかわらず、最先端のパフォーマンスを達成しています。
- 優位性をどのようにして検証したか: BLIP-2は、視覚言語の表現学習と視覚言語の生成学習の2つの段階を用いて、凍結されたモデル間での効果的な情報の橋渡しを行い、そのパフォーマンスを検証しています。たとえば、ゼロショットVQAv2において、Flamingo80Bよりも8.7%高いパフォーマンスを54倍少ない訓練可能パラメータで達成しています。
Intoroduction
- 最先端のVision and Languageモデルは大規模なモデルやデータセットを用いた学習によって、事前学習にコストがかかる
- そこで、言語だけで事前学習されたモデルと画像だけで事前学習されたモデルの統合によってVision and Languageモデルを作ることができるのではないかと自然に考えられる。
- BLIP2ではFig. 1のような構造で、効率的にVisionとLanguageのモダリティギャップを埋める方法を提案した。
- まずはImage EncoderをFreezeさせた上で、いくつかの画像表現をbootstrap的に取得し、Q-Formerの学習を行う
- 次に、FreezeされたLLMモデルを用いてvision-to-languageの学習を行う
- (詳細は後述)
- 先行研究のFlamingoはモダリティギャップを埋めるのには不十分であった。
- BLIP-2の主な利点は以下3つである
- 事前学習したImage EncoderとLLMをQ-Formerと事前学習によって効果的にモダリティギャップを埋めた。VQAやImage captioning, 画像テキスト検索などのさまざまなタスクでSoTAを達成した
- LLMにより、BLIP-2は自然言語の指示に従ったゼロショットで画像からテキストへの生成を行うよう促すことができ、これにより画像に対しての推論や画像に対して会話などを行うことができるようになった
- BLIP-2はFreezeした事前学習モデルと軽量なQ-Formerのみを用いるので、計算効率が優れている。例えば、Flamingoより54倍少ないパラメータでゼロショットVQAv2で8.7%上回る性能を持つ。
例
先行研究
1. End-to-end Vision-Language Pre-training
使用されるダウンストリームタスクによってさまざまなモデルアーキテクチャが提案されている
- Dual-Encoder Architecture
- Fusion-Encoder Architecture
- Encoder-Decoder Architecture
- Unified Transformer Architecture
事前学習タスクも長年にわたって提案されているが最近はいくつかに収束してきた
- image-text contrastive learning
- image-text matching and (masked) language modeling
基本的にこれらの手法は大規模なVision-Languageのペアデータセットを用いてE2Eで学習を行うので、モデルサイズが大きくなると計算コストが非常に大きくなる。
2. Modular Vision-Language Pre-training
BLIP-2に近いのは、公開されてる事前学習モデルを使い、それをVision Language Pre-trainingの間Freezeしている研究
- 初期の研究としては、Object DetectorをFreezeさせて用いた研究がある (UNITER: universal image-text representation learning. In ECCV, 2022)
Architecture
- 最近はCLIPの事前学習にimage encoderをFreezeさせる研究などもある(Lit: Zero-shot transfer with locked-image text tuning. In CVPR, 2022.)
- また、Vision to Textの生成タスクを解くためにLLMからの知識を使用するために、LLMの重みをFreezeさせて用いる手法も存在。 (Multimodal Few-Shot Learning with Frozen Language Models, In NeurIPS, 2021)
Architecture
Multimodal Few-Shot Learning with Frozen Language Models
重みをFreezeしたLLMを用いる上での一番の課題は、
「Vision FeatureをどうやってText空間にアラインメントするか」
- また、Vision to Textの生成タスクを解くためにLLMからの知識を使用するために、LLMの重みをFreezeさせて用いる手法も存在。 (Multimodal Few-Shot Learning with Frozen Language Models, In NeurIPS, 2021) の論文では、Image EncoderをLLMのSoft promptとして利用しており、このImage EncoderをFine Tuningする。
- Flamingoでは、Vision Featureを入れるためにCross Attentionを新しく入れ、更に新しい層を数十億枚の画像-テキストペアで事前学習させる。
Method
- BLIP-2では二つのFreezeさせた事前学習モデルを用いる。
- モダリティギャップを埋めるために以下の二段階に分けて事前学習を行う
- FreezeさせたImage Encoderを用いたVision-Languageの表現学習
- FreezeさせたLLMを用いたVision-to-Languageの生成学習
モデル構造
- モダリティキャップを埋めるための変換器としてQuerying-Transformer (Q-Former)を提案
- 入力画像の解像度に関係なく、画像エンコーダから固定次元の特徴を抽出
- 上の図のようにQ-FormerはSelf-Attention層を共有する二つの変換器サブモジュールから構成される
- Vision Featureと相互作用する画像変換器
- Text EncoderとText Decoderとしても使用することのできるテキスト変換器
- 1の入力として固定長のQuery Embeddingを複数用意する
- Query同士はSelf Attentionで相互作用し、画像ともCross Attentionで相互作用し、さらにはTextとも同じSelf Attentionを通して相互作用する
- 今回の場合は768次元のQuery Embeddingを32個用意した (これをとする)
- Q-FormerはBERT-baseの重みで初期化し、Cross-Attention層はランダムに初期化する
- また、事前学習に対してタスクに応じて異なるSelf-Atttentionマスクを用いる (上図右側)
- 合計188Mパラメータのみ
- はImage Encoderの出力より遥かに小さいが、これがボトルネック構造がテキストに最も関連する視覚情報を抜き出すのに役に立っている (らしい)
- (ViT-L/14の場合は)
事前学習1
目的:Query Embeddingがテキストに対する最も有益な視覚表現を抽出すること
- FreezeしたImage EncoderとQ-Formerを接続し、画像とテキストペアを用いて事前学習をする
- 同時に3つのObjectiveを最適化する
- Image-Text Contrastive Learning (ITC)
- 各Queryの出力とText Encoderの[CLS]トークンの出力のpair-wise distanceを計算し、そのうち最も大きいものをimageとtextの距離とする
- Leakを防ぐためにQueryからTextの情報、TextからQueryの情報が見えないようにMaskをする
- パラメータが少なく、大きいバッチサイズを使えるので、In-Batch negativeで学習させる
- (Batchの中のpositiveじゃないものをnegativeとして学習させること)
- Image-Grounded Text Generation (ITG)
- 入力画像からテキストを生成する
- 生成タスクなので、QueryはQueryの情報しか見ることができず、TextはQueryの情報と一つ前のtokenに関する情報は見ることができるようなMaskを設計 (UniLMと同じ)
- Decodeタスクだよというのを知らせるために[CLS] → [DEC]トークンにこの場合は置き換えるらしい
- ここでは、は視覚情報のみで、Textに関する情報を抽出する必要がある
- Image-Text Matching (ITM)
- 画像テキスト間の細かいアライメントを学習することが目的
- 画像とテキストのペアが一致するかしないかの二値分類をする
- Queryの出力を全て二値分類器に与えて、全Queryの出力の平均をマッチングスコアとする
- この場合は、QueryとTextはお互いの情報を全て見ることができる
- はマルチモーダルな情報を捉えることができる
事前学習 2
目的:LLMのような生成言語能力を画像も考慮した上で獲得する
- Q-Formerは言語情報量の多い視覚表現を得るように事前学習されているため、無関係な視覚情報を除去しながら、最も有用な情報をLLMに供給する構造として有効に働く
- 上のDecoder型と下のEncoder-Decoder型の二つを試した
- FC層:Query Embedding からLLMのText Embeddingへの投射
- なので、今回の場合は32個の埋め込みがまずLLMに入力される
- (この時、Q-Formerは固定してないっぽいが、Catastrophe Forgettingが起きそうで怖い)
事前学習設定
- データセット
- 129Mの画像データ
- COCO
- Visual Genome
- CC3M
- CC12M
- SBU
- LAION400Mから115M画像
- Web画像に対するキャプションはCapFlitという方法で人工的につけた
- BLIP largeモデルを用いて10個のキャプションを生成し、人工的に生成したキャプションと元のWeb画像のキャプションをCLIPで計算した画像とテキストの類似度によって順位づけし、TOP2を訓練データとして採用する
- 事前学習済みImage Encoder
- CLIPで学習されたVit-L/14
- EVA-CLIPで学習されたViT-g/14
- 最終層は除去し、最後から二つ目の層を使った方がほんの少し精度は良かった (らしい)
- 事前学習済みLLM
- Decoder: OPT
- Encoder-Decoder: instruction-trained FlanT5
- 設定
- 1st stage
- 250k step学習
- batch_size: 2320 / 1689 for ViT-L/ViT-g
- 2nd stage
- 80k step学習
- batch_size: 1920 / 1520 for OPT/FlanT5
- 学習中FreezeしたモデルはFP16 or BFloat16に変換
- 32bitに比べてデグレはなかった
- A100(40GB) 16枚で最も大きいモデルでも、1st stageが6日以内、2nd stageが3日以下で済む
- ハイパーパラメータ
- AdamW (β1 = 0.9, β1 = 0.98, weight decay = 0.05)
- lr
- 1st stage: 1e-4
- 2nd stage: 5e-5
- warmup step 2k
- 画像サイズは224x224でRandom crop、horizontal flipのみ
実験
- Zero-shot Vision and Language Task
- 大幅にパラメータを削減しつつ全てにおいて性能を上回ってる
- Instructed Zero-shot Image-to-Text Generation
- 指示を出してテキストを生成する
- Imageから生成したVisual Promptの後にText promptを渡すだけ
例
- Zero-shot VQA
- OPTモデルの場合はというprompt
- FlanT5の場合は というprompt
- 長さにペナルティを与えることで短い答えを推奨しているタスク
- 54分の1のパラメータでありながらFlamingo80Bを8.7%上回る性能を見せている
- OK-VQAだと負けているが、これは視覚理解よりオープンワールドの知識に焦点を当てているから (らしい)
- 大きいImage Encoder + 大きいLLMの方がより良い性能につながることがわかった
- Vision-Language表現学習の効果
- Stage 1の事前学習がないと大幅に精度が下がることがわかっている
- この場合、生成タスクのみを用いてモダリティギャップを埋めなければならない
- (Stage 2は逆にそんなにstepを重ねても伸び代がない)
- Image Captioning
- というpromptを用いてFine tuningを行う
- COCOデータセットで学習
- Zero-shotで、out-domainが特に強い
- Visual Question Answering
- VQAデータに対してLLM部分はFreezeさせたままImage EncoderとQ-FormerをFine-tuningする
- (下の画像だとImage EncoderもFreezeされてるが、文章中では学習すると書かれている)
- open-end型の背性モデルではSoTA
- (OFAとそんなに変わらないけど)
- Image-Text Retrieval
- 検索では生成を伴わないので、1st stageのみで事前学習されたモデルを用いる
- COCOとFlickr30kのデータセットでImage → Textの検索とText → Imageの検索両方を実験
- まずはITCで計算される類似度からk = 128の候補を抽出し、その後にITMのスコアに基づいてRerankを用いる
- 全体的に大幅にSoTAの性能を達成
- ITG損失が重要かのablation studyも
課題
- in-context learningはVQAの性能を上げられなかった
- 原因として、事前学習に1:1の画像テキストペアしか使ってないことが挙げられる
- 今後は複数の画像とテキストのペアを用いたデータセットを作っていく
感想
- 我々の領域でもE2Eで事前学習をしていくのはコストが嵩むのでこういうUni-Modalな事前学習モデルをうまく活用していくのは鍵になってきそう
- 例えば、Image Encoderにhttps://huggingface.co/microsoft/dit-large を使ったらどうなるか?とか
- 低コストとはいえA100 (40GB) x 16が当たり前の世界
- コードレベルの理解をしたい場合は、この辺りを読む
- https://github.com/salesforce/LAVIS/blob/91c8e6863b4b02d7d75167e7d18037ef3a96c54b/lavis/models/blip2_models/blip2_qformer.py#L90-L275
- まずはQuery EmbeddingとText情報をそれぞれ別に同じBERTに入力
- それぞれを線型層に通して正規化し、, を得る
- ITC
- コサイン類似度を計算して、Maxをとったものを, として取得
- 同じbatchの位置にいたものを正例、その他を負例として学習
- ITM
- https://github.com/salesforce/LAVIS/blob/91c8e6863b4b02d7d75167e7d18037ef3a96c54b/lavis/models/blip2_models/blip2_qformer.py#L230C1-L238C1
- この辺りで全部をconcatしたinputで再度BERTに入力している
- Query部分の出力のみを取り出して二値分類器に入れ、そのlogitsを平均
- ITG
- BERTではなく、maskを変えてにそのまま入力
- Qformerの実体は
- query_embeddsという引数が元々のbertにはないがどこから取ってる?(多分inputs_embeddsと同義だが)
Q-Formerの説明
- ここまで読んだあなたはTuringさんのVideoBLIPの記事もシュッと読めるはず
- https://zenn.dev/turing_motors/articles/ce20c5202e107e
- この場合は2nd stageだけを学習しなおしてるだけっぽい?