多模态算法QwenVL、KimiVL等算法原理 - Big-Yellow

news/2025/9/22 22:24:32/文章来源:https://www.cnblogs.com/Big-Yellow/p/19106199

最新内容:https://www.big-yellow-j.top/posts/2025/08/28/MultiModal2.html

对于多模态系列模型大致的多模态大语言模型的通用模型框架和每个模块的一些实现方法[1]

基本上就是对于图片/视频等通过不同的视觉编码器(Vit/Clip等)进行编码,对于text通过编码器进行编码,而后将视觉模态信息通过映射层(q-former/mlp等)将两部分维度对齐而后丢到LLM中输出结果。简单总结常用的多模态模型。

QwenVL系列

目前QwenVL迭代更新迭代到2.5(截至2025.09.21)主要介绍QwenVL、QwenVL2、QwenVL2.5这3个多模态模型,其中对于这3个模型其中最大的改进都集中在视觉模态处理上

QwenVL

在QwenVL[2]中在论文里面作者提到的其模型的整个训练过程如下:

仅从提供的不同阶段还是很容易发现QwenVL还是是采用和BLIP相似的使用 learned-query来对齐模态信息
语言模型使用(7.7B):Qwen-7B
视觉编码器(1.9B):Vit-bigG
融合器(0.08B):Learnable Query

不过论文里面对于模型细节介绍不是很多,从代码角度出发窥其模型结构:
模型视觉编码器:视觉编码器使用的是ViT架构(Vision Transformer),ViT的网络设置和初始化参数使用了OpenCLIP预训练好的ViT-bigG模型。具体的代码处理过程(代码),其中模型输出维度变化过程:1x3x448x448-->1x1664x32x32(首先卷积处理)-->1x1024x1664(拉平交换维度)
特征融合器:上述ViT处理后,对于\(448\times 448\)分辨率的图像,生成一个 [1024, 1664]的序列,也就是向量维度为1664的长度为1024的序列。为了压缩视觉token的输入长度,Qwen-VL引入了一个Adapter来压缩图像特征。这个Adaper就是一个随机初始化的单层Cross-Attention模块。该模块使用一组可学习的query向量,将来自ViT的图像特征作为Key向量。通过Cross-Attention操作后将视觉特征序列压缩到固定的256长度(也就是将视觉特征压缩到 256 1644
此外,考虑到位置信息对于精细图像理解的重要性,Qwen-VL将二维绝对位置编码(三角位置编码)整合到Cross-Attention的 \(q,k\)中,以减少压缩过程中可能丢失的位置细节。随后将长度为256的压缩图像特征序列输入到大型语言模型中。

QwenVL-2

对于QwenVL-2[3]其模型的基本结构如下:

1、使用动态分辨率(也就是说输入图像不需要再去改变图像尺寸到一个固定值),于此同时为了减少 visual-token数量,将2x2的的相邻的token进行拼接到一个token而后通过MLP层进行处理。

动态分辨率处理如上,通过指定[mix_pixels, max_pixels]范围然后将图像保持原始的纵横比去缩减图像到上面的范围中(处理过程,首先计算原始图像的像素数量,而后判断和上面指标的范围,如果超出范围就去计算需要修改的比例,在将整个比例去处理到分辨率上)
在通过使用动态分辨率处理图像之后会在单一图片增加时间维度也就是将:CHW-->TCHW(这点是为了和视频处理过程进行对齐),在源码中T选择数值为2也就是将图片“复制一次”,而后对帧序列进行Patchification操作

def _preprocess(): ......   channel = patches.shape[1]grid_t = patches.shape[0] // self.temporal_patch_sizegrid_h, grid_w = resized_height // self.patch_size, resized_width // self.patch_sizepatches = patches.reshape(grid_t,                            # 0self.temporal_patch_size, channel, # 1 2grid_h // self.merge_size,         # 3self.merge_size, self.patch_size,  # 4 5grid_w // self.merge_size,         # 6self.merge_size, self.patch_size,  # 7 8) # self.merge_size=2 self.patch_size=14 self.temporal_patch_size=2### 将2x2的邻域Patch放到一起,方便后续做领域的Patch过Projector层做聚合压缩patches = patches.transpose(0, 3, 6, 4, 7, 2, 1, 5, 8)### Patch序列化,并保留Patch位置信息(时间,高,宽)flatten_patches = patches.reshape(grid_t * grid_h * grid_w, channel * self.temporal_patch_size * self.patch_size * self.patch_size)

上面过程也就是进行所谓的“2x2的相邻token拼接”,最后得到[grid_t * grid_h * grid_w, channel * temporal_patch_size(2) * patch_size(14) * patch_size(14)](其中grid_h=resized_height // self.patch_size(14)
2、多模态的旋转位置编码(M-RoPE),也就是将原来位置编码所携带的信息处理为:时序(temporal)、高度(height)、宽度(width)。比如下图中对于文本处理直接初始化为:\((i,i,i)\)。但是对于图片而言就是:\((i,x,y)\) 其中 \(i\) 是恒定的,而对于视频就会将 \(i\) 换成视频中图像的顺序
总结处理过程:动态分辨率处理-->复制时间维度-->将序列切割为patch。这样一来就会直接将图像处理为:[grid_t * grid_h * grid_w, channel * temporal_patch_size(2) * patch_size(14) * patch_size(14)](其中grid_h=resized_height // self.patch_size(14))除此之外而后去计算 3d-RoPE最后通过一层线性层处理就得到最后的视觉token。

QwenVL-2.5

在QwenVL2.5中[4]模型具体的代码处理过程参考Blog[5]具体模型结构:

在图像处理过程上和QwenVL2差异不大都是直接:动态分辨率处理-->复制时间维度-->将序列切割为patch,对比两个模型差异:

1、采用 RMSNorm 替换了所有 LayerNorm;2、ViT中每一个VisionBlock中的MLP换成了SwiGLU 结构。只从模型结构上差异不到,在QwenVL2.5中主要进行改动:1、使用window-attention(对应上述结构中的Qwen2_5_VLVisionAttention)对于具体的划分window方法(代码):根据输入的图像大小 (gird_t, grid_h, grid_w)去得到窗口索引 (window_index) 和 累积序列长度 (cu_window_seqlens)。具体例子如下:

# 数据数据特征
[ [ 0,  1,  2,  3,  4,  5],[ 6,  7,  8,  9, 10, 11],[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23],[24, 25, 26, 27, 28, 29],[30, 31, 32, 33, 34, 35] ]
# 保证可以被window_size划分需要进行填充
[ [ 0,  1,  2,  3,  4,  5, X, X],[ 6,  7,  8,  9, 10, 11, X, X],[12, 13, 14, 15, 16, 17, X, X],[18, 19, 20, 21, 22, 23, X, X],[24, 25, 26, 27, 28, 29, X, X],[30, 31, 32, 33, 34, 35, X, X],[ X,  X,  X,  X,  X,  X, X, X],[ X,  X,  X,  X,  X,  X, X, X] ]
# 而后直接更具window大小得到每个需要计算注意力的window
# window-0
[ 0,  1,  2,  3]
[ 6,  7,  8,  9] 
[12, 13, 14, 15]
[18, 19, 20, 21]
# 展平重新排列得到:
# window-0
[0, 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20, 21]
# window-1 
[4, 5, 10, 11, 16, 17, 22, 23]
# 计算累计长度
seqlens = (index_padded != -100).sum([2, 3]) # 计算有效长度:window-0:16 window-1:8.....
cu_seqlens_tmp = seqlens.cumsum(0) * 4 + cu_window_seqlens[-1]
cu_window_seqlens.extend(cu_seqlens_tmp.tolist())
# [0, 64, 96, 128, 144]
# 得到最后返回结果window_index, cu_window_seqlens

在得到window_index和cu_window_seqlens之后就是计算注意力过程

for i in range(1, len(cu_seqlens)):attention_mask[..., cu_seqlens[i - 1] : cu_seqlens[i], cu_seqlens[i - 1] : cu_seqlens[i]] = 0q = q.transpose(0, 1)
k = k.transpose(0, 1)
v = v.transpose(0, 1)
attn_weights = torch.matmul(q, k.transpose(1, 2)) / math.sqrt(self.head_dim)
attn_weights = attn_weights + attention_mask
attn_weights = nn.functional.softmax(attn_weights, dim=-1, dtype=torch.float32).to(q.dtype)

总结

从QwenVL到QwenVL2.5视觉编码器处理过程:
QwenVL:将图像转化为固定的分辨率而后将输入到Vit-bigG进行处理得到视觉特征之后再去使用类似Q-former处理过程(QwenVL中使用的是一个随机初始化的单层Cross-Attention模块)使用learned-query(压缩到固定的256长度的token)将视觉token进行压缩而后输入到LLM中。
QwenVL2:首先使用动态分辨率(将图像除以固定的factor而后保持横纵比将其缩减到 [mix_pixels, max_pixels]中)去处理图像而后将其输入到视觉编码器中,而后将2x2的的相邻的token进行拼接(也就是将图像补充一个时间帧得到TCHW,而后再去在THW三个维度划分得到不同的patch:grid_t,grid_h,grid_w)到一个token而后通过MLP层进行处理。
QwenVL2.5:整体框架上和QwenVL2差异不大,区别在于使用了window-attention以及2D-RoPE

KimiVL系列

参考


  1. https://arxiv.org/abs/2504.07491 ↩︎

  2. https://arxiv.org/pdf/2308.12966 ↩︎

  3. http://arxiv.org/abs/2409.12191 ↩︎

  4. https://arxiv.org/abs/2502.13923 ↩︎

  5. https://www.big-yellow-j.top/posts/2025/08/29/QwenVLCode.html ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态模型——QwenVL2.5的微调以及强化学习代码操作 - Big-Yellow

本文详细解析QwenVL2.5模型的处理流程及微调方法,包括模板化输入(通过processor.apply_chat_template处理对话messages,含<|im_start|>等标记模拟用户/assistant对话)、编码输入(图像处理采用smart_resize动…

从用户态到内核态:Windows CC 技术深度解析(第一篇:DNS隧道)

本文是Windows命令与控制系列的开篇,重点解析DNS隧道技术如何通过编码数据绕过网络安全检测,涵盖从用户态到内核态的完整攻击链。文章将分三部分深入探讨DNS隧道、QUIC协议C2及内核级隐蔽通信的实现原理。从用户态到…

网站开发的关键计算机资源计划宝塔wordpress动静分离

使用swtichHost工具切换开发环境时候提示没有权限问题&#xff0c;如下图。。 解决方案有两点 1、进入 C:\Windows\System32\drivers\etc右键点击hosts的属性查看 属性的只读是否被勾选了&#xff0c;如果被勾选了将勾选勾去掉 上述完成后以管理员身份运行&#xff08;管理员…

网站建设是怎么赚钱上海网站制作哪家奿

文章目录 前言是什么&#xff1f;如何使用适用场景优点和缺点兼容性后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技…

科技网站设计欣赏建俄语网站

书友阅读↓ Morii 5阶学习法 1.测试学习法&#xff08;先测试再学习&#xff0c;课前测试&#xff09; 【4问】 标题是什么&#xff1f; 我的观点是什么?主题是什么? 想解决的问题是什么? 【看前言➕结尾——初步看本书的逻辑?好书?】 2.指读法~细节【逻辑】 手指指着文字…

电影网站源码怎么做的如何设计网站导航

series[i]-map用于控制 ECharts 中的地图。地图主要用于地理区域数据的可视化&#xff0c;配合 visualMap 组件用于展示不同区域的人口分布密度等数据。多个地图类型相同的系列会在同一地图上显示&#xff0c;这时候使用第一个系列的配置项作为地图绘制的配置。Tip: 在 ECharts…

哪个网站可以接加工单绵阳 网站开发

一、概述 无线局域网是指无线通信技术与上位机设备互相连接&#xff0c;最初推出的版本为IEEE802.11和IEEE802.11b&#xff0c;虽然传输距离和蓝牙一样&#xff0c;属于短距离传输&#xff0c;但是其传输速率最高可以达到11Mb/s&#xff0c;并且其覆盖率也相当高。目前WIFI技术…

广西智能网站建设哪家好做网站的保证承诺

目录 1、Windows系统自带截图工具 2、截屏软件 3、聊天软件 4、Windows系统自带有截屏的快捷键 5、浏览器截屏 6、手机拍照 今天小编给大家介绍几个常用截屏的方法&#xff0c;希望对大家的日常办公能有所帮助&#xff01; 1、Windows系统自带截图工具 点击左下角开始菜单在“…

网页制作专业怎么选wordpress 访问优化

文章目录 一、文件流打开方式参数1、文件流打开方式参数2、文件指针3、组合打开方式4、文件打开失败 一、文件流打开方式参数 1、文件流打开方式参数 文件流打开方式参数 : ios::in : 以只读方式打开文件 ;ios::out : 以只写方式打开文件 , 默认打开方式 , 如果文件已存在则清…

深圳做步步高的公司网站软件开发工具也叫

创建了SpringBoot项目之后进行运行&#xff0c;当我们需要使用游览器进行访问的时候要输入端口号&#xff0c;那麽我们如何来修改这个端口号呢&#xff1f;&#xff1f;&#xff1f; 1.在src/main/resources目录下新建文件application.properties&#xff0c;并进行配置,来重写…

高端用户群浏览网站湖南门户网站建设

1.精灵图 使用精灵图核心总结&#xff1a; 1. 精灵图主要针对于小的背景图片使用。 2. 主要借助于背景位置来实现--- background-position 。 3. 一般情况下精灵图都是负值。&#xff08;千万注意网页中的坐标&#xff1a; x轴右边走是正值&#xff0c;左边走是负值&#xf…

企业短视频推广上海高玩seo

在当今学术研究中&#xff0c;科研人员在撰写论文时面临诸多挑战。首先是信息量的剧增&#xff0c;科研人员需要快速消化新知识&#xff0c;筛选相关信息并清晰表达。但论文写作不仅是信息的罗列&#xff0c;还需要条理清晰、逻辑严密、语言精准&#xff0c;特别是在竞争激烈的…

尤溪网站开发图片点开是网站怎么做

目录 实现窗口可视化 数字图像加密 窗口布局设置 基于混沌Logistic的图像加密 基于三重DES的图像加密 数字图像解密 窗口布局设置 基于混沌Logistic的图像解密 基于三重DES的图像解密 基于LSB的数字水印提取 窗口布局设置 水印的嵌入与提取 实现窗口可视化 这里…

2017酷站推荐网站现在确诊阳性什么症状

点击上方“九尾短视频研习室” 可以订阅哦&#xff01;今天分享使用 iPhone 或者安卓版 filmic 拍摄的素材&#xff0c;如何无损导入到win 或 Mac 电脑中~01iPhone Mac使用 iPhone 和 Mac 的朋友&#xff0c;可以使用“隔空投送”无线传输&#xff0c;但是这个过程中&#xff…

二手书籍交易网站开发方式广州万户网络

出差去常州照的几张照片&#xff0c;那边的天气很暖和了。 转载于:https://www.cnblogs.com/Duiker/archive/2008/03/17/1109665.html

长沙哪家公司做网站好php网站如何编辑

Java 8对日期和时间API进行了重大更改&#xff0c;这是在JSR 310&#xff1a;日期和时间API的 JDK中包括了Joda Time API 。 此JSR由Joda Time的创建者Stephen Colebourne领导。 有许多惊人的API可用于日期和时间。 在本文中&#xff0c;我将介绍最常用的&#xff1a; java.ti…

加强酒店网站建设的建议自己制作上传图片的网站怎么做

数据库的设计范式是数据库设计所需要满足的规范&#xff0c;满足这些规范的数据库是简洁的、结构明晰的&#xff0c;同时&#xff0c;不会发生插入&#xff08;insert&#xff09;、删除&#xff08;delete&#xff09;和更新&#xff08;update&#xff09;操作异常。反之则是…

搭建网站怎么挣钱网页浏览器有哪些

1.wifi断开大体流程&#xff1a; 1.wifi断开 wlan-driver最先知道。 2.wlan-driver在与路由器连接的时候(未断开时), 会有周期性的beacon帧来维持连接&#xff0c;AP端一旦遇到突发事情&#xff0c;会立刻通过802.11协议的 deauth 帧/ reject 帧等 通知到 driver。 3. wlan-…

【Azure Batch】使用Start Task来挂载Storage Blob

问题描述 本文将介绍如何使用开始任务(Start Task)为Batch Account Node配置Storage Account Blob挂载问题解答 第一步:准备 blobfuse2 mount的配置文件 这里参考的是文档How to configure settings for BlobFuse2 (…

HP notebook set your key to action key /multimedia key

HP notebook set your key to action key /multimedia keyF10进入BIOS,Press this key you will succeed.