李沐多模態串講影片總結 ALBEF VLMo BLIP CoCa BEITv3 模型簡要介紹

bringlu發表於2023-03-19

開場

image-20230317213323041

  • 多模態串講的上篇是比較傳統的多模態任務

  • 多模態最後的模態互動很重要

  • 傳統的缺點是都用了預訓練的目標檢測器,訓練和部署都很困難。

  • ViLT 把預訓練的目標檢測器換成了一層的 Patch Embedding。

    • 因此容易比不過 c 類的方法
  • ViLT 訓練很慢

  • 認為未來是 c 類的模型結構

  • Loss:

    • b 類(CLIP)僅用對比學習的 loss(Image Text Contrastive),比較簡單。
    • c 類由於有目標檢測,因此提了 Word Patch Alignment
    • ViLT 中發現 WPA Loss 非常慢
    • MLM 的 Loss
    • Image Text Matching 效果也很好
    • 認為目標函式應該是 ITC + ITM + MLM 的合體

回顧 CLIP

  • 雙塔模型
  • 讓已有的(影像,文字)對在空間上更近,不是一個對的空間上更遠。
  • 最後僅做了點乘。
  • 缺陷:
    • VQA 等任務不太好

ALBEF

論文:Align before Fuse: Vision and Language Representation Learning with Momentum Distillation

亮點:

  • 影像部分 12 層 transformer encoder
  • 文字部分前 6 層文字編碼器,後 6 層做多模態融合的編碼器。
  • 沒有目標檢測模型
  • 使用了 Image Text Contrastive loss
  • 自訓練,用偽標籤標上網上爬下來的有噪資料。 偽標籤(pseudo-target)由一個 momentum model 提供。
    • 原因在於搜尋引擎爬下來的(影像,文字)對,非常高噪。文字被稱作 Alt text,並沒有很好地描述影像,而是提供了搜尋引擎需要便於檢索的關鍵詞。
  • 互資訊最大化的方式:文章裡所提到的目標函式是為了同一個影像文字對提供不同的視角。變相的資料增強。
  • 速度很快:4e6 的資料 8 卡機訓練 3、4 天可以跑出來(這也很久了)

作者來自 SalesForce,有一系列多模態工作,很厲害。

文章提到:由於大多數方法使用 transformer 的多模態編碼器來同時編碼視覺和文字特徵,由於目標檢測器是提前訓練好的,因此視覺和文字特徵並不是對齊的。由於沒經過端到端的訓練,因此可能這兩個特徵有很遠的距離。

image-20230317221007126

模型

image Embedding 部分

  • 使用了標準的 ViT 模型
  • 預訓練引數用了 DEiT。

文字部分

  • 只用前 6 層做文字編碼

Loss 函式

  • ITC loss
    • image-20230318095648139
    • 文字和圖片的 [CLS] token 經過 encoder 後,被當作文字的全域性特徵,然後丟盡 ITC loss 裡作比較。
      • 所以這裡有個問題:圖片是怎麼加上 [CLS] token 的?
        • ViT 中將圖片分成若干個 patch,然後把 patch 作為 token,然後直接加上 [CLS] token 後,再進行 embedding 等操作。
    • 這裡是將文字轉化成的圖片與 ground-truth 做交叉熵,反之亦然。
    • 但是這樣就沒辦法得到中間狀態了?
  • ITM Loss
    • 給定圖片和文字,然後經過 ALBEF 的模型後,得到特徵,再過一個FC層,以此做二分類,判斷是否為一對。
    • 但是判斷正樣本有點難,但是判斷負樣本很容易,因此準確度會上升得很快。
    • 為解決上面的問題,這裡透過某種方式選擇最接近正樣本的負樣本。
      • hard negatives :ITM 利用 ITC 把同一 batch 中圖片和所有文字都算一遍餘弦相似度。 利用最相似的做負樣本。
  • Masked Language Modeling
    • mask 掉一些文字,然後將 mask 過後的句子和圖片一起透過 ALBEF 模型,最後把之前完整的句子預測出來。
    • 輸入與前兩個 Loss 不同是 \((I, T_{mask})\),說明模型用了兩次 forward() 函式。

然後三者簡單加和即可。

Momentum Distillation(動量蒸餾)

  • 原因
    • noisy web data
      • ITC:可能文字已經描述得很好了,但是由於 data noisy,導致了其為負樣本。
      • MLM:有時候可能比填 ground-truth 更好的文字。
  • self-training
  • 具體模型構建:在已有模型之上做 exponential-moving-average
    • 目的:跟 one-hot 儘可能接近之外,讓它跟動量模型出來的 pseudo-targets 儘可能 match。
  • 對原 Loss 的改進,都對兩者加入了動量蒸餾後的向量:
    • ITC:見式 6.
    • MLM:式 7.

實驗

預訓練

四個資料集:

  1. Conceptual Captions
  2. SBU Captions
  3. COCO:圖片對多文字
  4. Visual Genome:圖片對多文字

第五個資料集更 noisy,但是數量也更大, 對效能也有提升。

下游任務

  • Image-Text Retrieval
  • Visual Entailment
  • VQA
  • Visual Reasoning
  • Visual Grounding

消融實驗

  • 去掉 ITC 掉的多 。
  • hard negative 其二。
  • Momentum Distillation 提升反而沒有那麼大,但是是很有趣的研究方向。

VLMo

題目:VLMo: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts

微軟的組發的

亮點:

  • 模型結構上的改進 Mixture-of-Modality-Experts
  • 訓練方式改進:分階段模型預訓練

作者認為前人缺點

  • CLIP、ALIGN:
    • 雙塔結構(比較大的文字模型和圖片模型),最後只做了一個餘弦相似度,餘弦過於簡單。
  • 單塔結構(即有一個比較大的模態融合模型)
    • 分類任務上 superior performance
    • 檢索任務資料集大的時候,推理時間會非常慢

因此作者融合前兩者。簡單地說,自注意力中所有的模態都是共享的,但是在 FC 層中,每個模態會對應自己不同的 Expert。訓練時,哪個模態的資料來了就訓練對應模態的 Expert。

訓練 Loss 函式同樣是 ITC、ITM、MLM。

多模態資料集可能不夠,因此採用了單模態的其他資料,分階段訓練。

  • 把 vision expert 在 vision 資料集上訓練
  • 把 language expert 在語言資料集上訓練
  • 再在多模態資料集上訓練

模型

image-20230318112827988

模型亮點

  • MoME Transformer
    • 前面的多頭注意力層共享引數
    • Switching Modality Expert:每個模態一個 FFN 層,不共享引數
  • 靈活
  • 在不同的下游任務上可以採用不同的結構以及相同的引數

Loss

  • ITC
  • ITM
  • MLM

實驗

訓練過程

image-20230318113934337

  • 自注意力在視覺上訓練了,然後會在文字部分凍住。
    • 反過來反而沒那麼有效。
  • 最後一步全部解凍

結果

資料集:

VQA、NLVR2

簡要結果

比 ALBEF 全線更強

一些未來的工作已被驗證

  1. 更大模型 —— BeiTv3
  2. vision-language generation ——VL-BeiT
  3. 單模態可以幫助多模態,多模態也可以幫助單模態——BeiTv3
  4. 更多模態,如影片等——MetaLM

BLIP

論文:BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding Generation

基於 Transformer Encoder Decoder 的工作

作者來自 Salesforce

亮點:

  • Bootstrap:從資料集角度出發的
    • 先用嘈雜資料訓練模型,再用比較乾淨的資料訓練模型
  • Unified:
    • 統一了影像-語言的理解與生成任務

引言

  • 模型:以前的模型一般是 encoder 或者 encoder-decoder
    • 但是 only-encoder 模型沒法應用到生成任務中
    • encoder-docoder 模型,由於沒有統一框架,也不能做 VL retrieval 的任務
  • 資料:
    • 以前的模型都是在大規模的 noisy 資料訓練
    • 因此本文要更好地 clean 資料
      • Captioner:利用 Captioner 生成圖片相應文字
      • Filter:利用 Filter 篩掉不匹配的 VL 對
  • 因此結合了 ALBEF 和 VLMo,做出BLIP

方法

image-20230318162310056

模型

  • 圖片部分
    • 標準 ViT
  • 剩下部分有三個模型,分別算三個不同的目標函式
    • 第一個模型:Text Encoder 做分類任務
      • 得到文字特徵與圖片特徵做 ITC
    • 第二個模型:Image-grounded Text encoder
      • 多模態編碼器
      • 藉助影像資訊
      • ITM Loss
    • 第三個模型 Image-grounded Text decoder
      • 用於做生成任務
      • 不能看到完整的句子
      • 類似GPT,從前面推測後面的句子
      • 第一層是 Causal Self-att,因果關係的自注意力
      • LM Loss
  • 共享引數
    • 同樣顏色代表同樣的引數
  • 訓練很費時間,原因要做四個 forward()

Captioner 和 Filter

image-20230318165749845

可以認為爬下來的資料有很大機率不匹配(如 CC12M),但是手工標註的資料很可能匹配(如COCO)

  • Filter
    • 利用 ITC&ITM 的模型在 COCO 上 finetune。然後利用該模型篩選
  • Captioner
    • BLIP 效能很強,於是生成的文字有時候比原始文字都好。
    • 利用 LM 後的模型做微調。
  • 有了這兩個模型後,有了相當大的提升

結果

  • 常識性結論:
    • 資料集更高,有所提升
    • 模型變大,有所提升
  • Captioner & FIlter:
  • 用了哪個都會有提升。
  • 用了 Captioner 提升更加顯著
  • 而且完全可以利用這兩個去訓練其他模型

使用例

  1. 有位同學想要利用 Stable Diffusion 做一個生成寶可夢風格的模型,得到了寶可夢的圖片但是沒有描述。
    • 利用 BLIP 生成描述。
  2. LAION COCO 資料集
    • 用一個 BLIP 和 2 個 CLIP 模型不停做 Caption & filter 的過程
      • 用 BLIP 生成 40 個描述
      • 再利用一個 CLIP 排序,選最好的 5 個描述
      • 再用另一個 CLIP(最大的模型) 得到最好的一個。
    • 最後得到了 600 Million 資料集

CoCa

論文標題:CoCa: Contrastive Captioners are Image-Text Foundation Models

作者來自 google

亮點:

  • 兩個 loss
    • contrastive loss
    • caption loss
  • 模型更大
  • 多模態&單模態都取得了非常強勁的效果

方法

模型

image-20230318182802709

  • CoCa 是 ALBEF 的後續工作,一些過程繼承了 ALBEF 的過程,詳細過程如下:
    • 左邊是 Image Encoder,右邊是 Text Decoder
    • 影像的 [CLS] token 和文字的 [CLS] token 做一個 contrastive loss,然後剩下的影像 token 做一下 Attention pooling,然後再傳到 多模態的 Text Decoder 裡做 Cross-Attention ,這樣就把 V&L 的特徵融合到一起了。
    • 最後用了 Captioning Loss
  • 與 ALBEF 的區別
    • 影像的 attention pooling 是可學的,能針對不同任務學到更好特徵。
    • 文字這一端,不論是單文字還是多模態用的都是 Decoder。
      • 採用 Captioning Loss 與 Decoder 結構目的是加快運算速度。
  • 模型引數 2.1B
  • 資料集:
    • GFT 3B 轉化成了多模態資料集
    • 還有一個之前訓練 Align 的資料集

結果

image-20230318185537797

(我所見過最離譜的圖)

BEITv3

論文題目:Image as a Foreign Language: BEIT Pretraining for All Vision and Vision-Language Tasks

作者來自微軟

亮點:

  • 模型要統一
  • 訓練目標函式要統一
  • 資料集大小要統一
  • 獨特的命名
    • images -> Imglish
    • texts -> English
    • image-text pairs -> parallel sentence
  • 目標函式 Masked Modeling loss
  • 模型為之前 VLMo 提出的 MoME,然後這篇論文重新起了名字 Multi-way Transformers
    • 由於模型結構靈活,因此推理時可以拆成許多部分做許多下游任務。
  • 預訓練資料集都是公開資料集
  • 引言寫的很好(如果要研究多模態要去看一下)

這篇論文證明了:

  • 不是目標函式越多越好,要看目標函式是否有互補的特性
  • 資料也不一定越多越好,質量也很關鍵

模型

預訓練

image-20230318195132899

  • VLMo

    微調

image-20230318195258394

結果

image-20230318195611346

總結

image-20230318231740924