跳轉到主要內容
部落格

隆重推出 TorchMultimodal:一個用於加速多模態人工智慧探索的庫

作者: 2022 年 11 月 17 日2024 年 11 月 15 日暫無評論

我們正在釋出 TorchMultimodal Beta 版,這是一個 PyTorch 領域庫,用於大規模訓練最先進的多工多模態模型。該庫提供了可組合的構建塊(模組、轉換、損失函式)以加速模型開發、來自已釋出研究的最先進模型架構(FLAVA、MDETR、Omnivore)、訓練和評估指令碼,以及用於探索這些模型的 Notebook。該庫正在積極開發中,我們很樂意聽取您的反饋!您可以在此處找到更多入門詳細資訊。

為什麼選擇 TorchMultimodal?

人們對能夠理解多種輸入型別(文字、影像、影片和音訊訊號)並可選地利用這種理解生成不同形式輸出(句子、圖片、影片)的 AI 模型越來越感興趣。FAIR 最近的工作,如 FLAVAOmnivoredata2vec 表明,用於理解的多模態模型與單模態模型具有競爭力,並且在某些情況下正在確立新的最先進水平。像 Make-a-videoMake-a-scene 這樣的生成模型正在重新定義現代 AI 系統可以做什麼。

隨著人們對多模態 AI 的興趣日益增長,研究人員正在尋找工具和庫來快速試驗想法,並在該領域的最新研究基礎上進行構建。雖然 PyTorch 生態系統擁有豐富的庫和框架,但這些元件如何相互操作,或者如何將它們組合起來構建最先進的多模態模型並不總是顯而易見的。

TorchMultimodal 透過以下方式解決了這個問題:

  • 可組合且易於使用的構建塊,研究人員可以利用它們在自己的工作流程中加速模型開發和實驗。這些構建塊設計為模組化,可以輕鬆擴充套件以處理新的模態。
  • 用於訓練和評估最新研究模型的端到端示例。 這些示例應作為正在進行/未來研究的起點,以及使用高階功能(例如與 FSDP 和啟用檢查點整合以擴充套件模型和批處理大小)的示例。

推出 TorchMultimodal

TorchMultimodal 是一個 PyTorch 領域庫,用於大規模訓練多工多模態模型。在該儲存庫中,我們提供:

  • 構建塊。模組化和可組合構建塊的集合,如模型、融合層、損失函式、資料集和實用程式。一些示例包括:
    • 帶溫度的對比損失。常用於訓練 CLIP 和 FLAVA 等模型的函式。我們還包括了在 ALBEF 等模型中使用的變體,如 ImageTextContrastiveLoss
    • Codebook 層,它透過在嵌入空間中進行最近鄰查詢來壓縮高維資料,並且是 VQVAE 的重要組成部分(在儲存庫中作為 模型 提供)。
    • 移位視窗注意力。基於視窗的多頭自注意力,是 Swin 3D Transformer 等編碼器的重要組成部分。
    • CLIP 的元件。 OpenAI 釋出的一個流行模型,已被證明在學習文字和影像表示方面非常有效。
    • 多模態 GPT。生成實用程式 結合時,擴充套件 OpenAI GPT 架構以實現多模態生成的抽象。
    • 多頭注意力。注意力模型的一個關鍵元件,支援快速自迴歸解碼。
  • 示例。一系列示例,展示瞭如何將這些構建塊與 PyTorch 生態系統中的元件和通用基礎設施(Lightning、TorchMetrics)結合起來,以復現文獻中發表的最先進模型。我們目前提供了五個示例,其中包括:
    • FLAVA [論文]。CVPR 接收論文的官方程式碼,包括關於微調 FLAVA 的教程。
    • MDETR [論文]。與紐約大學作者合作提供的一個示例,它減輕了 PyTorch 生態系統中的互操作性痛點,包括一個關於使用 MDETR 進行短語接地和視覺問答的 Notebook
    • Omnivore [論文]。TorchMultimodal 中處理影片和 3D 模型的第一個示例,包括一個用於探索模型的 Notebook
    • MUGEN [論文]。自迴歸 生成檢索 的基礎工作,包括文字-影片生成和檢索演示,使用了從 OpenAI coinrun 豐富的大規模合成數據集。
    • ALBEF [論文] 模型程式碼,包括一個用於將此模型用於視覺問答的 Notebook

以下程式碼片段展示了與 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()

除了程式碼,我們還釋出了一個微調多模態基礎模型的教程,以及一篇部落格文章(附帶程式碼指標),介紹如何使用 PyTorch Distributed(FSDP 和啟用檢查點)的技術來擴充套件此類模型。我們希望這些示例和教程能夠揭開 PyTorch 生態系統中許多高階功能的神秘面紗。

下一步是什麼?

雖然這是一個令人興奮的釋出,但還有更多內容即將推出。該庫正在開發中,我們正在努力新增擴散模型領域的一些令人興奮的進展,以及展示研究中常見趨勢的示例。在您探索和使用該庫時,我們很樂意聽取您可能有的任何反饋!您可以在此處找到更多入門詳細資訊。

團隊

TorchMultimodal 的主要貢獻者和開發者包括 Ankita De、Evan Smothers、Kartikay Khandelwal、Lan Gong、Laurence Rouesnel、Nahiyan Malik、Rafi Ayub 和 Yosua Michael Maranatha。