《Qwen2-VL》论文精读【下】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当

在这里插入图片描述

1 前言

《Qwen2-VL》论文精读【上】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当 上回详细分析了Qwen2-VL的论文摘要、引言、实验,下面继续精读Qwen2-VL的方法部分。

在这里插入图片描述

2 方法

在这里插入图片描述

Qwen2-VL系列包含三种大小的模型,分别是Qwen2-VL-2B、Qwen2-VL-7B和Qwen2-VL-72B。表1列出了超参数和重要信息。值得注意的是,Qwen2-VL在各种大小的LLM中都使用了675M参数的ViT,以确保ViT的计算负载与LLM的规模无关。

2.1 Model Architecture

在这里插入图片描述

图2展示了Qwen2-VL的综合结构。作者保留了Qwen-VL框架,该框架将视觉编码器与语言模型相结合。对于各种尺度的适应性调整,作者实现了大约6.75亿参数的视觉Transformer(ViT),擅长处理图像和视频输入。在语言处理方面,作者选择了更强大的Qwen2系列语言模型

为了进一步提高模型在视频中有效感知和理解视觉信息的能力,作者引入了几个关键的升级:

2.2 改进措施

2.2.1 naive动态分辨率支持

这是Qwen2-VL的一个关键架构改进,即引入了 naive动态分辨率支持 。与其前身不同,Qwen2-VL现在可以处理任意分辨率的图像,动态地将它们转换为可变数量的视觉 Token 。为了支持这一功能,作者对ViT进行了修改,删除了原始的绝对位置嵌入,并引入了2D-RoPE来捕获图像的二维位置信息。在推理阶段,不同分辨率的图像被包装成一个单独的序列中,包装长度受限于GPU内存使用。

此外,为了减少每个图像的视觉 Token ,在ViT之后使用一个简单的MLP层来压缩相邻的 2x2 Token 为一个 Token ,压缩后的视觉 Token 的开头和结尾分别放置了特殊的<vision_start|>和<|vision_end|> Token 。因此,使用patch_size=14的ViT编码具有224×224分辨率的图像,在进入LLM之前将被压缩为66个 Token 。

2.2.2 多模态旋转位置编码(M-RoPE)

多模态旋转位置编码(M-RoPE) 另一个关键的架构增强是多模态旋转位置编码(M-RoPE)的创新。与LLMs中的传统1D-RoPE不同,它只能编码一维位置信息,M-RoPE可以有效地模拟多模态输入的位置信息。这是通过将原始旋转嵌入分解为三个组件:时间、高度和宽度来实现的。

  • 对于文本输入,这些组件使用相同的位置ID,使得M-RoPE在功能上等同于1D-RoPE。在处理图像时,每个视觉 Token 的时间ID保持不变,而根据 Token 在图像中的位置,为高度和宽度组件分配不同的ID。
  • 对于视频,由于它们被看作是一系列帧,每个帧的时间ID都会增加,而高度和宽度组件的ID分配模式与图像相同。在模型输入包含多个模态的情况下,每个模态的位置编号通过将前一个模态的最大位置ID加1来初始化。

M-RoPE的示例如图3所示。M-RoPE不仅增强了位置信息建模,还减少了图像和视频的位置ID值,使模型在推理过程中可以扩展到更长的序列。

在这里插入图片描述

2.2.3 统一的图像和视频理解

统一的图像和视频理解 Qwen2-VL采用了一种混合训练方法,结合了图像和视频数据,以确保在图像理解和视频理解方面的熟练程度。为了尽可能地保留视频信息,作者每秒采样每个视频两帧。此外,还集成3D卷积深度为2来处理视频输入,使模型能够处理3D Pipeline 而不是2D块,从而允许在不增加序列长度的情况下处理更多的视频帧。

为了保持一致性,作者将每个图像视为两个相同的帧。为了在长视

### 快速部署 Qwen2-VL-7B 视觉大模型的最佳实践 #### 准备环境 为了确保顺利部署 Qwen2-VL-7B 模型,建议先安装必要的依赖工具并配置开发环境。这包括但不限于 Git LFS 以及 Python 环境设置。 ```bash git lfs install ``` 此命令用于初始化 Git Large File Storage (LFS),这对于处理大型文件(如预训练模型权重)至关重要[^2]。 #### 获取预训练模型 通过克隆仓库来获取已经预先训练好的 Qwen2-VL-7B 模型: ```bash git clone https://www.modelscope.cn/Qwen/Qwen2-VL-7B-Instruct.git /root/sj-tmp ``` 上述代码片段展示了如何从指定 URL 下载所需资源到本地路径 `/root/sj-tmp` 中。 #### 设置推理框架 对于高效的在线推理服务构建,推荐采用 vLLM 推理库作为支撑平台之一。它能够提供高性能的同时保持较低延迟特性,非常适合于生产环境中运行大规模语言模型。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_name_or_path = "/root/sj-tmp" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) device = "cuda" if torch.cuda.is_available() else "cpu" model.to(device) ``` 这段 Python 代码说明了加载 tokenizer model 的过程,并将其迁移到 GPU 或 CPU 上执行进一步的任务[^3]。 #### 实现简单交互界面 为了让用户更方便地已部署的大规模视觉语言模型互动,可以创建一个简易的 Web 应用程序接口(API)或者图形化用户界面(GUI)。这里给出基于 Flask 构建 RESTful API 的例子: ```python from flask import Flask, request, jsonify app = Flask(__name__) @app.route(&#39;/predict&#39;, methods=[&#39;POST&#39;]) def predict(): input_text = request.json.get(&#39;input&#39;) inputs = tokenizer(input_text, return_tensors="pt").to(device) outputs = model.generate(**inputs) result = tokenizer.decode(outputs[0], skip_special_tokens=True) response = {"output": result} return jsonify(response), 200 if __name__ == "__main__": app.run(host=&#39;0.0.0.0&#39;, port=8080) ``` 以上脚本定义了一个 HTTP POST 方法 &#39;/predict&#39; 来接收 JSON 请求体中的输入文本字符串,经过编码转换成张量形式送入模型预测后返回解码后的输出结果给客户端应用程序使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值