论文链接: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),对底层原理、经典论文、开源代码都会进行详细解读,欢迎交流学习。