多模态大语言模型(MLLM)-Deepseek Janus

在这里插入图片描述

论文链接:https://arxiv.org/abs/2410.13848
代码链接:https://github.com/deepseek-ai/Janus

本次解读Janus: Decoupling Visual Encoding for Unified Multimodal Understanding and Generation

前言

在这里插入图片描述
Deepseek出品,必属精品。

创新点

  • 传统方法在统一视觉理解、视觉生成任务上,做的不好。视觉理解侧重高层语义(例如类别、属性等),而视觉生成侧重低层语义(例如局部细节等),统一模型难以同时关注高层和低层语义信息。
  • Janus解耦视觉编码方式,为视觉理解、视觉生成选择对应的视觉编码器,避免了高层-低层语义信息的冲突。
  • Janus灵活可扩展,解耦的思想不仅可用于视觉理解、视觉生成,也可以扩展到点云、脑电信号、甚至是声音数据。
  • Janus用小体量模型,在视觉理解、视觉生成任务上,均取得了媲美中等体量模型的效果。
    在这里插入图片描述

具体细节

模型结构

在这里插入图片描述
整体模型结构见上图。

  • 针对文本理解任务:
    输入端:利用LLM内置的tokenizer将文本转化为ID,进而获取文本embedding,送到LLM(图中Auto-Regressive Transformer)中
    输出端:利用LLM内置的prediction head预测(上图Text De-Tokenizer)
  • 针对多模态理解任务
    输入端:利用SigLIP encoder(上图中Und. Encoder)提取高层语义特征,展平成1维 embedding。利用adaptor将1维序列转换为LLM可理解的embedding,送到LLM(图中Auto-Regressive Transformer)中
    输出端:利用LLM内置的prediction head预测(上图Text De-Tokenizer)
  • 针对视觉生成任务
    输入端:利用VQ tokenizer(上图中Gen. Encoder)将图像转换为离散ID,展平成1维 embedding。利用adaptor将1维序列转换为LLM可理解的embedding,送到LLM(图中Auto-Regressive Transformer)中
    输出端:利用一个随机初始化的prediction head实现图片生成(上图Image Decoder)

训练策略

在这里插入图片描述
整体分为三个阶段

阶段一:训练Adaptors和Image Head

训练数据

125w ShareGPT4V数据用于多模态理解+120w ImageNet-1K数据用于视觉生成。ShareGPT4V数据格式为<image><text>,ImageNet-1K数据格式为<category_name><image>

训练策略

阶段一的目标是实现视觉和文本在embedding层面互相理解(实现LLM理解图像,实现image head能生成图像)。
仅训练Adaptors和Image Head,其中Image Head可以理解为Image decoder

训练损失

文本、图像均建模成sequence的形式,利用next token prediction的loss进行训练(已知前i个token,预测第i个token)

阶段二:统一预训练

训练数据

来源较多

  • Text-only data(仅文本数据):DeepSeek-LLM用的文本语料
  • Interleaved image-text data(图像-文本 交错数据):WikiHow和WIT数据
  • Image caption data(图像描述数据):从多个来源(https://huggingface.co/datasets/dclure/laion-aesthetics-12m-umap、https://image-net.org/static_files/papers/imagenet_cvpr09.pdf等)里收集图像描述数据。所有图像描述数据重新建模成QA对的形式,例如Describe the image in detail.
  • Table and chart data.(图表数据):DeepSeek-VL用的图表数据
  • Visual generation data(视觉生成数据):两部分,一部分来自多个数据集(https://huggingface.co/datasets/dclure/laion-aesthetics-12m-umap、https://segment-anything.com/),另一部分是1百万内部数据。所有视觉生成数据格式整理成<caption><image>的形式
    一些训练的trick:
  • 图像描述数据里,有25%的概率,仅利用描述里的第一个句子,促使模型生成短描述
  • 前120k迭代中,使用ImageNet-1k进行简单的视觉生成训练,以帮助模型掌握基本的像素依赖关系;后60k迭代中,使用其他视觉生成数据集增强模型在开放领域的视觉生成能力。
训练策略

阶段二的目标是实现自通用的多模态理解和视觉生成能力。
所有参数均训练。
首先通过使用ImageNet-1k进行简单的视觉生成训练,以帮助模型掌握基本的像素依赖关系。随后,使用其他的视觉生成数据集增强模型在开放领域的视觉生成能力。

训练损失

同上

阶段三:有监督微调

训练数据

存在三种训练任务,不同任务需要的数据不一样

  • 文本理解任务:
  • 多模态理解任务:
  • 视觉生成任务:
    整体数据格式整理成User: \n Assistant: 的形式
训练策略

阶段三的目标是提升模型的指令遵循和图文对话的能力。
所有参数均训练。

训练损失

同上

推理

Janus采用next-token prediction的方式进行推理。

  • 对于文本理解/多模态理解任务,从预测分布里,采用传统的采样策略(n-gram、beam-search等)方式,实现文本token输出
  • 对于图像生成任务,采用classifier-free guidance (CFG)方式输出token(类似于https://arxiv.org/abs/2301.00704、https://arxiv.org/abs/2203.13131),下一个token的预测概率是
    在这里插入图片描述
    其中, l g l_g lg是conditional logit, l u l_u lu是unconditional logit, 𝑠 𝑠 s是scale,默认为5。

模型扩展

这一部分像是论文的展望。。。

多模态理解扩展

可以将模型架构图中的Und. Encoder替换成任意的视觉编码器,例如EVA-CLIP、Intern ViT等,也能采用一些动态高分辨率技术来支持大图输入。
通过替换Und. Encoder,Janus能够扩展到多种多模态理解任务上。

视觉生成扩展

为了在编码后保留更多图像细节,可以选择更细粒度的编码器,例如 MoVQGan。
可以采用专门为视觉生成设计的损失函数,例如扩散损失
在视觉生成过程中,可以结合使用 AR(因果注意力)和并行(双向注意力)方法,以减少视觉生成过程中累积的误差 。

更多模态扩展

借助解耦的思想,通过两个图像编码器分别建模高层、低层语义信息,实现视觉理解、视觉生成任务。该思想也可以扩展到点云、脑电信号、甚至是声音数据。
增加点云、脑电信号、甚至是声音数据对应的编码器即可

实验

实验细节

  • 使用 DeepSeek-LLM(1.3B)作为基础语言模型,其最大支持的序列长度为 4096。
  • 对于理解任务中使用的视觉编码器,选择了 SigLIP-Large-Patch16-384。
  • 生成编码器具有大小为 16,384 的码本,并将图像下采样 16 倍。
  • 视觉理解和视觉生成的adaptor都是两层的多层感知机(MLP)。
  • 在训练过程中使用序列打包来提高训练效率,类似于laion的数据组织形式
  • 在单个训练步骤中根据指定的比例混合所有数据类型,具体比例未知,行业机密。。。
  • 使用Deepseek自研的HAI-LLM进行训练和评估,AI Infra太重要了
  • 整个训练过程在一个由 16 个节点组成的集群上进行,每个节点配备 8 个 Nvidia A100(40GB)GPU,耗时 7 天。16*8块A100-40G 单次训练7天,仅硬件成本约66000元(按照https://ai.cnix.cn/market/compute租赁价格,8xA100-40G 单月16500,16500x16/4=66000)
  • Money is all your need

和sota的比较

和多模态理解sota模型比较,Janus以小体量,实现了媲美中体量模型的效果
在这里插入图片描述
和多模态生成sota模型比较,Janus以小体量,实现了媲美中体量模型的效果
在这里插入图片描述

消融实验

消融实验最有意思了
在这里插入图片描述

A:用VQ Tokenizer(低层语义信息编码器)实现视觉理解、视觉生成
B:用SE Tokenizer(高层语义信息编码器)实现视觉理解、视觉生成
C:用SE Tokenizer(高层语义信息编码器)实现视觉理解
D:用SigLIP(高层语义信息编码器)实现视觉理解;用VQ Tokenizer(低层语义信息编码器)实现视觉生成
E:用SigLIP(高层语义信息编码器)实现视觉理解
F:用VQ Tokenizer(低层语义信息编码器)实现视觉生成

解耦视觉编码器效果

A vs B:在视觉理解任务上,B效果显著优于A,说明SE Tokenizer(高层语义信息编码器)更适合视觉理解;在视觉生成任务上,A效果显著优于B,说明VQ Tokenizer(低层语义信息编码器)更适合视觉生成
B vs C:B用SE Tokenizer(高层语义信息编码器)实现两个任务,在理解任务上,效果不及C,说明单编码器在实现两个任务时,存在性能牺牲。

统一视觉理解和视觉生成效果

D vs E:在视觉理解任务上,效果基本持平
D vs F:在视觉生成任务上,效果差距不大
证明解耦视觉编码器能够有效平衡两个任务

可视化效果

视觉理解:
在这里插入图片描述

视觉生成:
在这里插入图片描述

笔者会持续关注多模态大语言模型(MLLM),对底层原理、经典论文、开源代码都会进行详细解读,欢迎交流学习。

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

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

相关文章

Redis学习笔记(二)--Redis的安装与配置

文章目录 一、Redis的安装1、克隆并配置主机2、安装前的准备工作1.安装gcc2.下载Redis3.上传到Linux 3、安装Redis1.解压Redis2.编译3.安装3.查看bin目录 4、Redis启动与停止1.前台启动2.命令式后台启动3.Redis的停止4.配置式后台启动 二、连接前的配置1、绑定客户端IP2、关闭保…

使用 Elasticsearch 作为向量数据库询问有关你的 GitHub 存储库的问题

作者&#xff1a;来自 Elastic Fram Souza 本博客介绍了使用 RAG 和 Elasticsearch 实现语义代码查询的 GitHub Assistant&#xff0c;提供对 GitHub 存储库的洞察&#xff0c;并可扩展到 PR 反馈、问题处理和生产准备情况审查。 该项目允许你直接与 GitHub 存储库交互并利用语…

xlsx xlsx-style-vite 实现前端根据element 表格导出excel且定制化样式 背景 列宽等

前言 先看下最终效果图吧&#xff0c;需要的可以参考我的实现方式 这是最终导出的表格文件 类似这种的&#xff0c;特定单元格需要额外标注&#xff0c;表头也有月份然后细分的&#xff0c;表格组件是这样的 注意 别使用xlsx-style 这个库&#xff0c;太多问题了&#xff0c;…

如何选择云主机或者VPS挂EA?

近年来&#xff0c;随着EA交易在零售外汇圈的逐渐流行&#xff0c;越来越多的交易者开始使用外汇VPS&#xff08;虚拟专用服务器&#xff09;来挂载EA&#xff08;智能交易系统&#xff09;进行交易。通过外汇VPS&#xff0c;可以最大程度地减少MT4客户终端与MT4服务器之间的延…

多特征变量序列预测(四) Transformer-BiLSTM风速预测模型

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较 全是干货 | 数据集、学习资料、建模资源分享&#xff01; EMD、EEMD、FEEMD、CEEMD、CEEMDAN的区别、原理和Python实现&#xff08;一&#xff09;EMD-CSDN博客 EMD、EEM…

【模型部署】python中socket编程入门知识-系列1

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

[实时计算flink]基于Paimon的数据库实时入湖快速入门

Apache Paimon是一种流批统一的湖存储格式&#xff0c;支持高吞吐的写入和低延迟的查询。本文通过Paimon Catalog和MySQL连接器&#xff0c;将云数据库RDS中的订单数据和表结构变更导入Paimon表中&#xff0c;并使用Flink对Paimon表进行简单分析。 背景信息 Apache Paimon是一…

深度学习之梯度下降法 | Chapter 2 | Deep Learning | 3Blue1Brown

目录 前言1. 总览2. 回顾3. 训练数据的使用4. 代价函数5. 梯度下降法6. 梯度向量7. 梯度下降小结8. 分析网络9. 网络如何学习的研究相关资料结语 前言 3Blue1Brown 视频笔记&#xff0c;仅供自己参考 这个章节主要介绍梯度下降的思想&#xff0c;之后进一步探索网络的能力以及隐…

助农贷款、保险精准定价,背后的“星绽”机密计算全球开源

文&#xff5c;白 鸽 编&#xff5c;王一粟 河南平顶山种植日本引进白草莓的李朝阳&#xff0c;和山东临沂种植山楂和桃子的李东旭&#xff0c;都是网商银行“农户秒贷”项目的受益者。 “发果农工资&#xff0c;收购水果&#xff0c;遇上天气灾害时周转应急时&#xff0c;“…

E/MicroMsg.SDK.WXMediaMessage:checkArgs fail,thumbData is invalid 图片资源太大导致分享失败

1、微信分享报&#xff1a; 2、这个问题是因为图片太大导致&#xff1a; WXWebpageObject webpage new WXWebpageObject();webpage.webpageUrl qrCodeUrl;//用 WXWebpageObject 对象初始化一个 WXMediaMessage 对象WXMediaMessage msg new WXMediaMessage(webpage);msg.tit…

MySQL-12.DQL-条件查询

一.DQL-条件查询 -- DQL:条件查询 -- 1.查询 姓名 为 杨逍 的员工 select id, username, password, name, gender, image, job, entrydate, create_time, update_timefrom tb_emp where name 杨逍;-- 2.查询 id小于等于5 的员工信息 select * from tb_emp where id < 5;-…

Flutter 小技巧之 equatable 包解析以及宏编程解析

今天我们聊聊 equatable 包的实现&#xff0c;并通过 equatable 去理解 Dart 宏编程的作用和实现&#xff0c;对于 Flutter 开发者来说&#xff0c;Dart 宏编程可以说是「望眼欲穿」。 equatable 正如 equatable 这个包名所示&#xff0c;它的功能很简单&#xff0c;主要是用…

LeetCode 热题100之双指针

1.移动零 思路分析1&#xff08;纯模拟&#xff09; 定义指针j&#xff0c;用来收集不是0的数&#xff1b;收集完毕之后&#xff0c;再把剩下位置处置为0即可。 具体实现代码&#xff08;详解版&#xff09;&#xff1a; class Solution { public:void moveZeroes(vector<…

前端vue框架配置基础信息详解分析

前端vue2、vue3框架是我们最近常用的框架&#xff0c;今天我们分析一下配置基础信息、详解其中的功能含义。 1、vue.config.js 文件分析 这个 vue.config.js 文件是 Vue CLI 项目中用于配置项目构建行为和开发环境设置的文件。它能够让开发者定制打包、代理、路径、样式等方面…

国产单片机及其特点

国产单片机在近年来取得了显著的发展&#xff0c;不仅在技术上不断突破&#xff0c;还在市场上占据了越来越重要的位置。 主要国产单片机品牌及特点 兆易创新&#xff08;GD&#xff09; 主要系列&#xff1a;GD32系列&#xff0c;基于ARM Cortex-M内核。特点&#xff1a;高性能…

Android 中的串口开发

一&#xff1a;背景 本文着重讲安卓下的串口。 由于开源的Android在各种智能设备上的使用越来越多&#xff0c;如车载系统等。在我们的认识中&#xff0c;Android OS的物理接口一般只有usb host接口和耳机接口&#xff0c;但其实安卓支持各种各样的工业接口&#xff0c;如HDM…

ResNet18果蔬图像识别分类

1. 项目简介 本项目的目标是开发一个基于ResNet18深度学习模型的果蔬图像分类系统。随着现代农业与人工智能的结合&#xff0c;智能果蔬分类技术在供应链、生产和销售管理中扮演了越来越重要的角色。本项目的背景源于提升果蔬分类效率的需求&#xff0c;通过使用计算机视觉技术…

基于SSM+微信小程序的酒店管理系统1

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于微信小程序开发的酒店管理系统管理员&#xff0c;酒店管理员以及用户。 1、管理员功能可以管理个人中心&#xff0c;用户信息管理&#xff0c;酒店管理员管理&#xff0c;房间类型管…

YOLO11改进 | 注意力机制 | 添加SE注意力机制

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文介绍了YOLOv11添加SE注意力机制&…

Redis中String类型数据扩容原理分析

大家好&#xff0c;我是 V 哥。在 Java 中&#xff0c;我们有动态数组ArrayList&#xff0c;当插入新元素空间不足时&#xff0c;会进行扩容&#xff0c;好奇 Redis 中的 String 类型&#xff0c;C 语言又是怎样的实现策略&#xff0c;带着疑问&#xff0c;咱们来了解一下。 最…