视觉语言模型 (VLMs):跨模态智能的探索

文章目录

  • 一. VLMs 的重要性与挑战:连接视觉与语言的桥梁 🌉
  • 二. VLMs 的核心训练范式:四种主流策略 🗺️
    • 1. 对比训练 (Contrastive Training):拉近正例,推远负例 ⚖️
    • 2. 掩码方法 (Masking):重构缺失信息,学习上下文关联 🎭
    • 3. 生成式 VLMs (Generative VLMs):直接生成文本或图像 🎨
    • 4. 利用预训练模型的 VLMs (VLMs Leveraging Pre-trained Models):站在巨人肩膀上 🚀
  • 三. 部分模型详解
    • 3.1 BLIP2
      • 3.1.1 模型结构
      • 3.1.2 模型训练
    • 3.2 LLaVA
      • 3.2.1 训练数据
      • 3.2.2 模型训练
      • 3.2.3 LLaVA的贡献
    • 3.3 MiniGPT-4
      • 3.3.1 Adapter结构
      • 3.3.2 模型训练
    • 3.4 QwenVL
      • 3.4.1 输入输出格式
      • 3.4.2 Adapter结构
      • 3.4.3 模型训练
    • 3.5 InternVL-v1.5
      • 3.5.1 动态长宽比
      • 3.5.2 超大VIT, Pixel Shuffle及模型结构
      • 3.5.3 训练数据集
      • 3.5.4 InternVL-v1.5的贡献
    • 3.6 Qwen2VL
      • 3.6.1 动态分辨率
      • 3.6.2 统一的多模态Rope位置embedding
      • 3.6.3 训练过程
  • 四. VLM 训练实践指南 👑
    • 1. 训练数据:高质量数据是成功的基石 💎
    • 2. 软件工具与硬件资源:高效训练的保障 ⚙️
    • 3. 模型选择:根据任务和资源选择合适的模型 🤔
    • 4. 提升定基 (Grounding):解决幻觉,提升理解 🎯
    • 5. 提升对富含文本的图像的理解:OCR 与场景文本理解 📝
    • 6. 参数高效型微调 (Parameter-Efficient Fine-Tuning, PEFT):轻量级微调策略 🪶
    • 7. 实现负责任的 VLM 评估:全面、多维度的性能度量 📊
    • 8. 将 VLMs 扩展用于视频:动态视觉信息处理 🎬
  • 五. 结论与未来展望:VLM 的无限可能 ✨
  • 参考文献

近年来,人工智能 (AI) 领域经历了爆炸式发展,深度学习作为核心驱动力,在计算机视觉 (CV) 和自然语言处理 (NLP) 领域均取得了里程碑式的突破!🎉 为了进一步拓展 AI 的能力边界,研究人员开始积极探索如何融合视觉和语言两大模态,构建能够理解、生成并跨越图像和文本的模型。视觉语言模型 (Vision-Language Models, VLMs) 正是在这一背景下应运而生,它致力于弥合视觉与语言之间的语义鸿沟,赋予机器如同人类一般的多模态感知和认知能力。🧠✨

本文旨在对 VLMs 进行深入的技术解析,内容涵盖其重要性与挑战、核心训练范式、代表性模型详解、训练实践指南以及未来发展趋势展望。希望能够为读者提供一份全面而详实的 VLM 技术解读,助力大家深入理解并快速入门这一前沿领域。🚀👩‍💻👨‍💻
在这里插入图片描述

一. VLMs 的重要性与挑战:连接视觉与语言的桥梁 🌉

VLMs 的出现,不仅是 CV 和 NLP 领域的交叉融合,更是 AI 技术发展的重要里程碑!它极大地拓展了 AI 的应用场景,赋予机器更强大的感知和交互能力:

图像描述生成 (Image Captioning): VLMs 能够自动生成图像的自然语言描述,帮助机器“看懂”图像内容,应用于智能相册管理、辅助内容创作等领域。🖼️✍️

视觉问答 (Visual Question Answering, VQA): VLMs 能够根据图像内容回答用户提出的自然语言问题,实现更智能的人机交互,应用于智能客服、教育辅助等领域。 🖼️❓🗣️

跨模态检索 (Cross-modal Retrieval): VLMs 能够实现图像和文本之间的相互检索,例如通过文本描述检索相关图像,或通过图像检索相关文本,应用于图像搜索引擎、多媒体内容管理等领域。 🔎 ↔️ 🖼️

图像编辑 (Image Editing): 基于文本指令的图像编辑 VLMs 允许用户通过自然语言指令修改图像内容,例如“将天空变成蓝色”、“添加一只猫”,应用于创意设计、图像处理等领域。 🖼️ ✏️ ✨

机器人控制 (Robotics Control): VLMs 可以作为机器人的视觉感知和语言理解模块,使机器人能够理解人类的自然语言指令,并根据视觉信息执行复杂任务,应用于智能家居、工业自动化等领域。 🤖 👁️ 🗣️

然而,VLMs 的发展并非一帆风顺,仍然面临着诸多挑战:

跨模态语义鸿沟: 如何有效对齐和融合视觉和语言两种异构模态的信息,学习它们之间复杂的语义关联 (例如空间关系、属性、动作、因果关系等),是 VLMs 的核心挑战之一。 🤯

组合泛化能力 (Compositional Generalization): VLMs 在处理涉及组合推理的任务时,例如理解复杂场景、处理否定描述、进行计数等,仍然面临挑战,需要提升模型的组合泛化能力。 🤔

“幻觉”问题 (Hallucination): VLMs 有时会生成与图像内容不符或不真实的文本描述或图像,即产生“幻觉”,降低了模型的可靠性和可信度。 👻

鲁棒性与泛化性: VLMs 在面对分布外数据 (Out-of-Distribution, OOD) 或对抗性攻击时,性能可能会显著下降,需要提升模型的鲁棒性和泛化性。 🛡️

训练数据与计算资源: 训练高性能 VLMs 通常需要海量标注数据和强大的计算资源,这限制了研究的普及和应用,如何降低训练成本、提高数据效率是亟待解决的问题。 💰 💻

模型评估标准: 如何建立全面、客观、可信的 VLM 性能评估标准,特别是在跨模态理解、生成质量、伦理道德等方面,仍然是一个开放性研究问题。 📊 🧐

二. VLMs 的核心训练范式:四种主流策略 🗺️

基于 Transformer 架构的 VLMs,其训练范式可归纳为以下四种主流策略 (如图所示):
在这里插入图片描述

1. 对比训练 (Contrastive Training):拉近正例,推远负例 ⚖️

核心思想: 借鉴能量模型 (Energy-Based Model, EBM) 的思想,通过构建正负样本对,训练模型学习将正样本对 (例如图像及其对应的文本描述) 的表示在特征空间中拉近,同时将负样本对 (例如图像与不相关的文本描述) 的表示推远。目标是使模型能够区分相似和不相似的视觉-语言对。🎯

能量模型视角: 对比训练可以从能量模型的视角解释。模型参数为 θ 的模型Eθ被训练为对观测变量赋予低能量,而对未观测变量赋予高能量。目标分布中的数据应具有低能量,而其他数据点应具有高能量。⚡

损失函数:NCE 与 InfoNCE:

噪声对比估计 (Noise Contrastive Estimation, NCE): 将对比学习问题转化为二分类问题,模型需要区分来自真实数据分布的样本 (正样本) 和来自噪声分布的样本 (负样本)。损失函数通常采用交叉熵损失。SigLIP 模型使用了基于二元交叉熵的原始 NCE 损失。 ➕➖

InfoNCE (Information Noise Contrastive Estimation): 扩展了 NCE,利用模型表示空间中计算的距离度量 (例如余弦相似度),模型学习预测在表示空间中最接近的一对示例 (正样本对),并为所有其他负样本对分配较低的概率。CLIP 模型使用了 InfoNCE 损失。InfoNCE 的主要缺点是依赖于小批量大小,通常需要大批量才能有效。 📊

SimCLR: 一种自监督学习方法,使用 InfoNCE 损失。正样本对定义为同一图像的不同数据增强版本,负样本对来自同一批次的其他图像。 🖼️↔️🖼️

代表模型:

CLIP (Contrastive Language–Image Pre-training): 由 OpenAI 提出,是对比训练的里程碑式工作。CLIP 将视觉和语言编码到共享的表示空间,通过对比损失训练视觉和文本编码器,将图像及其标题的表示映射到相似的嵌入向量。原始 CLIP 模型在 4 亿图像-文本对上训练,展现出强大的零样本分类迁移能力,甚至在鲁棒性基准上超越了监督 ResNet 模型。 🌟

SigLIP: 与 CLIP 相似,但使用原始 NCE 损失,在小批量上零样本性能更优。 👍

Llip (Latent language image pretraining): 考虑到一张图像可能对应多个不同的标题,Llip 通过交叉注意力模块将图像编码与目标标题关联,提升了表示的表达性,并改善了零样本分类和检索性能。 💡

2. 掩码方法 (Masking):重构缺失信息,学习上下文关联 🎭

核心思想: 借鉴 NLP 中 BERT 的掩码语言模型 (MLM) 思想,将掩码技术应用于视觉和语言模态,通过模型重构被掩码部分的能力,学习模态内和跨模态的上下文关联。掩码方法可视为一种去噪自编码器,其中噪声具有空间结构。 🧩

掩码方式:

掩码图像建模 (Masked Image Modeling, MIM): 随机掩盖图像的部分区域 (图像块),模型需要根据未掩码的区域重建被掩码的区域。代表模型包括 MAE (Masked Autoencoders) 和 I-JEPA (Image-based Joint-Embedding Predictive Architecture)。 🖼️ ➡️ 🖼️

掩码语言建模 (Masked Language Modeling, MLM): 随机掩盖文本中的部分词语,模型需要根据未掩码的词语和图像信息重建被掩码的词语。BERT 在训练期间使用了 MLM。 📝 ➡️ 📝

Transformer 架构的适用性: Transformer 架构的 token 化输入方式使得掩码操作更加容易实现,随机丢弃特定输入 token 成为可能。 ⚙️

代表模型:

FLAVA (Foundational Language And Vision Alignment): 由 Facebook (Meta) 提出,是基于掩码方法的代表性 VLM。FLAVA 架构包含图像编码器 (ViT)、文本编码器 (Transformer) 和多模态编码器 (Transformer) 三个核心组件。采用综合训练方案,结合了多模态和单模态掩码建模损失以及对比目标,在 7000 万图像-文本对数据集上预训练,在 35 个不同任务上实现了 SOTA 性能。FLAVA 使用了预训练的视觉编码器 (dVAE)。 🏆

MaskVLM: 为了降低对预训练视觉编码器的依赖,MaskVLM 直接在像素和文本 token 空间应用掩码。其关键创新在于利用模态间的信息流动,文本重建任务接收图像编码器的信息,反之亦然。 🔄

3. 生成式 VLMs (Generative VLMs):直接生成文本或图像 🎨

核心思想: 与前两种范式主要操作潜在表示不同,生成式 VLMs 直接训练模型生成文本描述或图像。 🚀

生成任务类型:

图像描述生成 (Image Captioning): 模型学习生成图像的文本描述,例如 CoCa 模型。 🖼️ ➡️ 📝

文本到图像生成 (Text-to-Image Generation): 模型根据文本 prompt 生成图像,例如 Stable Diffusion, Imagen, Parti 等模型。 📝 ➡️ 🖼️

多模态生成 (Multimodal Generation): 模型可以同时生成文本和图像,例如 Chameleon 和 CM3leon 模型。 📝 🖼️ ➡️ 📝 🖼️

训练成本: 生成式 VLMs 的训练成本通常最高,因为需要学习复杂的生成模型。 💸

代表模型:

CoCa (Contrastive Captioner): 由 Google 提出,在 CLIP 的对比损失基础上,增加了生成损失。CoCa 采用多模态文本解码器,接收图像编码器和单模态文本解码器的输出,生成图像描述。CoCa 通过简单地将注释图像标签视为文本从头开始进行预训练,预训练数据集包括 ALIGN (18 亿图像) 和 JFT-3B (内部数据集,29500 个类别标签)。 ✨

Chameleon 和 CM3leon: 多模态生成模型,CM3leon 由 Google 提出,用于文本到图像和图像到文本生成。CM3leon 借鉴了图像 tokenizer 和文本 tokenizer 技术,将图像和文本编码为离散 token 序列,然后使用仅解码器的 Transformer 模型进行训练。CM3leon 经历了检索增强预训练和监督微调 (SFT) 两个阶段。Chameleon 是 CM3leon 的扩展,由 Esser 等人提出,是一个混合模态基础模型系列,能够生成和推理交错的文本和图像内容序列,支持图像、文本和代码等多种模态。Chameleon 从一开始就被设计为混合模态,采用统一架构,在所有模态的混合数据上进行端到端训练,使用了 query-key 规范化和修订的层规范化位置等架构创新,以及监督微调方法。 🌈

Stable Diffusion, Imagen, Parti: 文本到图像生成模型,虽然主要用于生成任务,但也可以用于解决视觉语言理解任务。这些模型可以用于生成分类任务,通过贝叶斯定理和条件概率估计进行分类。生成分类器在组合推理任务 (如 Winoground) 上表现优于判别方法,具有更强的形状偏差,并更好地与人类判断一致,且可以在测试时进行领域自适应。扩散模型进行似然估计需要计算变分下界,推理成本较高。 🚀

4. 利用预训练模型的 VLMs (VLMs Leveraging Pre-trained Models):站在巨人肩膀上 🚀

核心思想: 充分利用现有的预训练大型语言模型 (LLMs) (例如 Llama, GPT) 和/或视觉提取器 (例如 CLIP的视觉编码器),避免从头开始训练整个 VLM,从而显著降低训练成本和资源需求。 💡

优势: 可以复用 LLMs 强大的语言理解和生成能力,只需学习视觉模态到语言模态的映射,计算资源需求低,开发效率高。开源 LLMs 的普及也为此类方法提供了便利。 💯

方法: 通常采用“冻结”预训练 LLM 的参数,仅训练视觉编码器和一个轻量级的映射网络 (例如线性投影层或交叉注意力模块),将视觉特征映射到 LLM 的输入空间。 🧊

代表模型:

Frozen: 由 DeepMind 提出,是第一个利用预训练 LLM 的 VLM 模型。Frozen 使用冻结的 LLM (7B 参数 Transformer,在 C4 数据集上预训练),训练视觉编码器 (NF-ResNet-50) 和线性映射网络,在 Conceptual Captions 数据集上通过文本生成目标进行训练。Frozen 展示了快速适应新任务、快速访问通用知识以及快速绑定视觉和语言元素的能力,是多模态 LLM 的重要先驱工作。 🧊🥇

MiniGPT 系列 (MiniGPT-4, MiniGPT-5, MiniGPT-v2): 由 Zhu 等人提出,MiniGPT-4 使用预训练的视觉编码器 (BLIP-2 中的 ViT) 和冻结的 LLM (Vicuna),仅训练一个线性投影层,训练成本极低 (仅需 4 个 A100 GPU 约 10 小时)。MiniGPT-5 扩展到可以交替生成文本和图像,使用生成 token 和冻结的 Stable Diffusion 2.1 模型生成图像。MiniGPT-v2 提出通过统一接口执行各种视觉语言任务,并通过任务标识符区分不同任务。 ⚡

Qwen-VL 和 Qwen-VL-Chat: 由阿里云提出,与 MiniGPT-4 类似,使用预训练 LLM (Qwen-7B) 和视觉编码器 (ViT-bigG),以及单层交叉注意力模块进行视觉表示到 LLM 输入空间的映射。 ☁️

BLIP-2 (Bootstrapping Language-Image Pre-training): 由 Salesforce 提出,利用预训练的冻结模型,包括视觉编码器 (例如 CLIP) 和大型语言模型 (例如 OPT)。BLIP-2 训练一个小型 Q-Former 模块 (约 100-200M 参数),通过交叉注意力机制将图像嵌入映射到 LLM 的输入空间。Q-Former 接受固定数量的查询向量,通过交叉注意力与图像嵌入交互,并通过线性层投影到 LLM 输入空间。 🤝

三. 部分模型详解

在这里插入图片描述

3.1 BLIP2

3.1.1 模型结构

Blip2的Adapter使用Query-Transformer(Q-Former) + 全连接层(Fully Connected)的结构。

主旨思想:将img和prompt同时输入到Transformer中,同时利用Cross Attention 将vision emb 与可学习的,序列长度较短的learnable querys进行交互。最后将交互后的learnable querys作为视觉特征,输入到大模型,从而达到降低视觉特征序列长度的目的。利用这样一个类似BottleNeck的结构,提升学习效果,减小视觉特征的seq len,这样能在有限的资源下,加快大模型的训练。
在这里插入图片描述

Q-Former来自多模态模型Blip,是一个魔改的Transformer,其输入部分增加了可学习的输入(learnable querys)。learnable querys和img emb通过cross attn进行交互,最后网络把模型输出的learnable query作为图像特征,喂给大模型。作者试图使用Q-Former实现图像的压缩感知,即缩短表示图像emb序列长度的同时,尽可能保留对生成文字有用的图像信息。最后 Fully Connect 模块用于讲Q-Former输出的维度对齐到大模型的维度。

3.1.2 模型训练

模型训练分为两个阶段,分别是 图片表示学习(Vision-Language Representation Learning from a Frozen Image Encoder)和图生文预训练(vision-to-language generative pre-training)。训练数据为图文对。

图片表示学习(训练Q-Former的图像表示能力)

图片表示学习只训练Adapter中的Q-Former结构,训练目的是将Image-Encoder输出的视觉特征进行压缩感知,提取最能生成文字的视觉特征。其仅用到了Image Encoder 和 Q-Former且并未使用LLM。为了节省显存,进行图片表示学习时,Image Encoder的参数不做更新。
在这里插入图片描述

在这里除了Q-Former外,还引入了额外的权重用于处理文字(图右上绿色部分),训练时Q-Former加载的是Bert的权重(cross attn随机初始化)。
在这里插入图片描述

其具体有三个训练任务,使用的训练数据集为一系列图文对(文字是图片的一个描述),每个训练任务的attn-mask均不同。

图文对比学习(Image-Text Contrastive Learning, ITC)该任务输入图像(img emb)和一段文字(prompt emb),在经过img_encoder和Q-Former后,我们使用一个emb表示图像,用另一个emb表示文字。输入的文字会额外带一个[CLS]token, 文字的emb即用[CLS] token 对应的emb。图像的emb是从vis emb 的多个query中与text emb相似度最高的query作为图像的emb。在计算loss时,使用图四最右侧的attn mask 能保证图像和文字的emb生成互不干扰。正样本为图文对,负样本将文字换为数据集中随机的某段文字。我们希望正样本的图像emb和文字emb尽可能相似,负样本的图像emb和文字emb尽可能远离。
基于图像的文字生成(Image-Grounded Text Generation, ITG)该任务使用图像生成对应的文字描述,使用图四中间的attn mask,在文字能看到图片的同时保证文字部分使用 transformer decoder的causal attn mask。
图文匹配(Image-Text Matching, ITM)该任务类似ITC,但与ITC不同的是,该任务不再要求对齐图像和文字的表示,而是直接做一个分类任务,判断图像和文字是否是一对。attn mask使用图四左边的attn mask,保证图像和文字互相之间都可以看到。

图生文预训练(训练整个多模态大模型的Image-Caption能力)

图生文是为了将Q-Former学习到的视觉特征与大模型相结合,利用大模型的生成能力更好的完成VQA任务。
在这里插入图片描述

大模型分为两种分别是Decoder only类型的大模型和Encoder-Decoder类型的大模型。Blip2分别尝试与这两种大模型相结合。对于Decoder Only形式的大模型,输入为图片,输出为图文对的文字;对于Encoder-Decoder类的大模型,文字会被拆分成前缀和后缀,输入为图片和前缀,输出为后缀。为了节省显存并加速训练,该训练阶段图像Encoder和LLM的权重均不做更新。

Blip2通过尝试Blip中模态融合的方式,通过冻住大模型权重和两阶段预训练的方法,将视觉特征与大模型对齐,借助大模型的生成能力,利用有限的资源提升了视觉VAQ任务的效果。

3.2 LLaVA

Blip2的出现表示,这种将视觉模态经过一个Adapter对齐到大模型输入的架构是可行的。于是研究者开始考虑,除了繁琐的Q-Former对齐方式外,是否存在更简单的方式来对齐图像特征?LLaVA使用单个线性连接层完成了视觉模态与大模型的结合。除此之外,LLaVA还首次实现了多模态大模型的多轮对话能力。
在这里插入图片描述

3.2.1 训练数据

在LLaVA产生的时代,开源的图像大模型训练数据几乎都是图文对(img, caption)其中文字是图片内容的一个描述。几乎没有开源的 instruction-tuning 数据集。为了让多模态大模型更好的与人类进行对话。LLaVA利用图文对创建了两个数据集:简单的对话数据集(低质量,数据量大,标注成本低),复杂的对话数据集(高质量,数据量小,标注成本高)。

图文对——>简单的对话数据

作者利用ChatGPT生成如下的问题,并将caption作为问题的答案。
在这里插入图片描述

这些生成的问题就是换着法子问"请描述一下这个图像",这样就生成了如下格式的训练数据 <img, question for caption, caption>。这些训练数据较为简单,只能用于单轮对话且缺少多样性,但生成成本较低。

图文对——>更复杂的对话数据

为了使用ChatGPT生成带图片的多轮对话数据,作者使用目标检测将图片变成chat-gpt可以读懂的图片描述。
在这里插入图片描述

基于这些图片描述作者使用ChatGPT生成了三类训练数据:

  • 基于图片进行多轮对话
  • 给出图片的详细描述
  • 基于图片的复杂逻辑推理

3.2.2 模型训练

对于多轮对话训练数据{img, [(Q1,A1), …, (QT, AT)]},作者将其转换为如下序列。
在这里插入图片描述

在计算损失时,只计算AI部分的损失,这样就将多轮对话数据和单轮对话数据统一了起来(统一成sequence),方便用于模型训练。模型训练分为两个阶段分别为”图像特征对齐预训练“和”模型对话/读图能力训练“。

图像特征对齐预训练

该阶段只训练线性链接层,使用相对较为简单易学的训练数据,将Adapter生成的图像特征与LLM的input Embedding对齐,让模型拥有初步的读图能力。

  • 训练数据:利用上述的数据构造方法 和 595K图文对 生成的 简单对话数据 (使用各种不同的问法 问该图片描述了什么东西)
  • 可学习参数:LLM和Vision Encoder均不训练,只训练线性链接层
  • 训练目的:让模型拥有初步的读图能力

模型对话/读图能力训练

该阶段训练Adapter和LLM对参数,使用较难学习的多轮对话和科学问答数据,让模型具有对话能力。

  • 训练数据:利用上述的数据构造方法生产的158K复杂对话数据 + Since QA banchmark中的训练数据
  • 可学习参数:Vision Encoder不训练,训练线性链接层和LLM
  • 训练目的:让模型拥有基于图片进行多轮对话和逻辑推理的能力

3.2.3 LLaVA的贡献

  • 模型结构上:LLaVA仅用简单的线性链接层就完成了视觉模型与LLM的结合,结合方法简单但有效
  • 训练数据上:LLaVA给出了一种使用ChatGPT造训练数据的方法。虽然类似的方法在语言大模型的训练中较为常见,但该文是在多模态大模型上的首次尝试
  • 训练方法上:作者先采用了大量的易学数据训练少量参数让模型学会认图,再用少量难学的数据训练大量参数让模型学会基于图像的多轮对话和逻辑推理能力

3.3 MiniGPT-4

MiniGPT4同样是为了将多轮对话,逻辑推理等能力,融入到多模态大模型中,与LLaVA不同的是,该文提出的Adapter架构,参数量较小,模型收敛较快,只需4块A100训练1天。

3.3.1 Adapter结构

Mini-GPT4沿用了Blip2的Adapter结构,和Blip2的预训练权重。其将图片获取到的img emb通过Q-Former(虚线部分)将seq_len变为指定的长度后,通过全连接层(蓝色部分)对齐到大模型的模型。
在这里插入图片描述

训练MiniGPT-4的过程中,Vision Encoder、LLM和Q-Former的权重全部被冻住,只有全连接层(蓝色部分)参与训练。这也是MiniGPT-4训练速度较快的根源所在。

3.3.2 模型训练

MiniGPT-4的视觉部分来自Blip2(下图虚线框),LLM部分来自LLaMA(与Blip2不同),因此采用了两阶段的训练方式,第一阶段使用大量数据将视觉模型与LLM进行对齐,第二阶段使用少量、多样的数据,提升模型的理解图片能力。
在这里插入图片描述

MiniGPT-4的模型结构,其中Q-Former和FFN为Adapter。图中虚线框来自Blip2的模型权重,LLM来自LLaMA的模型权重。模型训练时只训练图中橙色部分,其他权重均固定不变。

特征对齐训练

  • 训练任务:图生文,输入图片,LLM需要生成该图片的一个描述。
  • 训练数据:LAION, SBU, Conceptual Caption共三个图文对数据集,每条数据是一张图片和该图片对应的一段描述。
  • 训练设置:训练20k step,batchsize256,训练数据约5M,4卡A100(80G) * 10小时。

训练完成后,模型输出效果较为一般,会输出只言片语,或者与图片完全不相关的内容。

图像理解训练

Mini-GPT4和LLaVA是同时期的作品,因此Mini-GPT4训练时仍然没有指令微调数据集。为此,论文作者提出了如下造训练数据的方法。
1.从Conceptual Caption中筛选出5k的图片,利用Prompt和第一阶段训练过的模型,输出图像的详细描述。
2.使用ChatGPT对这些详细描述进行改写,改写为通畅,流利的描述
3.手动去掉ChatGPT中多余的输出,如”改写后的描述为:“
该过程使用这5K条高质量数据继续训练模型,在Batch_Size = 12,单卡A100上训练了7分钟。

3.4 QwenVL

QWenVL除了在中文数据上表现较好之外,还能处理多图多轮对话任务,输出图像中物体的位置(以文字格式给出检测框),在TextVQA,OCRVAQ等多个任务上均取得了SOTA的效果。该文提出来 能力增强训练阶段,并在该阶段利用多种训练任务让模型拥有了OCR、目标检测等多个能力。

3.4.1 输入输出格式

之前的多模态大模型通常是基于单个图片做多轮对话,且不能给出图中某个物体的具体位置。QwenVL更改了模型的输入输出格式,并用标记语言(类似html)和Tokenizer来适配多图多轮对话和目标检测任务。Assistant后面为语言模型需要生成的内容,其他内容均为Prompt。
在这里插入图片描述

对多图的处理

QwenVL的Tokenizer在接受Prompt的时候会自动识别Prompt中表示图像地址的部分,然后将该地址pad到固定长度256。在模型进行forward的时候,会识别图片地址的位置并通过Image Encoder和Adapter将图片转为长度为256的序列(aligned img emb),并将该序列替换掉Prompt中的图片地址。
在这里插入图片描述

对目标检测任务的适配

QwenVL还能给出图中物品的类别和坐标,表示方法为类别(min_x,min_y),(max_x,max_y),QwenVL用特定格式的输出表示检测框位置和被检测物体的类别,其坐标直接使用Token表示,坐标是将图片进行等比例缩放直到最长边为1000后图片上的坐标。这种使用Token表示坐标的方式非常反直觉,但确实能Work。

3.4.2 Adapter结构

QwenVL使用FC层和单层Cross Attention作为视觉模态的Adapter。 与之前介绍的Adapter不同,Qwen先使用FC层将图像特征的维度对齐到大模型,再使用Cross Attention将图像特征的长度变为指定的长度,其先使用FC,再使用Cross Attention的做法可能是为了增加Adapter的参数量。
在这里插入图片描述

除此之外,QwenVL的Adapter还在图像的位置信息上做了一点调整。之前的多模态大模型使用的视觉Encoder通常是将图像的patch按从上到下,从左到右的顺序排序成一个序列,并按照序列的顺序给图像加入位置信息emb(1D位置emb)。除此之外,此前介绍的多模态大模型并未关注图像emb的位置信息。

除了来自视觉模型的1D位置emb,QwenVL还在Adapter中的cross attn中加入了2D位置emb。其具体做法是将2D位置emb加到cross attn中的Key上,2D位置emb表示该patch是图像分块后的第几行和第几列,是通过分别计算行、列的1D位置emb再concat到一起得到的,其中行、列的1D位置emb来自sin位置emb。显然的,加入的2D位置emb对于不同长宽比的图片会更加友好,虽然QwenVL输入的图片有着固定的大小,但这可能是为后续的QwenVL-Plus/QwenVL-Max打下的基础。

3.4.3 模型训练

与LLaVA,Mini-GPT4不同,QwenVL的训练被分为三个阶段,分别是特征对齐训练,能力增强训练和指令跟随训练,不同阶段的模型可训练参数也各不相同。
在这里插入图片描述

特征对齐训练

特征对齐训练是使用大量的图文对数据(img-caption)将视觉Encoder对齐到LLM上去,让LLM能看到图片上的信息。其特点是数据量大,文字内容小(seq_len较小,256图像 + 512LLM),训练速度快(因为seq_len小,所以训练速度相对较快)。QWenVL从各种开源数据集中收集了1.4B的数据,其中77.3%为英文数据,22.7%为中文数据,具体数据来源见下表。
在这里插入图片描述

训练时图像被缩放至224*224的大小,batch_size 为30720,训练了50K步,训练时Vision Encoder和Adapter的权重有更新。其输入输出格式如下:
User: Picture 1tiger.jpg
Assistant:5只老虎在大草原上捕猎

其训练过程中的Loss,Img Caption指标和DocVQA指标见下图:
在这里插入图片描述

Filckr img-caption数据集上的评价文本相似性的指标(CIDEr),右边是在VQAv2数据集上DocVQA的准确率。和Mini-GPT4类似,仅仅训练Img-Caption任务即可提升VQA的准确率。其能力可能来自冻住的LLM有一定的推理能力。

能力增强训练

在将Image Encoder对齐到大模型后,QwenVL将输入的图像大小从224 * 224 调整到 448 * 448,并使用了7个不同的训练任务来增强模型的能力。模型的全部参数均参与训练,训练的seq_len为2048。

  • Captioning
    User: lion.jpg
    Assistant: 4只狮子在草原上捕食
    训练数据:LAION-en & zh, DataComp, Coyo, CC12M & 3M, SBU, COCO, 自有数据共19.7M
    训练任务:输入图片,给出图片的一个描述

  • VQA
    User:human.jpg图上的人穿什么颜色的衣服
    Assistant:蓝色
    训练数据:GQA, VGQA, VQAv2, DVQA, OCR-VQA, DocVQA, TextVQA, ChartQA, AI2D 共3.6M
    训练任务:输入图片,给出一个和图片有关的问题,要求模型给出问题的答案

  • Grounding
    User:human.jpgThis(360,542),(476,705) is
    Assistant:Yellow cross country ski racing gloves
    训练数据: GRIT
    训练任务:输入图片和图中某个物体的位置,要求模型给出该物体的描述

  • Referring Grounding
    User:VG_100K_2/3.jpgthe ear on a giraffe
    Assistant:Yellow cross country ski racing gloves
    训练数据:GRIT, Visual Genome, RefCOCO, RefCOCO+, RefCOCOg,共8.7M
    训练任务:输入图片和图中某个物体的位置,要求模型给出该物体的描述

  • Grounded Cap
    User:coyo700m/1.jpgGenerate the caption in English with grounding:
    Assistant: Beautiful shot of bees(661,612),(833,812)(120,555),(265,770) gathering nectars from an apricot flower(224,13),(399,313)
    训练数据:GRIT, Visual Genome, RefCOCO, RefCOCO+, RefCOCOg,共8.7M
    训练任务:描述图片内容,并在描述时给出物体的位置

  • OCR
    User:synthdog/1.jpgOCR with grounding:
    Assistant: It is managed (568,121), (625,131), (624,182), (567,172)…
    训练数据:SynthDoG-en & zh, Common Crawl pdf & HTML,共24.8M
    训练任务:识别图中的文字

  • Pure-text Autoregression
    训练数据:自建数据集,共7.8M
    训练任务:保证MLM的效果不退化

该阶段主要是通过7个不同的训练任务,训练模型的读图能力,逻辑推理能力(VQA),识别物体位置的能力(Grounding)和OCR能力。

指令跟随训练

该阶段主要是让模型拥有聊天的能力,模型开放Adapter和LLM的参数用于训练。QWenVL使用了基于LLM生成多模态的对话数据,并保证对话内容和图像内容相关,指令微调数据量为359K,论文中并未具体给出数据生成的方法。数据集的格式如下:

<im_start>user
Picture 1: vg/VG_100K_2/649.jpgWhat is the sign in the picture?<im_end>
<im_start>assistant
The sign is a road closure with an orange rhombus.<im_end>
<im_start>user
How is the weather in the picture?<im_end>
<im_start>assistant
The shape of the road closure sign is an orange rhombus.<im_end>

3.5 InternVL-v1.5

QwenVL以数据和训练任务为中心,通过暴力堆叠数据和设计多种训练任务,QwenVL可以较好的理解图像内容,甚至能给出图中某些物体的坐标。但受限于448*448的图像分辨率,QwenVL的OCR能力较差。如果将Mini-GPT4,Llava,Blip2,QwenVL当做多模态大模型发展的第一阶段,则可以认为InternVL-v1.5将多模态大模型带入了第二阶段。

模型上,internVL-v1.5首次将ImageEncoder(VIT)的参数量扩展到了6B,将图像的视觉特征扩展到了1.7k,将图像的分辨率提升到7个448 * 448的patch,并引入了动态长宽比。数据上,InternVL-v1.5不仅收集了大量自然场景数据,还收集了大量文档数据,进一步提升算法的OCR能力。

3.5.1 动态长宽比

此前,多模态大模型通常是将图像resize到固定的长宽比(448 x 448 或 1344 x1344),再送入VIT获取图像特征,这种做法会造成两个问题:
1.对于极端长宽比的图片,失真严重
2.若固定一个较大的长宽比(比如1344*1344),则VIT会产生超长的序列长度,消耗大量算力
为了解决这两个问题,InternVl-v1.5引入了动态长宽比。
在这里插入图片描述
如图,动态长宽比的实现分为以下4个步骤:

1.预设最大patch数量:max_patches,图像会被分为多个448x448的patch,但会保证patch数不超过max_patch
2.根据最大patch数量给出能够适配的长宽比(长 * 宽 <= max_patch - 1)
3.根据原图分辨率和原图长宽比,给出最匹配的长宽比,并将图片resize并分为多个448 x448的patch
4.最后将原图resize到448x448放在patch的后面,就得到了图像经过动态长宽比后的图片
5.这些小图分别经过VIT后会得到max_patch个1024长度的序列,将这些序列拼接起来即可得到图像序列

这样做的好处是:
1.可以处理较为极端长宽比的图像,避免了因resize导致的图像变形
2.大分辨率图对应的序列长度较长,小分辨率图对应的序列长度较小
3.将图片切成了多个448x448的小片过VIT,采用了分块的思想,解决了大分辨率图像计算量大的问题。

3.5.2 超大VIT, Pixel Shuffle及模型结构

此前多模态大模型的VIT模型通常是OpenAI训练的CILP模型的VIT(参数量约为200M)。由于大模型证明了模型参数量的重要性,InternVL-V1.5将VIT的参数量提升至6B从而提升模型效果。其使用的VIT模型输入为448x448的图像,该模型会将图像切分成32x32个14x14的patch,最后会输出长度为32x32=1024长度的序列。
在这里插入图片描述

由于动态长宽比的引入,VIT最多会接受max_patch个448x448的图片,若不做任何处理,img_emb的序列长度会达到max_patchx1024。如此长的img_emb送入大模型会导致显存占用高,计算慢的问题。该文引入了PixelShuffle算法将单张图片的序列长度从1024降低至256。如图3,PixelShuffle会将VIT输出的(1024,hidden_dim)的序列reshape为(32,32,hidden_dim)的特征图, 然后每个2x2为一个基础单元按图3个方式进行变换,进而得到(16, 16, hidden_dimx4)的特征图。最后将特征图进行flatten得到(256, hidden_dimx4)的序列。
在这里插入图片描述

3.5.3 训练数据集

为了提升模型的通用能力和OCR能力,InternVL-V1.5收集了海量开源数据集用于模型预训练和finetune。第一阶段预训练仅训练VIT和MLP部分,预训练数据集主要是基础能力的训练,包括图像的简单描述,目标检测和OCR能力。第二阶段finetune则包含各种复杂任务,包括图像详细描述,表格理解,图像问答等。两阶段的序列长度均为4096并将max_patches设置为7。除此之外,为了提升模型的中文场景理解能力和中文OCR能力,在构建数据集时,InternVL-V1.5将大量英文数据集利用LLM翻译成了中文(如将img-caption数据集的英文caption转为中文caption),并使用PaddleOCR和Wukong数据集生成了Wukong-ocr数据集。
在这里插入图片描述
在这里插入图片描述

3.5.4 InternVL-v1.5的贡献

相较于之前的工作,InternVL-v1.5的主要贡献在于将大VIT、长img_emb和动态长宽比引入了多模态大模型并扩充了训练数据集。

对于富文本图片,其包含的信息量较大,此前使用的小VIT,短img_emb可能无法承载如此多的信息,大VIT,长img_emb让internVL-V1.5拥有了理解富文本图片的潜力
扩充的训练数据集让internVL-V1.5拥有了理解富文本图片的能力
动态长宽比的引入则让模型更好的处理极端长宽比的图片(如宣传海报),并且避免了图像resize导致的形变问题

3.6 Qwen2VL

Qwen2VL,相较与InternVL-v1.5,其包含以下几个改进:
在这里插入图片描述

Qwen2VL的模型架构的特殊性主要体现在动态分辨率和位置embedding上。

3.6.1 动态分辨率

InternVL系列的图像转序列(img_emb)模块会将图像分为多个448*448的patch,即图像的长宽会被resize到448的倍数,该方法虽然能支持动态长宽比,但实际应用时,该图像分patch机制更多考虑的是长宽比,而非分辨率。
在这里插入图片描述

而Qwen2VL的图像转序列不仅考虑了长宽比还考虑了分辨率对img_emb序列长度的影响, 极大程度上提升了模型的infer效率。其实现动态分辨率的具体做法分为图像预处理和VIT两个部分。
在这里插入图片描述

图像预处理部分:以512x512的图像为例,该图像会被resize成504x504;然后被分为 36x36个patch,每个patch的大小均为14x14x3;随后channel维度进行重复得到 36x36个patch,每个patch的大小均为14x14x3x2;最后会对图像进行flatten操作,得到(36x36, 14x14x3x2) = (1296, 1176)的序列。
在这里插入图片描述

视觉部分:以512x512的图像为例,其预处理后的序列会先过一个3D卷积将其变为(1296, 1280),其作用相当于过了一个FFN,模型中使用的3D卷积是为了将图片与视频相统一。该序列过完VIT后即得到(1296, 1280)的img_emb。由于图像最开始被resize到长宽均能被28整除,因此此时得到的seq_len一定能被4整除。为了压缩图像序列,减少大模型的资源消耗,视觉部分将img_emb reshape为(1296/4=324,5120)的大小,并使用FFN将hidden维度数与大模型对齐。

3.6.2 统一的多模态Rope位置embedding

为了将视频,图像和文本将统一,该文提出了一个统一的位置embedding:Multimodal Rotary Position Embedding。对于每个token其有三个 position_id分别是 temporal position_ids(时间id,在纯文本中表示原始的位置id,在图片或视频中表示时间位置id);height position_ids和width position_ids(宽高id,在纯文本中宽高id与时间id一致,在视频和图片中表示图片的宽高)。以下是一个position_id的例子。
input_ids: [V V V V V V V V V V V V T T T T T], here V is for vision.
vision temporal position_ids: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]
vision height position_ids: [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1]
vision width position_ids: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
text temporal position_ids: [3, 4, 5, 6, 7]
text height position_ids: [3, 4, 5, 6, 7]
text width position_ids: [3, 4, 5, 6, 7]

temporal position_ids: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 5, 6, 7]
height position_ids: [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 3, 4, 5, 6, 7]
width position_ids: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 3, 4, 5, 6, 7]

在过完vision_token之后,text_token的时间id起始值为 之前三种id的最大值 + 1。这种设计有几点好处:

  • 保证后续pos id比前序pos id大
  • 多模态他模型的图像token的长度通常为1k-2k,但分patch后的图像宽高通常在100以内。该方法可以减小position_id的值。从而使模型能用更小的pos_id适配更长的序列长度。
    在这里插入图片描述

在基于多模态position_id应用到q,k的hidden_states时,Qwen2VL先分别生成时间,高度和宽度的rope位置编码,分别分配给时间、高度和宽度。此处有一个细节,我们知道rope编码在低维和高维的角度不同。

因此,在生成单个token的最终位置emb时,Qwen2VL使用图4所示的方法合成位置emb,保证时间,宽度,高度这三个维度都均有高维区域和低维区域。

3.6.3 训练过程

Qwen2VL的训练经过了三个不同的阶段,每个阶段的训练目标,可训练参数和训练数据集简介见下表:
在这里插入图片描述

相较于之前的工作,Qwen2VL的主要贡献在于将更精细的动态图像预处理方式和统一的多模态位置编码引入了多模态大模型。

  • Qwen2VL仅要求图像的宽高能被28整除,该方式能处理更多样的长宽比。且能根据图像分辨率分配img_emb的token数量,资源消耗更加合理。
  • 统一的多模态位置emb(M-Rope)统一了图像,视频和文本。对比实验证明了该编码方式能提升模型效果。

四. VLM 训练实践指南 👑

这部分内容提供了 VLM 训练的实践指南,涵盖数据准备、软件工具、模型选择、训练技巧和优化策略等多个方面。 🛠️

1. 训练数据:高质量数据是成功的基石 💎

  • 数据质量 vs. 数据规模: 高质量的训练数据比单纯追求数据规模更重要。DataComp 基准研究表明,数据剪枝 (data pruning) 是提高 VLM 性能的关键步骤。 💯

  • 数据剪枝 (Data Pruning) 方法:
    启发式方法 (Heuristics): 基于规则或经验,过滤掉低质量或噪声数据对。🧹
    Bootstrapping 方法: 使用预训练的 VLM 模型评估图像-文本对的多模态对齐程度,并移除对齐程度较低的数据对,实现数据自 清洗。 ✨
    多样化与平衡 (Diversity and Balance): 确保训练数据集的多样性 (覆盖不同场景、风格、主题) 和类别平衡,避免模型学习偏见。 🌈

  • 数据增强 (Data Augmentation): 采用图像增强 (例如随机裁剪、旋转、颜色变换) 和文本增强 (例如同义词替换、回译) 等技术,增加数据的多样性和模型的鲁棒性。 ➕

  • 交错式数据整编 (Interleaved Data Curation): 将不同来源、不同质量、不同类型的数据进行有效组合和混合,可能有助于提升模型的泛化能力和鲁棒性。 🔄

  • 多模态数据质量评估: 建立客观的多模态数据质量评估指标和方法,例如图像清晰度、文本流畅度、图像-文本相关性等。 🧐

  • 人类专业知识与数据标注: 高质量的人工标注数据 (例如边界框标注、属性标注、关系标注) 对于提升模型的定位能力、细粒度理解能力和对齐能力至关重要,尤其是在指令微调和 RLHF 等场景下。 🧑‍🤝‍🧑

2. 软件工具与硬件资源:高效训练的保障 ⚙️

  • 公共软件库 (Public Software Libraries): 利用现有的深度学习框架 (例如 PyTorch, TensorFlow) 和 VLM 相关库 (例如 Hugging Face Transformers, PyTorch Image Models - timm) 可以显著加速 VLM 的开发和训练进程,降低开发门槛。 📦

  • GPU 资源需求 (GPU Requirements): 训练大规模 VLMs 需要大量的 GPU 资源,具体数量取决于模型大小、数据集规模、训练时长和 batch size 等因素。例如,训练 CLIP 模型可能需要数百甚至上千张 GPU 运行数天甚至数周。 💸 💻

  • 训练加速技巧 (Training Speed-up Techniques):
    混合精度训练 (Mixed Precision Training): 使用半精度浮点数 (FP16) 替代单精度浮点数 (FP32) 进行训练,可以显著降低显 存占用和计算时间,提升训练速度。 🚀
    梯度累积 (Gradient Accumulation): 在显存受限的情况下,可以通过梯度累积来模拟更大的 batch size,提升训练效果。 📈
    分布式训练 (Distributed Training): 利用多 GPU 或多机并行计算,加速大规模模型的训练过程。 🚀🚀🚀

  • 超参数调优 (Hyperparameter Tuning): 学习率 (Learning Rate)、Batch Size、Weight Decay、Dropout Rate 等超参数对 VLM 的性能至关重要,需要进行精细的调优,常用的调优方法包括网格搜索 (Grid Search)、随机搜索 (Random Search)、贝叶斯优化 (Bayesian Optimization) 等。 🛠️

3. 模型选择:根据任务和资源选择合适的模型 🤔

  • 对比模型 (例如 CLIP, SigLIP): 适用于零样本分类、跨模态检索等任务,具有强大的零样本迁移能力。 🚀
  • 掩码模型 (例如 FLAVA, MaskVLM): 适用于视觉问答、图像分割、细粒度图像理解等任务,能够学习更丰富的视觉和语言表示。 💡
  • 生成模型 (例如 CoCa, Stable Diffusion): 适用于图像描述生成、文本到图像生成、多模态对话等任务,能够生成多样化的文本和图像内容。 🎨
  • 基于预训练 LLM 的模型 (例如 Frozen, MiniGPT 系列, BLIP-2): 适用于资源有限的场景,能够快速构建具备基本视觉语言能力的 VLM,并可以利用 LLMs 强大的语言能力。 ⚡
  • 模型选择策略: 需要根据具体的任务需求、数据规模、计算资源和性能指标要求,权衡不同模型的优缺点,选择最合适的 VLM 架构和训练范式。 ⚖️

4. 提升定基 (Grounding):解决幻觉,提升理解 🎯

  • 定基问题: VLMs 可能无法很好地理解文本 prompt,导致忽略 prompt 中的某些部分或产生幻觉。 👻
  • 提升定基的技巧:
    使用边界框标注 (Bounding Box Annotations): 在训练数据中引入物体边界框标注,帮助模型学习物体的位置、大小和属性信息,提升模型对空间关系的理解能力。 📦
    否定描述 (Negative Descriptions): 在训练数据中包含否定描述 (例如 “图中没有猫”),帮助模型理解否定概念和约束条件,提升模型的理解准确性。 🚫
    提升对齐 (Alignment Improvement): 采用指令微调 (Instruction Tuning) 和人类反馈强化学习 (RLHF) 等技术,使模型的输出更符合人类的期望和偏好,提升模型的对齐水平和可靠性。 🤝

5. 提升对富含文本的图像的理解:OCR 与场景文本理解 📝

  • 文本理解的重要性: 日常生活中的视觉信息包含大量文本,例如路标、广告牌、商品标签等,理解图像中的文本信息对于 VLM 至关重要。 💯
  • OCR 能力 (Optical Character Recognition): VLMs 需要具备良好的光学字符识别 (OCR) 能力,才能准确识别和理解图像中的文本信息。 👁️
  • 场景文本理解的挑战: 图像中的文本可能存在字体多样、模糊不清、遮挡变形、方向倾斜等问题,给 OCR 和场景文本理解带来挑战。此外,理解文本与图像内容的关联也至关重要。 🤯
  • 提升文本理解的方法:
    细粒度的富含文本的数据指令微调 (LLaVAR): 使用包含细粒度文本描述的数据集进行微调,例如 LLaVAR 模型。 ✨
    处理高分辨率图像中的细粒度文本 (Monkey): 提升模型处理高分辨率图像和细粒度文本的能力,例如 Monkey 模型。 🐒
    分立式场景文本识别模块与 MM-LLM (Lumos): 将场景文本识别模块 (例如专门的 OCR 模型) 与多模态大型语言模型 (MM-LLM) 解耦,例如 Lumos 模型,可以提升文本识别的准确性和效率。 💡

6. 参数高效型微调 (Parameter-Efficient Fine-Tuning, PEFT):轻量级微调策略 🪶

  • 微调挑战: 微调大规模 VLMs 的全部参数集计算成本高昂,且容易过拟合。 💸
  • PEFT 方法的目标: 在保持模型性能的同时,仅微调少量参数,降低计算成本和存储开销,提高微调效率和泛化能力。 🎯
  • PEFT 方法分类:
    基于低秩适配器 (Low-Rank Adapters, LoRa) 的方法: 在预训练模型的 Transformer 层中插入少量低秩矩阵,仅训练这些低秩矩阵参数,例如 LoRa 和 AdaLoRa。 ➕
    基于 Prompt 的方法 (Prompt-based Methods): 设计可学习的 Prompt,引导预训练模型完成下游任务,仅微调 Prompt 参数,例如 Visual Prompt Tuning 和 Adapter-Prompt。 📝
    基于适配器 (Adapter-based Methods) 的方法: 在预训练模型的 Transformer 层之间插入 Adapter 模块,仅训练 Adapter 模块参数,例如 AdapterFusion 和 Compacter。 ⚙️
    基于映射 (Mapping-based Methods) 的方法: 学习输入特征到下游任务特定空间的映射,例如 Prefix-Tuning 和 UNIPEL。 🗺️

7. 实现负责任的 VLM 评估:全面、多维度的性能度量 📊

  • VLM 评估的重要性: 客观、全面地评估 VLM 的性能,是推动 VLM 研究和应用的关键环节,有助于发现模型优势和不足,指导模型改进方向,并确保模型的可靠性和安全性。 💯
  • 早期评估任务: 图像描述生成 (Image Captioning) 和视觉问答 (Visual Question Answering, VQA) 是 VLM 早期常用的评估任务。 📝❓
  • 文本为中心的 VQA (Text-centric VQA): 侧重于评估模型理解和阅读图像中文本的能力,例如 TextVQA 和 ST-VQA 基准数据集。 🧐
  • 零样本预测 (Zero-shot Prediction): 例如在 ImageNet 分类任务上进行零样本评估,评估模型的世界知识和零样本迁移能力。 🚀
  • 组合推理能力评估 (Compositional Reasoning Evaluation): 例如 Winoground 基准,评估模型的视觉-语言组合推理能力。 🤔
  • 偏见与幻觉评估 (Bias and Hallucination Evaluation): 评估 VLM 模型在生成内容时是否存在偏见 (例如性别偏见、种族偏见) 和幻觉问题,确保模型的公平性和可靠性。 ⚖️👻

8. 将 VLMs 扩展用于视频:动态视觉信息处理 🎬

  • 视频 VLM 的挑战: 视频数据具有时间维度,数据量更大,计算复杂度更高,对模型处理动态视觉信息的能力提出了更高要求。 🤯
  • 视频 VLM 的优势: 视频 VLMs 能够理解物体的运动轨迹、动态变化和时间关系,捕捉场景中的动作和事件,实现更丰富的视觉信息理解。 🚀
  • 视频 VLM 的应用: 视频文本检索 (Video-Text Retrieval)、视频问答 (Video Question Answering)、视频生成 (Video Generation)、视频行为识别 (Video Action Recognition)、视频内容分析 (Video Content Analysis) 等。 🎬 🔍❓
  • 视频 VLM 的发展趋势: 借鉴图像-文本模型的成功经验,将预训练 LLMs 与视频编码器对齐,利用视觉指令微调等技术,构建更强大的视频理解和生成模型。早期的视频-文本模型更倾向于融合和时间对齐方法,近年来越来越多地采用预训练 LLMs 作为骨干网络,并进行视觉指令微调。 🚀

五. 结论与未来展望:VLM 的无限可能 ✨

视觉语言模型 (VLMs) 作为连接视觉和语言世界的桥梁,已经成为人工智能领域最受瞩目的研究方向之一。它们在图像理解、文本生成、跨模态交互等多个方面展现出强大的能力,并在诸多应用领域具有巨大的潜力。 💯
尽管 VLMs 取得了显著进展,但仍面临着诸多挑战,例如跨模态语义鸿沟、组合泛化能力、幻觉问题、鲁棒性与泛化性、训练成本和模型评估等。未来的研究方向将主要集中在:

  • 提升跨模态深度理解: 探索更有效的模型架构和训练方法,提升 VLMs 对视觉和语言信息深层次语义关联的理解能力,例如因果推理、常识推理、情感理解等。 🧠💡
  • 增强组合泛化能力: 提高 VLMs 在处理复杂场景、长尾数据和分布外数据时的泛化能力,提升模型的鲁棒性和可靠性。 🛡️🚀
  • 缓解和消除幻觉问题: 研究更有效的模型校准、知识融合和约束生成方法,降低 VLMs 产生幻觉的可能性,提升生成内容的真实性和可信度。 👻🚫
  • 降低训练成本和资源消耗: 探索更高效的训练算法、模型压缩和参数高效型微调技术,降低 VLMs 的训练和部署成本,使其更容易普及和应用。 💰⬇️
  • 构建更全面和负责任的评估体系: 建立更全面、多维度、负责任的 VLM 评估指标和基准,涵盖性能、鲁棒性、公平性、安全性和伦理道德等方面。 📊⚖️
  • 拓展 VLM 的应用边界: 将 VLMs 应用于更广泛的领域,例如科学研究、医疗健康、教育、艺术创作、虚拟现实、元宇宙等,充分挖掘 VLMs 的潜力,创造更大的社会价值。 🚀🌍
  • 视频 VLMs 的突破与创新: 在视频数据理解、视频生成、视频交互等领域取得突破,推动视频 VLM 技术的快速发展和应用普及。 🎬🚀

随着技术的不断进步和研究的深入,视觉语言模型将在未来的人工智能领域扮演越来越重要的角色,为人类带来更加智能、便捷和美好的生活体验。 🎉💖

参考文献

[1] https://zhuanlan.zhihu.com/p/700599618
[2] https://innovation64.github.io/2024/05/30/vlm/
[3] https://zhuanlan.zhihu.com/p/690339122
[4] https://mp.weixin.qq.com/s/oXsuMdwXOaKLS-pbc5tE6g
[5] https://mp.weixin.qq.com/s/3XM202pXAPpjfXU4Ke9IVQ
[6] https://mp.weixin.qq.com/s/Q2kLH6L87WwCc3FZrHOqUw

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/959987.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java8-日期时间Api

目录 LocalDate更新时间LocalTimeLocalDateTimeInstantPeriod Duration格式化、解析日期-时间对象时区 java.util.Date java.util.Calendar 不支持时区 线程不安全 月份从0起线程不安全&#xff0c;只有包裹在ThreadLocal中才安全 java.text.DateFormat java.text.SimpleDateFo…

深度学习 Pytorch 动态计算图与梯度下降入门

在上节末尾我们发现autograd.grad函数可以灵活进行函数某一点的导数和偏导数的运算&#xff0c;但微分运算只是AutoGrad模块中的一小部分功能&#xff0c;本节将继续讲解这个模块的其他常用功能&#xff0c;并在此基础上介绍另一个常用优化算法&#xff1a;梯度下降算法。 imp…

FreeRtos的使用教程

定义&#xff1a; RTOS实时操作系统, (Real Time Operating System), 指的是当外界事件发生时, 能够有够快的响应速度,调度一切可利用的资源, 控制实时任务协调一致的运行。 特点&#xff1a; 支持多任务管理&#xff0c; 处理多个事件&#xff0c; 实现更复杂的逻辑。 与计算…

大话特征工程:1.维数灾难与特征轮回

一、维度深渊 公元 2147 年&#xff0c;人类文明进入了数据驱动的超级智能时代。从金融到医疗&#xff0c;从教育到娱乐&#xff0c;所有决策都仰赖“全维计算网络”&#xff08;高维特征空间&#xff09;。这套系统将全球所有信息抽象成数以亿计的多维特征&#xff08…

从ai产品推荐到利用cursor快速掌握一个开源项目再到langchain手搓一个Text2Sql agent

目录 0. 经验分享&#xff1a;产品推荐 1. 经验分享&#xff1a;提示词优化 2. 经验分享&#xff1a;使用cursor 阅读一篇文章 3. 经验分享&#xff1a;使用cursor 阅读一个完全陌生的开源项目 4. 经验分享&#xff1a;手搓一个text2sql agent &#xff08;使用langchain l…

《STL基础之hashtable》

【hashtable导读】STL为大家提供了丰富的容器&#xff0c;hashtable也是值得大家学习和掌握的基础容器&#xff0c;而且面试官经常会把它和hashmap混在一起&#xff0c;让同学们做下区分。因此关于hashtable的一些特性&#xff0c;比如&#xff1a;底层的数据结构、插入、查找元…

本地大模型编程实战(02)语义检索(2)

文章目录 准备按批次嵌入加载csv文件&#xff0c;分割文档并嵌入测试嵌入效果总结代码 上一篇文章&#xff1a; 本地大模型编程实战(02)语义检索(1) 详细介绍了如何使用 langchain 实现语义检索&#xff0c;为了演示方便&#xff0c;使用的是 langchain 提供的内存数据库。 在实…

猿人学第一题 js混淆源码乱码

首先检查刷新网络可知&#xff0c;m参数被加密&#xff0c;这是一个ajax请求 那么我们直接去定位该路径 定位成功 观察堆栈之后可以分析出来这应该是一个混淆&#xff0c;我们放到解码平台去还原一下 window["url"] "/api/match/1";request function…

Dev-C++分辨率低-解决办法

目录 【工具】Dev-C分辨率低-解决办法问题背景完整操作指南第一步&#xff1a;打开属性设置 【工具】Dev-C分辨率低-解决办法 问题背景 Dev-C因版本老旧&#xff08;长期未更新&#xff09;&#xff0c;在高分辨率显示器上存在界面模糊问题。通过修改Windows兼容性设置可优化…

Linux 小火车

1.添加epel软件源 2.安装sl 3. 安装完成后输入&#xff1a; sl

iic、spi以及uart

何为总线&#xff1f; 连接多个部件的信息传输线&#xff0c;是部件共享的传输介质 总线的作用&#xff1f; 实现数据传输&#xff0c;即模块之间的通信 总线如何分类&#xff1f; 根据总线连接的外设属于内部外设还是外部外设将总线可以分为片内总线和片外总线 可分为数…

Linux_线程控制

线程控制的相关接口 进程创建相关 之前我们已经认识到了pthread_create函数用来创建线程&#xff0c;这里不再赘述。 pthread_self函数 void* routine(void* args) {std::cout << "我是新线程..." << pthread_self() << std::endl;return null…

利用双指针一次遍历实现”找到“并”删除“单链表倒数第K个节点(力扣题目为例)

Problem: 19. 删除链表的倒数第 N 个结点 文章目录 题目描述思路复杂度Code 题目描述 思路 1.欲找到倒数第k个节点&#xff0c;即是找到正数的第n-k1、其中n为单链表中节点的个数个节点。 2.为实现只遍历一次单链表&#xff0c;我们先可以使一个指针p1指向链表头部再让其先走k步…

Ubuntu-手动安装 SBT

文章目录 前言Ubuntu-手动安装 SBT1. SBT是什么?1.1. SBT 的特点1.2. SBT 的基本功能1.3. SBT 的常用命令 2. 安装2.1. 下载2.2. 解压 sbt 二进制包2.3. 确认 sbt 可执行文件的位置2.4. 设置执行权限2.5. 创建符号链接2.6. 更新 PATH 环境变量2.7. 验证 sbt 安装 前言 如果您觉…

【ProtoBuf 安装】ProtoBuf在window/Linux下的安装 创建/删除swap分区

文章目录 1.ProtoBuf在window下的安装2.ProtoBuf在Linux下的安装创建swap分区命令解析关闭swap分区删除swap分区的影响 1.ProtoBuf在window下的安装 1、下载ProtoBuf编译器 下载地址&#xff1a;https://github.com/protocolbuffers/protobuf/releases 如果要在 C 下使用 Pro…

BAHD酰基转移酶对紫草素的手性催化-文献精读105

Two BAHD Acyltransferases Catalyze the Last Step in the Shikonin/Alkannin Biosynthetic Pathway 两个BAHD酰基转移酶催化了紫草素/左旋紫草素生物合成途径中的最后一步 一个BAHD酰基转移酶专门催化紫草素的酰基化&#xff0c;而另一个BAHD酰基转移酶则仅催化紫草素的对映…

C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】

1. 题目描述 力扣在线OJ题目 给定两个数组&#xff0c;编写一个函数来计算它们的交集。 示例&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 输入&#xff1a;nums1 [4,9,5], nums2 [9,4,9,8,4] 输出&#xff1a;[9,4] 2. 思路 直接暴力…

在Docker 容器中安装 Oracle 19c

在 Docker 容器中安装 Oracle 19c 是可行的&#xff0c;但它相较于其他数据库&#xff08;如 MySQL、PostgreSQL 等&#xff09;会复杂一些&#xff0c;因为 Oracle 数据库有一些特定的要求&#xff0c;如操作系统和库的依赖&#xff0c;以及许可证问题。 不过&#xff0c;Ora…

WGCLOUD使用介绍 - 如何监控ActiveMQ和RabbitMQ

根据WGCLOUD官网的信息&#xff0c;目前没有针对ActiveMQ和RabbitMQ这两个组件专门做适配 不过可以使用WGCLOUD已经具备的通用监测模块&#xff1a;进程监测、端口监测或者日志监测、接口监测 来对这两个组件进行监控

初学stm32 --- FreeRTOS移植

目录 移植前准备 1. 基础工程 2. FreeRTOS 源码 添加 FreeRTOS 文件 1. 添加 FreeRTOS 源码 2. 将文件添加到工程 3. 添加头文件路径 4. 添加 FreeRTOSConfig.h 文件 (1) FreeRTOSConfig.h 获取途径一 (2) FreeRTOSConfig.h 获取途径二 (3) FreeRTOSConfig.h 获取途径…