Vision and Language（特にImage to Text）に関する事前学習モデルの最近の研究（2021.6~2023.1）をいくつかまとめてみた

# はじめに

最近Vision and Language、とくにImage to Textに興味がでてきたので、いくつか重要そうな研究の情報収集をしました。

本記事で紹介する内容はあくまでImage to Textに関する事前学習モデルやそれに関連する研究のアーキテクチャー中心であり、その研究における評価（精度とか応用）とかの話には全然触れることができていませんし、数式的なものも何もでてきません。なんかもう雰囲気だけです。

紹介する研究の全てではないですが、できるだけhuggingfaceのmodel hub（以降、model hub）にパラメータが公開されているものを中心に選んでいます。model hubで公開されている研究については、タイトルに「🤗」をつけてます。
(先行研究の調べ方として、そもそもmodel hubでimage-to-textやVQAで絞り込んだ上でよくダウンロードされている研究を優先的に調べました。)

今回紹介する研究は2019年9月のUNITERから2023年1月のBLIP-2の間の研究を紹介しています。
もっとこんな重要な研究もあるから見ておいたほうがよい、というものがありましたら、ぜひともコメント等でご教示いただけるとうれしいです。

### 参考
- [事前学習言語モデルを用いたVision & Languageの動向](https://speakerdeck.com/kyoun/a-survey-of-pre-trained-language-models-for-vision-and-language)
- [NLPとVision-and-Languageの基礎・最新動向 (2)](https://speakerdeck.com/kyoun/deim-tutorial-part-2-vision-and-language)
- [Vision and Languageと分野を取り巻く深層学習手法の紹介](https://speakerdeck.com/sei88888/vision-and-languagetofen-ye-woqu-rijuan-kushen-ceng-xue-xi-shou-fa-falseshao-jie)
- [A Dive into Vision-Language Models](https://huggingface.co/blog/vision_language_pretraining)


## ざっくりとしたここ数年のVision and Languageの流れ
- ViTが登場する前は画像側が物体検出を用いる複雑なアーキテクチャーが主流だった
- ViT登場により、画像はパッチトークンベースで扱われるようになり、物体検出の縛りが消えて、大規模化が加速
- CLIPが登場してからはImage EncoderはCLIPをベースとした事前学習モデルが用いられがちだし、事前学習タスクにはよく対照学習が用いられる

![スクリーンショット 2023-04-17 23.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/3228a895-31fe-db11-1148-43ade66f36c7.png)


# UNITER: UNiversal Image-TExt Representation Learning
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/4deaa09e-c4a9-e228-3d8f-69ed75586680.png)

- microsoft 2019.9
- 論文 : https://arxiv.org/abs/1909.11740
- ImageはFaster R-CNNと7次元の位置情報(x1, y1, x2, y2, w, h, w*h)を抽出
- TextはBERTと同じくWordPiece+PE
- MRM: MASKした画像ベクトルをFC層に入力して、MASKされた元画像のFaster R-CNNによって検出されるオブジェクトクラスの分類タスク？
- imageとtextを両方MASKすることはしない
- ITM: CLSトークンから入力画像とテキストが一致するかの2値分類
- WRA: UNITER独自の損失関数、OT(Optimal Transport)を使って画像矩形トークンと単語トークン間の分布を最小化する

# 🤗 ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/535d3e08-d260-fc92-9ebb-ec7acf83248f.png)

- NAVER AI Lab 2021.6
- 論文 : https://arxiv.org/abs/2102.03334
- model hub : https://huggingface.co/dandelin/vilt-b32-finetuned-vqa
- 当時はImage EncoderにCNNやobject detectionの特徴量とかを使ってたけど、Transformerに置き換えて学習効率や表現力を向上させた
- CLIPとかと違って下流タスクもしっかり性能が出て、処理速度が最大60倍向上
- Image Text Matching: 1/2の確率で別画像に差し替える
- MLMはwhole word masking
- WPAはUNITERのWRAの画像パッチバージョン

# SimVLM: Simple Visual Language Model Pretraining with Weak Supervision
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/1bee3b26-a3c9-dbed-7c18-afdc2dcbd62f.png)

- Googleなど　2021.8
- 論文 : https://arxiv.org/abs/2108.10904
- CLIPはzero-shotすごいけど、VLの下流タスクでFineTuningすると性能が微妙だったりする。
- SimVLMは事前学習→FineTuningとしてVLの様々なタスクで機能し、zero-shotもできる
- GPTのような自己回帰的にテキスト生成を行いつつもBERTのような双方性をもったPrefix Language Modeling(PrefixLM)で事前学習
- モーダルを区別するembeddingは入れてない（改善しなかった）
- 直感的には、画像はWeb文書内のテキストの前に現れることが多いため、テキストの記述の接頭辞と考えることができる
- prefixの区切りはランダムに選択される
- 18億の画像テキストペア(ALIGNデータセット)とテキストのみのC4、合計800GBのデータで学習

# Unified Contrastive Learning in Image-Text-Label Space
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/3d05493e-fa51-13e5-0444-fa4c30b458e7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/7f7393ae-acb2-6399-bba0-74e7111a7607.png)


- microsoft 2022.4
- 論文: https://arxiv.org/abs/2204.03610
- 教師ありラベルのついた画像と画像-テキストのペアデータをシームレスに扱い、教師あり学習の利点(識別能力)とCLIPなどの利点(広範は視覚的概念)を1つのモデルで表現する
- 教師ラベルは A photo of Chihuahua. のようにCLIPのzero-shotでやるpromptみたいにテキストに変換
- 対照学習するときはラベル空間が同一のものは正例とみなし、それ以外は負例とみなして学習
- promptテンプレートを予め用意し、epoch枚にランダムにテンプレートを選定している？


# Florence: A New Foundation Model for Computer Vision
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/e63cfbc7-852b-bcb8-ac52-eeb23f4612c1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/286a81ab-a24d-bda1-4788-68065239499a.png)

- microsoft 2021.11
- 論文 : https://arxiv.org/abs/2111.11432
- Computer Visionにおける基礎モデルを構築
- CVにおける「基礎」的なタスクを空間-時間-モダリティの３軸で定義
- 「基礎」モデルは、これらの視覚タスクを解決するための事前学習済みモデルとそのアダプタとして、 ゼロ/数ショット学習や完全微調整などの伝達性を持つように再定義されることが望ましい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/b022ef35-a13c-d04b-10c0-b5bc30cdc566.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/93721057-00a9-6635-c97c-4711098ffac0.png)

- 物体検出タスクに用いる場合は、CoSwinにDynamic Head Adapter(Dai et al 2021b)を追加
- VQAや画像キャプション生成などのタスクに用いる場合、METER(Dou et al 2021)のImage EncoderをCoSwinに置き換え、RoBERTaとCo-Attentionする
    - image-text matching loss（CLIP？）とMLMでモデルを学習した後、VQAなどのタスクでFine Tuningする（どゆこと？）

# 🤗 GIT: A Generative Image-to-text Transformer for Vision and Language

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/db9093b1-5b47-52df-8d87-359fe004ba53.png)

- microsoft 2022.5
- 論文 : https://arxiv.org/abs/2205.14100
- model hub : https://huggingface.co/microsoft/git-base
- これまでのimage to textのように複雑なアーキを必要としない
- Image Encoder、Text Decoderが1つずつあるだけ
- タスクも言語モデリング（自己回帰）だけでImage Encoder, Text Decoderを学習
- 0.8億ペアの画像-テキストのペアデータで事前学習
- 動画のタスクでもSOTA出た
- Image EncoderはUniCL (Unifield Contrastive Learning)によって学習されたFlorenceのImage Encoderを使用
- Image to TextにおけるImage Encoderは画像単体による事前学習モデルを初期パラとして使うより、Vision and Languageで対照学習されたImage Encoderを使うと良い、という先行研究に従ってる様子
- Text Decoderはランダムに初期化（BERTとかのPLMのパラメータを使ってるわけではない）
- BERTのパラメータはvisionのことなんも理解してないから、最初からvisionありきで学習しても変わらん結果になるらしい（むしろ悪化する）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/dcf96a19-9abb-7208-1ebf-8656d02b1c42.png)

- Text DecoderのAttentionの計算はimage tokenは双方向に、text tokenは各image tokenとこれまで生成したtext tokenのみにAttentionするように計算（Text部分は通常のMasked Multi-head Attentionと同様）
- 画像特徴量をCross Attentionするアーキも考えられるが、データ量が大規模の場合、Cross AttentionでEncoder-Decoder構築するよりも右図のようなアーキのほうが良い。少ないデータのときはCross Attentionのほうが有効
- データ量が多ければText Decoder側で画像とテキストがうまい具合に計算されるらしい
- Cross Attentionのデメリットは画像token同士のAttentionが行えない点が挙げられる


# 🤗 BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/25f40f9c-2653-dc70-1598-64c8b0bf7251.png)

- salesforce 2022.1
- 論文 : https://arxiv.org/abs/2201.12086
- model hub : https://huggingface.co/Salesforce/blip-image-captioning-base
- VLの課題：CLIPのようなEncoderベースはテキスト生成、SimVLMのようなEncDecは検索への応用
- BLIPの特徴は以下の2つ
    - MED(Multimodal mixture of Encoder-Decoder): 3つのVL事前学習タスクを行うUnimodal、Multimodalの混合アーキテクチャー
    - CapFilt(Captioning and Filtering): ノイズの多いウェブ画像から合成キャプションを生成するモジュールと元のウェブテキストと合成テキストの両方からノイズの多いキャプションを除去するフィルタモジュール
- Image Encoder: Vit, Text Encoder: BERT（BERTは1つで3回forwardする）
- ITC: Image-Text Contrastive Loss, ITM: Image-Text Matching Loss, LM: Language Modeling Loss
- 各タスクに固有の特殊トークン、[CLS], [Encode], [Decode]がBERTの先頭に挿入される
- MLMは使ってない（LMのほうが視覚情報をコヒーレントなキャプションに変換する汎化能力が持てる）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/3a08ab44-50de-59f9-7cad-067e332ab057.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/51541c64-9efd-8605-6c59-da8de2ac98d4.png)

- これまで：Web上のデータはノイズ多い→データ増やせばOK
- BLIP：ノイズがあるとVLにとってよくない、CapFiltでブートストラップしたほうがいい
- Webデータ込でMEDを事前学習→ COCOを使って各タスクでFineTuning→ Web画像-テキストペアとWeb画像から生成されたキャプションのペアそれぞれをITMでマッチするか確認→ マッチした画像-テキストペアをDに加えてもう一回事前学習
- 同じ元画像に対して、生成キャプションだけ受け入れられることもある

# 🤗 Perceiver: General Perception with Iterative Attention <br> Perceiver IO: A General Architecture for Structured Inputs & Outputs 

Perceiver
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/7c2e6df9-66c4-4b3e-b88b-eaff9dbca22a.png)

Perceiver IO
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/c5007eed-3cad-86a4-1492-7eadf81f66c2.png)

- DeepMind 2021.3 and 2021.7
- 論文
    - Perceiver: https://arxiv.org/abs/2103.03206
    - Perceiver IO: https://arxiv.org/abs/2107.14795
- DeepMindのmodel hub : https://huggingface.co/deepmind
- データドメインに依存しない
- データの入力系列(M)よりも小さい潜在ベクトル(N)でCross AttentionすることでO(M2)をO(MN)に減らすことで系列長が大きいデータにも対応できる

# Flamingo: a Visual Language Model for Few-Shot Learning
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/e764a832-7846-cf1a-0e70-f10b6a7416df.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/3b40b57f-1df9-c76b-1679-f9ff1acc9432.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/f91ed11e-c2a3-cde0-60a0-4fefbf59d25f.png)

- DeepMind 2022.4
- 論文 : https://arxiv.org/abs/2204.14198
- Perciever Resampler: 凍結言語モデルとのCross Attentionの計算量を減らすために、凍結視覚モデルの特徴量から固定数の特徴量を選択している（64個？）
- Gated xAttn-Dense: ゲート付のCross Attention層。ゲートにはtanh(α)を使う。αの初期値は0（i.e. 最初はLMそのもの）で学習可能パラメータ
- VisionEncoderはNFNet-F6（435M）
- LMにはChinchilla（70B, DeepMindが作ったGPT-3よりも良い言語モデルらしい）を使用
- VLタスクfew shotでSOTA


# 🤗 BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/51c9ef04-fcef-d21f-20e1-970db1a2a125.png)

- salesforce 2023.1
- 論文 : https://arxiv.org/abs/2301.12597
- model hub : https://huggingface.co/Salesforce/blip2-flan-t5-xxl
- 凍結事前学習済画像エンコーダーと凍結大規模言語モデルをQuery Transformerでモダリティーギャップを2段階アプローチで埋める
- Q-Former自体はパラメータ少ない（2億弱）ので計算効率よし
- VLの事前学習時も凍結し続けることでunimodalの忘却を防ぐ
- よいVLモデルを作るには高度なunimodalモデルを構築することが重要になってくる、ということでしょうか。
- Q-Formerの考え方はFlamingoのPerceiver Resamplerに似ている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/5cafe031-bd26-d36d-57be-3044a4e6b08b.png)

**1段階目**
- 論文中ではrepresentation learningとか言われている。Flamingoにはない学習ステージ
- ImageEncoderはViT（base or large）
- Q-FormerはBERT-baseで初期化、Self-Attention層はqueryとtextは同じ(多分右図)
- Learned Queriesは768次元で32個で実験
- BLIPと同様に3つのタスク（ITA、ITC、LM）で事前学習
- タスクに応じてself attention層のattention maskを変える
- Queryの出力は768×32で、これは凍結画像Encoderの出力よりもはるかに小さい
- Queryにはテキストに最も関連する視覚情報が抽出されている（VLのために必要な画像特徴量がうまいこと蒸留されてる感じ？）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240999/c999f01c-57ae-a81a-375e-3a3fb6c1f2f1.png)

**2段階目**
- LLMとしてOPT(Decoderモデル)、FranT5(EncDecモデル)の2パターンを検証
- FC層でQueryの次元数をLLMの次元数に射影する
- Queryの役割は画像特徴のソフトなプロンプトの役割なっている、つまりQ-Formerは言語情報量の多い視覚表現を抽出するように学習されているため、無関係な視覚情報を取り除きながら、最も有用な情報をLLMに与える役割になっている。


# おわりに

個人的にBLIP-2のアーキテクチャー（特にQ-Formerのような考え方）にとても感動しました。