当前位置: 首页 > article >正文

Qwen2.5-VL - 模型结构

Qwen2.5-VL - 模型结构

flyfish

配置项 (Configuration)Qwen2.5-VL-3BQwen2.5-VL-7BQwen2.5-VL-72B
视觉Transformer (ViT)
隐藏层大小 (Hidden Size)128012801280
层数 (# Layers)323232
头数 (# Num Heads)161616
中间层大小 (Intermediate Size)345634563456
patch尺寸 (Patch Size)141414
窗口尺寸 (Window Size)112112112
全注意力块索引 (Full Attention Block Indexes){7, 15, 23, 31}{7, 15, 23, 31}{7, 15, 23, 31}
视觉-语言融合器 (Vision-Language Merger)
输入通道 (In Channel)128012801280
输出通道 (Out Channel)204835848192
大语言模型 (LLM)
隐藏层大小 (Hidden Size)204835848192
层数 (# Layers)362880
KV头数 (# KV Heads)248
头大小 (Head Size)128128128
中间层大小 (Intermediate Size)48641894429568
嵌入绑定 (Embedding Tying)✔️✖️✖️
词汇表大小 (Vocabulary Size)151646151646151646
训练 token 数 (# Trained Tokens)4.1T4.1T4.1T

以Qwen2.5-VL-3B 为例

Qwen2.5 VL 主要由三部分组成:

视觉处理模块(visual):处理图像输入,提取视觉特征
语言模型模块(model):处理文本输入,生成语言表示
输出层(lm_head):将融合后的特征映射到词表空间

简化

  1. 视觉路径

    图像 → patch_embed(Conv3d)→ 旋转位置编码 → 32个视觉块(注意力+MLP)→ merger(特征融合)→ 2048维视觉表示
    
  2. 语言路径

    文本token → embed_tokens(词嵌入)→ 36个解码器层(自注意力+MLP)→ norm归一化 → 2048维语言表示
    
  3. 融合与输出

    视觉表示 + 语言表示(在merger中融合)→ 语言解码器处理融合特征 → lm_head(线性层)→ 词表空间预测(151936维)
    

Qwen2.5 VL各模块前向传播流程

视觉处理路径

图像输入 (3通道)
↓
patch_embed (视觉分块嵌入)↳ Conv3d(3, 1280, kernel=(2,14,14), stride=(2,14,14))
↓
rotary_pos_emb (旋转位置编码)
↓
blocks (32个视觉Transformer块)↳ 块0-31: Qwen2_5_VLVisionBlock↳ norm1: Qwen2RMSNorm(eps=1e-06)↳ attn: Qwen2_5_VLVisionFlashAttention2↳ qkv: Linear(1280→3840)↳ FlashAttention2计算↳ proj: Linear(1280→1280)↳ norm2: Qwen2RMSNorm(eps=1e-06)↳ mlp: Qwen2_5_VLMLP↳ gate_proj: Linear(1280→3420)↳ up_proj: Linear(1280→3420)↳ act_fn: SiLU()↳ down_proj: Linear(3420→1280)
↓
merger (视觉-语言特征融合)↳ ln_q: Qwen2RMSNorm(eps=1e-06)↳ mlp: Sequential↳ Linear(5120→5120)↳ GELU()↳ Linear(5120→2048)
↓
视觉特征输出: 2048维向量

语言处理路径

文本token输入 (ID序列)
↓
embed_tokens: Embedding(151936, 2048)
↓
layers (36个解码器层)↳ 层0-35: Qwen2_5_VLDecoderLayer↳ input_layernorm: Qwen2RMSNorm(eps=1e-06)↳ self_attn: Qwen2_5_VLFlashAttention2↳ q_proj: Linear(2048→2048)↳ k_proj: Linear(2048→256)↳ v_proj: Linear(2048→256)↳ rotary_emb: 旋转位置编码↳ FlashAttention2计算 (带因果掩码)↳ o_proj: Linear(2048→2048)↳ post_attention_layernorm: Qwen2RMSNorm(eps=1e-06)↳ mlp: Qwen2MLP↳ gate_proj: Linear(2048→11008)↳ up_proj: Linear(2048→11008)↳ act_fn: SiLU()↳ down_proj: Linear(11008→2048)
↓
norm: Qwen2RMSNorm(eps=1e-06)
↓
语言特征输出: 2048维向量

多模态融合与输出

视觉特征 (2048维) + 语言特征 (2048维)
↓ 在merger模块中融合 (见视觉路径末尾)
↓
融合特征输入语言解码器
↓
lm_head: Linear(2048→151936)
↓
输出: 词表空间预测 (用于文本生成或分类)

一、视觉特征提取路径

  1. 图像分块与嵌入
    输入3通道图像(如H×W×3),通过patch_embed模块的3D卷积(Conv3d)进行分块处理。卷积核大小为(2,14,14),步长(2,14,14),将图像在时间维度(假设为2帧)和空间维度(14×14)划分为补丁,同时将通道数从3映射至1280维,生成初始视觉补丁特征。

  2. 位置编码注入
    通过rotary_pos_emb模块为视觉补丁添加旋转位置编码,赋予特征空间位置信息,提升模型对图像结构的感知能力。

  3. 多层视觉Transformer处理
    特征依次通过32个Qwen2_5_VLVisionBlock。每个块内:

    • 先经norm1(RMSNorm)归一化;
    • 通过attn模块的qkv线性层(1280→3840)生成Query、Key、Value,执行FlashAttention2计算补丁间的关联,再经proj线性层(1280→1280)还原维度;
    • 再经norm2归一化后,进入mlp模块:通过gate_projup_proj将特征扩展至3420维,经SiLU激活后由down_proj映射回1280维,增强特征表达能力。
  4. 跨模态特征融合
    视觉处理的最终特征(1280维)进入merger模块:

    • 先通过ln_q(RMSNorm)归一化语言路径的输入特征;
    • 经三层MLP(5120→5120→2048,GELU激活)将视觉特征与语言特征拼接后映射至2048维,实现视觉特征向语言空间的对齐。

二、语言特征处理路径

  1. 文本嵌入表示
    输入文本token ID序列,通过embed_tokens(词嵌入层)映射为2048维的词向量,作为语言模型的初始特征。

  2. 多层解码器处理
    特征依次通过36个Qwen2_5_VLDecoderLayer。每个层内:

    • 先经input_layernorm(RMSNorm)归一化;
    • 通过self_attn模块的q_proj(2048→2048)、k_proj(2048→256)、v_proj(2048→256)生成Query、Key、Value,结合rotary_emb位置编码执行带因果掩码的FlashAttention2(确保解码时只能关注前文),再经o_proj(2048→2048)还原维度;
    • post_attention_layernorm归一化后,进入mlp模块:通过gate_projup_proj扩展至11008维,经SiLU激活后由down_proj映射回2048维,捕捉文本语义依赖。
  3. 最终归一化
    所有解码器层输出经norm(RMSNorm)归一化,生成2048维的语言特征表示。

三、多模态融合与输出

  1. 特征融合
    视觉路径输出的2048维特征与语言路径的2048维特征在merger模块中融合,形成包含视觉-语言信息的联合表示。

  2. 生成预测
    融合后的特征输入语言解码器进行跨模态推理,最终通过lm_head线性层(2048→151936)映射至词表空间,输出文本生成的概率分布,用于回答问题、图像描述等任务。

Qwen2_5_VLForConditionalGeneration((visual): Qwen2_5_VisionTransformerPretrainedModel((patch_embed): Qwen2_5_VisionPatchEmbed((proj): Conv3d(3, 1280, kernel_size=(2, 14, 14), stride=(2, 14, 14), bias=False))(rotary_pos_emb): Qwen2_5_VisionRotaryEmbedding()(blocks): ModuleList((0-31): 32 x Qwen2_5_VLVisionBlock((norm1): Qwen2RMSNorm((0,), eps=1e-06)(norm2): Qwen2RMSNorm((0,), eps=1e-06)(attn): Qwen2_5_VLVisionFlashAttention2((qkv): Linear(in_features=1280, out_features=3840, bias=True)(proj): Linear(in_features=1280, out_features=1280, bias=True))(mlp): Qwen2_5_VLMLP((gate_proj): Linear(in_features=1280, out_features=3420, bias=True)(up_proj): Linear(in_features=1280, out_features=3420, bias=True)(down_proj): Linear(in_features=3420, out_features=1280, bias=True)(act_fn): SiLU())))(merger): Qwen2_5_VLPatchMerger((ln_q): Qwen2RMSNorm((0,), eps=1e-06)(mlp): Sequential((0): Linear(in_features=5120, out_features=5120, bias=True)(1): GELU(approximate='none')(2): Linear(in_features=5120, out_features=2048, bias=True))))(model): Qwen2_5_VLModel((embed_tokens): Embedding(151936, 2048)(layers): ModuleList((0-35): 36 x Qwen2_5_VLDecoderLayer((self_attn): Qwen2_5_VLFlashAttention2((q_proj): Linear(in_features=2048, out_features=2048, bias=True)(k_proj): Linear(in_features=2048, out_features=256, bias=True)(v_proj): Linear(in_features=2048, out_features=256, bias=True)(o_proj): Linear(in_features=2048, out_features=2048, bias=False)(rotary_emb): Qwen2_5_VLRotaryEmbedding())(mlp): Qwen2MLP((gate_proj): Linear(in_features=2048, out_features=11008, bias=False)(up_proj): Linear(in_features=2048, out_features=11008, bias=False)(down_proj): Linear(in_features=11008, out_features=2048, bias=False)(act_fn): SiLU())(input_layernorm): Qwen2RMSNorm((0,), eps=1e-06)(post_attention_layernorm): Qwen2RMSNorm((0,), eps=1e-06)))(norm): Qwen2RMSNorm((0,), eps=1e-06)(rotary_emb): Qwen2_5_VLRotaryEmbedding())(lm_head): Linear(in_features=2048, out_features=151936, bias=False)
)

相关文章:

Qwen2.5-VL - 模型结构

Qwen2.5-VL - 模型结构 flyfish 配置项 (Configuration)Qwen2.5-VL-3BQwen2.5-VL-7BQwen2.5-VL-72B视觉Transformer (ViT)隐藏层大小 (Hidden Size)128012801280层数 (# Layers)323232头数 (# Num Heads)161616中间层大小 (Intermediate Size)345634563456patch尺寸 (Patch S…...

【QT常用技术讲解】多线程执行后台命令行的两种方式(后台运行和返回打印信息)

前言 QT调用后台命令行,通常有两种场景:执行命令,等待并获取返回结果;执行命令,让程序后台一直执行(孤儿进程),不需要获取命令返回的结果。以下是分享在国产信创桌面操作系统(麒麟kylin、统信UO…...

【行驶证识别成表格】批量OCR行驶证识别与Excel自动化处理系统,行驶证扫描件和照片图片识别后保存为Excel表格,基于QT和华为ocr识别的实现教程

在车辆管理、物流运输、保险理赔等领域,经常需要处理大量的行驶证信息。传统的人工录入方式效率低、易出错,而使用 OCR 技术可以自动识别行驶证图片中的文字信息,极大提高数据处理效率。该系统可以应用于以下场景: 保险公司快速…...

Linux--进程的状态

1.进程状态在所有系统中宏观的大致模型 1.1、进程状态与变迁 基础状态:涵盖创建、就绪、运行、阻塞、结束等核心状态,描述进程从诞生到消亡的生命周期流转,如创建后进入就绪,争抢 CPU 进入运行,遇 I/O 或资源等待则转…...

(nice!!!)(LeetCode每日一题)2434. 使用机器人打印字典序最小的字符串(贪心+栈)

题目:2434. 使用机器人打印字典序最小的字符串 思路:贪心栈,时间复杂度0(n)。 字符串t其实就是栈,后进先出。要让p的字典序最小,那当然是t每次弹出的字符,都小于或等于“剩下未入t里的字符串的字符”&#…...

008-libb64 你有多理解base64?-C++开源库108杰

正确认识二进制数据和文本数据的关系;深刻理解 base64 编码核心等式:256256256 64646464 经常听到——以至 AI 也会这么回答的:base64 编码用于将二进制数据,转换为文本数据。但是,众所周知,在数字电子计算机中&#…...

电子电路基础2(杂乱)

电容器 容抗 滤波电路(半波) 全波整流 因为A点的电压比D点的电压高,所以D点会走向C点 电感基础 什么是电感器? 一种把电能转换成磁能,并可以将磁能存储起来的元器件。 在嵌入式开发中,电感主要用于动态能量…...

LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 CC 的 RedTeam 框架

一、软件介绍 文末提供程序和源码下载 LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 C&C 的 RedTeam 框架,具有隐藏活动的 rootkit、与 Windows/Linux/Mac OSX 兼容的不可检测的可塑植入物,以及自配置后门。凭借其 Web 界面和强大的…...

电脑的ip地址会自动变怎么办?原因解析和解决方法

在当今互联网时代,IP地址是每台联网设备的"身份证",但很多用户都遇到过IP地址自动变化的情况。这种现象既可能发生在内网(局域网)环境中,也可能出现在外网(公网)连接中。要理解IP地址…...

PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第一部分)

在填充 PDF 中的图形时(以及许多其他技术中),你可以选择使用 Even-Odd(奇偶) 或 Non-Zero(非零) 填充规则。 对于那些已经在想“你在说啥?”的朋友,别担心,我…...

C++.OpenGL (5/64)变换(Transformation)

变换(Transformation) 变换矩阵核心概念 #mermaid-svg-OvPP9vqkY9MRAHyd {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OvPP9vqkY9MRAHyd .error-icon{fill:#552222;}#mermaid-svg-OvPP9vqkY9MRAHyd .error-tex…...

优化电脑的磁盘和驱动器提高电脑性能和延长硬盘寿命?

磁盘优化 磁盘清理: 使用系统自带的磁盘清理工具(如Windows的“磁盘清理”)删除不必要的文件。清空回收站。删除临时文件和缓存。 磁盘碎片整理(针对机械硬盘): 定期进行磁盘碎片整理,以提高文…...

【八股消消乐】MySQL参数优化大汇总

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本专栏《八股消消乐》旨在记录个人所背的八股文,包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点&#xff…...

JavaSec-SPEL - 表达式注入

简介 SPEL(Spring Expression Language):SPEL是Spring表达式语言,允许在运行时动态查询和操作对象属性、调用方法等,类似于Struts2中的OGNL表达式。当参数未经过滤时,攻击者可以注入恶意的SPEL表达式,从而执行任意代码…...

在 Caliper 中执行不同合约的方法

在 Caliper 中执行不同的智能合约需要通过正确配置工作负载(workload)和测试轮次(rounds),下面我将详细介绍如何执行不同的合约。 1. 通过 config.yaml 配置不同测试轮次 你可以在 config.yaml 中为不同的合约定义不同的测试轮次: rounds:- label: test-helloworlddescript…...

CSS 平铺+自动换行效果

先上效果图 样式 <template><div class"activity-questions"><h1>活动题库</h1><div v-if"loading" class"loading">加载中...</div><div v-else><div v-if"questions.length 0" clas…...

微服务网关SpringCloudGateway+SaToken鉴权

目录 概念 前置知识回顾 拿到UserInfo 用于自定义权限和角色的获取逻辑 最后进行要进行 satoken 过滤器全局配置 概念 做权限认证的时候 我们首先要明确两点 我们需要的角色有几种 我们需要的权限有几种 角色 分两种 ADMIN 管理员 &#xff1a;可管理商品 CUSTIOMER 普通…...

永磁同步电机控制算法--模糊PI转速控制器

一、原理介绍 在常规的PID控制系统的基础上提出了一种模糊PID以及矢量变换方法相结合的控制系统&#xff0c;经过仿真分析对比证明&#xff1a; 模糊PID控制系统能够有效的提高永磁同步电机的转速响应速度&#xff0c;降低转矩脉动&#xff0c;增强了整体控制系统的抗干扰能力…...

Elasticsearch集群最大分片数设置详解:从问题到解决方案

目录 前言 1 问题背景&#xff1a;重启后设置失效 2 核心概念解析 2.1 什么是分片(Shard)&#xff1f; 2.2 cluster.max_shards_per_node的作用 2.3 默认值是多少&#xff1f; 3 参数设置的两种方式 3.2 持久性设置(persistent) 3.2 临时设置(transient) 4 问题解决方…...

计算机视觉与深度学习 | 基于MATLAB的图像特征提取与匹配算法总结

基于MATLAB的图像特征提取与匹配算法全面指南 图像特征提取与匹配 基于MATLAB的图像特征提取与匹配算法全面指南一、图像特征提取基础特征类型分类二、点特征提取算法1. Harris角点检测2. SIFT (尺度不变特征变换)3. SURF (加速鲁棒特征)4. FAST角点检测5. ORB (Oriented FAST …...

DVWA全靶场

目录 暴破 Low - 万能密码 Medium - 转义 High - Token Impossible 命令注入 CSRF跨站请求伪造 - 抓包 Low Medium - 域名限制 High - 域名限制xss 文件包含 - 页面点点点 Low Medium - 过滤http:// High - file Impossible - 写死 文件上传 Low Medium - 文件…...

【反无人机检测】C2FDrone:基于视觉Transformer网络的无人机间由粗到细检测

C2FDrone&#xff1a;基于视觉Transformer网络的无人机间由粗到细检测 C2FDrone: Coarse-to-Fine Drone-to-Drone Detection using Vision Transformer Networks 论文链接 摘要 摘要——基于视觉的无人机间检测系统在碰撞规避、反制敌对无人机和搜救行动等应用中至关重要。然…...

Android 本地存储路径说明

一、背景 作为一个开发者,我们经常需要通过缓存一些文件到SD卡中,常见的方式就是,通过: File sdCard Environment.getExternalStorageDirectory(); 获取SD卡根目录,然后自定义文件/文件名进行文件存储.这样做法的结果就是,当手机安装了大量的app时&#xff0c;SD卡根目录会…...

Git 推送失败解决教程——error: failed to push some refs to

&#x1f6a7; Git 推送失败解决教程&#xff1a; 错误信息&#xff1a; error: failed to push some refs to ... hint: Updates were rejected because the remote contains work that you do not have locally.&#x1f9e0; 问题原因简述&#xff1a; 你的本地分支试图将…...

spark 执行 hive sql数据丢失

spark-sql 丢失数据 1.通过spark执行hive sql 的时候&#xff0c;发现 hive 四条数据&#xff0c;spark 执行结果只有两条数据 目标对应的两条数据丢失 select date&#xff0c; user_id&#xff0c; pay from dim.isr_pay_failed where user_id ‘*******’ hive-sql 结果…...

国产pcie switch 8748+飞腾/龙芯/昇腾高速存储方案设计

方案概述 本设计以国微PCIe Switch 8748为核心交换芯片&#xff0c;通过多端口PCIe 4.0/5.0通道连接飞腾ARM架构处理器、龙芯LoongArch处理器及昇腾AI加速卡&#xff0c;构建支持NVMe协议的高速存储集群&#xff0c;目标实现6.5GB/s以上的可持续带宽。 硬件架构 处理器选型 飞…...

【Qt】:设置新建类模板

完整的头文件模板 #ifndef %FILENAME%_H #define %FILENAME%_H/*** brief The %CLASSNAME% class* author %USER%* date %DATE%*/ class %CLASSNAME% { public:%CLASSNAME%();~%CLASSNAME%();// 禁止拷贝构造和赋值%CLASSNAME%(const %CLASSNAME%&) delete;%CLASSNAME%&a…...

如何使用插件和子主题添加WordPress自定义CSS(附:常见错误)

您是否曾经想更改网站外观的某些方面&#xff0c;但不知道怎么做&#xff1f;有一个解决方案——您可以将自定义 CSS&#xff08;层叠样式表&#xff09;添加到您的WordPress网站&#xff01; 在本文中&#xff0c;我们将讨论您需要了解的有关CSS的所有知识以及如何使用它来修…...

开始在本地部署自己的 Gitea 服务器

0.简介 在软件开发和团队协作中&#xff0c;代码管理是至关重要的环节。笔者一直使用gitblit管理自己的仓库。然鹅&#xff0c;这个软件已经很久没有更新了。经过多方考察&#xff0c;发现Gitea 是一款轻量级的开源代码托管平台&#xff0c;具有易于部署、资源占用少、功能丰富…...

7.2.1_顺序查找

知识总览&#xff1a; 顺序查找&#xff1a; 算法思想&#xff1a; 从头到脚挨个找或者从脚到头挨个找适用于线性表(顺序存储和链式存储都适用)&#xff0c;又叫线性查找 实现&#xff1a; 1个数组elem指向数组的起始位置&#xff0c;索引从0开始遍历数组直到找到目标值返回…...