论文: https://arxiv.org/pdf/2410.13848
项目主页:https://github.com/deepseek-ai/Janus
模型下载:https://huggingface.co/deepseek-ai/Janus-1.3B
在线 Demo:https://huggingface.co/spaces/deepseek-ai/Janus-1.3B
1. 太长不看版
我们提出了 Janus,一种基于自回归的多模态理解与生成统一模型。Janus 的核心思想是对理解和生成任务的视觉编码进行解耦,在提升了模型的灵活性的同时,有效缓解了使用单一视觉编码导致的冲突和性能瓶颈。实验表明,Janus 超越了此前的统一模型的效果,并取得了和纯理解 / 纯生成模型比肩或更好的性能。我们通过详细严格的对比实验证实了解耦的好处,并分析了理解生成统一训练相较于分开训练带来的影响。
在罗马神话中,Janus (雅努斯) 是象征着矛盾和过渡的双面守护神。我们将模型命名为 Janus,形象地表示我们的模型可以像 Janus 一样,用不同的眼睛看向视觉数据,分别编码特征,然后用同一个身体 (Transformer) 去处理这些输入信号。此外,得益于解耦的设计,Janus 极易扩展,研究者们可以将理解和生成领域最新的编码技术直接应用在 Janus 之上。我们希望我们提出的框架能和雅努斯一样,象征着多模态统一模型的旧范式到新范式的过渡。
2. 背景和动机
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. 方法
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)
在第一阶段,我们使用 Image Caption 数据和 ImageNet 文生图数据,对 understanding adaptor, generation adaptor, image head 这三个随机初始化的模块进行训练,起到 warm up 的效果。
在第二阶段,我们额外打开 LLM 和 text head,然后使用大量纯文本、图生文和文生图的数据进行联合预训练。对于文生图数据,我们会让 ImageNet 这部分数据出现在其他场景的文生图数据之前,先学习像素依赖关系,然后学习场景生成 (参照 Pixart 中的设定)。
在第三阶段,我们额外打开 understanding encoder,使用指令跟随数据进行训练。
3.3 推理流程
我们使用 Next-Token-Prediction 的方式进行推理,所以可以使用针对 LLM 进行的优化,例如 KV Cache, vLLM 等加速推理。对视觉生成任务,遵循之前的方法,我们还额外使用了 classifier-free guidance (cfg) 机制,即每个 token 的 logit 由以下公式得出:
其中, 是无条件生成得到的 logit,s 是 cfg 权重,默认为 5。相应的,为了让 cfg 能顺利进行,我们在训练时会随机将 10% 的文生图数据置换为无条件生图。
3.4 可能的扩展
Janus 的设计非常灵活,易于扩展。
多模态理解方面,(1) 可以使用比 SigLIP 更强的 encoder,例如 EVA-CLIP 或 InternViT 6B,而不用担心这些 encoder 是否能来做生成。(2) 可以引入当前多模态理解领域先进的动态分辨率技术 (将图像切成多个子块,提供更好的细粒度理解能力) 和 pixel shuffle 压缩技术。
视觉生成方面,(1) 可以将当前的 VQ Tokenizer 替换成更好的 tokenizer,例如 MoVQGan 以及最近刚出的 HART (一种结合连续和离散的优点的 tokenizer)。(2) 可以为图像生成部分设计其他优化目标,如 diffusion loss。也可以将图像生成部分的 attention mask 改成双向的,这也被证实了比单向 mask 有更好的生成效果。
对更多模态的支持。Janus 的核心思想是解耦,对不同的输入使用不同的编码方式,然后用统一的 transformer 进行处理。这一方案的可行性,意味着 Janus 有可能接入更多的模态,如视频、3D 点云、EEG 信号等。这使得 Janus 有可能成为下一代多模态通用模型的有力候选。
4. 实验
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 的比较
多模态理解 (Table 2)。Janus-1.3B 超越了之前同规模的统一模型。在一些 benchmark (POPE, MMBench, SEED Bench, MM-Vet) 上,Janus-1.3B 甚至超越了 LLaVA-v1.5-7B 的结果。这证实了视觉编码解耦对多模态理解性能带来了显著的提升。
视觉生成 (Table 3 和 Table 4)。Janus-1.3B 在图像质量评价 (MSCOCO-30K 和 MJHQ-30K) 和图像生成指令跟随能力 benchmark GenEval 上都取得了很不错的结果,超越了之前同规模的统一模型,和一些专用图像生成模型,如 SDXL。
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