VILA 是一种视觉语言模型 (VLM),使用大规模交错图像文本数据进行预训练,可实现视频理解多图像理解功能。

VILA 可通过AWQ 4 位量化和TinyChat框架部署在边缘端。我们发现:

(1)图文对还不够,图文交错是必要的;

(2)在交错的图文预训练期间解冻LLM可以实现上下文学习;

(3)重新混合纯文本指令数据对于提升VLM和纯文本性能至关重要;

(4)令牌压缩扩展了#video 帧。

VILA 推出了更强大的功能,包括:视频推理、情境学习、视觉思维链和更好的世界知识

项目地址:https://github.com/NVlabs/VILA

一、引言

大语言模型(LLMs)已经展示了在自然语言任务中的卓越能力。通过增强LLMs以支持视觉输入,最终模型可以继承一些吸引人的属性,如指令遵循、零样本泛化以及少样本上下文学习(ICL),从而赋能各种视觉语言任务。

本文研究了视觉语言模型(VLM)的预训练过程,旨在通过逐步可控的比较来增强视觉语言模型的性能。具体来说,研究了在预训练过程中冻结大型语言模型(LLM)的影响,交错预训练数据的效果,以及在微调过程中重新混合纯文本指令数据的作用。

如何在预训练过程中有效地结合视觉和文本信息,如何在不影响纯文本任务的情况下进行视觉语言任务的训练,以及如何提高模型的零样本和上下文学习(ICL)能力。

该问题的研究相关工作包括对视觉语言模型的训练方法进行研究,特别是对图像-文本对的预训练和微调过程的研究。已有工作主要集中在通过监督微调(SFT)或人类反馈强化学习(RLHF)来改进视觉语言指令调优过程,但缺乏对预训练过程的深入研究。

大模型开源项目 | 多模态大模型VILA:强大的视频理解和多图理解能力_ai

图1 与最近的方法相比,VILA的增强视觉语言预训练在下游任务准确性上持续提高。

二、方法概述

VILA,一种新的视觉语言模型预训练方法,用于解决视觉语言模型在零样本和上下文学习方面的性能不足问题。具体来说,

冻结LLM 的预训练:首先,研究了在预训练过程中冻结LLM的效果。冻结LLM可以实现不错的零样本性能,但缺乏上下文学习能力。为了提高上下文学习能力,需要在预训练过程中更新LLM。

大模型开源项目 | 多模态大模型VILA:强大的视频理解和多图理解能力_ai_02

图2 研究了自回归视觉语言模型,其中图像被分词并输入到大型语言模型的(LLMs)中。我们发现更新LLMs对于上下文学习能力至关重要,而交错语料库有助于预训练。与仅文本数据联合的SFT有助于保持仅文本能力。

交错预训练数据: 其次,研究了交错预训练数据的效果。交错图像-文本数据比单独的图像-文本对更有利于预训练,因为它提供了更准确的梯度更新,并且能够保持纯文本能力。

大模型开源项目 | 多模态大模型VILA:强大的视频理解和多图理解能力_ai_03

图4 MMC4数据集的一个样本,包括交错图像和文本片段。图像放在相应文本之前。文本对图像的条件较弱:只有彩色文本才能借助图像更好地推断出来。

联合SFT: 最后,研究了在微调过程中重新混合纯文本指令数据的效果。重新混合纯文本指令数据不仅可以弥补纯文本任务的退化,还可以提高视觉语言任务的准确性。

三、实验细节

数据收集: 使用了MMC4和COYO两种图像-文本数据集进行预训练。MMC4数据集包含交错的图像和文本段,而COYO数据集则包含较短的文本描述。为了增加数据多样性,还使用了LLaVA-1.5的SFT数据进行联合微调。

实验设置: 实验分为三个阶段:投影仪初始化、视觉语言预训练和视觉指令微调。在预训练阶段,分别使用线性层和Transformer块作为投影仪。在微调阶段,将现有的视觉语言数据集转换为FLAN风格的数据,并加入1M的纯文本指令数据进行联合微调。

参数配置: 使用了Llama-2 7B和13B两种LLM模型进行实验。预训练数据总共包含约50M张图像。微调数据来自多个视觉语言数据集,包括VQA、DocVQA、GQA等。

四、实验结果分析

冻结LLM的预训练效果: 冻结LLM在预训练过程中可以实现不错的零样本性能,但在上下文学习能力方面表现较差。更新LLM后,模型的上下文学习能力显著提高。

大模型开源项目 | 多模态大模型VILA:强大的视频理解和多图理解能力_AI大模型_04

表1. 关于是否训练大语言模型(**LLM**)或冻结LLM并在视觉语言预训练(PreT)期间仅进行提示调优的消融研究。有趣的是,在预训练期间冻结LLM并不会降低0次尝试的准确性,但会导致上下文学习能力变差(4次尝试更差)。使用一个简单的线性投影器迫使LLM学习更多内容,并导致更好的泛化能力。本文报告了VQA数据集(OKVQA、TextVQA)的准确性和CIDEr评分,用于摘要(COCO和Flickr)。注意:仅为了消融研究使用了不同的评估设置;在这种设置中的绝对值较低,不应与其他工作进行比较。

交错预训练数据的效果: 使用交错的图像-文本数据进行预训练比单独的图像-文本对更有效。交错数据提供了更准确的梯度更新,并且能够保持纯文本能力。

大模型开源项目 | 多模态大模型VILA:强大的视频理解和多图理解能力_ai_05

图7 VILA通过交错图像文本预训练而不是单一的图像-文本对,具有更好的上下文学习能力。输入两个图像+文本对和第三个图像作为上下文来提示VLM。LLaVA由于OCR 能力有限而未能通过第一个样本,并且通过重复第二个样本的语义而未能通过第三个示例。

联合SFT的效果: 在微调过程中重新混合纯文本指令数据不仅可以弥补纯文本任务的退化,还可以提高视觉语言任务的准确性。联合SFT使得模型在预训练时使用短文本时也能解锁全部的好处。

大模型开源项目 | 多模态大模型VILA:强大的视频理解和多图理解能力_AI大模型_06

图8 该模型能够在给定视觉输入的情况下进行连锁推理。当在提示中添加“一步步来思考”时,它能够生成正确的答案。

五、项目部署

1、安装基础环境

git clone https://github.com/NVlabs/VILA.git
./environment_setup.sh vila

2、训练

第 1 步:对齐

利用 LLaVA-CC3M-Pretrain-595K 数据集来对齐文本和视觉模式。

第一阶段脚本接受两个参数,它可以在单个 8xA100 节点上运行。BASE_MODEL_PATH指向在线或本地 Huggingface 存储库,例如NousResearch/Llama-2-7b-hfOUTPUT_NAME指向checkpoints下的目标目录,该目录将在之后保存经过训练的多模态投影仪。

bash scripts/v1_5/paper/1_mm_align.sh [BASE_MODEL_PATH] [OUTPUT_NAME]
第 2 步:预训练

使用 MMC4 和 Coyo 数据集来训练具有交错图像文本对的 VLM。

bash scripts/v1_5/paper/2_pretrain_mmc4_coyo.sh [CODE_PATH] [BASE_MODEL_PATH] [STAGE1_PATH] [OUTPUT_NAME]

第二阶段脚本包含四个参数。CODE_PATH是 VILA 代码库的绝对路径, BASE_MODEL_PATH与第一阶段脚本中的含义类似。STAGE1_PATH指向阶段 1 的OUTPUT_NAME (即存储阶段 1 检查点的位置)。OUTPUT_NAMEcheckpoints下保存预训练检查点的所需文件夹名称。我们为此阶段提供的脚本在 slurm 上执行,我们预计它在 16 个节点(128 个 GPU)上执行。

第 3 步:监督微调

这是 VILA 训练的最后阶段,我们调整模型以遵循 M3IT、FLAN 和 ShareGPT4V 子集上的多模式指令。该阶段在 8xA100 节点上运行。

bash scripts/v1_5/paper/3_sft.sh [STAGE2_PATH] [OUTPUT_NAME]

3、推理

Llama-3-VILA1.5-8B 推论:

python -W ignore llava/eval/run_vila.py \
    --model-path Efficient-Large-Model/Llama-3-VILA1.5-8b-Fix \
    --conv-mode llama_3 \
    --query "<image>\n Please describe the traffic condition." \
    --image-file "av.png"

VILA1.5-40B推论:

python -W ignore llava/eval/run_vila.py \
    --model-path Efficient-Large-Model/VILA1.5-40b \
    --conv-mode hermes-2 \
    --query "<image>\n Please describe the traffic condition." \
    --image-file "av.png"

VILA1.5-3B视频推理:

python -W ignore llava/eval/run_vila.py \
    --model-path Efficient-Large-Model/VILA1.5-3b \
    --conv-mode vicuna_v1 \
    --query "<video>\n Please describe this video." \
    --video-file "demo.mp4"

六、提炼关键问题

问题1:在预训练过程中,为什么冻结大型语言模型(LLM)会导致上下文学习能力下降?

冻结LLM在预训练过程中可以实现不错的零样本性能,但缺乏上下文学习能力。这是因为LLM的深层嵌入对齐对于上下文学习至关重要。

当冻结LLM时,尽管其零样本性能不受影响,但在微调阶段进行上下文学习时,LLM无法适应新的视觉输入,导致上下文学习能力下降。具体来说,LLM的深层嵌入在预训练过程中需要与视觉输入进行对齐,以便在微调时能够更好地处理视觉任务。冻结LLM阻止了这一对齐过程,从而影响了其上下文学习能力。

问题2:交错预训练数据相比单独的图像-文本对在预训练中有哪些优势?

更准确的梯度更新: 交错预训练数据提供了更丰富的视觉和文本对,使得模型在预训练过程中能够获得更准确的梯度更新,从而更快地收敛。

保持纯文本能力: 交错数据结构允许模型在预训练过程中同时学习视觉和文本信息,而不会完全遗忘纯文本任务的能力。相比之下,单独的图像-文本对可能会导致模型在预训练过程中过度依赖视觉信息,从而遗忘纯文本任务。

更好的泛化能力: 由于交错数据提供了更多的上下文信息,模型在微调阶段能够更好地泛化到新的视觉语言任务上。

问题3:在微调过程中重新混合纯文本指令数据有哪些具体好处?

弥补纯文本任务的退化: 重新混合纯文本指令数据可以弥补在预训练过程中由于使用短文本而导致的纯文本任务退化。

提高视觉语言任务的准确性: 联合微调纯文本指令数据不仅能够恢复纯文本任务的性能,还能进一步提高视觉语言任务的准确性。这是因为纯文本指令数据提供了更强的指令跟随能力,这对于视觉语言任务非常重要。

解锁全部好处: 通过联合微调,模型在使用短文本进行预训练时也能解锁全部的好处,从而在零样本和上下文学习方面表现更好。