开源项目 | 多模态大模型VITA:同时处理视频、图像、文本和音频

2024-09-17 23:14   北京  

点击下方卡片,关注「魔方AI空间」公众号

简 介

GPT-4o 出色的多模态能力和交互体验突显了其在实际应用中的必要性,但开源模型很少在这两个领域都表现出色。

VITA:第一个开源的多模态大模型(MLLM),擅长同时处理和分析视频、图像、文本和音频模态,同时具有先进的多模态交互体验。

Omni 多模态理解:VITA 展示了强大的基础多语言、视觉和音频理解能力,其强大的性能证明了这一点 在一系列单峰和多峰基准中。

非唤醒交互:VITA 可以激活并响应用户音频环境中的问题,而无需唤醒词或按钮。

音频中断交互:VITA 能够同时跟踪和过滤实时外部查询。这允许用户随时中断模型的生成新问题,VITA 将相应地回复新问题。

项目主页:https://vita-home.github.io/

引言

本工作要解决的问题是如何在开源环境中实现一个能够同时处理和分析视频、图像、文本和音频模态的多模态大模型(MLLM),并且提供先进的模态交互体验。

主要研究难点包括:如何在开源模型中实现多模态处理和分析,如何提升模型的多模态理解能力,以及如何增强人机交互的自然性和流畅性。

现有的多模态大模型(如GPT-4o)在统一框架内处理文本、视觉和音频信号方面取得了显著进展,但在开源领域,很少有模型能够达到类似的功能。现有的开源多模态模型主要集中在图像-文本模态,较少关注用户交互能力。

图1:VITA的交互作用。传统的音频交互需要一个预定义的唤醒词,例如,每次你提出问题时说“嗨!Siri~”,或者一个按钮来控制输入问题的音频(限制1)。当模型生成输出时,**人机交互**总是被阻断,因为之前的系统只能顺序响应输入查询(限制2)。相比之下,一方面,与之前方法中音频、文本和视觉始终分离不同,VITA支持这些模态端到端的交互。另一方面,VITA对多模态交互做出了两项贡献。非唤醒交互:VITA自动过滤掉背景噪音,如非查询的人声,从而消除了唤醒词和按钮的需求。音频中断交互:如果用户用另一个问题打断,生成过程会被暂停,模型立即响应最新的查询。

方法概述

VITA,通过整合架构创新和先进的训练与发展策略,实现了这两个属性:1)统一框架,以端到端的方式处理文本、视觉和音频信号;2)实现自然多模态人机交互的能力。

  1. 双语指令调优:首先,基于官方的Mixtral 8x7B模型,扩展其中文词汇量,并通过高质量的双语文本语料库进行进一步的指令调优,使其具备中文和英文的理解能力。
  2. 多模态对齐和指令调优:其次,通过收集大量高质量的多模态数据,对文本特征空间与视频、图像和音频进行对齐,并引入状态令牌来识别输入查询的类型,从而实现端到端的交互。
  3. 双工管道开发:最后,采用双工方案,两个VITA模型同时运行:一个负责生成当前音频查询的响应,另一个持续监控环境输入,并在检测到新查询时中断当前生成,输出新查询的响应。如图2所示。
图2:VITA架构。VITA能够处理纯文本/音频以及与文本/音频结合的视频/图像输入。此外,为不同的查询输入设置了不同的状态标记。<1>对应于有效的查询音频,例如“世界上最大的动物是什么?”,我们期望模型给出回应。<2>对应于嘈杂的音频,例如有人在环境中叫我吃饭,我们期望模型不回复。<3>对应于查询文本,即用户以文本形式给出的问题。在训练阶段,我们尝试教模型自动区分不同的输入查询。在部署阶段,使用<2>我们可以实现非唤醒交互。基于此,我们进一步引入了音频中断交互的双重方案。两个模型同时运行,其中生成模型负责处理用户查询。当生成模型开始工作时,另一个模型监控环境。如果用户用另一个有效的音频查询打断,监控模型聚合历史上下文以回应最新查询,而生成模型暂停并调整以监控,即两个模型交换身份。

VITA的整体训练流程包括三个阶段:LLM指令调优、多模态对齐和多模态指令调优。

图3:VITA的训练流程。第一阶段LLM指令调优通过扩大其词汇量和用高质量的双语文本语料库对其进行微调,从而在中文和英文上实现熟练掌握。第二阶段多模态对齐将各个编码器与LLM连接起来处理各种模态。通过积累大量高分辨率的多模态数据,将文本特征空间与视频、图像和音频的特征空间同步。最后阶段多模态指令调优允许模型跟随文本或音频指令来理解图像或视频。特别设计的状态令牌用于区分输入查询的类型,便于后续的多模态人机交互。

实验细节

数据收集:实验数据包括合成数据和开源数据。合成数据用于扩展词汇量和构建多模态训练数据,开源数据来自Wukong、LAION、CC12M、LLaVA、Lvis-Instruct、ScienceQA等数据集。

数据预处理:对于图像数据,采用动态补丁策略捕捉局部细节;对于视频数据,根据长度进行均匀采样;对于音频数据,使用Mel滤波器银行块将音频信号分解成频率带。

系统提示:为不同类型的输入(图像、视频、纯文本)设置不同的系统提示,以避免不同类型数据之间的冲突。

训练过程:在训练阶段,视觉和音频编码器保持冻结,连接器和Mixtral 8x7B一起训练。通过插入状态Token,模型能够灵活处理不同的交互行为。

实验性能评估

语言性能:在C-EVAL、AGIEVAL、MMLU和GSM8K四个数据集上,训练后的模型在中文评估集上表现显著提升,同时在英文相关基准上保持了原始性能水平,并在数学推理任务中表现出显著改进。
音频性能:在Wenetspeech和Librispeech数据集上,VITA在自动语音识别(ASR)基准上取得了相当的结果,显示出模型在语音表示学习方面的鲁棒性。
多模态性能:在十个代表性的基准上,VITA在图像理解方面与专门的图像开源模型LLaVA-Next表现相当,接近闭源模型Gemini 1.5 Pro;在视频理解方面,尽管与视频专门的LLaVA-Next-Video存在小幅差距,但考虑到VITA支持更广泛的模态并优先考虑交互,这一结果仍然是可接受的。

更多示例

编码能力:用户提供流程图,VITA 就能编写代码。

强大的图片理解能力:给定一张图片,VITA 可根据图片内容回答问题。

计算推理能力:

视频理解能力:

项目部署

安装基础环境

git clone https://github.com/VITA-MLLM/VITA
cd VITA
conda create -n vita python=3.10 -y
conda activate vita
pip install --upgrade pip
pip install -r requirements.txt
pip install flash-attn --no-build-isolation

准备数据

训练数据的 json 文件示例:

[
    ...
    {
        "set""sharegpt4",
        "id""000000000164",
        "conversations": [
            {
                "from""human",
                "value""<image>\n<audio>\n"
            },
            {
                "from""gpt",  // follow the setting of llave, "gpt" is only used to indicate that this is the ground truth of the model output
                "value""This is a well-organized kitchen with a clean, modern aesthetic. The kitchen features a white countertop against a white wall, creating a bright and airy atmosphere. "
            }
        ],
        "image""coco/images/train2017/000000000164.jpg",
        "audio": [
            "new_value_dict_0717/output_wavs/f61cf238b7872b4903e1fc15dcb5a50c.wav"
        ]
    },
    ...
]

下载预训练模型权重

  • VITA:https://huggingface.co/VITA-MLLM/VITA
  • InternViT-300M-448px:https://huggingface.co/OpenGVLab/InternViT-300M-448px
  • 预训练音频编码器:https://huggingface.co/VITA-MLLM/VITA

启动训练

export PYTHONPATH=./
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
OUTPUT_DIR=/mnt/cfs/lhj/videomllm_ckpt/outputs/vita_video_audio
bash script/train/finetuneTask_nodes.sh ${OUTPUT_DIR}

推理

文本查询:

CUDA_VISIBLE_DEVICES=0,1 python video_audio_demo.py \
    --model_path [vita/path] \
    --image_path asset/vita_log2.png \
    --model_type mixtral-8x7b \
    --conv_mode mixtral_two \
    --question "请描述这张图片。" \

音频查询:

CUDA_VISIBLE_DEVICES=0,1 python video_audio_demo.py \
    --model_path [vita/path] \
    --image_path asset/vita_log2.png \
    --model_type mixtral-8x7b \
    --conv_mode mixtral_two \
    --audio_path asset/q1.wav

嘈杂的音频查询:

CUDA_VISIBLE_DEVICES=0,1 python video_audio_demo.py \
    --model_path [vita/path] \
    --image_path asset/vita_log2.png \
    --model_type mixtral-8x7b \
    --conv_mode mixtral_two \
    --audio_path asset/q2.wav

Demo演示

使用 vLLM 加速模型。由于 VITA 尚未集成到 vLLM 中,因此需要对 vLLM 代码进行一些修改以使其适应 VITA。

conda create -n vita_demo python==3.10
conda activate vita_demo
pip install -r web_demo/web_demo_requirements.txt

# Backup a new weight file
cp -r  VITA_ckpt/ demo_VITA_ckpt/

cd ./web_demo/vllm_tools
cp -rf model_weight_file/*  ../../demo_VITA_ckpt/
cp -rf vllm_file/*  your_anaconda/envs/vita_demo/lib/python3.10/site-packages/vllm/model_executor/models/
python -m web_demo.web_ability_demo  demo_VITA_ckpt/

技术交流

加入「AIGCmagic社区」群聊,一起交流讨论,涉及 AI视频、AI绘画、Sora技术拆解、数字人、多模态、大模型、传统深度学习、自动驾驶等多个不同方向,可私信或添加微信号:【m_aigc2022】,备注不同方向邀请入群!!

推荐阅读

半年耕耘,《AIGCmagic社区知识星球》重磅升级!限量活动中!

MotionLLM:多模态人类行为理解框架

小型 AI 模型挑战 GPT-4,提高商业可及性

MiniCPM-V 2.0: 具备领先OCR和理解能力的高效端侧多模态大模型

多模态大模型:Video-LLaVA2 视频和图像的智能理解系统

多模态大模型:LLaVA-OneVision 轻松实现视觉任务迁移 | 单图、多图和视频理解

开源项目|多模态大模型:Show-o 统一多模态理解和生成

开源项目 | 多模态大模型VideoLLaMB:长上下文视频理解新框架


魔方AI空间
AI技术从业者与爱好者,专注于计算机视觉、深度学习、行为识别、多模态、边缘智能等前沿科技成果的研究和技术分享!
 最新文章