跳转到主要内容
博客

隆重推出 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。