深入瞭解視覺語言模型

釋出於 2023 年 2 月 3 日
在 GitHub 上更新

人類的學習本質上是多模態的,因為聯合利用多種感官有助於我們更好地理解和分析新資訊。不出所料,多模態學習的最新進展從這一過程的有效性中汲取靈感,創造出能夠處理和關聯影像、影片、文字、音訊、身體姿勢、面部表情和生理訊號等多種模態資訊的模型。

自 2021 年以來,我們看到人們對結合視覺和語言模態的模型(也稱為聯合視覺語言模型)的興趣日益濃厚,例如 OpenAI 的 CLIP。聯合視覺語言模型在影像描述、文字引導的影像生成和操作,以及視覺問答等極具挑戰性的任務中展現了尤為出色的能力。該領域在不斷發展,其提高零樣本泛化能力的有效性也在不斷提升,從而帶來了各種實際應用場景。

在這篇博文中,我們將介紹聯合視覺語言模型,重點關注它們的訓練方式。我們還將展示如何利用 🤗 Transformers 來試驗該領域的最新進展。

目錄

  1. 引言
  2. 學習策略
    1. 對比學習
    2. 字首語言模型 (PrefixLM)
    3. 使用交叉注意力的多模態融合
    4. 掩碼語言建模 (MLM) / 圖文匹配 (ITM)
    5. 無需訓練
  3. 資料集
  4. 🤗 Transformers 對視覺語言模型的支援
  5. 新興研究領域
  6. 結論

簡介

稱一個模型為“視覺語言”模型意味著什麼?一個結合了視覺和語言兩種模態的模型?但這究竟是什麼意思?

定義這些模型的一個特點是它們能夠同時處理影像(視覺)和自然語言文字(語言)。這個過程取決於輸入、輸出以及要求這些模型執行的任務。

以零樣本影像分類任務為例。我們將傳入一張影像和幾個提示,從而為輸入影像獲得最可能的提示。

drawing
貓和狗的圖片取自 此處

要做出這樣的預測,模型需要理解輸入的影像和文字提示。模型會有獨立或融合的視覺和語言編碼器來實現這種理解。

但這些輸入和輸出可以有多種形式。下面我們舉一些例子:

  • 根據自然語言文字進行影像檢索。
  • 短語定位,即根據輸入的影像和自然語言短語進行目標檢測(例如:一個 年輕人 揮舞著一根 球棒)。
  • 視覺問答,即從輸入的影像和自然語言問題中尋找答案。
  • 為給定影像生成描述。這也可以採用條件文字生成的形式,即從一個自然語言提示和一張影像開始。
  • 從涉及影像和文字模態的社交媒體內容中檢測仇恨言論。

學習策略

一個視覺語言模型通常包含 3 個關鍵元素:一個影像編碼器、一個文字編碼器,以及一個融合兩種編碼器資訊的策略。這些關鍵元素緊密耦合,因為損失函式是圍繞模型架構和學習策略設計的。雖然視覺語言模型研究早已不是一個新的研究領域,但這類模型的設計多年來發生了巨大變化。早期的研究採用手工製作的影像描述符和預訓練的詞向量或基於頻率的 TF-IDF 特徵,而最新的研究主要採用帶有 Transformer 架構的影像和文字編碼器,來分別或共同學習影像和文字特徵。這些模型透過戰略性的預訓練目標進行預訓練,從而能夠支援各種下游任務。

在本節中,我們將討論一些典型的視覺語言模型預訓練目標和策略,這些方法在遷移效能方面表現良好。我們還將介紹一些額外的有趣內容,它們要麼是這些目標特有的,要麼可以作為預訓練的通用元件。

我們將涵蓋預訓練目標中的以下主題:

  • 對比學習:以對比的方式將影像和文字對齊到聯合特徵空間。
  • 字首語言模型 (PrefixLM):透過將影像作為語言模型的字首來共同學習影像和文字嵌入。
  • 使用交叉注意力的多模態融合:透過交叉注意力機制將視覺資訊融合到語言模型的各層中。
  • 掩碼語言建模 (MLM) / 圖文匹配 (ITM):透過掩碼語言建模和圖文匹配目標將影像的部分與文字對齊。
  • 無需訓練:透過迭代最佳化使用獨立的視覺和語言模型。

請注意,本節並非詳盡無遺的列表,還有其他各種方法以及混合策略,例如 Unified-IO。有關多模態模型的更全面綜述,請參閱這項工作

1) 對比學習

Contrastive Learning
如此處所示的對比預訓練和零樣本影像分類。

對比學習是視覺模型常用的預訓練目標,並且也已證明是視覺語言模型非常有效的預訓練目標。最近的工作,如 CLIPCLOOBALIGNDeCLIP,透過使用包含 {影像, 描述} 對的大型資料集,以對比損失聯合學習文字編碼器和影像編碼器,從而連線視覺和語言模態。對比學習旨在將輸入的影像和文字對映到相同的特徵空間,使得匹配的圖文對嵌入之間的距離最小化,而不匹配的則最大化。

對於 CLIP,距離就是文字和影像嵌入之間的餘弦距離,而像 ALIGN 和 DeCLIP 這樣的模型則設計了自己的距離度量來處理帶噪聲的資料集。

另一項工作 LiT 介紹了一種簡單的方法,即在保持影像編碼器凍結的情況下,使用 CLIP 預訓練目標來微調文字編碼器。作者將這個想法解釋為“一種教文字編碼器更好地從影像編碼器讀取影像嵌入的方式”。這種方法已被證明是有效的,並且比 CLIP 更具樣本效率。其他工作,如 FLAVA,則結合了對比學習和其他預訓練策略來對齊視覺和語言嵌入。

2) 字首語言模型 (PrefixLM)

PrefixLM
PrefixLM 預訓練策略示意圖 (圖片來源)

另一種訓練視覺語言模型的方法是使用 PrefixLM 目標。像 SimVLMVirTex 這樣的模型使用這種預訓練目標,並採用統一的多模態架構,由一個 Transformer 編碼器和一個 Transformer 解碼器組成,類似於自迴歸語言模型。

讓我們來分解一下,看看它是如何工作的。帶有字首目標的語言模型會根據一個輸入文字作為字首來預測下一個詞元。例如,給定序列“A man is standing at the corner”,我們可以用“A man is standing at the”作為字首,並訓練模型預測下一個詞元“corner”或字首的其他可能延續。

視覺 Transformer (ViT) 將同樣的字首概念應用於影像,透過將每個影像分割成若干個影像塊,並將這些影像塊按順序作為輸入餵給模型。借鑑這一思想,SimVLM 的架構中,編碼器接收一個拼接的影像塊序列和字首文字序列作為字首輸入,然後解碼器預測文字序列的後續部分。上圖描繪了這一思想。SimVLM 模型首先在沒有影像塊的字首文字資料集上進行預訓練,然後在一個對齊的圖文資料集上進行訓練。這些模型用於影像條件的文字生成/描述和視覺問答任務。

利用統一的多模態架構將視覺資訊融合到語言模型 (LM) 中以執行影像引導任務的模型顯示出令人印象深刻的能力。然而,僅使用 PrefixLM 策略的模型在應用領域上可能受到限制,因為它們主要為影像描述或視覺問答等下游任務設計。例如,給定一張一群人的影像,我們可以查詢影像以生成描述(例如,“一群人站在一座建築物前微笑”)或提出需要視覺推理的問題:“有多少人穿著紅色 T 恤?”。另一方面,學習多模態表示或採用混合方法的模型可以適應於各種其他下游任務,如目標檢測和影像分割。

凍結字首語言模型 (Frozen PrefixLM)

Frozen PrefixLM
凍結字首語言模型預訓練策略 (圖片來源)

雖然將視覺資訊融合到語言模型中非常有效,但能夠使用預訓練的語言模型 (LM) 而無需進行微調會更加高效。因此,視覺語言模型中的另一個預訓練目標是學習與凍結的語言模型對齊的影像嵌入。

FrozenClipCap 這樣的模型使用了這種凍結字首語言模型 (Frozen PrefixLM) 預訓練目標。它們在訓練期間只更新影像編碼器的引數,以生成可以作為預訓練、凍結的語言模型字首的影像嵌入,其方式與上面討論的 PrefixLM 目標類似。Frozen 和 ClipCap 都在對齊的圖文(描述)資料集上進行訓練,目標是給定影像嵌入和字首文字,生成描述中的下一個詞元。

最後,像 MAPLFlamingo 這樣的模型則將預訓練的視覺編碼器和語言模型都保持凍結。Flamingo 透過在預訓練的凍結視覺模型之上新增 Perceiver Resampler 模組,並在現有的預訓練、凍結的語言模型層之間插入新的交叉注意力層,以使語言模型能夠基於視覺資料進行條件生成,從而在一系列開放式視覺和語言任務的小樣本學習上取得了新的 SOTA (state-of-the-art) 記錄。

凍結字首語言模型預訓練目標的一個巧妙優勢是,它能夠用有限的對齊圖文資料進行訓練,這在缺少對齊多模態資料集的領域尤為有用。

3) 使用交叉注意力的多模態融合

Cross Attention Fusing
如圖所示,使用交叉注意力機制融合視覺資訊 (圖片來源)

另一種利用預訓練語言模型進行多模態任務的方法是,直接使用交叉注意力機制將視覺資訊融合到語言模型解碼器的各層中,而不是將影像作為語言模型的附加字首。像 VisualGPTVC-GPTFlamingo 這樣的模型採用這種預訓練策略,並在影像描述和視覺問答任務上進行訓練。這類模型的主要目標是高效地平衡文字生成能力和視覺資訊的融合,這在缺少大型多模態資料集的情況下尤為重要。

像 VisualGPT 這樣的模型使用一個視覺編碼器來嵌入影像,並將視覺嵌入饋送到預訓練語言解碼器模組的交叉注意力層,以生成合理的描述。一項更新的研究 FIBER 在視覺和語言骨幹網路中都插入了帶有門控機制的交叉注意力層,以實現更高效的多模態融合,並支援諸如圖文檢索和開放詞彙目標檢測等其他多種下游任務。

4) 掩碼語言建模 / 圖文匹配

另一類視覺語言模型使用掩碼語言建模 (MLM) 和圖文匹配 (ITM) 目標的組合,以對齊影像的特定部分和文字,並支援各種下游任務,如視覺問答、視覺常識推理、基於文字的影像檢索以及文字引導的目標檢測。遵循這種預訓練設定的模型包括 VisualBERTFLAVAViLBERTLXMERTBridgeTower

MLM / ITM
將影像的部分與文字對齊 (圖片來源)

我們來分解一下 MLM 和 ITM 目標的含義。給定一個部分被掩蓋的描述,MLM 目標是根據相應的影像預測被掩蓋的詞。請注意,MLM 目標需要使用帶有邊界框的豐富標註的多模態資料集,或者使用目標檢測模型為輸入文字的部分生成目標區域提議。

對於 ITM 目標,給定一個圖文對,任務是預測描述是否與影像匹配。負樣本通常從資料集中隨機取樣。MLM 和 ITM 目標通常在多模態模型的預訓練期間結合使用。例如,VisualBERT 提出了一個類似 BERT 的架構,它使用一個預訓練的目標檢測模型 Faster-RCNN 來檢測目標。該模型在預訓練期間結合使用 MLM 和 ITM 目標,透過自注意力機制隱式地對齊輸入文字的元素和關聯輸入影像中的區域。

另一項工作 FLAVA,由一個影像編碼器、一個文字編碼器和一個用於融合和對齊影像與文字表示以進行多模態推理的多模態編碼器組成,所有這些都基於 Transformer。為了實現這一點,FLAVA 使用了多種預訓練目標:MLM、ITM,以及掩碼影像建模 (MIM) 和對比學習。

5) 無需訓練

最後,各種最佳化策略旨在利用預訓練的影像和文字模型來連線影像和文字表示,或在無需額外訓練的情況下使預訓練的多模態模型適應新的下游任務。

例如,MaGiC 提出透過預訓練的自迴歸語言模型進行迭代最佳化,為輸入影像生成描述。為此,MaGiC 使用生成的詞元和輸入影像的 CLIP 嵌入計算一個基於 CLIP 的“Magic score”。

ASIF
使用預訓練的、凍結的單模態影像和文字編碼器構建一個相似性搜尋空間 (圖片來源)

ASIF 提出了一種簡單的方法,利用相對較小的多模態資料集,無需額外訓練,即可將預訓練的單模態影像和文字模型轉化為一個用於影像描述的多模態模型。ASIF 背後的核心直覺是,相似影像的描述彼此也相似。因此,我們可以透過使用一個小的基準多模態對資料集構建一個相對錶示空間來進行基於相似性的搜尋。

資料集

視覺語言模型通常在大型圖文資料集上進行訓練,這些資料集的結構根據預訓練目標的不同而有所差異。預訓練完成後,它們會使用特定任務的資料集在各種下游任務上進行進一步微調。本節概述了一些用於訓練和評估視覺語言模型的常用預訓練和下游資料集。

預訓練資料集

視覺語言模型通常在從網路上收集的大型多模態資料集上進行預訓練,這些資料集以匹配的影像/影片和文字對的形式存在。這些資料集中的文字資料可以是人工生成的描述、自動生成的描述、影像元資料或簡單的物體標籤。這類大型資料集的一些例子是 PMDLAION-5B。PMD 資料集結合了多個較小的資料集,如 Flickr30KCOCOConceptual Captions 資料集。COCO 目標檢測和影像描述(超過 33 萬張影像)資料集分別包含與每張影像中所含物體文字標籤配對的影像例項,以及自然語言句子描述。Conceptual Captions(超過 330 萬張影像)和 Flickr30K(超過 3.1 萬張影像)資料集及其描述——描述影像的自由格式句子——都是從網路上抓取的。

即使是完全由人工生成的描述組成的圖文資料集,如 Flickr30K,也天生帶有噪聲,因為使用者並不總是為他們的影像編寫描述性或反映性的文字。為了克服這個問題,像 LAION-5B 這樣的資料集利用 CLIP 或其他預訓練的多模態模型來過濾噪聲資料,建立高質量的多模態資料集。此外,一些視覺語言模型,如 ALIGN,提出了進一步的預處理步驟,並建立了自己的高質量資料集。其他視覺語言資料集,如 LSVTDWebVid,則包含影片和文字模態,儘管規模較小。

下游資料集

預訓練的視覺語言模型通常會在各種下游任務上進行訓練,如視覺問答、文字引導的目標檢測、文字引導的影像修復、多模態分類,以及各種獨立的自然語言處理和計算機視覺任務。

在問答下游任務上微調的模型,如 ViLTGLIP,最常用的是 VQA (視覺問答)、VQA v2NLVR2OKVQATextVQATextCapsVizWiz 資料集。這些資料集通常包含與多個開放式問題和答案配對的影像。此外,像 VizWiz 和 TextCaps 這樣的資料集也可用於影像分割和目標定位等下游任務。其他一些有趣的多模態下游資料集有:用於多模態分類的 Hateful Memes,用於視覺蘊含預測的 SNLI-VE,以及用於視覺語言組合推理的 Winoground

請注意,視覺語言模型可用於各種經典的 NLP 和計算機視覺任務,如文字或影像分類,並且通常為這類下游任務使用單模態資料集(例如 SST2ImageNet-1k)。此外,像 COCOConceptual Captions 這樣的資料集在模型預訓練和描述生成下游任務中都很常用。

🤗 Transformers 對視覺語言模型的支援

使用 Hugging Face Transformers,你可以輕鬆下載、執行和微調各種預訓練的視覺語言模型,或者混合搭配預訓練的視覺和語言模型來建立你自己的方案。🤗 Transformers 支援的一些視覺語言模型有:

像 CLIP、FLAVA、BridgeTower、BLIP、LiT 和 VisionEncoderDecoder 這樣的模型提供了可用於下游任務(如零樣本影像分類)的聯合圖文嵌入,而其他模型則是在有趣的下游任務上進行訓練的。此外,FLAVA 使用單模態和多模態預訓練目標進行訓練,既可用於單模態的視覺或語言任務,也可用於多模態任務。

例如,OWL-ViT 支援零樣本/文字引導和單樣本/影像引導的目標檢測,CLIPSeg 和 GroupViT 支援文字和影像引導的影像分割,而 VisualBERT、GIT 和 ViLT 支援視覺問答以及其他多種任務。X-CLIP 是一個使用影片和文字模態進行訓練的多模態模型,支援零樣本影片分類,類似於 CLIP 的零樣本影像分類能力。

與其他模型不同,VisionEncoderDecoderModel 是一個“樣板”模型,可用於初始化一個圖文模型,其中任何基於 Transformer 的預訓練視覺模型(如 ViT、BEiT、DeiT、Swin)都可作為編碼器,任何預訓練語言模型(如 RoBERTa、GPT2、BERT、DistilBERT)都可作為解碼器。事實上,TrOCR 就是這個“樣板”類的一個例項。

讓我們來試驗一下其中一些模型。我們將使用 ViLT 進行視覺問答,並使用 CLIPSeg 進行零樣本影像分割。首先,讓我們安裝 🤗Transformers: pip install transformers

ViLT 用於視覺問答

讓我們從 ViLT 開始,下載一個在 VQA 資料集上預訓練的模型。我們可以透過簡單地初始化相應的模型類並呼叫 from_pretrained() 方法來下載我們想要的檢查點。

from transformers import ViltProcessor, ViltForQuestionAnswering

model = ViltForQuestionAnswering.from_pretrained("dandelin/vilt-b32-finetuned-vqa")

接下來,我們將下載一張隨機的兩隻貓的圖片,並對影像和我們的查詢問題進行預處理,將它們轉換為模型期望的輸入格式。為此,我們可以方便地使用相應的預處理器類 (ViltProcessor),並使用相應檢查點的預處理配置對其進行初始化。

import requests
from PIL import Image

processor = ViltProcessor.from_pretrained("dandelin/vilt-b32-finetuned-vqa")

# download an input image
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
text = "How many cats are there?"

# prepare inputs
inputs = processor(image, text, return_tensors="pt")

最後,我們可以使用預處理後的影像和問題作為輸入進行推理,並打印出預測的答案。然而,需要記住的一個重要點是,要確保你的文字輸入與訓練設定中使用的問題模板相似。你可以參考論文和資料集來了解問題的構成方式。

import torch

# forward pass
with torch.no_grad():
    outputs = model(**inputs)

logits = outputs.logits
idx = logits.argmax(-1).item()
print("Predicted answer:", model.config.id2label[idx])

很簡單,對吧?讓我們再用 CLIPSeg 做一個演示,看看如何用幾行程式碼進行零樣本影像分割。

CLIPSeg 用於零樣本影像分割

我們將從初始化 CLIPSegForImageSegmentation 及其相應的預處理類開始,並載入我們的預訓練模型。

from transformers import CLIPSegProcessor, CLIPSegForImageSegmentation

processor = CLIPSegProcessor.from_pretrained("CIDAS/clipseg-rd64-refined")
model = CLIPSegForImageSegmentation.from_pretrained("CIDAS/clipseg-rd64-refined")

接下來,我們將使用相同的輸入影像,並用我們想要分割的所有物體的文字描述來查詢模型。與其他預處理器類似,CLIPSegProcessor 將輸入轉換為模型期望的格式。由於我們想要分割多個物體,我們為每個文字描述分別輸入相同的影像。

from PIL import Image
import requests

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
texts = ["a cat", "a remote", "a blanket"]

inputs = processor(text=texts, images=[image] * len(texts), padding=True, return_tensors="pt")

與 ViLT 類似,為了在推理時獲得最佳效能,參考原始工作,瞭解模型訓練時使用了哪種文字提示非常重要。雖然 CLIPSeg 是在簡單的物體描述(例如,“a car”)上訓練的,但其 CLIP 主幹網路是在精心設計的文字模板(例如,“an image of a car”、“a photo of a car”)上預訓練的,並在訓練期間保持凍結。一旦輸入被預處理,我們就可以進行推理,為每個文字查詢獲得一個形狀為 (height, width) 的二值分割圖。

import torch

with torch.no_grad():
    outputs = model(**inputs)

logits = outputs.logits
print(logits.shape)
>>> torch.Size([3, 352, 352])

讓我們將結果視覺化,看看 CLIPSeg 的表現如何(程式碼改編自這篇博文)。

import matplotlib.pyplot as plt

logits = logits.unsqueeze(1)

_, ax = plt.subplots(1, len(texts) + 1, figsize=(3*(len(texts) + 1), 12))
[a.axis('off') for a in ax.flatten()]
ax[0].imshow(image)
[ax[i+1].imshow(torch.sigmoid(logits[i][0])) for i in range(len(texts))];
[ax[i+1].text(0, -15, prompt) for i, prompt in enumerate(texts)]

CLIPSeg results

太棒了,不是嗎?

視覺語言模型催生了大量有用且有趣的用例,這些用例遠不止視覺問答和零樣本分割。我們鼓勵你嘗試本節提到的模型所支援的不同用例。有關示例程式碼,請參閱各個模型的相應文件。

新興研究領域

隨著視覺語言模型的巨大進步,我們看到了新的下游任務和應用領域的出現,例如醫學和機器人技術。例如,視覺語言模型越來越多地被用於醫療用例,催生了諸如用於醫學診斷和放射學報告生成的 Clinical-BERT,以及用於醫學領域視覺問答的 MedFuseNet 等工作。

我們還看到大量工作利用聯合視覺語言表示進行影像處理(例如,StyleCLIPStyleMCDiffusionCLIP)、基於文字的影片檢索(例如,X-CLIP)和處理(例如,Text2Live)以及 3D 形狀和紋理處理(例如,AvatarCLIPCLIP-NeRFLatent3DCLIPFaceText2Mesh)。在類似的研究方向上,MVT 提出了一個聯合 3D 場景-文字表示模型,可用於各種下游任務,如 3D 場景補全。

儘管機器人研究尚未大規模利用視覺語言模型,但我們看到像 CLIPort 這樣的工作,利用聯合視覺語言表示進行端到端模仿學習,並報告了相對於先前 SOTA (state-of-the-art) 的巨大改進。我們還看到大型語言模型越來越多地被用於機器人任務,如常識推理、導航和任務規劃。例如,ProgPrompt 提出了一個框架,利用大型語言模型 (LLM) 生成情境化的機器人任務計劃。同樣,SayCan 使用 LLM 根據環境的視覺描述和可用物體來選擇最合理的行動。雖然這些進展令人印象深刻,但由於目標檢測資料集的侷限性,機器人研究仍侷限於有限的環境和物體集合。隨著像 OWL-ViTGLIP 這樣的開放詞彙目標檢測模型的出現,我們可以期待多模態模型與機器人導航、推理、操作和任務規劃框架更緊密的整合。

結論

近年來,多模態模型取得了令人難以置信的進步,其中視覺語言模型在效能以及用例和應用的多樣性方面取得了最顯著的飛躍。在這篇博文中,我們討論了視覺語言模型的最新進展,以及有哪些可用的多模態資料集,以及我們可以使用哪些預訓練策略來訓練和微調這些模型。我們還展示了這些模型如何整合到 🤗 Transformers 中,以及你如何用幾行程式碼來執行各種任務。

我們將繼續整合最具影響力的計算機視覺和多模態模型,並期待收到您的反饋。要了解多模態研究的最新訊息,您可以在 Twitter 上關注我們:@adirik@NielsRogge@apsdehal@a_e_roberts@RisingSayak@huggingface

致謝:我們感謝 Amanpreet Singh 和 Amy Roberts 的嚴謹審閱。同時,感謝 Hugging Face 的 Niels Rogge、Younes Belkada 和 Suraj Patil 等多位同仁,他們為增加 Transformers 中多模態模型的使用奠定了基礎。

社群

註冊登入 發表評論

© . This site is unofficial and not affiliated with Hugging Face, Inc.