VLM:计算机视觉模型的未来

图像处理大数据关系型数据库

点击下方 卡片 ,关注“ 慢慢学AIGC ”

前言

如何通过 VLM 构建一个准确率提高 28% 的多模态图像搜索引擎?
作者:Ro Isachenko,发布在 Towards Data Science,点击底部“阅读原文”可直达作者博客页面。

直到最近,AI 模型的范围都很窄,要么只能理解语言,要么只能理解特定的图像,很少能同时理解两者。

从这个角度来看, 通用语言模型 (如 GPT)是一个巨大的飞跃,因为我们从 专用模型 过渡到了更强大的 通用模型

但即使随着语言模型的进步,它们仍然与计算机视觉领域保持分离,各个领域都在各自的领域内发展而没有架起桥梁。想象一下如果你只能听不能看,或者反之亦然会是什么样子。

我是 Roman Isachenko,是 Yandex 计算机视觉团队的一员。

在本文中,我将讨论视觉语言模型(VLM),我认为这是复合 AI 系统的未来。我将解释 开发多模态神经网络用于图像搜索的基础知识和训练过程 ,探讨使其成为可能的 设计原则、挑战和架构

在最后,我还会向您展示我们如何使用支持 AI 的搜索产品来处理图像和文本,以及引入 VLM 后发生了什么变化。

让我们开始吧!

什么是 VLM?

拥有数十亿甚至数千亿参数的大语言模型(LLM)已不再新鲜。我们到处都能看到它们!LLM 研究的下一个重点更倾向于开发 多模态模型(全能模型) - 能够理解和处理多种数据类型的模型。这些模型顾名思义不仅可以处理文本,还可以分析图像、视频和音频。

picture.image

但我们为什么要这样做呢? 有句话说"多才多艺却样样平庸的人,往往比精通一门的人更好"(公司更喜欢全栈工程师)。 近年来,我们看到通用方法战胜了专用方法。

想一想。 如今的语 言驱动的机器学习模型已经变得相对先进且通用。 一个模型可以翻译、总结、识别语音标签等等。

picture.image

但早期,这些模型都是面向特定任务的(现在我们仍然有这样的模型,但比以前少了):

  • 专门用于翻译的模型
  • 专门用于总结的模型等

换句话说,如今的 NLP 模型(特别是 LLM)可以服务于以前需要开发高度特定解决方案的多个目标任务。

其次,这种方法允许我们以 指数级扩展可用于模型训练的数据 ,这对于有限的文本数据来说至关重要。而早期,人们需要特定任务的数据:

  • 专门的翻译标注数据集

  • 专门的总结数据集等

第三,我们相信训练 多模态模型可以增强每种数据类型的性能 ,和人类一样“博学多识”。

在本文中,我们将"黑盒"概念简化为这样一个场景:模型接收图像和一些文本(我们称之为"指令")作为输入,并只输出文本(响应)。 我们处理 流程如下 :

picture.image

我们将讨论图像识别模型,这些模型可以分析和解释图像所描述的内容。

在深入技术细节之前,让我们考虑一下这些模型可以解决的问题。 以下是一些示例:

picture.image

  • 左上图:我们要求模型描述图像。这通过文本指定。

  • 中上图:我们要求模型解释图像。

  • 右上图:我们要求模型解释图像并告诉我们如果遵循指示牌会发生什么。

  • 底图:这是最复杂的例子。我们给模型一些数学问题。从这些例子中,你可以看到任务范围是广泛和多样的。

VLM 是计算机视觉的新前沿,可以以零样本和单样本模式解决各种基本的 CV 相关任务(分类、检测、描述)。

虽然 VLM 可能还不能在每个标准任务中都表现出色,但它们正在快速进步。

现在,让我们了解它们是如何工作的。

VLM 架构

这些模型通常有三个主要组件:

picture.image

  1. LLM
  • 文本模型(在我们的例子中是 YandexGPT),它不理解图像。
  1. 图像编码器
  • 图像模型(CNN 或 Vision Transformer),它不理解文本。
  1. 适配器 - 充当中介的模型,确保 LLM 和图像编码器能很好地配合。

流程非常直接:

  1. 将图像输入图像编码器

  2. 使用适配器将图像编码器的输出转换为某种表示

  3. 将适配器的输出整合到 LLM 中(下面会详细介绍)

  4. 在处理图像的同时,将文本指令转换为一系列 tokens 并输入 LLM

适配器是模型中最有趣和最重要的部分,因为它精确地促进了 LLM 和图像编码器之间的通信/交互。

有两种类型的适配器:

  • 基于提示的适配器

  • 基于交叉注意力的适配器

基于提示的适配器最早在 BLIP-2LLaVa 模型中提出。这个想法简单直观,从名称本身就可以看出。我们获取图像编码器的输出(取决于架构,可能是向量、向量序列或张量),并将其转换为向量序列(tokens),然后输入到 LLM 中。你可以使用一个简单的多层感知器模型作为适配器,结果可能会相当不错。

基于交叉注意力的适配器在这方面稍微复杂一些。它们在最近关于 Llama 3.2NVLM 的论文中使用。这些适配器旨在将图像编码器的输出转换为可在 LLM 的交叉注意力块中用作键/值矩阵的形式。这种适配器的例子包括 transformer 架构,如感知器重采样器或 Q-former

picture.image

这两种方法都有优点和缺点。

目前, 基于提示的适配器能带来更好的结果,但会占用 LLM 大量的输入上下文 ,而这对于有限上下文长度的 LLM 来说很重要。

基于交叉注意力的适配器不会占用 LLM 的上下文,但需要大量参数才能达到好的质量

VLM 训练

了解了架构之后,让我们深入训练过程。

首先,需要注意的是 VLM 不是从头开始训练的(虽然我们认为这只是时间问题),而是建立在预训练的 LLM 和图像编码器之上。 使用这些预训练模型,我们在多模态文本和图像数据上微调我们的 VLM。

这个过程包括两个步骤:

  • 预训练

  • 对齐:SFT + RL(可选)

picture.image

注意这些阶段和 LLM 训练有些相似, 这是因为两个过程在概念上是相似的。 让我们简要看看这些阶段。

VLM 预训练

在这个阶段我们想要达到的目标是:

  • 将文本和图像模态链接在一起(记住我们的模型包含一个我们之前没有训练过的适配器)

  • 将世界知识加载到我们的模型中(图像有很多特性,比如 OCR 技能)

VLM 预训练中使用三种类型的数据:

    1. 交错预训练 :这反映了 LLM 预训练阶段,我们通过输入网页文档来教模型执行下一个标记预测任务。在 VLM 预训练中,我们选择带有图像的网页文档并训练模型预测文本。主要区别在于 VLM 同时考虑页面上的文本和图像。这种数据很容易获得,所以这种类型的预训练不难扩展。但是,数据质量不太好,提高数据质量是一个难题。
      picture.image
    1. 图像-文本对预训练 :我们训练模型执行一个特定任务:为图像添加说明文字。为此,你需要一个包含相关描述的大型图像语料库。这种方法更受欢迎,因为许多这样的语料库被用来训练其他模型(文本到图像生成,图像到文本检索)。
      picture.image
    1. 基于指令的预训练 :在推理过程中,我们会向模型输入图像和文本。为什么不从一开始就这样训练模型呢?这正是基于指令的预训练所做的:它在一个巨大的图像-指令-答案三元组数据集上训练模型,即使数据并不总是完美的。
      picture.image

训练一个 VLM 模型需要多少数据是一个复杂的问题。在这个阶段,所需的 数据集大小可以从几百万到几十亿 (还好不是万亿!)样本不等。

我们的团队使用了包含 几百万个样本 的基于指令的预训练。然而,我们相信交错预训练有很大潜力,我们正在积极朝这个方向努力。

VLM 对齐

完成预训练后,就该开始对齐了。 它包括 SFT 训练和一个可选的 RL 阶段。 由于我们只有 SFT 阶段,我将重点关注这个。

不过,最近的论文经常在 VLM 之上包含一个 RL 阶段,它使用与 LLM 相同的方法(DPO 和各种修改,这些修改在方法名称的第一个字母上有所不同)。

言归正传,回到 SFT。

严格来说,这个阶段类似于基于指令的预训练。区别在于我们 关注具有适当响应结构、格式和强大推理能力的高质量数据 。这意味着模型必须能够理解图像并对其进行推理。理想情况下,它应该对没有图像的文本指令也能同样好地响应,所以我们还会加入高质量的纯文本数据。最终,这个阶段的 数据通常在几十万到几百万个示例 之间。在我们的案例中,数量在 六位数 左右。

质量评估

让我们讨论评估 VLM 质量的方法。我们使用两种方法:

    1. 在开源基准测试上计算指标
    1. 使用并排(SBS)评估比较模型,评估员比较两个模型的响应并选择更好的那个

第一种方法允许我们 在特定的数据子集上测量代理指标 (如分类任务中的准确性)。然而,由于大多数基准测试都是英语的,它们不能用来比较用其他语言(如德语、法语、俄语等)训练的模型。虽然可以使用翻译,但翻译模型引入的错误使结果不可靠。

第二种方法允许对模型进行更深入的分析,但 需要细致(且昂贵)的人工数据标注

我们的模型是双语的,可以用英语和俄语回应。因此,我们可以使用英语开源基准测试并运行并排比较。

我们信任这种方法并在其中投入了大量资源。以下是我们要求评估员评估的内容:

  • 语法

  • 可读性

  • 全面性

  • 与指令的相关性

  • 错误(逻辑和事实)

  • 幻觉

我们努力评估我们模型技能的完整和多样化子集。

以下饼图说明了我们 SBS 评估桶中任务的分布。

picture.image

这总结了 VLM 基础知识的概述,以及如何训练模型和评估其质量。

AI 搜索引擎架构

今年春天,我们为 Neuro(一个支持 AI 的搜索产品)添加了多模态功能,允许用户使用文本和图像提问。直到最近, 其底层技术并不是真正的多模态 。以下是之前流水线的样子:

picture.image

这个图看起来很复杂,但一旦你将其分解成步骤就很直观了:

  1. 用户提交图像和文本查询

  2. 我们将图像发送到视觉搜索引擎,它会返回关于图像的丰富信息(标签、识别的文本、信息卡)

  3. 我们使用 重新表述器 (一个微调的 LLM)用这些信息和原始查询生成一个新文本查询

  4. 基于新表述的文本查询,我们使用 Yandex 搜索引擎检索相关文档(或摘录,我们称之为 infocontext)

  5. 最后,利用所有这些信息(原始查询、视觉搜索信息、重新表述的文本查询和信息上下文),我们使用生成器模型(另一个微调的 LLM)生成最终响应。

  6. 完成!

如你所见,我们过去依赖两个单模态 LLM 和我们的视觉搜索引擎。这个解决方案在 小样本查询上效果很好,但有局限性 。下面是一个例子(虽然有点夸张)展示了事情可能如何出错。

picture.image

在这里,重新表述器接收视觉搜索服务的输出,但根本不理解用户的原始意图。 反过来,对图像一无所知的 LLM 模型生成了不正确的搜索查询,同时获取了关于哈巴狗和苹果的标签。

为了提高我们多模态响应的质量并允许用户提出更复杂的问题,我们在架构中引入了 VLM 。具体来说,我们做了两个主要修改:

  1. 我们 用 VLM 重新表述器替换了 LLM 重新表述器 。本质上,我们开始在原有文本基础上,将原始图像输入到重新表述器中。

  2. 我们在流水线中添加了 一个独立的 VLM 描述器 。这个模型提供图像描述,我们将其用作最终生成器的信息上下文。

你可能会想,

为什么不直接让生成器本身基于VLM呢? 这是个好主意! 但是有一个问题。 我们的生成器训练继承自 Neuro 的文本模型,这个模型经常更新。 为了更快更方便地更新流水线,引入一个独立的 VLM 模块对我们来说更容易。 而且,这种设置效果同样好。

picture.image

训练 VLM 重新表述器和 VLM 描述器是两个独立的任务。 为此,我们使用前面提到的 VLM,并针对这些特定任务进行了微调。 微调这些模型需要收集 由数万个样本组成的单独训练数据集 。 我们还不得不对基础设施进行重大改变,以使流水线在计算上更有效率。

现在来到重要的问题: 在一个相当复杂的流水线中引入 VLM 是否改善了情况?

简短的回答是:是的,确实改善了! 我们运行了并排测试来衡量新流水线的性能,并将我们之前的 LLM 框架与新的 VLM 框架进行了比较。 这种评估类似于我们之前讨论的核心技术评估。 但在这种情况下,我们使用了一组不同的图像和查询,这些更符合用户可能会问的问题。 下面是这个评估桶中聚类的大致分布。

picture.image

我们的离线并排评估显示,我们显著改善了最终响应的质量。 VLM 流水线明显提高了响应质量,并覆盖了更多的用户场景。

picture.image

我们还想在真实用户群中测试结果,看看我们的用户是否会注意到我们认为会改善产品体验的技术变化。 因此,我们进行了在线分割测试,比较我们的 LLM 流水线和新的 VLM 流水线。 初步结果显示以下变化:

  • 包含图像的指令数量增加了 17%

  • 会话数量(用户连续输入多个查询)上升了 4.5%

重申上面所说的,我们坚信 VLM 是计算机视觉模型的未来。 VLM 已经能够解决许多开箱即用的问题。 通过一些微调,它们绝对可以提供最先进的质量。

感谢阅读!


点击下方 卡片 ,关注“ 慢慢学AIGC ”

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论