【MLLM+轻量多模态模型】24.02.Bunny-v1.0-2B-zh: 轻量级多模态语言模型 (效果一般)

24.02 北京人工智能研究院(BAAI)提出以数据为中心的轻量级多模态模型

arxiv论文:2402.Efficient Multimodal Learning from Data-centric Perspective
代码:https://github.com/BAAI-DCAI/Bunny
在线运行:https://wisemodel.cn/space/baai/Bunny

在这里插入图片描述

项目进展 Bunny (兔子,音标 ˈbʌni )

2024.03.15 🔥 Bunny-v1.0-2B-zh,专注中文,发布!它建立在 SigLIP 和 Qwen1.5-1.8B 之上。

2024.03.06 🔥 Bunny训练数据发布!在 HuggingFace 或 ModelScope 中查看有关 Bunny-v1.0-data 的更多详细信息!

2024.02.20 🔥 Bunny技术报告出炉了!

2024.02.07 🔥 Bunny发布!基于 SigLIP 和 Phi-2 构建的 Bunny-v1.0-3B 不仅与类似尺寸的型号相比,而且与更大的 MLLM (7B) 相比,性能优于最先进的 MLLM,甚至实现了与 LLaVA-13B 相当的性能!

简介

翻译原文
Bunny 是一个轻量级但功能强大的多模态模型系列。它提供多种即插即用的视觉编码器,如 EVA-CLIP、SigLIP 和语言主干网(LLM),包括 Phi-1.5、StableLM-2、Qwen1.5 和 Phi-2。为了弥补模型大小的减少,我们通过从更广泛的数据源中精选来构建信息量更大的训练数据。值得注意的是,我们基于 SigLIP 和 Phi-2 构建的 Bunny-v1.0-3B 型号不仅与类似尺寸的型号相比,而且与更大的 MLLM (7B) 相比,性能优于最先进的 MLLM,甚至实现了与 13B 型号相当的性能。> Bunny is a family of lightweight but powerful multimodal models. It offers multiple plug-and-play vision encoders, like EVA-CLIP, SigLIP and language backbones, including Phi-1.5, StableLM-2, Qwen1.5 and Phi-2. To compensate for the decrease in model size, we construct more informative training data by curated selection from a broader data source. Remarkably, our Bunny-v1.0-3B model built upon SigLIP and Phi-2 outperforms the state-of-the-art MLLMs, not only in comparison with models of similar size but also against larger MLLMs (7B), and even achieves performance on par with 13B models.

与主流模型性能对比

在 11 个基准测试中与最先进的 MLLM 的比较。我们的模型在大多数设置中都优于它们。例如LLaVA-v1.5-13B
在这里插入图片描述

算法架构(灵活选择不同的模型组件)

原图1:Bunny供了灵活的视觉编码器和LLM主干组合选择,这些组合通过跨模态的映射模型(projector)进行对齐
其中

在这里插入图片描述
Large Language Model Backbone:提供了三种最先进的轻量级LLM选项:
Phi-1.5 (1.3B)、
StableLM-2 (1.6B)
Phi-2 (2.7B)

视觉编码器(Vision Encoder)
轻量级视觉编码器提供了两个选项:
SigLIP [14] 和 EVACLIP [30],
它们都是具有 428M 参数的高效与语言对齐图像编码器(language-aligned image encoders)。

图像到语言特征的映射模块(Cross-modality Projector)

基于LLaVA模型,我们利用一个带有GELU激活函数两层MLP作为跨模态投影仪来对齐视觉编码器和LLM。

原文效果图

提问为英文翻译
centered 文本居中在这里插入图片描述

实测 (v1.0-3B-中文翻车)

无法用中文直接提问
在这里插入图片描述

如何训练?

Bunny 在 8 个 A100 GPU 上进行训练. (也可用更小的gpu训练)
作者分别构建了 Bunny-pretrain-LAION-2MBunny-695K 进行预训练指令调整

两阶段训练策略。
最初,我们将预训练的视觉编码器中的视觉嵌入与来自 LLM 的文本嵌入对齐
随后,我们应用视觉指令微调来充分利用 MLLM 在各种多模态任务中的能力。
我们在两个阶段采用相同的交叉熵损失进行下一个令牌预测。
在预训练阶段,只对一个 epoch 优化跨模态投影仪。
在微调阶段,我们利用 LoRA [34] 为一个 epoch 训练跨模态投影仪和 LLM 主干。
作者发现 LoRA 在经验上比跨模型架构的所有组合进行完全调整带来更好的性能,这可能是因为较小的模型更容易受到灾难性遗忘的影响,而 LoRA 调整缓解了这个问题

预训练对齐数据构建

我们从LAION-2B 构建了一个高质量的预训练数据,即我们将LAION-2B浓缩为2M核心集,用于数据高效学习

设计了一种基于CLIP嵌入的三步核心集选择方案。
首先,受 SemDeDup 论文的启发,我们通过 k-means 对所有 2B 图像嵌入进行聚类,然后在每个集群中,构建一个无向图,如果它们的余弦相似度高于预定阈值,则任何两个嵌入都连接起来。在每个连通子图中只保留一个样本,其到簇质心的欧几里得距离在中位数处排名。通过将阈值设置为 0.86,我们获得了 952M 的子集。
其次,我们通过其文本嵌入和图像嵌入之间的余弦相似度对剩余的样本进行排序,并保持样本排名 40% - 60%,从而导致 190M 的子集。这样,去除了低质量的图像-文本对。
第三,我们通过其图像嵌入与其聚类质心之间的余弦相似度对剩余的样本进行排序,并保持样本排名 15%-35%,导致子集 38M,捕获 LAION-2B 的本质和多样性。我们最终从38M核心集中随机抽样200万个样本,从而得到Bunny-pretrain-LAION-2M,以获得适当的培训成本。

微调数据Bunny695K的构建

我们收集了一组视觉指令调优数据集——DataOptim,在此基础上我们探索了微调数据集的更好组合。
具体来说,我们利用
SVIT-mix-665K from: SVIT: Scaling up Visual Instruction Tuning
并结合 WizardLM-evol-intstruct-70K 、 ShareGPT-40K ,从而得到 Bunny695K
我们发现,在多模态数据上调整 MLLM 可能会损害其继承认知能力

本地部署测试

待续

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

day6 3/18

2.试编程: 封装一个动物的基类,类中有私有成员:姓名,颜色,指针成员年纪 再封装一个狗这样类,共有继承于动物类,自己拓展的私有成员有:指针成员:腿的个数(整…

【JavaEE -- 多线程进阶 - 面试重点】

多线程进阶 1. 常见锁策略1.1 乐观锁和悲观锁1.2 轻量级锁和重量级锁1.3 自旋锁和挂起等待锁synchronized具有自适应能力1.4 普通互斥锁和读写锁1.5 公平锁和非公平锁1.6 可重入锁和不可重入锁 2. Synchronized原理(特点、加锁过程、自适应)2.1 Synchron…

数据结构(三)——栈

三、栈、队列和数组 3.1 栈 3.1.1 栈的基本概念 线性表是具有相同数据类型的n(n≥0)个数据元素的有限 序列,其中n为表长,当n 0时线 性表是一个空表。若用L命名线性表,则其一般表示为 L (a1, a2, … , ai , ai1, ……

【STL源码剖析】【2、空间配置器——allocator】

文章目录 1、什么是空间配置器?1.1设计一个简单的空间配置器,JJ::allocator 2、具备次配置力( sub-allocation)的 SGI 空间配置器2.1 什么是次配置力2.2 SGI标准的空间配置器,std::allocator2.2 SGI特殊的空间配置器,std::alloc2.…

ARM汇编与逆向工程 蓝狐卷 基础知识

文章目录 前言内容简介作者简介译者简介目录 前言 与传统的CISC(Complex Instruction Set Computer,复杂指令集计算机)架构相比,Arm架构的指令集更加简洁明了,指令执行效率更高,能够在更低的功耗下完成同样…

13 秒插入 30 万条数据,这才是 Java 批量插入正确的姿势!

本文主要讲述通过MyBatis、JDBC等做大数据量数据插入的案例和结果。 30万条数据插入插入数据库验证 实体类、mapper和配置文件定义 User实体 mapper接口 mapper.xml文件 jdbc.properties sqlMapConfig.xml 不分批次直接梭哈 循环逐条插入 MyBatis实现插入30万条数据 J…

python redis中blpop和lpop的区别

python redis中lpop()方法是获取并删除左边第一个对象。 def lpop(self,name: str,count: Optional[int] None,) -> Union[Awaitable[Union[str, List, None]], Union[str, List, None]]:"""Removes and returns the first elements of the list name.By de…

2258: 【搜索】【广度优先】最少转弯问题

题目描述 给出一张地图&#xff0c;这张地图被分为nm&#xff08;n,m<100&#xff09;个方块&#xff0c;任何一个方块不是平地就是高山。平地可以通过&#xff0c;高山则不能。现在你处在地图的&#xff08;x1,y1&#xff09;这块平地&#xff0c;问&#xff1a;你至少需要…

Vulnhub - Morpheus

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Morpheus 靶机下载地址&#xff1a;Matrix-Breakout: 2 Morpheus ~ VulnHub 0x01 信息收集 Nmap扫描…

Spring学习记录

为什么要学Spring&#xff1f; 在回答这个问题时&#xff0c;我们先来看看现在的Java程序是如何实现的&#xff0c;以最简单的服务层与持久层为例&#xff0c;其遵循接口与具体实现类的这种方式&#xff1a; Service层接口&#xff1a;BookService.java package service; pu…

mysql笔记:22. 事务隔离级别的一种通俗讲解

事务隔离级别&#xff0c;是为了解决多个并行事务竞争导致的数据安全问题的一种规范。具体来说&#xff0c;多个事务竞争可能会产生三种不同的现象。假设有两个事务T1、T2同时执行&#xff0c;有如下三种不同的情形&#xff1a; T1可能会读到T2未提交的数据&#xff0c;但是未…

粤嵌6818开发板通过MobaXterm使用SSH连接开发板

链接&#xff1a;https://pan.baidu.com/s/18ISP4Ub1HtQx6jCvTQTUHw?pwdfjmu 提取码&#xff1a;fjmu 1.把SSH_config.tar.bz 下载到开发板中 2.解压 SSH_config.tar.bz 解压命令&#xff1a;tar -xzvf SSH_config.tar.bz 3.配置SSH 进入SSH/openssh目录&am…

关于Zookeeper分布式锁

背景 之前说到分布式锁的实现有三种 1、基于数据库实现的分布式锁 2、Redis分布式锁 3、Zookeeper分布式锁 前者redis分布式锁博客已具体介绍&#xff0c;此博客最终决定补齐关于Zookeeper分布式锁的实现原理。 简述 Zoopkeeper&#xff0c;它是一个为分布式的协调服务&…

Vertex cover preprocessing for influence maximization algorithms

Abstract 影响力最大化问题是社交网络分析中的一个基本问题&#xff0c;其目的是选择一小组节点作为种子集&#xff0c;并在特定的传播模型下最大化通过种子集传播的影响力。本文研究了独立级联模型下影响力最大化算法中执行顶点覆盖作为预处理的效果。所提出的方法从主要计算过…

考研复习C语言进阶(4)

1. 为什么存在动态内存分配 我们已经掌握的内存开辟方式有&#xff1a; int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间 但是上述的开辟空间的方式有两个特点&#xff1a; 1. 空间开辟大小是固定的。 2. 数组在申明的时候&#…

Stm32-使用TB6612驱动电机及编码器测速

这里写目录标题 起因一、电机及编码器的参数二、硬件三、接线四、驱动电机1、TB6612电机驱动2、定时器的PWM模式驱动电机 五、编码器测速1、定时器的编码器接口模式2、定时器编码器模式测速的原理3、编码器模式的配置4、编码器模式相关代码5、测速方法 六、相关问题以及解答1、…

软件测试入门基础

说到软件测试&#xff0c;那么首先得和没有基础的同学们&#xff0c;讲解一下&#xff0c;平时我们使用的那些app&#xff0c;比如淘宝&#xff0c;微信是怎么进行交互的呢&#xff1f;在淘宝上下个订单&#xff0c;按钮按出去为什么就能下单成功呢&#xff1f;微信看朋友圈&am…

组建对等网

一、概念 对等网络&#xff08;Peer-to-Peer, P2P&#xff09;是一种分布式网络架构&#xff0c;其中每个参与节点&#xff08;称为"对等体"或"节点"&#xff09;既可以作为客户端也可以作为服务器&#xff0c;直接与网络中的其他节点分享资源&#xff08…

windows上安装虚拟机及搭建Linux环境

虚拟机的安装 VMware Workstation Player(虚拟机)&#xff0c;下载网址如下: VMware Workstation Player | VMwarehttps://www.vmware.com/content/vmware/vmware-published-sites/us/products/workstation-player.html.html?srcWWW_Player7Pro_US_HPPromo_Introducing 进入网…

8.Python从入门到精通—Python 字符串,转义字符,字符串运算符

8.Python从入门到精通—Python 字符串,转义字符,字符串运算符 Python 字符串创建字符串访问字符串中的字符字符串切片字符串操作符字符串方法 Python 转义字符Python字符串运算符 Python 字符串 在 Python 中&#xff0c;字符串是一种基本数据类型&#xff0c;用于表示文本数据…