VLLM多模态理解

1. VLLM(Vid-LLM)总述:

多模态视觉理解:

  • 图片-语言理解:LLAVA、LLAVA1.5、LLAVA-NEXT-IMAGE
  • 视频-语言理解:LLAVA-NEXT-VIDEO、VideoLLaMA系列、Qwen-vl系列

博文阅读:

综述论文:

多模态数据集构造学习:LLAVA

多模态数据集清洗学习:VideoLlaMA3

2. Qwen-VL系列 论文技术解读🤏

2.1 Qwen2.5-VL:

微调相关代码:

https://github.com/datawhalechina/self-llm/tree/master/models/Qwen2-VL

https://github.com/QwenLM/Qwen2.5-VL/tree/main/qwen-vl-finetune

  1. 介绍:

基于Qwen2.5 LLM进行预训练的多模态(文、图、视频)预训练大模型,包括三种参量大小: Qwen2.5-Vl-72B > Qwen2.5-Vl-7B > Qwen2.5-Vl-3B;

能力:能够实现文档级别的细粒度理解;

  1. 技术特点:

    • 动态分辨率处理ViT:提升空间感知能力

      • Window Attention:在视觉编码器中实现窗口注意力,优化推理效率

      • 动态分辨率:不实用归一化坐标,使用原始比例分辨率,提升不同分辨率的处理能力

      • 28 patch_size

    • 绝对时间编码M-ROPE:提升时间感知能力

      • M-ROPE=【时间,高度,宽度】:时间id不再与输入帧数绑定,而是使用绝对时间,更好地支持超长视频输入,更好的理解视频时间快慢

      • 动态fps帧率:可变帧率输入,更好的感知视频时间动态性

    • 视觉语言融合:2层MLP

      • RMSNorm:归一化

      • SwiGLU:激活函数

imgimg

  1. 训练阶段及数据:

img

实践关键问题:

  1. Qwen2.5-VL中使用的视觉编码器?
    改动并重新训练后Vision Transformer (ViT):设置14的patch_size保持原始分辨率,将full attention替换为window attention(112*112窗口)节省计算开销;采用不同的FPS采样率机制;M-ROPE使用绝对时间作为时间id进行编码;还使用了不同的组件:FFN with SwiGLU activation, RMSNorm for normalization, and window-based attention mechanisms to enhance performance and efficiency.
  2. 使用了什么位置编码?
  3. 图片:2D-ROPE(14*14):(height_ids, width_ids)
  4. 视频:3D-ROPE(14*14):绝对时间作为时间id进行位置编码(time_ids, height_ids, width_ids)
  5. 最长输入多少token?
    1. Sequence length:8192-32768
  6. 图像与视频转换为Token的规则:每28x28像素对应一个Token !!tokens计算链接
    1. 图片——下限4个tokens,上限1280个tokens:
      1. 按照min_pixels, max_pixels进行等比例缩放并调整到28整数倍
      2. 图像的tokens数量 = 总像素数量/(28*28)+ 2
    2. 视频——视频帧下限128个tokens,视频帧上限768个tokens:
      1. 帧率fps=2(默认)
      2. 最大抽取帧数FPS_MAX_FRAMES=512,最小抽取帧数FPS_MIN_FRAMES=4(设置)
      3. 视频输入的最大像素数VIDEO_TOTAL_PIXELS = 65536 * 28* 28(设置): 65536=128*512
      4. 视频参数:video_fps视频的原始帧率,total_frames视频的原始总帧数
      5. nframes = total_frames / video_fps * fps
      6. 视频的tokens数量 = int(math.ceil(num_frames / 2) * (长//28)*(宽//28)+ 2
    3. 对于视频(总结):
      1. 每视频帧上限768tokens = 7682828 => 602112 pixels = 1024*588
      2. 抽取的视频帧数 = 视频时长 * fps (需< 512)

2.2 Qwen2-VL:

img

img

3. VideoLlaMA系列 论文技术解读

基于LlaMA语言模型进行多模态预训练;阿里巴巴;视觉token经过投影层映射到文本空间,使用llm进行回答;

3.1 VideoLlaMA3(2025.1):

  1. 论文:VideoLLaMA 3: Frontier Multimodal Foundation Models for Image and Video Understanding.

  2. 特点:

    1. 最长tokens长度16384,最长视觉tokens长度10240,fps=1,最长180帧【3min】

    2. VideoLlaMA3回归视觉模态,以视觉为中心进行训练及框架设计【🆚VideoLlaMA2对音频模态的集成,少而精路线】;

    3. 数据:强调在视频-文数据对稀少情况下,高质量图-文数据对(图片理解能力 )对视频理解的关键作用;

    4. 构建高质量图文数据集:清洗+recaption;

      1. 清洗策略:长宽比、美学评分、BLIP/CLIP余弦相似度、CLIP特征空间聚类;
      2. recaption:InternVL2-8B、InternVL2-26B分别作短、长caption;
    5. 视觉编码器:

      1. Any-resolution Vision Tokenization (AVT) :用2D-RoPE替代固定/绝对位置编码,实现动态分辨率输入;

      2. Differential Frame Pruner (DiffFP):基于1-范数距离,降低视频帧信息冗余度,实现视频tokens压缩;

      3. 对视频tokens进行:基于双线性插值的2*2下采样,以进一步限制tokens长度;

        ![img](../imgs/Research_Insights_VLLM多模态理解/image.6 (1).png)

        img

  3. 训练步骤:

    1. 视觉编码器对齐训练:

      1. 适配动态分辨率输入【🆚VideoLlaMA2固定分辨率336*336】;
      2. 训练视觉编码器【1e-5】+视觉投影连接器【1e-3】:使视觉编码器的特征空间与LLM对齐;
    2. 视觉-语言对齐训练🌟:

      1. 高质量图文数据对和少量纯文本数据,详细描述+bbox;
      2. 全参量训练:联合微调视觉编码器【2e-6】、视觉投影连接器【1e-5】、LLM【1e-5】;
    3. 多任务微调:全参量训练,指令遵循能力,为视频理解奠定基础,视频压缩器DiffFP;

    4. 视频能力微调:全参量训练,视频压缩器DiffFP;img

      ![img](../imgs/Research_Insights_VLLM多模态理解/image.4 (1).png)

  4. 模型初始化:

    1. 视觉编码器:SigLIP【 VIT- based 架构,分辨率384*384】+ RoPE;
    2. LLM:Qwen2.5;
    3. 视觉投影连接器:两层MLPs;

3.2 VideoLlaMA2-音视频+文(2024.6):

  1. 论文:VideoLLaMA 2: Advancing Spatial-Temporal Modeling and Audio Understanding in Video-LLMs.

  2. 特点:

    1. 时空卷积连接器(STC):增强时空理解能力;
    2. 音频模态:具有纯音频问答任务的能力;
    3. Mistral-7B-Instruct作为LLM;
  3. 框架:视觉-语言分支(视觉编码器) + 听觉-语言分支(音频编码器);

    ![image.2 (1)](../imgs/Research_Insights_VLLM多模态理解/image.2 (1).png)![image.2 (1)](../imgs/Research_Insights_VLLM多模态理解/image.2 (1).png)

  4. 视觉-语言分支:

    1. 视觉编码器:CLIP (ViT-L/14),输入视频帧分辨率336*336,固定帧数;
    2. 视频编码器输出具有冗杂性,为去除信息冗杂、减少视频tokens:使用 STC时空卷积连接器(VideoLlaMA1中使用Q-former);
    3. 视觉-文本对齐:两层的MLP;
  5. 听觉-语言分支:

    1. 预处理:128频率bins;
    2. 音频编码器:BEATs:捕捉时间动态性、音频细节;
    3. 音频-文本对齐:两层的MLP;
  6. 训练步骤:训练目标:cross-entropy loss of the text tokens. 学习率:1e-3 ——> 2e-5

    1. 视觉-语言分支 预训练:
      1. 【弱标注】图文数据对、视频文数据对 12.2M,视频帧均匀采样,分辨率336*336;
      2. 冻结视觉编码器和LLM,只训练视觉投影器MLPs
    2. 视觉-语言分支 多任务微调训练:
      1. 【强标注】任务导向、高质量数据对;
      2. 冻结视觉编码器,训练LLM+视觉投影器MLPs;
    3. 听觉-语言分支 预训练:
      1. 冻结音频编码器+LLM,只训练音频投影器MLPs
    4. 听觉-语言分支 多任务微调训练:
      1. 冻结LLM,训练音频编码器+音频投影器MLPs
    5. 视音频联合训练:
      1. 冻结LLM、视觉编码器、音频编码器,训练视觉投影器MLPs+音频投影器MLPs

3.3 VideoLlaMA1:

  1. Q-former:压缩视觉tokens冗余度;

4. LLAVA系列 论文技术解读

LLAVA:Large Language and Vision Assistant 大语言视觉模型:图片理解——>只有LLaVA-NeXT-Video是视频理解

LLaVA–LLaVA 1.5–LLaVA-Next-Image(1.6)–LLaVA-NeXT-Video–LLaVA-NeXT(Stronger)

![img](../imgs/Research_Insights_VLLM多模态理解/image (2).png)

4.1 LLaVA-NEXT-Video(2024.4.30):视频模态

基于Qwen2.5语言模型

  1. 特点:

    1. 对LLaVA-Next-Image针对视频数据进行进一步的有监督微调(SFT),基于图像理解能力获取视频理解能力;

    2. 训练最长tokens:4096(LLM的模型限制);

    3. AnyRes结构天然实现零样本从图文到视频模态迁移:从多补丁到多帧,长度泛化:从多帧到长视频,动态分辨率;将一组图像消化为一系列串联的视觉标记,允许统一的图像和视频输入,这自然支持从多图像到多帧(视频模态)的演变;

      ![img](../imgs/Research_Insights_VLLM多模态理解/image.4 (2).png)

    4. 在旋转位置嵌入 (RoPE) 中实现线性缩放,在 LLaVA-NeXT 中应用了类似的缩放方法。例如,通过引入 2 的缩放因子,有效地将模型的**“max_token_length”**容量加倍,使其能够处理多达 8192 个标记的序列;

      ![img](../imgs/Research_Insights_VLLM多模态理解/image.5 (2).png)

4.2 LLaVA-NEXT-Image(2024.1.30)

  1. 特点:
    1. AnyRes:Dynamic High Resolution
    2. 图文双模态:

4.3 LLAVA-1.5(2023.10)

  1. 论文:《Improved Baselines with Visual Instruction Tuning》https://arxiv.org/pdf/2310.03744

  2. 特点:

    1. 基于LLAVA,在模型架构等方面做了实验,对输入/模型结构/数据等进行了研究;

    2. 开始使用MLP作为 图-文双模态连接器;

    3. 提升分辨率:AnyRes + CLIP@336;

      img

    4. 通过提示词,引导模型输出短回答,能保证模型回答不被过拟合:

      1
      {Answer the question using a single word or phrase.}
  3. 模型初始化:

    1. 视觉编码器🔥:【CLIP ViT-L-336px,336336的分辨率、ViT】+AnyRes*
    2. LLM:
    3. 连接器/投影器🔥:两层MLP 全连接;

4.4 LLAVA(2023.4)

  1. 论文:Visual Instruction Tuning

  2. 特点:

    1. 2023年发布,比较先锋式的创建了vid-llm多模态的视觉指令微调范式:使用图文数据集,对预训练的LLM大语言模型以及预训练的视觉编码器中间的“连接器”进行 “指令微调”,得到具有视觉语言理解能力的多模态模型!
    2. 先锋式的【图-文】视觉指令跟随微调数据集构建/生成:可以学习构造技巧!
      1. 使用ChatGPT/GPT-4,向基础的image-text数据对赋予指令跟随能力;
      2. 文本内容(caption/bbox)提供给GPT,引导GPT输出指令text;
      3. 3种类型:conversion/detailed description/complex reasoning,共计158k;
  3. 模型初始化:

    1. 视觉编码器:CLIP ViT-L/14,224*224的分辨率;

    2. LLM:Vicuna1.5(基于llama2微调),最大2048tokens序列长度;

    3. 连接器/投影器:projection matrix W==单线性投影层(比较落后的策略);

      img

  4. 训练步骤:

    1. 视觉-语言对齐 预训练:2e-3
      1. 训练目标:LLM的自回归训练目标:下一个token预测损失;
      2. 训练参数:只训练投影矩阵 W
      3. 训练集:过滤后的CC3M图文对 595K;
    2. 视觉-语言 指令跟随微调:2e-5
      1. 训练目标:LLM的自回归训练目标:下一个token预测损失;
      2. 训练参数:训练投影矩阵 W 和 LLM(比较落后的训练策略)
      3. 训练集:158K自建的指令跟随数据集 + 515K VQA data;

代码实现:

  1. 训练数据格式:sharegpt格式 + 用 作为占位符

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
    "id": 0,
    "image": "llava_image/00453/004539375.jpg",
    "conversations": [
    {
    "from": "human",
    "value": "<image>\nRender a clear and concise summary of the photo."
    },
    {
    "from": "gpt",
    "value": "select luxury furniture 3 - inch gel memory foam mattress topper"
    }]}
  2. 模型:/llava/model/llava_arch.py——prepare_inputs_labels_for_multimodal()

  3. 训练:llava/train/train.py——train()


VLLM多模态理解
https://pljj315.github.io/post/Research_Insights_VLLM多模态理解.html
作者
pljj315
发布于
2025年6月4日
许可协议