多模态人工智能是一种新式 AI 范式,是指图画、文本、语音、视频等多种数据类型,与多种智能处理算法相结合,以期完成更高的功能。

PyTorch 官方库「上新」,TorchMultimodal 助力多模态人工智能
近日,PyTorch 官方发布了一个 domain library–TorchMultimodal,用于 SoTA 多任务、多模态模型的大规模练习。

该库供给了:

  • 可组合的 building block(module、transforms、丢失函数)用于加速模型开发

  • 从已宣布的研讨、练习及评价脚本中提取的 SoTA 模型架构 (FLAVA, MDETR, Omnivore)

  • 用于测试这些模型的 notebook

TorchMultimodal 库仍在积极开发中,详情请重视: github.com/facebookres…

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 微调的教程。

    检查论文:arxiv.org/abs/2112.04…

  • MDETR: 与 NYU 的作者合作供给了一个比如,减轻了 PyTorch 生态体系中互操作性 (interoperability) 痛点,包含一个运用 MDETR 进行 phrase grounding 和可视化问答的 notebook。

    检查论文:arxiv.org/abs/2104.12…

  • Omnivore: TorchMultimodal 中处理视频和 3D 数据的模型的第一个比如,包含用于探究模型的 notebook。

    检查论文:arxiv.org/abs/2204.08…

  • MUGEN: auto-regressive 生成和检索的基础作业,包含运用 OpenAI coinrun 丰富的大规模合成数据集生成和检索 text-video 的 demo。

    检查论文:arxiv.org/abs/2204.08…

  • ALBEF: 模型代码,包含用该模型解决视觉问答问题的 notebook。

    检查论文:arxiv.org/abs/2107.07…

以下代码展现了几个与 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 文档: pytorch.org/get-started…

# 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 开发者社区大众号!

—— 完 ——