PyTorch 官方庫「上新」,TorchMultimodal 助力多模態人工智慧

超神經HyperAI 發表於 2022-11-25
人工智慧 PyTorch
多模態人工智慧是一種新型 AI 正規化,是指影像、文字、語音、影片等多種資料型別,與多種智慧處理演算法相結合,以期實現更高的效能。

在這裡插入圖片描述
近日,PyTorch 官方釋出了一個 domain library--TorchMultimodal,用於 SoTA 多工、多模態模型的大規模訓練。

該庫提供了:

  • 可組合的 building block(module、transforms、損失函式)用於加速模型開發
  • 從已發表的研究、訓練及評估指令碼中提取的 SoTA 模型架構 (FLAVA, MDETR, Omnivore)
  • 用於測試這些模型的 notebook

TorchMultimodal 庫仍在積極開發中,詳情請關注:
https://github.com/facebookresearch/multimodal#installation

TorchMultimodal 開發背景

隨著技術的進步,能理解多種型別輸入(文字、影像、影片和音訊訊號),並能利用這種理解來生成不同形式的輸出(句子、圖片、影片)的 AI 模型越來越引發關注。

FAIR 最近的研究工作(如 FLAVA、 Omnivore 和 data2vec)表明,用於理解的多模態模型與單模態模型相比更有優勢,並且在某些情況下正在開創全新的 SOTA。

類似 Make-a-video 以及 Make-a-scene 這樣的生成模型,正在重新定義現代人工智慧系統的能力邊界。

為了促進 PyTorch 生態中多模態 AI 的發展, TorchMultimodal 庫應運而生,其解決思路為:

  • 提供可組合的 building block, 利用這些 building block,研究人員可以在自己的工作流中加速模型開發和試驗。模組化設計也降低了遷移到新模態資料的難度。
  • 提供了用於訓練和評估研究中最新模型的端到端示例。 這些示例中用到了一些高階特性,如整合 FSDP 和用於擴充套件模型及批尺寸的 activation checkpointing。

    初識 TorchMultimodal

    TorchMultimodal 是一個 PyTorch domain library,用於多工多模態模型的大規模訓練。 它提供:

1. Building Block

模組及可組合 building block 集合,如模型、融合層、損失函式、資料集和實用程式,例如:

  • 溫度對比損失 (Contrastive Loss with Temperature): 常用於訓練模型的函式,如 CLIP 和 FLAVA。此外還包括在 ALBEF 等模型中使用的 ImageTextContrastiveLoss 等變數。
  • Codebook layer: 透過向量空間中的最近鄰查詢壓縮高維資料,它也是 VQVAE 的重要組成部分。
  • Shifted-window Attention: window 基於 multi-head self attention,是 Swin 3D Transformer 等編碼器的重要元件。
  • CLIP 元件: 由 OpenAI 釋出,是一個在學習文字和影像表徵方面非常有效的模型。
  • Multimodal GPT: 與生成程式結合時,可將 OpenAI 的 GPT 架構擴充套件為更適合多模態生成的抽象。
  • MultiHeadAttention: 基於 attention 的模型的一個關鍵元件,支援 auto-regressive 和 decoding。

    2. 示例

    一組示例展示瞭如何將 building block 與 PyTorch 元件和公共基礎設施 (Lightning, TorchMetrics) 結合,從而複製文獻中發表的 SOTA 模型。目前提供了五個示例,其中包括:

  • FLAVA: CVPR 接收論文的官方程式碼,包括一個關於 FLAVA 微調的教程。

    檢視論文:https://arxiv.org/abs/2112.04482

  • MDETR: 與 NYU 的作者合作提供了一個例子,減輕了 PyTorch 生態系統中互操作性 (interoperability) 痛點,包括一個使用 MDETR 進行 phrase grounding 和視覺化問答的 notebook。

    檢視論文:https://arxiv.org/abs/2104.12763

  • Omnivore: TorchMultimodal 中處理影片和 3D 資料的模型的第一個例子,包括用於探索模型的 notebook。

    檢視論文:https://arxiv.org/abs/2204.08058

  • MUGEN: auto-regressive 生成和檢索的基礎工作,包括使用 OpenAI coinrun 豐富的大規模合成資料集生成和檢索 text-video 的 demo。

    檢視論文:https://arxiv.org/abs/2204.08058

  • ALBEF: 模型程式碼,包括用該模型解決視覺問答問題的 notebook。

    檢視論文:https://arxiv.org/abs/2107.07651

以下程式碼展示了幾個與 CLIP 相關的 TorchMultimodal 元件的用法:

# instantiate clip transform
clip_transform = CLIPTransform()

# pass the transform to your dataset. Here we use coco captions
dataset = CocoCaptions(root= ..., annFile=..., transforms=clip_transform)
dataloader = DataLoader(dataset, batch_size=16)

# instantiate model. Here we use clip with vit-L as the image encoder
model= clip_vit_l14()

# define loss and other things needed for training
clip_loss = ContrastiveLossWithTemperature()
optim = torch.optim.AdamW(model.parameters(), lr = 1e-5)
epochs = 1

# write your train loop
for _ in range(epochs):
  for batch_idx, batch in enumerate(dataloader):
    image, text = batch
    image_embeddings, text_embeddings = model(image, text)
    loss = contrastive_loss_with_temperature(image_embeddings, text_embeddings)
    loss.backward()
    optimizer.step()

安裝 TorchMultimodal

Python ≥ 3.7,安不安裝 CUDA 支援均可。

以下程式碼以安裝 conda 為例

前提條件

1. 安裝 conda 環境

conda create -n torch-multimodal python=\<python_version\>
conda activate torch-multimodal

2. 安裝 PyTorch、torchvision 以及 torchtext

參閱 PyTorch 文件:
https://pytorch.org/get-started/locally/

# Use the current CUDA version as seen [here](https://pytorch.org/get-started/locally/)
# Select the nightly Pytorch build, Linux as the OS, and conda. Pick the most recent CUDA version.
conda install pytorch torchvision torchtext pytorch-cuda=\<cuda_version\> -c pytorch-nightly -c nvidia

# For CPU-only install
conda install pytorch torchvision torchtext cpuonly -c pytorch-nightly

從二進位制檔案安裝

在 Linux 上,適用於 Python 3.7、3.8 和 3.9 的 Nightly binary 可透過 pip wheels 安裝。目前只透過 PyPI 支援 Linux 平臺。

python -m pip install torchmultimodal-nightly

原始碼安裝

開發者也可以透過原始碼構建並執行示例:

git clone --recursive https://github.com/facebookresearch/multimodal.git multimodal
cd multimodal

pip install -e .

以上就是關於 TorchMultimodal 的簡單介紹。除程式碼外,PyTorch 官方還發布了一個關於微調多模態模型的基礎教程, 以及一篇關於如何使用 PyTorch Distributed PyTorch (FSDP and activation checkpointing) 技術擴充套件這些模型的 blog。

後續我們將針對這篇 blog 進行漢化整理。歡迎持續關注 PyTorch 開發者社群公眾號!

—— 完 ——