我们在此宣布 TorchMultimodal Beta 发布,这是一个 PyTorch 领域库,用于大规模训练目前最先进的多任务多模态模型。该库提供可组合的构建模块(模块、变换、损失函数)以加速模型开发,包含已发表研究中的最先进模型架构(FLAVA、MDETR、Omnivore),以及用于训练和评估的脚本,还有用于探索这些模型的 Notebook。该库正在积极开发中,我们很乐意听取您的反馈!您可以在此处找到更多关于如何入门的详情。
为什么选择 TorchMultimodal?
人们对能够理解多种输入类型(文本、图像、视频和音频信号),并可选择利用这种理解来生成不同形式输出(句子、图片、视频)的 AI 模型越来越感兴趣。FAIR 的近期工作,例如 FLAVA、Omnivore 和 data2vec 表明,用于理解的多模态模型与单模态模型相比具有竞争力,并且在某些情况下正在建立新的最先进水平。生成模型,例如 Make-a-video 和 Make-a-scene,正在重新定义现代 AI 系统能做什么。
随着对多模态 AI 的兴趣日益增长,研究人员正在寻找工具和库,以便快速实验新想法,并基于该领域的最新研究成果进行构建。虽然 PyTorch 生态系统拥有丰富的库和框架资源,但这些组件如何相互操作,或者如何将它们组合在一起构建最先进的多模态模型,并不总是显而易见的。
TorchMultimodal 通过提供以下功能解决了这个问题:
-
可组合且易于使用的构建模块,研究人员可以利用它们在自己的工作流程中加速模型开发和实验。这些模块被设计为模块化,并且可以轻松扩展以处理新的模态。
-
用于训练和评估最新研究模型的端到端示例。这些示例可以作为正在进行/未来研究的起点,也可以作为使用高级功能(如集成 FSDP 和激活检查点来扩展模型和批量大小)的范例。
介绍 TorchMultimodal
TorchMultimodal 是一个 PyTorch 领域库,用于大规模训练多任务多模态模型。在该仓库中,我们提供:
-
构建模块。一组模块化和可组合的构建模块,如模型、融合层、损失函数、数据集和实用工具。一些示例包括:
-
带温度的对比损失。常用于训练 CLIP 和 FLAVA 等模型。我们还包含 ALBEF 等模型中使用的变体,如 ImageTextContrastiveLoss。
-
移位窗口注意力,它是基于窗口的多头自注意力,是 Swin 3D Transformers 等编码器的重要组成部分。
-
CLIP 组件。一个由 OpenAI 发表的流行模型,已被证明在学习文本和图像表示方面非常有效。
-
多头注意力。基于注意力的模型的关键组件,支持快速自回归解码。
-
-
示例。一组示例,展示了如何将这些构建模块与 PyTorch 生态系统中的组件和通用基础架构(Lightning、TorchMetrics)结合使用,以复现文献中发表的最先进模型。我们目前提供五个示例,包括:
以下代码片段展示了几个与 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 分布式技术(FSDP 和激活检查点)来扩展此类模型。我们希望这些示例和教程有助于阐明 PyTorch 生态系统中提供的许多高级功能。
下一步计划?
虽然这是一次令人兴奋的发布,但还有更多内容将推出。该库正在开发中,我们正在努力添加扩散模型领域的一些令人兴奋的进展,以及展示研究中常见趋势的示例。在您探索和使用该库时,我们很乐意听取您的任何反馈!您可以在此处找到更多关于如何入门的详情。
团队
TorchMultimodal 的主要贡献者和开发者包括 Ankita De, Evan Smothers, Kartikay Khandelwal, Lan Gong, Laurence Rouesnel, Nahiyan Malik, Rafi Ayub 和 Yosua Michael Maranatha。