关于人工智能:深入了解视觉语言模型

40次阅读

共计 10597 个字符,预计需要花费 27 分钟才能阅读完成。

人类学习实质上是多模态 (multi-modal) 的,因为联结利用多种感官有助于咱们更好地了解和剖析新信息。天经地义地,多模态学习的最新进展即是从这一人类学习过程的有效性中吸取灵感,创立能够利用图像、视频、文本、音频、肢体语言、面部表情和生理信号等各种模态信息来解决和链接信息的模型。

自 2021 年以来,咱们看到大家对联合视觉和语言模态的模型 (也称为联结视觉语言模型) 的趣味越来越浓,一个例子就是 OpenAI 的 CLIP。联结视觉语言模型在十分具备挑战性的工作中体现出了让人眼前一亮的能力,诸如图像题目生成、文本疏导图像生成、文本疏导图像操作以及视觉问答等。这个畛域在一直倒退,其零样本泛化能力也在不断改进,从而产生了各种理论利用。

本文,咱们将介绍联结视觉语言模型,重点关注它们的训练形式。咱们还将展现如何利用 🤗 Transformers 对该畛域的最新进展进行试验。

简介

将模型称为“视觉语言”模型是什么意思?一个联合了视觉和语言模态的模型?但这到底是什么意思呢?

有助于定义此类模型的一个个性是它们解决图像 (视觉) 和自然语言文本 (语言) 的能力。而这个过程体现在输出、输入以及要求这些模型执行的工作上。

以零样本图像分类工作为例。咱们将传给模型如下一张图像和一些候选提醒 (prompt),以取得与输出图像最匹配的提醒。

小动物图片出自: https://www.istockphoto.com/photos/dog-cat-love

为了预测相似的货色,模型须要了解输出图像和文本提醒。它将应用独自或交融的视觉和语言编码器来达到了解的目标。

输出和输入能够有多种形式。上面仅举几例:

  • 用自然语言文原本检索图像。
  • 短语关联 (Phrase grounding),即在输出图像中检测出文本中提到的短语 (例如: 一个 年轻人 挥动 球拍)。
  • 视觉问答,即在输出图像中找到自然语言问题的答案。
  • 为给定图像生成题目。该工作还有一个模式就是条件文本生成,此时输出变成了两个,即自然语言提醒和图像。
  • 从蕴含图像和文本模态的社交媒体内容中检测怨恨舆论。

学习策略

视觉语言模型通常由 3 个要害元素组成: 图像编码器、文本编码器以及交融两个编码器的信息的策略。这些要害元素严密耦合在一起,因为损失函数是围绕模型架构和学习策略设计的。尽管视觉语言模型钻研算不上是一个新的钻研畛域,但此类模型的设计随着工夫的变迁产生了巨大变化。晚期的钻研采纳手工设计的图像形容子、预训练词向量或基于频率的 TF-IDF 特色,而最新的钻研次要采纳 transformer 架构的图像和文本编码器来独自或联结学习图像和文本特色。咱们应用战略性的预训练指标来训练这些模型,从而使之可用于各种上游工作。

在本节中,咱们将探讨视觉语言模型的一些典型预训练指标和策略,这些模型已被证实有良好的迁徙性能。咱们还将探讨其余乏味的货色,它们要么特定于某些预训练指标,要么能够用作预训练的通用组件。

咱们将在预训练指标中涵盖以下主题:

  • 比照学习: 以比照形式将图像和文本对齐到联结特色空间
  • PrefixLM: 通过将图像视作语言模型的前缀来联结学习图像和文本嵌入
  • 基于穿插注意力的多模态交融: 将视觉信息交融到具备穿插注意力机制的语言模型的各层中
  • MLM / ITM: 应用掩码语言建模 (Masked-Language Modeling,MLM) 和图像文本匹配 (Image-Text Matching,ITM) 指标将图像的各局部与文本对齐
  • 无训练: 通过迭代优化来利用独立视觉和语言模型

请留神,本节并未详尽陈说所有办法,还有各种其余办法以及混合策略,例如 Unified-IO。如需更全面地理解多模态模型,请参阅 这项工作

1) 比照学习

比照预训练和零样本图像分类, 上图出处: https://openai.com/blog/clip

比照学习是视觉模型罕用的预训练指标,也已被证实同时是视觉语言模型的高效预训练指标。近期的工作如 CLIP、CLOOB、ALIGN 和 DeCLIP 在 {图像,题目} 对组成的大型数据集上,通过应用比照损失函数联结训练文本编码器和图像编码器,从而桥接视觉和语言两个模态。比照学习旨在将输出图像和文本映射到雷同的特色空间,使得图像 – 文本对的嵌入之间的间隔在两者匹配时最小化,而在不匹配时最大化。

CLIP 仅采纳文本和图像嵌入之间的余弦间隔作为间隔度量。而 ALIGN 和 DeCLIP 等模型则设计了本人的间隔度量,这些间隔在设计时思考了数据集是有噪声的。

另一项工作 LiT 引入了一种解冻图像编码器而仅应用 CLIP 预训练指标来微调文本编码器的简略办法。作者将这个想法解释为 一种教文本编码器更好地读懂图像编码器生成的图像嵌入的办法 。这种办法已被证实是无效的,并且比 CLIP 的样本效率更高。FLAVA 等其余工作将比照学习和其余预训练策略相结合来对齐视觉和语言嵌入。

2) PrefixLM

PrefixLM 预训练策略框图, 上图出处: https://ai.googleblog.com/2021/10/simvlm-simple-visual-language-model-pre.html

另一种训练视觉语言模型的办法是应用 PrefixLM 指标。SimVLM 和 VirTex 等模型应用该预训练指标并应用一个对立的由 transformer 编码器和 transformer 解码器组成的多模态架构,有点相似于自回归语言模型。

让咱们拆解一下,看看它是如何工作的。具备前缀指标的语言模型在给定输出文本作为前缀的状况下预测下一个词。例如,给定序列“一个男人站在墙角”,咱们能够应用”一个男人站在”作为前缀并训练模型以预测下一个词: 能够是“墙角”或另一个正当的补全词。

Visual transformers (ViT) 通过将每个图像划分为多个块 (patch) 并将这些块按程序输出给模型,从而将雷同的前缀概念利用于图像。利用这个想法,SimVLM 实现了这样一种架构,将图像块序列和前缀文本序列串接起来作为最终的前缀,输出给编码器,而后由解码器来预测该文本序列的接续文本。上图形容了该思维。SimVLM 模型首先在前缀中没有图像块的文本数据集上进行预训练,而后在对齐的图像文本数据集上进行预训练。这些模型用于图生文 / 图像题目生成和 VQA 工作。

利用对立的多模态架构将视觉信息交融到语言模型 (Language Model,LM) 中,最终生成的模型在图像疏导类工作中显示出令人印象粗浅的能力。然而,仅应用 PrefixLM 策略的模型在应用领域上可能会受到限制,因为它们次要为图像题目生成或视觉问答这两个上游工作而设计。例如,给定一组蕴含人的图像,咱们通过图像的形容来查问合乎形容的图像 (例如,“一群人站在一起微笑着站在建筑物前”) 或应用以下视觉推理问题来查问:“有多少人衣着红色 T 恤?”图像。另一方面,学习多模态示意或采纳混合办法的模型能够实用于各种其余上游工作,例如指标检测和图像宰割。

解冻 PrefixLM

解冻 PrefixLM 预训练策略, 上图出处: https://lilianweng.github.io/posts/2022-06-09-vlm

尽管将视觉信息交融到语言模型中十分无效,但可能应用预训练语言模型 (LM) 而无需微调会更无效。因而,视觉语言模型的另一个预训练指标是学习与解冻语言模型对齐的图像嵌入。

Frozen、MAPL 和 ClipCap 应用了解冻 PrefixLM 预训练指标。它们在训练时仅更新图像编码器的参数以生成图像嵌入,这些图像嵌入能够用作预训练的解冻语言模型的前缀,其形式与下面探讨的 PrefixLM 指标相似。Frozen 和 ClipCap 都在对齐的图像文本 (题目) 数据集上进行训练,目标是在给定图像嵌入和前缀文本的状况下生成题目中的下一个词。

最初,Flamingo 索性把预训练视觉编码器和语言模型都解冻了,并在一系列宽泛的开放式视觉和语言工作上刷新了少样本学习的最高程度。Flamingo 通过在预训练的解冻视觉模型之上增加一个感知器重采样器 (Perceiver Resampler) 模块并在解冻的预训练 LM 层之间插入新的穿插留神层以依据视觉数据调节 LM 来达到这个性能。

解冻 PrefixLM 预训练指标的一个很好的劣势是它能够应用无限的对齐图像文本数据进行训练,这对于那些没有对齐多模态数据集的畛域特地有用。

3) 多模态交融与穿插注意力

应用穿插注意力机制将视觉信息间接交融到语言模型中, 上图出处: https://www.semanticscholar.org/paper/VisualGPT%3A-Data-efficient-Adaptation-of-Pretrained-Chen-Guo/616e0ed02ca024a8c1d4b86167f7486ea92a13d9

将预训练语言模型用于多模态工作的另一种办法是应用穿插留神机制将视觉信息间接交融到语言模型解码器的层中,而不是应用图像作为语言模型的附加前缀。VisualGPT、VC-GPT 和 Flamingo 应用此预训练策略并在图像题目工作和视觉问答工作上进行训练。此类模型的次要指标是在把视觉信息融入文本生成能力时在这两者间获得高效的均衡,这在没有大型多模态数据集的状况下十分重要。

VisualGPT 等模型应用视觉编码器来生成图像嵌入,并将视觉嵌入提供给预训练语言解码器模块的穿插留神层,以生成正当的题目。最近的一项工作 FIBER 将具备门控机制的穿插注意力层插入到视觉和语言的骨干模型中,以实现更高效的多模态交融,并使能各种其余上游工作,如图文互搜、凋谢域 (open-vocabulary) 指标检测等。

4) 掩膜语言建模及图文匹配

另一派视觉语言模型把掩码语言建模 (MLM) 和图文匹配 (ITM) 指标组合起来应用,将图像的特定局部与文本对齐,并使能各种上游工作,例如视觉问答、视觉常识推理、文搜图以及文本疏导的指标检测。遵循这种预训练设置的模型包含 VisualBERT、FLAVA、ViLBERT、LXMERT 和 BridgeTower。

将图像与文本按局部相应对齐, 上图出处: https://arxiv.org/abs/1908.02265

让咱们解释一下 MLM 和 ITM 指标。给定一个局部遮蔽的题目,MLM 的指标是依据相应的图像预测遮蔽的单词。请留神,MLM 指标须要应用带有边界框的标注丰盛的多模态数据集,或者应用指标检测模型为局部输出文本生成候选指标区域。

对于 ITM 指标,给定图像和题目对,工作是预测题目是否与图像匹配。负样本通常是从数据集中随机抽取的。MLM 和 ITM 指标通常在多模态模型的预训练期间联合应用。例如,VisualBERT 提出了一种相似 BERT 的架构,它应用预训练的指标检测模型 Faster-RCNN 来检测指标。VisualBERT 在预训练期间联合了 MLM 和 ITM 指标,通过自注意力机制隐式对齐输出文本的元素和相应输出图像中的区域。

另一项工作 FLAVA 由一个图像编码器、一个文本编码器和一个多模态编码器组成,用于交融和对齐图像和文本示意以进行多模态推理,所有这些都基于 transformers。为了实现这一点,FLAVA 应用了多种预训练指标: MLM、ITM,以及 掩膜图像建模 (Masked-Image Modeling,MIM) 和比照学习。

5) 无训练

最初,各种优化策略旨在应用预训练的图像和文本模型来桥接图像和文本示意,或者使预训练的多模态模型可能在无需额定训练的状况下适应新的上游工作。

例如,MaGiC 提出通过预训练的自回归语言模型进行迭代优化,为输出图像生成题目。为此,MaGiC 应用生成的词的 CLIP 嵌入和输出图像的 CLIP 嵌入来计算基于 CLIP 的“魔法分数 (magic score)”。

用预训练的解冻的单模态图像和文本编码器创立一个相似性搜寻空间

ASIF 提出了一种简略的办法,能够应用绝对较小的多模态数据集将预训练的单模态图像和文本模型转换为多模态模型来用于图像题目生成,无需附加训练。ASIF 背地的要害直觉是类似图像的题目也彼此类似。因而,咱们能够通过应用小型数据集里的实在多模态对的来构建一个绝对示意空间,而后在该空间执行基于相似性的搜寻。

数据集

视觉语言模型通常依据预训练指标在构造各异的大型图像和文本数据集上进行训练。在对它们进行预训练后,再应用特定于工作的数据集进一步针对各种上游工作进行微调。本节概述了一些用于训练和评估视觉语言模型的风行的预训练和上游数据集。

预训练数据集

一般来讲,咱们从网上收集大量的多模态数据并将它们组织成图像 / 视频 – 文本对数据集。这些数据集中的文本数据能够是人工生成的题目、主动生成的题目、图像元数据或简略的指标类别标签。此类大型数据集有 PMD 和 LAION-5B 等。PMD 数据集联合了多个较小的数据集,例如 Flickr30K、COCO 和 Conceptual Captions 数据集。COCO 检测和图像题目 (>330K 图像) 数据集别离由图像实例和其所含指标的文本标签及形容对组成。Conceptual Captions (> 3.3M images) 和 Flickr30K (> 31K images) 数据集中的图像以及它们的对应的用自然语言形容图像的题目都是从网上爬取的。

即便是那些人工生成题目的图像文本数据集 (例如 Flickr30K) 也存在固有的噪声,因为用户并不总是为其图像编写描述性或反馈图像内容的题目。为了克服这个问题,LAION-5B 等数据集利用 CLIP 或其余预训练的多模态模型来过滤噪声数据并创立高质量的多模态数据集。此外,一些视觉语言模型,如 ALIGN,提出了进一步的预处理步骤并创立了本人的高质量数据集。还有些视觉语言数据集蕴含了视频和文本双模态,例如 LSVTD 和 WebVid 数据集,尽管它们规模较小。

上游数据集

预训练视觉语言模型通常还会针对各种上游工作进行训练,例如视觉问答、文本疏导指标检测、文本疏导图像修复、多模态分类以及各种独立的 NLP 和计算机视觉工作。

针对问答类上游工作进行微调的模型,例如 ViLT 和 GLIP,个别应用 VQA (视觉问答)、VQA v2、NLVR2, OKVQA, TextVQA, TextCaps 和 VizWiz 数据集。这些数据集的图像通常都配有多个开放式问题和答案。此外,VizWiz 和 TextCaps 等数据集也可用于图像宰割和指标定位这些上游工作。其余一些乏味的多模态上游数据集有,用于多模态分类的 Hateful Memes,用于视觉蕴含预测的 SNLI-VE,以及用于视觉语言组合推理的 Winoground。

请留神,视觉语言模型也可用于各种经典的 NLP 和计算机视觉工作,例如文本或图像分类。此时,通常应用单模态数据集如 SST2,ImageNet-1k 来实现此类上游工作。此外,COCO 和 Conceptual Captions 等数据集也罕用于预训练模型以及题目生成等上游工作。

在 🤗 Transformers 中反对视觉语言模型

应用 Hugging Face Transformers,你能够轻松下载、运行和微调各种预训练视觉语言模型,或者混合搭配预训练视觉模型和预训练语言模型来搭建你本人的模型。🤗 Transformers 反对的一些视觉语言模型有:

  • CLIP
  • FLAVA
  • GIT
  • BridgeTower
  • GroupViT
  • BLIP
  • OWL-ViT
  • CLIPSeg
  • X-CLIP
  • VisualBERT
  • ViLT
  • LiT (VisionTextDualEncoder 的一个实例)
  • TrOCR (VisionEncoderDecoderModel 的一个实例)
  • VisionTextDualEncoder
  • VisionEncoderDecoderModel

这里 CLIP、FLAVA、BridgeTower、BLIP、LiT 和 VisionEncoderDecoder 等模型会生成联结图像 – 文本嵌入,可用之于零样本图像分类等上游工作,而其余模型则针对乏味的上游工作进行训练。此外,FLAVA 是基于单模态和多模态两个预训练指标训练的,因而可用于单模态视觉或语言工作以及多模态工作。

例如,OWL-ViT 使能 了零样本 – 文本疏导指标检测和单样本 – 图像疏导指标检测工作,CLIPSeg 和 GroupViT 使能 了文本和图像疏导的图像宰割工作,VisualBERT、GIT 和 ViLT 使能 了视觉问答以及其余各种工作。X-CLIP 是一种应用视频和文本模态进行训练的多模态模型,它可能 使能 相似于 CLIP 的零样本图像分类的视频分类工作。

与其余模型不同,VisionEncoderDecoderModel 是一个标准化的模型,可用于初始化任意图像转文本模型,这类模型能够应用任何预训练的基于 Transformer 的视觉模型作为编码器 (例如 ViT、BEiT、DeiT、Swin) 以及任何预训练的语言模型作为解码器 (例如 RoBERTa、GPT2、BERT、DistilBERT)。事实上,TrOCR 是这个规范类的一个实例。

让咱们持续试验其中的一些模型。咱们将应用 ViLT 进行视觉问答,应用 CLIPSeg 进行零样本图像宰割。首先,咱们要装置 🤗Transformers: pip install transformers

基于 ViLT 的 VQA

让咱们从 ViLT 开始,下载一个在 VQA 数据集上预训练的模型。咱们能够简略地初始化相应的模型类而后调用“from_pretrained ()”办法来下载想要的 checkpoint。

from transformers import ViltProcessor, ViltForQuestionAnswering

model = ViltForQuestionAnswering.from_pretrained ("dandelin/vilt-b32-finetuned-vqa")

接下来,咱们轻易下载一张有两只猫的图像,并对该图像和咱们的查问问题进行预处理,将它们转换为模型冀望的输出格局。为此,咱们能够不便地应用相应的预处理器类 (ViltProcessor) 并应用相应 checkpoint 的预处理配置对其进行初始化。

import requests
from PIL import Image

processor = ViltProcessor.from_pretrained ("dandelin/vilt-b32-finetuned-vqa")

# download an input image
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open (requests.get (url, stream=True).raw)
text = "How many cats are there?"

# prepare inputs
inputs = processor (image, text, return_tensors="pt")

最初,咱们能够应用预处理后的图像和问题作为输出进行推理,并打印出预测答案。然而,要牢记的重要一点是确保你的文本输出与训练时所用的问题模板类似。你能够参考 论文和数据集 来理解如何生成这些问题。

import torch

# forward pass
with torch.no_grad ():
    outputs = model (**inputs)

logits = outputs.logits
idx = logits.argmax (-1).item ()
print ("Predicted answer:", model.config.id2label [idx])

含糊其辞,对吧?让咱们用 CLIPSeg 做另一个演示,看看咱们如何用几行代码执行零样本图像宰割。

应用 CLIPSeg 做零样本图像宰割

咱们将从初始化 CLIPSegForImageSegmentation 及其相应的预处理类开始,并加载咱们的预训练模型。

from transformers import CLIPSegProcessor, CLIPSegForImageSegmentation

processor = CLIPSegProcessor.from_pretrained ("CIDAS/clipseg-rd64-refined")
model = CLIPSegForImageSegmentation.from_pretrained ("CIDAS/clipseg-rd64-refined")

接下来,咱们将应用雷同的输出图像,并用形容待宰割指标的文原本查问模型。与其余预处理器相似,CLIPSegProcessor 将输出转换为模型冀望的格局。因为咱们要宰割多个指标,咱们别离对每个形容文本都应用雷同的输出图像。

from PIL import Image
import requests

url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open (requests.get (url, stream=True).raw)
texts = ["a cat", "a remote", "a blanket"]

inputs = processor (text=texts, images=[image] * len (texts), padding=True, return_tensors="pt")

与 ViLT 相似,重要的是要参考 原作,看看他们用什么样的文本提醒来训练模型,以便在推理时获得最佳性能。尽管 CLIPSeg 在简略的对象形容 (例如“汽车”) 上进行训练的,但其 CLIP 骨干是在设计好的文本模板 (例如“汽车图像”、“汽车照片”) 上预训练的,并在随后的训练中解冻。输出通过预处理后,咱们能够执行推理以取得每个文本查问的二值宰割图。

import torch

with torch.no_grad ():
    outputs = model (**inputs)

logits = outputs.logits
print (logits.shape)
>>> torch.Size ([3, 352, 352])

让咱们可视化一下后果,看看 CLIPSeg 的体现如何 (代码改编自 这篇文章)

import matplotlib.pyplot as plt

logits = logits.unsqueeze (1)

_, ax = plt.subplots (1, len (texts) + 1, figsize=(3*(len (texts) + 1), 12))
[a.axis ('off') for a in ax.flatten ()]
ax [0].imshow (image)
[ax [i+1].imshow (torch.sigmoid (logits [i][0])) for i in range (len (texts))];
[ax [i+1].text (0, -15, prompt) for i, prompt in enumerate (texts)]

太棒了,不是吗?

视觉语言模型反对大量有用且乏味的用例,并不仅限于 VQA 和零样本宰割。咱们激励你尝试将本节中提到的模型用于不同的利用。无关示例代码,请参阅模型的相应文档。

新兴钻研畛域

随同着视觉语言模型的巨大进步,咱们看到了新的上游工作和应用领域的呈现,例如医学和机器人技术。例如,视觉语言模型越来越多地被用于医疗,产生了诸如 Clinical-BERT 之类的工作来依据喷射照片来进行医学诊断和报告生成,以及 MedFuseNet 来用于医学畛域的视觉问答。

咱们还看到大量将联结视觉语言示意利用于各种畛域的工作,如用于图像处理 (例如,StyleCLIP、StyleMC,DiffusionCLIP)、基于文本的视频检索 (例如,X-CLIP)、基于文本的操作 (例如,Text2Live 以及 基于文本的 3D 形态和纹理操作 (例如,AvatarCLIP,CLIP-NeRF, Latent3D, CLIPFace, Text2Mesh)。在相似的工作中,MVT 提出了一种联结 3D 场景 – 文本示意模型,可用于各种上游工作,例如 3D 场景补全。

尽管机器人钻研尚未大规模利用视觉语言模型,但咱们看到 CLIPort 等工作利用联结视觉语言示意进行端到端模拟学习,并声称比之前的 SOTA 有了很大的改良。咱们还看到,大型语言模型越来越多地被用于机器人工作,例如常识推理、导航和工作布局。例如,ProgPrompt 提出了一个应用大语言模型 (Large Language Model,LLM) 生成情境机器人工作打算的框架。同样,SayCan 应用 LLM 依据给定的环境及环境中物体的视觉形容,抉择最正当的动作。只管这些停顿令人印象粗浅,但因为指标检测数据集的限度,机器人钻研依然局限在无限的环境和指标集中。随着 OWL-ViT 和 GLIP 等凋谢集指标检测模型的呈现,咱们能够期待多模态模型与机器人导航、推理、操作和工作布局框架的集成会更严密。

论断

近年来,多模态模型获得了令人难以置信的提高,视觉语言模型在性能、用例以及利用的多样性方面获得了显著的飞跃。在这篇文章中,咱们探讨了视觉语言模型的最新进展,可用的多模态数据集以及咱们能够应用哪些预训练策略来训练和微调此类模型。咱们还展现了如何将这些模型集成到 🤗 Transformers 中,以及如何应用它们通过几行代码来执行各种工作。

咱们将持续集成最具影响力的计算机视觉和多模态模型,并心愿收到你的回音。要理解多模态钻研的最新消息,欢送在 Twitter 上关注咱们: @adirik,@NielsRogge,@apsdehal,@a_e_roberts,@RisingSayak 和 @huggingface。

致谢: 咱们感激 Amanpreet Singh 和 Amy Roberts 的严格审查。此外,还要感激 Niels Rogge、Younes Belkada 和 Suraj Patil,以及 Hugging Face 的许多其他人,他们为促成基于 Transformers 的多模态模型的应用奠定了根底。


英文原文: <url> https://huggingface.co/blog/v… </url>

作者: Alara Dirik, Sayak Paul

译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的利用及大规模模型的训练推理。

审校、排版: zhongdongy (阿东)

正文完
 0