我们提出了 Janus,一种基于自回归的多模态理解与生成统一模型。Janus 的核心思想是对理解和生成任务的视觉编码进行解耦,在提升了模型的灵活性的同时,有效缓解了使用单一视觉编码导致的冲突和性能瓶颈。实验表明,Janus 超越了此前的统一模型的效果,并取得了和纯理解 / 纯生成模型比肩或更好的性能。我们通过详细严格的对比实验证实了解耦的好处,并分析了理解生成统一训练相较于分开训练带来的影响。
在罗马神话中,Janus (雅努斯) 是象征着矛盾和过渡的双面守护神。我们将模型命名为 Janus,形象地表示我们的模型可以像 Janus 一样,用不同的眼睛看向视觉数据,分别编码特征,然后用同一个身体 (Transformer) 去处理这些输入信号。此外,得益于解耦的设计,Janus 极易扩展,研究者们可以将理解和生成领域最新的编码技术直接应用在 Janus 之上。我们希望我们提出的框架能和雅努斯一样,象征着多模态统一模型的旧范式到新范式的过渡。
2.1 相关工作
多模态理解大模型和视觉生成模型都取得了飞速的发展。最近,也有一些工作尝试将这两者进行统一,构造更强大的通用模型。将理解和生成进行统一具有重大意义。从模型部署角度来说,统一之后能避免分开部署多个模型,减少了模型的冗余性。且社区对 LLM 的推理做了很细致的优化,如果能统一到一个 LLM 中,会很方便;从结果来说,理解和生成统一可以提高视觉生成的指令跟随能力,甚至解锁一些涌现能力,例如多语言视觉生成,或随着 LLM 的 scale up 获得更强的能力。
有一些先驱工作 (EMU, Seed) 尝试将预训练好的 Diffusion Model 接在多模态理解模型后面。这些方法中,多模态理解模型输出 Diffusion Model 的条件,然后依赖 Diffusion Model 做图像生成。但是,这样的设计中,LLM 本身并不具备直接出图的能力,出图的性能也往往被外接的 Diffusion Model 所限制。后来的一些工作 (Chameleon, Vila-U, Show-O 等) 则提出直接让 LLM 处理多模态理解和生成任务,真正做到了统一。但是,这些方法通常将视觉编码器也进行了合并,即:用一个视觉编码器同时负责理解与生成任务。
2.2 目前方法存在的问题
由于多模态理解和生成任务所需的信息不完全一致,视觉编码器的合并可能导致一些问题。(1) 多模态理解任务通常需要的是对图像或视频等视觉输入的高层语义理解,因此需要视觉编码器能够从低级像素信息逐渐转换为具有更高层语义的信息。(2) 对视觉生成任务来说,视觉编码器需要传递细粒度的视觉信息,通常需要保留更多的细节信息,例如纹理、颜色等。将这两个任务的视觉编码压缩到同一个表征空间中,会带来一些冲突和妥协。由于专门为多模态理解设计的编码器很多并不能直接来做视觉生成,现有的方案在挑选编码器时,往往优先考虑图像生成任务 (如 使用 VQ Tokenizer 作为编码器),导致目前的统一模型生成能力还不错,但是多模态理解能力和当前最先进的方法差异较大。
3.1 模型结构
为了解决单一视觉编码器带来的性能瓶颈,我们提出了对视觉编码进行解耦。具体来说,我们使用两个独立的视觉编码器分别负责多模态理解和生成任务,然后用一个统一的 Transformer 结构去处理不同的输入信息。
为了简化整个模型,我们在选取视觉编码器的时候没有进行复杂的设计。对多模态理解任务来说,我们使用 SigLIP-Large-Patch16-384 去编码特征。对视觉生成任务来说,我们使用 LlamaGen 中训练的标准 VQ Tokenizer 去编码。编码后的信息会分别经过一个 adaptor,然后送入 LLM 中。整个模型是使用 Next-Token-Prediction 的方式进行训练的,采用 causal attention mask,和 LLM 的训练方式一致。
3.2 训练流程
Janus 的训练分为三个阶段。(每一阶段使用的数据详情请参考 paper。整体上会控制 多模态理解 + 纯文本理解:视觉生成 = 1:1)
3.3 推理流程
我们使用 Next-Token-Prediction 的方式进行推理,所以可以使用针对 LLM 进行的优化,例如 KV Cache, vLLM 等加速推理。对视觉生成任务,遵循之前的方法,我们还额外使用了 classifier-free guidance (cfg) 机制,即每个 token 的 logit 由以下公式得出:
其中, 是无条件生成得到的 logit,s 是 cfg 权重,默认为 5。相应的,为了让 cfg 能顺利进行,我们在训练时会随机将 10% 的文生图数据置换为无条件生图。
3.4 可能的扩展
Janus 的设计非常灵活,易于扩展。
4.1 实现细节
我们使用 DeepSeek-LLM (1.3B, pretrain 模型,未经过指令微调) 作为 LLM 的初始化。在理解和生成任务中,图像分辨率均为 384 * 384。我们用 DeepSeek 自研的 HAI-LLM 框架进行开发,整个训练流程需要在 16 台 8 Nvidia A100 (40GB) GPU 机器上跑 7 天时间。具体细节请参考论文。
4.2 和 state-of-the-arts 的比较
4.3 消融实验
我们设计了严格的消融实验,一方面对 Janus 的视觉编码解耦这一观点进行验证,另一方面,研究联合训练对单任务训练的性能影响。
Baseline 介绍
我们首先按照 Chameleon 的设计,使用一个 VQ Tokenizer 去同时为理解和生成任务编码 (Exp-A)。这个 VQ Tokenizer 和 Janus 中视觉生成部分的编码器是同一个。考虑到这个编码器语义很弱,所以我们额外构造了一个更强的 baseline, Semantic Tokenizer (Exp-B)。
简单来说,这个 Semantic Tokenzier 基于原先的 VQ Tokenizer 构造,额外加了一个 semantic decoder,预测 SigLIP 产生的语义特征,具体细节请见论文的补充材料。通过这样的方式,一方面可以通过 semantic decoder,产生语义更强的图像特征;另一方面,可以使得 Semantic Tokenizer 编码出的图像 ID 具有更好的语义,局部连续性更强。请注意:为了方法的简单性。Semantic Tokenizer 仅在对比实验中使用,而没有在 Janus 中用。如果用了,Janus 应该会在视觉生成方面表现更好。
视觉编码解耦的影响
(1) 比较 Exp-A 和 Exp-D,我们发现 Exp-A 的图像生成效果还不错,COCO-FID 有 8.72,和 Janus (8.53) 类似。但是 Exp-A 的多模态理解性能明显拉胯。
(2) 当换上语义更强的 tokenizer (Exp-B),我们发现多模态理解能力有了明显的提升,但和 Janus 相比还有一定距离。视觉生成方面,Exp-B (7.11) 比 Janus (8.53) 更好。我们猜测原因可能有两点。首先,Semantic Tokenizer 编码出的图像 ID 语义更强,作为 LLM 的预测目标更合理。其次,Semantic Tokenizer 的参数量显著高于 VQ Tokenizer。这也说明了 Janus 在视觉生成方面巨大的提升空间。
(3) 那么,使用同一个 Encoder,对理解的影响到底有多大呢?通过比较 Exp-B 和 Exp-C,我们发现仅使用 Semantic Tokenizer 做多模态理解,明显高于 Exp-B 中的结果。举例来说,MMBench 从 52.7 提高到 62.1。这说明使用单一视觉编码器确实在理解和生成任务上导致了冲突,牺牲了多模态理解的性能。
(4) 最后,我们探讨一下联合训练对单一任务的影响,见 Exp-D, Exp-E, Exp-F。这里为了公平,我们对迭代步数做了严格的控制。例如,让联合训练的模型和纯理解模型见过的多模态理解数据一样多。(其实这样对联合模型不太公平,因为联合模型的数据里,多模态理解的数据浓度相对更低)。最后发现联合训练可以在基本保持多模态理解的能力下,有效地加入视觉生成能力。
4.4 可视化
文生图可视化
如 Figure 4 所示,我们的模型相比于 SDXL, LlamaGen 有着更好的指令跟随能力,能对用户的 prompt 做出更精准的反馈。
涌现能力:多语言文生图
如 Figure 8 所示,我们还意外地发现,及时训练数据中只有英文文生图数据,但最后的模型涌现出了多语言文生图能力,如中文、法语、日语、甚至使用 emoji ???? 都可以。我们认为这里的涌现能力来自于 LLM 预训练模型。
多模态理解可视化
请见以下两张图,相比于以前的大一统模型,我们的模型更聪明,能读懂 meme 图像。同时还能处理 latex 公式转换、图转代码等任务。
Janus 是一个基于自回归的统一多模态理解与生成框架,具有简单性、高效性和高度灵活性。通过解耦视觉编码,我们突破了当前多模态统一模型中的性能瓶颈,拉进了大一统模型和专用模型在专项任务上的性能差距,解锁了多模态统一模型的新范式。
文章来自于微信公众号“机器之心”
【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。
项目地址:https://github.com/InternLM/xtuner
【开源免费】LangGPT 是一个通过结构化和模板化的方法,编写高质量的AI提示词的开源项目。它可以让任何非专业的用户轻松创建高水平的提示词,进而高质量的帮助用户通过AI解决问题。
项目地址:https://github.com/langgptai/LangGPT/blob/main/README_zh.md
在线使用:https://kimi.moonshot.cn/kimiplus/conpg00t7lagbbsfqkq0