深入研究视觉语言模型

释放双眼,带上耳机,听听看~!
本文深入研究了联合视觉语言模型的最新进展,重点关注了训练方式和学习策略。通过介绍对比学习、PrefixLM、Multi-modal Fusing with Cross Attention等预训练目标,展示了视觉语言模型的发展趋势和应用前景。

深入研究视觉语言模型

人类学习本质上是多模式的,因为联合利用多种感官有助于我们更好地理解和分析新信息。不出所料,多模式学习的最新进展从这一过程的有效性中汲取灵感,创建了可以使用图像、视频、文本、音频、身体姿势、面部表情和生理信号等各种模式处理和链接信息的模型。

自 2021 年以来,我们看到人们对结合了视觉和语言模式的模型(也称为联合视觉语言模型)越来越感兴趣,例如OpenAI 的 CLIP。联合视觉语言模型在非常具有挑战性的任务中表现出了特别令人印象深刻的能力,例如图像字幕、文本引导图像生成和操作以及视觉问答。这个领域在不断发展,它在改进零样本泛化方面的有效性也在不断发展,从而产生了各种实际用例。

在这篇博文中,我们将介绍联合视觉语言模型,重点关注它们的训练方式。我们还将展示如何利用 🤗 transformers 来试验该领域的最新进展。

介绍

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

有助于定义这些模型的一个特征是它们处理图像(视觉)和自然语言文本(语言)的能力。此过程取决于输入、输出以及要求这些模型执行的任务。

以零样本图像分类任务为例。我们将像这样传递一个图像和一些提示,以获得输入图像最可能的提示。

为了预测类似的东西,模型需要理解输入图像和文本提示。该模型将具有单独或融合的视觉和语言编码器来实现这种理解。

但是这些输入和输出可以有多种形式。下面我们举几个例子:

  • 从自然语言文本中检索图像。
  • Phrase grounding,即从输入图像和自然语言短语。
  • 视觉问答,即从输入图像和自然语言问题中找到答案。
  • 为给定图像生成标题。这也可以采用条件文本生成的形式,您可以从自然语言提示和图像开始。
  • 从涉及图像和文本模式的社交媒体内容中检测仇恨言论。

学习策略

视觉语言模型通常由 3 个关键元素组成:图像编码器、文本编码器以及融合来自两个编码器的信息的策略。这些关键元素紧密耦合在一起,因为损失函数是围绕模型架构和学习策略设计的。虽然视觉语言模型研究算不上是一个新的研究领域,但此类模型的设计多年来发生了巨大变化。早期的研究采用手工制作的图像描述符和预训练词向量或基于频率的 TF-IDF 特征,而最新的研究主要采用带有变换器的图像和文本编码器单独或联合学习图像和文本特征的体系结构。这些模型经过预训练,具有战略性预训练目标,可实现各种下游任务。

我们将在预训练目标中涵盖以下主题:

  • 对比学习: 以对比方式将图像和文本对齐到联合特征空间
  • PrefixLM: 通过使用图像作为语言模型的前缀来联合学习图像和文本嵌入
  • Multi-modal Fusing with Cross Attention: 将视觉信息融合到具有交叉注意力机制的语言模型层中
  • MLM / ITM: 使用掩码语言建模和图像文本匹配目标将部分图像与文本对齐
  • 无训练: 通过迭代优化使用独立视觉和语言模型

1)对比学习

深入研究视觉语言模型

对比学习是视觉模型常用的预训练目标,并且已被证明是视觉语言模型的高效预训练目标。最近的作品,如CLIP、CLOOB、ALIGN和DeCLIP,使用由 {image, caption} 对组成的大型数据集,通过联合学习文本编码器和图像编码器以及对比损失来桥接视觉和语言模式。对比学习旨在将输入图像和文本映射到相同的特征空间,以便图像-文本对的嵌入之间的距离在匹配时最小化,或者在不匹配时最大化。

对于 CLIP,距离只是文本和图像嵌入之间的余弦距离,而 ALIGN 和 DeCLIP 等模型设计了自己的距离度量来考虑嘈杂的数据集。

另一项工作LiT介绍了一种使用 CLIP 预训练目标微调文本编码器同时保持图像编码器冻结的简单方法。作者将这个想法解释为一种教文本编码器更好地从图像编码器读取图像嵌入的方法。这种方法已被证明是有效的,并且比 CLIP 的样本效率更高。其他作品,如FLAVA,结合使用对比学习和其他预训练策略来对齐视觉和语言嵌入。

2)前缀LM

深入研究视觉语言模型

另一种训练视觉语言模型的方法是使用 PrefixLM 目标。SimVLM和VirTex等模型使用此预训练目标,并具有统一的多模式架构,由 Transformer 编码器和 Transformer 解码器组成,类似于自回归语言模型。

让我们分解一下,看看它是如何工作的。具有前缀目标的语言模型在给定输入文本作为前缀的情况下预测下一个标记。例如,给定序列“A man is standing at the corner”,我们可以使用“A man is standing at the”作为前缀并训练模型以预测下一个标记——“corner”或另一个似是而非的延续的前缀。

视觉转换器 (ViT) 通过将每个图像划分为多个补丁并将这些补丁作为输入按顺序提供给模型,从而将相同的前缀概念应用于图像。利用这个想法,SimVLM 具有一种架构,其中编码器接收连接的图像补丁序列和前缀文本序列作为前缀输入,然后解码器预测文本序列的延续。上图描述了这个想法。SimVLM 模型首先在前缀中没有图像块的文本数据集上进行预训练,然后在对齐的图像文本数据集上进行预训练。这些模型用于图像条件文本生成/字幕和 VQA 任务。

利用统一的多模式架构将视觉信息融合到图像引导任务的语言模型 (LM) 中的模型显示出令人印象深刻的能力。然而,仅使用 PrefixLM 策略的模型在应用领域方面可能会受到限制,因为它们主要设计用于图像字幕或视觉问答下游任务。

例如,给定一组人的图像,我们可以查询该图像以写下图像的描述(例如,“一群人站在建筑物前并微笑着”)或使用以下问题进行查询需要视觉推理:“有多少人穿着红色 T 恤?”。另一方面,学习多模态表示或采用混合方法的模型可以适用于各种其他下游任务,例如对象检测和图像分割。

冷冻前缀LM

深入研究视觉语言模型

虽然将视觉信息融合到语言模型中非常有效,但能够使用预训练语言模型 (LM) 而无需微调会更有效。因此,视觉语言模型的另一个预训练目标是学习与冻结语言模型对齐的图像嵌入。

Frozen、MAPL和ClipCap等模型使用此 Frozen PrefixLM 预训练目标。他们仅在训练期间更新图像编码器的参数以生成图像嵌入,这些图像嵌入可以用作预训练的冻结语言模型的前缀,其方式与上面讨论的 PrefixLM 目标类似。Frozen 和 ClipCap 都在对齐的图像文本(标题)数据集上进行训练,目的是在给定图像嵌入和前缀文本的情况下生成标题中的下一个标记。

最后,Flamingo保持了预训练视觉编码器和语言模型的冻结状态,并在广泛的开放式视觉和语言任务的小样本学习中建立了新的最先进技术。Flamingo 通过在预训练的冻结视觉模型之上添加 Perceiver Resampler 模块并在现有的预训练和冻结 LM 层之间插入新的交叉注意层以根据视觉数据调节 LM 来实现这一点。

Frozen PrefixLM 预训练目标的一个很好的优势是它可以使用有限的对齐图像文本数据进行训练,这对于没有对齐多模态数据集的领域特别有用。

3)多模态融合与交叉注意力

深入研究视觉语言模型

将预训练语言模型用于多模式任务的另一种方法是使用交叉注意机制将视觉信息直接融合到语言模型解码器的层中,而不是使用图像作为语言模型的附加前缀。VisualGPT、VC-GPT和Flamingo等模型使用这种预训练策略,并接受图像字幕和视觉问答任务的训练。这种模型的主要目标是有效地平衡文本生成能力和视觉信息的混合,这在没有大型多模态数据集的情况下非常重要。

VisualGPT 等模型使用视觉编码器来嵌入图像,并将视觉嵌入提供给预训练语言解码器模块的交叉注意层,以生成合理的字幕。最近的一项工作FIBER将具有门控机制的交叉注意力层插入到视觉和语言主干中,以实现更高效的多模态融合,并支持各种其他下游任务,例如图像文本检索和开放词汇对象检测。

4)掩码语言建模/图像文本匹配

另一系列视觉语言模型使用掩码语言建模 (MLM) 和图像文本匹配 (ITM) 目标的组合,将图像的特定部分与文本对齐,并启用各种下游任务,例如视觉问答、视觉常识推理、基于文本的图像检索和文本引导的对象检测。遵循此预训练设置的模型包括VisualBERT、FLAVA、ViLBERT、LXMERT和BridgeTower。

深入研究视觉语言模型

让我们分解 MLM 和 ITM 目标的含义。给定一个部分遮盖的说明,MLM 的目标是根据相应的图像预测遮盖的单词。请注意,MLM 目标需要使用带有边界框的注释丰富的多模态数据集,或者使用对象检测模型为部分输入文本生成对象区域建议。

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

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

5) 没有培训

最后,各种优化策略旨在使用预训练的图像和文本模型来桥接图像和文本表示,或者在无需额外训练的情况下使预训练的多模态模型适应新的下游任务。

例如,MaGiC提出通过预训练的自回归语言模型进行迭代优化,为输入图像生成说明。为此,MaGiC 使用生成的标记和输入图像的 CLIP 嵌入来计算基于 CLIP 的“魔法分数”。

深入研究视觉语言模型

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 等数据集也可用于图像分割和对象定位下游任务。其他一些有趣的多模态下游数据集是用于多模态分类的仇恨模因, SNLI-VE用于视觉蕴含预测,Winoground用于视觉语言组合推理。

请注意,视觉语言模型用于各种经典的 NLP 和计算机视觉任务,例如文本或图像分类,并且通常将单模态数据集(例如SST2、ImageNet-1k)用于此类下游任务。此外,COCO和Conceptual Captions等数据集通常用于模型的预训练以及字幕生成下游任务。

虽然 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

用于 VQA 的 ViLT

让我们从 ViLT 开始,下载一个在 VQA 数据集上预训练的模型。我们可以通过简单地初始化相应的模型类并调用方法from_pretrained()来下载我们想要的检查点来做到这一点。

from transformers import ViltProcessor, ViltForQuestionAnswering

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

接下来,我们将下载两只猫的随机图像,并对图像和我们的查询问题进行预处理,将它们转换为模型期望的输入格式。为此,我们可以方便地使用相应的预处理器类 ( ViltProcessor) 并使用相应检查点的预处理配置对其进行初始化。

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.id2labelidx])

直截了当,对吧?让我们用 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()]
ax0].imshow(image)
axi+1].imshow(torch.sigmoid(logitsi]0])) for i in range(len(texts))];
axi+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提出了一个使用大型语言模型 (LLM) 生成情境机器人任务计划的框架。同样,SayCan在给定环境和可用对象的视觉描述的情况下,使用 LLM 选择最合理的动作。尽管这些进步令人印象深刻,但由于对象检测数据集的限制,机器人研究仍然局限于有限的环境和对象集。随着OWL-ViT和GLIP等开放词汇对象检测模型的出现,我们可以期待多模式模型与机器人导航、推理、操作和任务规划框架的更紧密集成。

结论

近年来,多模态模型取得了令人难以置信的进步,视觉语言模型在性能以及用例和应用程序的多样性方面取得了最显着的飞跃。在这篇博客中,我们讨论了视觉语言模型的最新进展,以及可用的多模态数据集以及我们可以使用哪些预训练策略来训练和微调此类模型。我们还展示了如何将这些模型集成到 🤗 Transformers 中,以及如何使用它们通过几行代码来执行各种任务。

本文正在参加 人工智能创作者扶持计划

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

世界杯首场大冷门!沙特2:1反超阿根廷背后的科技与狠活

2023-12-16 11:06:14

AI教程

OctaveConv: 提高精度、降低计算成本的卷积神经网络

2023-12-16 11:20:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索