多模态MLLM都是怎么实现的(10)-Chameleon和Florence-2如果你想玩多模态就不能不了解

    这个也是一个补充文,前9章基本把该讲的讲了,今天这个内容主要是因为Meta出了一个Chameleon,这个以后可能会成为LLaMA的一个很好的补充,或者说都有可能统一起来,叫LLaMA或者Chamleon或者什么别的,另外我司把Florence的第二个版本开源了,google的paligemma瞬间啥也不是了!

       Chameleon 5月16日就发了论文,昨天才正式开源

       论文地址:2405.09818 (arxiv.org)

     github地址:facebookresearch/chameleon: Repository for Meta Chameleon, a mixed-modal early-fusion foundation model from FAIR. (github.com)

       其实现在多模态的模型特别多,为什么拿它出来说事,主要原因是它是目前开源世界里面第一个实现和GPTo一样的架构也就是所有的模态共有一套端到端网络(但是它似乎没全实现,feature deleliver进度上来讲)

     我们先看一个反面教材LLaVA

     也不算反面教材吧,市面上大多数的多模态都是这样的,这种方式叫后融合。

     怎么理解后融合呢?

     

图片

     如上图所示是一个实际的LLaVA架构,

     根据上面图,我们一起来定义啥叫后融合

  1. 视觉编码器与语言模型分开:图中左侧的LLAVA架构将视觉编码器(Vision encoder)和语言模型的encoder(Language model )分开显示,这表明图像和语言的特征提取是独立进行的。(标粗标红)

  2. 融合在后续步骤进行:在视觉编码器处理完图像生成视觉特征ZvZ_v 后,这些特征通过投影(Projection W)得到视觉特征表示HvH_v(升降维和语言模型的token一个维度比如4096)。然后这些视觉特征𝐻𝑣与语言指令XqX_q被tokenizer给embedding出来的 HqH_q在语言模型的LLaMA里面训练,这就叫后融合(Late Fusion)。

  3. 其实还是LLM:最后的训练其实还是LLM的训练模式,即把把视觉转换的语言维度的token和语言的token都当成语言token,本质上还是LLM的训练机制,然后你生成的东西其实也只有语言这种任务,说白了只能做VQA

    那啥叫前融合

    

图片

      其实做的比较早的是Gemini,所谓前融合通俗易读点,就是我不需要先让每个模态的encoder去提取自己的特征向量,然后再拉齐,就一套tokenizer干所有的事,啥都被我embedding成token,(也不用比如拿cv的特征图再给转)我也不管它是什么输入,然后统一进transformer(这里面肯定是VIT+DIT了)

       

     Chameleon是同源架构,但是比Gemini做的更甚一些,因为Gemini的视觉的decoder是跟其他的没啥关系的,说白了,在视觉部分,比如video,picture啥的,它还得独立路由到单独的模型生成,Chameleon是完全的端到端但是没做完,这个版本的模型是不支持的

图片

 

图片

      我是连测带问才知道的,所以说你们不能光看论文,你得上手啊,老铁!  

     讲到这估计大家可能对前融合后融合还是有点理不清,那看我下面的截图应该能明白了。

      比如对于和Llava架构差不多的phi3-V,你去查它的tokenizer

图片

     就是还是text的,也只针对text的。

     视觉的token实际还是视觉的组件来管理和处理(开源大多用clip其实是用里面的vit),只不过被一个线性层或者MLP给硬拉到语义token的维度

     

图片

     但是再看看Chameleon的tokenizer,一些奇怪的东西就出现了

     

图片

     没错,就是它的tokenizer已经不是纯语言的了,视觉(现在只有图片),也是直接被同一个tokenizer来处理的,但是干活的时候还得由视觉的encoder来干,它用的vq-gan

     

图片

VQGAN的作用:

  1. 图像编码

    • VQGAN使用卷积神经网络(CNN)将输入图像分解成小块(patches)。

    • 这些小块被进一步编码为一组离散的tokens,通过向量量化(Vector Quantization)将连续的特征映射到预定义的代码簇(codebook)。

  2. 图像生成(现在做不了)

    • 在生成过程中,VQGAN可以将这些离散tokens解码回图像。

  3. 结合多模态任务

    • 在多模态任务中(如图像-文本联合建模),VQGAN可以用来将图像数据表示为离散的tokens,这些tokens可以与文本tokens(原生就全是token,不用硬去拉齐维度)一起输入到一个联合模型中进行处理,如Transformer架构中。

    

图片

     为什么要这么做呢?因为大家知道所有的特征提取以后,是有自己的表征空间的,后融合比如llava,它就是自己玩自己的,然后强行拉到一个空间,这倒也行,也能训练,但是我们人类在接触信息的时候,是怎样的多模态呢?

      那肯定是全编全解,比如你一边看电视一边聊微信,所有模态是一起进到你大脑来处理的,你一定有多个encoder,比如眼睛,耳朵,但是你不太可能有多个tokenzier,不同的模态天然在人类里面就是在一个表征空间里被表示的,也就是前融合。

      对于模型来讲,在一个表征空间里也以为着进入到Transformer层训练天然能学到不同模态的一些关联信息,那效果自然是要比分着来,然后硬拉到一个维度好,因为每次tensor变形,实际上都是折损

     在帮着修了一个VQA的bug以后,体验了一下现阶段的进展,当然现阶段其实还是原型期,多模态也就做到VQA的级别,有几点可以说一下。

      1- 没用任何现行的推理框架,但是真的超级快(我挺期待这部分的一些后续信息披露)

       2- 不支持中文

       3- VQA任务表现我个人觉得一般,可能也是新模型语料上也没充分准备,微调也不够,皮卡丘它都不认识

     

图片

图片

      如下面的例子所示,同样的任务在同源模型GPT4o上执行简直天差地别,当然你可以说它小,这个我不反对,我也不否认它的方式一定代表多模态的未来。但是它出来的过于高调了,宣称出道即和GPT4o的多模态能力平起平坐,这个纯扯淡了目前,属于是。(其实phi3-V目前它也比不了,我就是懒得开机器了)

图片

图片

     当然还有很多具体的训练和模型的设计细节,例如文本的表征token,这玩意是离散的,而图像的表征,天生是连续的。

    为了支持这些它在具体模型上也做了一些调整,一个关键的引入是QK-norm,这个到也常见,就是进softmax之前的QK值归一化一下,这样就防止了不稳定,防止梯度爆炸和消失

     至于drop-out最后的结论似乎是加不加就那么回事。

     这里有个trick,在7b的模型下面,QK-norm能显著的解决了不稳定,但是34b白扯,所以又把layer-norm给后撤了

图片

       其实这个就是swin Transformer的思想,具体来说,在transformer模块中使用了后撤LN的策略。Swin transformer规范化策略的优点在于,它可以限制前馈模块norm growth,而前馈即FFN,或者叫MLP模块的norm growth在SwiGLU激活函数的倍增效应下可能会变得非常麻烦。说白了就是给你MLP的时候就后撤步的norm一下,这样MLP拿到的值就小,好控制。

      Chameleon我目前看不完美,还得进化,不过因为它是第一个把商用多模态的思路引入开源的小模型,(Meta就故意的,总整这事,因为小,所以玩的人多,自然就开源翘楚了,这个策略,屡试不爽)它和LLaMA一样,会成为一个开源世界的里程碑,这个到是应该按着剧本写的。

     下面介绍一下我司新开源的模型Florence-2

     如果我没记错,1没开源(我说错了的话,请纠正我),2突然就开了,也莫名其妙,简单说它就是比google的paligemma强很多倍的多CV任务的多模态。

    什么是多CV任务呢?

    其实你们现在玩的这种有一个算一个只能算是VQA任务。就是你问它图是啥,它回答一下,但是在CV计算机视觉领域,这只是一个很小的分支,比如你让GPT4o你说你把图给我分割一下,然后打框,对象检测啥啥的,它都干不了。

    论文地址:2311.06242 (arxiv.org)

    我为啥说它牛B呢

  •     它和Chameleon不一样,它不是前融合,这个理论上来说是减分项

  •     弱点就是只能做图文,且不能生成(其实chameleon现在也就这个进度)

  •     但是!

  •     它能做好几个CV任务,你能想到的它都能做

  •     然后最大的才0.77b....

图片

       然后它的数据优化流程和反复训练的流程,其实某种程度上有点像NV的Nemotron-4 ,从时间线的角度上来讲,是Nemotron-4学它,毕竟它是先出的,就是没开源

      

图片

      它训练的时候本来就是多任务的prompts,恨不得把一张图能干的事都给榨干,比如下面的

      1-标准VQA

图片

2- Visual Granding

图片

    3- Dense Region Caption(从这就开始上强度了)

图片

 4- 开放词随便问的OD(比泛化)

图片

      5- OCR

图片

     6- 分割

图片

这些你在CV领域干的活儿,它都可以弄

下面对比一下和其他的模型

图片

    这个就很明显了,不对比别的,就对比GPT4-V, florence-2直接把这个实际文字都给撸了下来,属于OCR+VQA任务一起做了,当然GPT-4V的工作也还行,但是比如非常有感情的,替我给Amelia一个拥抱这种句子,都被消融掉了,从这个角度讲,Florence的任务做的应该是最出色的。

   

图片

   也不是每个VQA任务都能完胜,比如这个,感觉Florence就有点近视眼

图片

路牌上告诉1/4个mile就出,它就没看到。

    别的也比不了了,和这些多模态只能比VQA,因为别的任务它们也做不了。

    然后比如和我们自己的Kosmos-2对比(也开源了,但是我不讲了,我更看好florence-2,感兴趣的自己去玩,huggingface上都有),同样的对象检测,明显florence-2更胜一筹。

  

图片

      总结就是从趋势和新势力的角度,我觉得chameleon前融合必然是未来,以后多模态肯定都是前融合,但是你不能光概念好,细活儿也得拿的出手,另外一个维度就是florence的这种,传统CV复杂任务也会介入到多模态生意里面,比如你问一个搞自动驾驶的,它选florence还是GPT4o,他想都不想肯定选florence啊,因为这些任务是必须的,是和他手头现在的业务高相关的。

      总而言之,Bye,下期见!

  

图片

多模态8

多模态 · 目录

上一篇多模态MLLM都是怎么实现的(9)-时序LLM是怎么个事儿?

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

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

相关文章

【图解IO与Netty系列】Netty源码解析——事件循环

Netty源码解析——事件循环 Netty事件循环源码解析select()processSelectedKeys()NioMessageUnsafe#read()NioByteUnsafe#read() runAllTasks() Netty事件循环 当Netty服务端启动起来以后,就可以接受客户端发送的请求,接收到客户端发来的请求后就会有事…

计算机网络 交换机的VLAN配置

一、理论知识 1.VLAN的定义 ①VLAN虚拟局域网,是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的技术。 ②IEEE于1999年颁布了用以标准化VLAN实现方案的802.1Q协议标准草案。 ③VLAN技术允许网络管理者将一个物理的LAN逻辑地划…

MySQL存储管理(一):删数据

从表中删除数据 从表中删除数据,也即是delete过程。 什么是表空间 表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。默认情况下,InnoDB存储引擎有一个共享表空间idbdata1,即所有数据都存放在这个表…

无限滚动表格

纵向无限滚动 单元格内部横向滚动 <!--* Description: 横向、纵向滚动表格* Author: liyanfeng liyanfenghopewind.com* Date: 2024-06-15 16:06:57* LastEditors: liyanfeng liyanfenghopewind.com* LastEditTime: 2024-06-20 17:15:37* FilePath: \plus-ui\src\componen…

SEO是什么?SEO相关发展历史

一、SEO是什么意思&#xff1f; SEO&#xff08;Search Engine Optimization&#xff09;&#xff0c;翻译成中文就是“搜索引擎优化”。简单来讲&#xff0c;seo是指自然搜索结果下获得的网站流量的技术&#xff0c;是可以不用花钱就可以让自己的网站有好的排名&#xff0c;也…

C语言:生命周期和作用域,static和extern

关键字static与extern 1.作用域&#xff08;scope&#xff09;&#xff1a;代码中能够访问到变量的范围&#xff08;变量可以被使用的文本区间&#xff09;。&#xff08;分为全局作用域和局部作用域&#xff09; ☺全局作用域&#xff1a;在整个程序中都能访问的变量。通常…

C语言入门系列:数据类型转换

文章目录 一&#xff0c;自动类型转换1&#xff0c;赋值运算1.1&#xff0c;浮点数赋值给整型变量-不安全1.2&#xff0c;整数赋值给浮点数变量-安全1.3&#xff0c;窄类型赋值给宽类型-安全1.4&#xff0c;宽类型赋值给窄类型-不安全 2&#xff0c;混合类型的运算2.1&#xff…

Ubuntu24使用kubeadm部署高可用K8S集群

Ubuntu24使用kubeadm部署高可用K8S集群 使用kubeadm部署一个k8s集群&#xff0c;3个master1个worker节点。 1. 环境信息 操作系统&#xff1a;ubuntu24.04内存: 2GBCPU: 2网络: 能够互访&#xff0c;能够访问互联网 hostnameip备注k8s-master1192.168.0.51master1k8s-maste…

20.Cargo和Crates.io

标题 一、采用发布配置自定义构建1.1 默认配置1.2 修改配置项 二、将crate发布到Crates.io2.1 编写文档注释2.2 常用&#xff08;文档注释&#xff09;部分2.3 文档注释作用测试2.4 为包含注释的项添加文档注释2.5 使用pub use导出公有API2.6 创建Crates.io账号2.7 发布2.8 版本…

基于STM32的智能停车场管理系统

目录 引言环境准备智能停车场管理系统基础代码实现&#xff1a;实现智能停车场管理系统 4.1 车位检测模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;智能停车场管理与优化问题解决方案与优化收尾与总结 1. 引言 智能停车场管理系统通…

Linux常用命令(17)—pastesortcomm命令(有相关截图)

写在前面&#xff1a; 最近在学习Linux命令&#xff0c;记录一下学习Linux常用命令的过程&#xff0c;方便以后复习。仅供参考&#xff0c;若有不当的地方&#xff0c;恳请指正。如果对你有帮助&#xff0c;欢迎点赞&#xff0c;关注&#xff0c;收藏&#xff0c;评论&#xf…

仿中波本振电路的LC振荡器电路实验

手里正好有一套中波收音机套件的中周。用它来测试一下LC振荡器&#xff0c;电路如下&#xff1a; 用的是两只中频放大的中周&#xff0c;初步测试是用的中周自带的瓷管电容&#xff0c;他们应该都是谐振在465k附近。后续测试再更换电容测试。 静态电流&#xff0c;0.5到1mA。下…

malloc和new的本质区别

目录 一、结论 二、示例 1.实现类T 2.用malloc分配类T的内存空间 3.用new分配类T的内存空间 一、结论 malloc 和 new 都是用于在运行时动态分配内存的机制。但它们之间存在一些本质的区别&#xff0c;主要是在使用方面&#xff0c;现在我们直接说结论&#xff0c;然后在通过…

ArcGIS与Excel分区汇总统计三调各地类面积!数据透视表与汇总统计!

​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 点击学习——>遥感影像综合处理4大遥感软件ArcGISENVIErdaseCognition 01 需求说明 介绍一下ArcGIS与Excel统计分区各地类的三调地类面积。 ArcGIS统计分析不会&#x…

Unity客户端的Http通讯实战

背景知识 在Unity游戏开发中&#xff0c;一个常见场景是&#xff0c;后端扔过来一个Swagger后端接口网页&#xff0c;需要你使用对应的接口对应的接口发送和接收数据&#xff0c;如图所示为发起Get请求&#xff1a; 我们可以通过点击Try it out按钮直接在网页上测试收发数据&a…

spring整合openAI大模型之Spring AI

文章目录 一、SpringAI简介1.什么是SpringAI2.SpringAI支持的大模型类型&#xff08;1&#xff09;聊天模型&#xff08;2&#xff09;文本到图像模型&#xff08;3&#xff09;转录&#xff08;音频到文本&#xff09;模型&#xff08;4&#xff09;嵌入模型&#xff08;5&…

Guava-EventBus 源码解析

EventBus 采用发布订阅者模式的实现方式&#xff0c;它实现了泛化的注册方法以及泛化的方法调用,另外还考虑到了多线程的问题,对多线程使用时做了一些优化&#xff0c;观察者模式都比较熟悉&#xff0c;这里会简单介绍一下&#xff0c;重点介绍的是如何泛化的进行方法的注册以及…

dial tcp 10.96.0.1:443: connect: no route to host

1、创建Pod一直不成功&#xff0c;执行kubectl describe pod runtime-java-c8b465b98-47m82 查看报错 Warning FailedCreatePodSandBox 2m17s kubelet Failed to create pod sandbox: rpc error: code Unknown desc failed to setup network for…

数据挖掘与分析——数据预处理

数据探索 波士顿房价数据集&#xff1a;卡内基梅隆大学收集&#xff0c;StatLib库&#xff0c;1978年&#xff0c;涵盖了麻省波士顿的506个不同郊区的房屋数据。 一共含有506条数据。每条数据14个字段&#xff0c;包含13个属性&#xff0c;和一个房价的平均值。 数据读取方法…

昨天gitee网站访问不了,开始以为电脑哪里有问题了

昨天gitee网站下午访问不了&#xff0c;开始以为是什么毛病。 结果同样的网络&#xff0c;手机是可以访问的。 当然就ping www.gitee.com 结果也下面那样是正常的 以为是好的&#xff0c;但就是访问www.gitee.com也是不行&#xff0c;后来用阿里云的服务器curl访问是下面情况&…