開場
-
多模態串講的上篇是比較傳統的多模態任務
-
多模態最後的模態互動很重要
-
傳統的缺點是都用了預訓練的目標檢測器,訓練和部署都很困難。
-
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 Embedding 部分
- 使用了標準的 ViT 模型
- 預訓練引數用了 DEiT。
文字部分
- 只用前 6 層做文字編碼
Loss 函式
- ITC loss
- 文字和圖片的 [CLS] token 經過 encoder 後,被當作文字的全域性特徵,然後丟盡 ITC loss 裡作比較。
- 所以這裡有個問題:圖片是怎麼加上 [CLS] token 的?
- ViT 中將圖片分成若干個 patch,然後把 patch 作為 token,然後直接加上 [CLS] token 後,再進行 embedding 等操作。
- 所以這裡有個問題:圖片是怎麼加上 [CLS] token 的?
- 這裡是將文字轉化成的圖片與 ground-truth 做交叉熵,反之亦然。
- 但是這樣就沒辦法得到中間狀態了?
- 文字和圖片的 [CLS] token 經過 encoder 後,被當作文字的全域性特徵,然後丟盡 ITC loss 裡作比較。
- 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 更好的文字。
- noisy web data
- self-training
- 具體模型構建:在已有模型之上做 exponential-moving-average
- 目的:跟 one-hot 儘可能接近之外,讓它跟動量模型出來的 pseudo-targets 儘可能 match。
- 對原 Loss 的改進,都對兩者加入了動量蒸餾後的向量:
- ITC:見式 6.
- MLM:式 7.
實驗
預訓練
四個資料集:
- Conceptual Captions
- SBU Captions
- COCO:圖片對多文字
- 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 在語言資料集上訓練
- 再在多模態資料集上訓練
模型
模型亮點
- MoME Transformer
- 前面的多頭注意力層共享引數
- Switching Modality Expert:每個模態一個 FFN 層,不共享引數
- 靈活
- 在不同的下游任務上可以採用不同的結構以及相同的引數
Loss
- ITC
- ITM
- MLM
實驗
訓練過程
- 自注意力在視覺上訓練了,然後會在文字部分凍住。
- 反過來反而沒那麼有效。
- 最後一步全部解凍
結果
資料集:
VQA、NLVR2
簡要結果
比 ALBEF 全線更強
一些未來的工作已被驗證
- 更大模型 —— BeiTv3
- vision-language generation ——VL-BeiT
- 單模態可以幫助多模態,多模態也可以幫助單模態——BeiTv3
- 更多模態,如影片等——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
方法
模型
- 圖片部分
- 標準 ViT
- 剩下部分有三個模型,分別算三個不同的目標函式
- 第一個模型:Text Encoder 做分類任務
- 得到文字特徵與圖片特徵做 ITC
- 第二個模型:Image-grounded Text encoder
- 多模態編碼器
- 藉助影像資訊
- ITM Loss
- 第三個模型 Image-grounded Text decoder
- 用於做生成任務
- 不能看到完整的句子
- 類似GPT,從前面推測後面的句子
- 第一層是 Causal Self-att,因果關係的自注意力
- LM Loss
- 第一個模型:Text Encoder 做分類任務
- 共享引數
- 同樣顏色代表同樣的引數
- 訓練很費時間,原因要做四個
forward()
Captioner 和 Filter
可以認為爬下來的資料有很大機率不匹配(如 CC12M),但是手工標註的資料很可能匹配(如COCO)
- Filter
- 利用 ITC&ITM 的模型在 COCO 上 finetune。然後利用該模型篩選
- Captioner
- BLIP 效能很強,於是生成的文字有時候比原始文字都好。
- 利用 LM 後的模型做微調。
- 有了這兩個模型後,有了相當大的提升
結果
- 常識性結論:
- 資料集更高,有所提升
- 模型變大,有所提升
- Captioner & FIlter:
- 用了哪個都會有提升。
- 用了 Captioner 提升更加顯著
- 而且完全可以利用這兩個去訓練其他模型
使用例
- 有位同學想要利用 Stable Diffusion 做一個生成寶可夢風格的模型,得到了寶可夢的圖片但是沒有描述。
- 利用 BLIP 生成描述。
- LAION COCO 資料集
- 用一個 BLIP 和 2 個 CLIP 模型不停做 Caption & filter 的過程
- 用 BLIP 生成 40 個描述
- 再利用一個 CLIP 排序,選最好的 5 個描述
- 再用另一個 CLIP(最大的模型) 得到最好的一個。
- 最後得到了 600 Million 資料集
- 用一個 BLIP 和 2 個 CLIP 模型不停做 Caption & filter 的過程
CoCa
論文標題:CoCa: Contrastive Captioners are Image-Text Foundation Models
作者來自 google
亮點:
- 兩個 loss
- contrastive loss
- caption loss
- 模型更大
- 多模態&單模態都取得了非常強勁的效果
方法
模型
- 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 的資料集
結果
(我所見過最離譜的圖)
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
- 由於模型結構靈活,因此推理時可以拆成許多部分做許多下游任務。
- 預訓練資料集都是公開資料集
- 引言寫的很好(如果要研究多模態要去看一下)
這篇論文證明了:
- 不是目標函式越多越好,要看目標函式是否有互補的特性
- 資料也不一定越多越好,質量也很關鍵
模型
預訓練
-
VLMo
微調