多模态大模型: 盘点Highlights part2——Qwen-VL系列

news/2024/10/4 19:40:58/文章来源:https://blog.csdn.net/baidu_25854831/article/details/142036789

前言

Hi大家好,我叫延捷,是一名计算机视觉算法工程师,也是叉烧的老朋友了。我们计划发布一系列关于多模态大模型的文章,帮助大家快速、精准地了解多模态大模型的前世今生,并且深入各个多模态大模型领域优秀的工作,希望能给大家一个脉络性的盘点,一起学习,共同进步。

Introduction

上一期我们介绍LLaVA-NeXT的若干延伸工作,并且也跟大家分享LLaVA系列的集大成之作LLaVA-OneVision。本期则会详细介绍一下另外一个在多模态大模型领域相当优秀的工作Qwen-VL,同时Qwen2-VL的技术报告在8月29号刚刚发布,也会跟大家同步介绍这个最新的工作。同样地我并不会过多列举一些不必要的论文细节和指标,而是会着重讲述:

  1. “心路历程”:一个系列工作逐步发展的路径,作者是如何根据当前工作的缺点一步步优化的,并且会总结出每篇工作的highlight,在精而不在多;

  2. “数据细节”:各个工作中对数据处理的细节,包括但不限于数据的收集,采样时的分布,如何清洗/重建noisy数据,如何进行数据预处理,视频抽样的方案等,这些对算法工程师来说是同样重要的一环;

  3. “前人肩膀”:各个工作中隐藏着一些非常值得盘的消融实验,站在前人的肩膀上,使用这些已有的消融实验结论,不仅能帮助我们更好地理解论文,更能在实际工作中少做些不必要的实验and少走弯路。

我这边将详细介绍Qwen-VL,也会简单过一下Qwen2-VL的技术报告,作为一个广受关注的多模态大模型,相信大家会从本文中收获不少。

Qwen-VL

《Qwen-VL: A Versatile Vision-Language Model for Understanding, Localization, Text Reading, and Beyond》(2023)

核心是沿用了BLIP系列的VisionEncoder+Projector+LLM经典架构,简化了Instruction BLIP中较为设计冗杂的Q-Former,也更加适配交错的多轮图文对话,并且在【加强局部/细粒度信息提取】和【精细化数据清洗】上都提出了相当值得借鉴的方案。

首先是模型结构:

  • 视觉编码器:CLIP预训练的ViT-bigG(patch_size == 14);

  • Projector:包含256个learnable img queries的单层cross-attention,q为queries,k和v为视觉编码器的输出结果,并且给输入的img queries和img encodings都加上了2D绝对位置编码(个人认为这里加入位置编码还是很重要的,尤其是对细粒度图像理解);

  • LLM:Qwen-7B

训练方面,参照Instruction-BLIP,也是分为了3个阶段:

  1. Pre-training:共1.4 Billion数据量的弱标签&网络爬取的图像文本对数据,22.7%中文+77.3%英文,同时训练视觉编码器和图文对齐Projector,输入图像尺寸为224224,并且基础学习率均为210^-4;

55c3417da131cad38fb5121a163112ad.png

Qwen-VL的1阶段预训练的数据分布和训练策略

  1. Multi-task Pre-training:共76.8 Million数据量的细粒度&高质量标注的多任务数据,其中也包含了交错的图文对话数据,训练所有模型参数,输入图像尺寸为448*448;

bcd3b0a18b9fe6b8067a37c563645dba.png

Qwen-VL的2阶段多任务预训练的prompt formatting

  1. SFT:使用了Instruction tuning的方式来增强模型的指令跟随能力,只训练图文对齐Projector和LLM,输入图像尺寸仍然为448*448;值得关注的是,Qwen-VL提出现在使用MML来生成instruction prompt的方式大多都只针对于单个的图文对,为此Qwen-VL结合人工标注+模型生成+策略拼接构建了一批交错多图像的instruction tuning数据,并且在训练过程中混入了一部分纯文本对话数据,总共3阶段SFT数据总共为350k;

eda1219f52a03954af7a2c32b4055633.png

Qwen-VL中3阶段Instruction Tuning的一些训练细节

d6a0c0ccfa7a467149f91dbf32ac6f78.png

Qwen-VL中整体模型架构图,跟Instruction-BLIP一样分为了3阶段

9550a1412ab9a90fe6add142d56e6a3d.png

Qwen-VL训练3个阶段的超参数,学习率逐步递减

我们根据Qwen-VL展示出来的超参数图可以发现,并没有像LLaVA-NeXT系列一样,把视觉编码器学习率设为Projector和LLM的1/5~1/10(个人认为对CLIP系列预训练好了的视觉编码器用相对小的学习率是比较好的做法)。

Highlights:

  1. 在Qwen-VL中的图文Projector设计:为一个包含256个learnable queries的单层cross-attention,对比BLIP-v2中仅包含32个的learnable img queries但设计更复杂的Q-Former,Qwen-VL的做法也体现出:对于Projector来说不需要多复杂的网络结构,但是不能在img token层面进行有损压缩(同时LLaVA-NeXT-Ablations中的结论也印证了img tokens数量对模型最终效果的影响是很大的);Qwen-VL的论文中也展现了关于img tokens的消融实验。

e23a30d35c89e2a96a90f1e4d6d5bc3a.png

64个img tokens比起256个img tokens,初始loss更低,但最终收敛后效果不好

  1. 加强局部/细粒度信息提取方面:

    a. 为了加强LLM对文字和图片的区别度,在经过图文Projector后,给img tokens加入了两个特殊token<img>和</img>;

    b. 为了提高对局部区域的细粒度信息提取能力,对grounding和detection类的数据,将bbox信息进行归一化到[0, 1000)中,并按照(x0, y0, x1, y1)的格式,前后再加入两个特殊token<box>和</box>进行区分;

    c. 为了强调bbox框中的信息,把数据中对bbox中描述用两个特殊token<ref>和</ref>进行修饰;

    总的来说,这一系列做法我认为是一个相当优雅的方式,很显式地让模型提高对局部区域关注,细粒度信息理解能力也能随之提高。并且还能很轻松地扩展到其他需要关注的信息上,比如你的下游任务需要十分关注bbox中的信息,甚至可以额外对bbox中的小图做tokenize,再引入一个额外的token标记来加强模型对这方面的理解。对不同模态数据的融合也可以用类似的做法,我个人是很喜欢这种看上去简单,却有很好拓展性,并且能适配各个不同场景的工作。

dbb8a60859b4568bbb9f1092cbf0b124.png

Qwen-VL对bbox信息的特殊处理——用特殊的token来控制

  1. Qwen-VL对数据的精细化清洗:在1阶段的pre-training中,Qwen-VL使用的的是公开数据集的图像文本对,其中包含了大量的噪声,为了清洗数据,Qwen-VL做了如下几个步骤:

    1. 移除图像长宽比过大的对

    2. 移除图像过小的对

    3. 根据CLIP评分移除质量较差的对(不同的数据集使用的不同的阈值)

    4. 移除文本中含有非英文或非中文字符的对

    5. 移除文本中含有表情符号的对

    6. 移除文本长度过短或过长的对

    7. 清理文本中的HTML标签部分

    8. 根据特定不规则模式清理文本(个人认为就是一些硬规则+正则表达式)

5744a18bfdeda5b6f5e1828a30c1afd9.png

Qwen-VL在1阶段时对5B的noisy数据的清洗流程

清洗后1阶段训练数据从5B减少到了1.4B,过滤的比例还是相当大的,并且上面的清洗方式可以直接在我们的工作中用到。笔者之前的文章中就提到,对于算法工程师来说,在大模型时代可能无法像之前一样十分精细地清洗每一条或者每一批的数据,但是对大规模noisy数据的清洗、过滤、伪标签等方案依然能直接提升效果,我们在提升模型技术的同时,更需要同步地提高对大规模数据的敏感度,如何利用开源or手头上的工具提升数据质量是我们必须掌握的能力。

Qwen2-VL

《Qwen2-VL: To See the World More Clearly》(2024)

https://qwenlm.github.io/blog/qwen2-vl/

Qwen2-VL刚刚发布,并没有提供论文,只有一篇较为简单的技术报告,这里我就简单跟大家介绍下技术报告中一些个人觉得有意思的地方。

  1. 原生动态分辨率:Qwen2-VL提到比起Qwen-VL,一个改变就是能支持任意分辨率的图像输入,并且跟据图像的输入大小,转换为动态数量的img tokens,保证了模型输入与图像信息的一致性。个人理解就是类似LLaVA-NeXT系列中的AnyRes技术,笔者根据技术文档猜测做法其实比AnyRes更简单,单纯把图片进按照14 * 14的patch进行tokenize,再加上一个2*2的池化层(或者一个线性插值,核心就是再缩小4倍),这也证实,从最新的技术角度来看,使用固定数量的learnable img queries并不是一个很好的方案,或多或少会带来信息有损压缩。

cd330c17cd99484337c3c561fc71addd.png

Qwen2-VL的模型架构,修改了Qwen-VL中使用固定数量learnable img queries的单层cross-attn Projector建模方式

  1. 多模态旋转位置嵌入(M-ROPE):原始ROPE只能针对一维序列的位置信息,M-ROPE分解为了时间、高度、宽度三个部分,个人理解就是让位置嵌入对图像2D信息和视频3D信息更加敏感的操作,笔者对这个work的有效性略有存疑,不确定这个改动是否真的能显著地提升模型效果。

f5b9ceb7daf5ca69da6a40d37c42f23e.png

Qwen2-VL提出的多模态旋转位置嵌入(M-ROPE)

Reference

https://arxiv.org/pdf/2308.12966

https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct

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

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

相关文章

原型模式prototype

此篇为学习笔记&#xff0c;原文链接 https://refactoringguru.cn/design-patterns/prototype 能够复制已有对象&#xff0c; 而又无需使代码依赖它们所属的类 所有的原型类都必须有一个通用的接口&#xff0c; 使得即使在对象所属的具体类未知的情况下也能复制对象。 原型对…

ubuntu上通过openvswitch卸载实现roce over vxlan

环境 操作系统&#xff1a; uname -a Linux 5.4.0-187-generic #207-Ubuntu SMP Mon Jun 10 08:16:10 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux Mellanox网卡&#xff1a; ethtool -i ens6np0 driver: mlx5_core version: 23.10-2.1.3 firmware-version: 20.39.3004 (MT_0…

FreeRTOS实战指南 — 1 FreeRTOS简介

目录 1.1 为什么需要FreeRTOS 1.2 FreeRTOS资料获取 1.3 FreeRTOS文件夹内容 1.1 为什么需要FreeRTOS 裸机开发直接控制硬件&#xff0c;虽然资源占用少&#xff0c;但开发复杂性高&#xff0c;缺乏高级功能&#xff0c;适合资源受限的简单应用。嵌入式操作系统提供了硬件抽…

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本&#xff0c;并实时掌握各环节的运营状况。 在采购管理方面&#xff0c;系统能够处理采购订单、供应商管理和采购入库等流程&#xff…

TitleBar:打造高效Android标题栏的新选择

在Android应用开发中&#xff0c;标题栏是用户界面的重要组成部分。一个好的标题栏不仅能够提升应用的专业感&#xff0c;还能增强用户体验。然而&#xff0c;传统的标题栏实现方式往往存在代码冗余、样式不统一、性能开销大等问题。今天&#xff0c;我们将介绍一个名为TitleBa…

数据结构与算法03 顺序表+链表

注意点&#xff1a; 函数的定义中建议增加断言&#xff1a;结构体指针不能为NULL&#xff01;&#xff08;空指针不能接引用&#xff01;&#xff09;控制台退出后显示的代码只要不为0&#xff0c;就不是正常退出&#xff01;Vs中编辑 -> 高级 -> 查看空白 可以…

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结&#xff0c;删除链表节点问题使用到列表&#xff0c;哈希表&#xff0c;递归比较容易超时&#xff0c;我觉得使用计数排序比较稳&#xff0c;处理起来也不是很难。 1. 力扣3217&#xff1a;从链表中移除在数组中的节点 1.1 题目&#xff1a; 给你一个整数数组 nums 和一…

SprinBoot+Vue漫画天堂网的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

mysql笔记4(数据类型)

数据库的数据类型应该是数据库架构师(DBA)和产品经理沟通后依据公司的项目、业务而定的&#xff0c;而且会不停地变化。数据类型的选择方面没有一个统一的标准&#xff0c;但是应该符合业务、项目的逻辑标准。 菜鸟教程 Mysql 数据类型 文章目录 1. int类型2. 浮点数3. 定点数4…

【音视频】播放音视频时发生了什么? 视频的编解码 H264是什么? MP4是什么?

目录 ✨播放一个视频的流程✨为什么要编码&#xff08;压缩&#xff09;视频数据&#xff1f;✨如何编码&#xff08;压缩&#xff09;数据&#x1f384;简单的例子&#x1f384;音视频编码方式&#x1f384;视频编码格式H264编码是什么&#xff1f;发展历程&#xff1f;H.264基…

LabVIEW FIFO详解

在LabVIEW的FPGA开发中&#xff0c;FIFO&#xff08;先入先出队列&#xff09;是常用的数据传输机制。通过配置FIFO的属性&#xff0c;工程师可以在FPGA和主机之间&#xff0c;或不同FPGA VIs之间进行高效的数据传输。根据具体需求&#xff0c;FIFO有多种类型与实现方式&#x…

在OpenEuler(欧拉)系统上用kubeadm部署(k8s)Kubernetes集群

一、OpenEuler(欧拉) 系统简介 openEuler 是开放原子开源基金会&#xff08;OpenAtom Foundation&#xff09;孵化及运营的开源项目&#xff1b; openEuler作为一个操作系统发行版平台&#xff0c;每两年推出一个LTS版本。该版本为企业级用户提供一个安全稳定可靠的操作系统。…

语音识别转文字工具:办公效率的得力助手

从古老的文字记载到现代的即时通讯&#xff0c;技术的每一次飞跃都极大地丰富了人类信息传递的维度。而在这股技术浪潮中&#xff0c;语音识别转文字工具无疑成为了连接语音与文字、促进高效沟通的桥梁。这次我们就来探索有那些可以方便我们转化语音的工具。 1.365在线转文字 …

word快速编写公式

1. 截图识别公式 Kimi官网 这里Kimi给出的公式如下 \begin{align} G_{r}\left[I_{in}(i, j) - I_{in}(m, n)\right] \exp\left\{-\frac{\left[I_{in}(i, j) - I_{in}(m, n)\right]^{2}}{2\sigma_{r}^{2}}\right\} \end{align}2. katex公式转换word 在线工具网页 完成3个步…

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议&#xff0c;有时候说的内容比较广需要引用多份的数据&#xff0c;我记录起来有一定难度&#xff0c;所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链…

raft算法

一、raft角色和消息 raft协议中包含三个角色 &#xff1a;跟随者(follower)、领导者(leader)和候选者(candidate)。有三种消息&#xff1a;投票请求、心跳数据和日志复制&#xff0c; 三种角色的作用 跟随着&#xff1a;存放数据副本。领导者&#xff1a;对外提供写服务。候选…

webpack - 五大核心概念和基本配置(打包一个简单HTML页面)

// 五大核心概念 1. entry&#xff08;入口&#xff09; 指示Webpack从哪个文件开始打包2. output&#xff08;输出&#xff09; 指示Webpack打包完的文件输出到哪里去&#xff0c;如何命名等3. loader&#xff08;加载器&#xff09; webpack本身只能处理js&#xff0c;json等…

35天学习小结

距离上次纪念日&#xff0c;已经过去了35天咯 算算也有5周了&#xff0c;在这一个月里&#xff0c;收获的也挺多&#xff0c;在这个过程中认识的大佬也是越来越多了hh 学到的东西&#xff0c;其实也没有很多&#xff0c;这个暑假多多少少还是有遗憾的~ 第一周 学习了一些有…

EVO进行轨迹评估

EVO进行轨迹评估 文章目录 EVO进行轨迹评估1 前言1.1 轨迹对齐1.2 尺度变换1.3 绝对轨迹误差ATE和相对轨迹误差RTE1.4 绝对姿态误差APE和相对姿态误差RPE 2 安装evo2.1 evo安装2.2 相关报错2.2.1 版本不兼容问题2.2.2 解决PATH警告 2.3 测试 3 evo指令3.1 evo_traj3.2 evo_ape3…

A02、Java编程性能调优(02)

1、Stream如何提高遍历集合效率 1.1、什么是Stream 现在很多大数据量系统中都存在分表分库的情况。例如&#xff0c;电商系统中的订单表&#xff0c;常常使用用户 ID 的 Hash 值来实现分表分库&#xff0c;这样是为了减少单个表的数据量&#xff0c;优化用户查询订单的速度。 …