站点图标 高效码农

Uni-MoE-2.0-Omni:全球首个全开源多模态MoE模型,听懂看懂还会画画

Uni-MoE-2.0-Omni:用一套 MoE 模型同时听懂、看懂、说话、画画,还开源了全部代码

核心问题:有没有一种“全开源、一站式”的大模型,能同时处理文本、图像、音频、视频,并且把“理解”与“生成”打通?
一句话答案:Uni-MoE-2.0-Omni 基于 Qwen2.5-7B 主干,用动态容量 MoE、渐进式训练与 75B 多模态 tokens 做到了这一点,代码与权重全部公开。


本文速览(30 秒版)

看点 一句话
架构 语音/视觉/文本统一 tokenizer → 动态 MoE 层 → 专用生成头(MoE-TTS + Task-DiT)
训练 四阶段:跨模态预训练 → 专家热身 → 混合 SFT → 退火+RL(GSPO-DPO)
性能 85 个基准平均 SOTA,长视频理解 +7%、长语音 WER 再降 4.2%、图文编辑 FID 低 29%
开源 5 个 checkpoint、训练脚本、数据清单、Demo 全在 GitHub/HuggingFace
适用 需要“端到端”多模态理解+生成的研究、产品原型、边缘场景微调

1. 为什么“全模态”这么难?

传统 pipeline 是“专模专用”:ASR 模型只转文字,视觉模型只出特征,TTS 或扩散模型只管生成。想做一个“既能听懂、又能回答、还能画图”的助手,就得把 N 条链路拼在一起——延迟高、误差累积、数据格式打架、部署噩梦。

Uni-MoE-2.0-Omni 的思路很直接:

  1. 把所有输入统一成 token 序列;
  2. 在 LLM 内部把 FFN 换成“动态容量 MoE”,让不同模态自动路由到不同专家;
  3. 输出端用“语言提示”驱动语音与图像生成器,实现“文本-中心”的端到端训练。

2. 架构拆解:一条 token 序列走天下

2.1 统一 tokenizer(原文 2.1/2.2)

模态 分片方式 每单位 token 数 备注
音频 30 s 一段,16 kHz 重采样 200 tokens(≈20 tokens/3 s) 用 Whisper-Large-v3 encoder
图像 384×384 不重叠图块 一张图 ≈ (H×W)/(384²)×T T 由 SigLIP 决定
视频 1 fps 采样,每帧 384×384 帧数 fn∈[fl,fu] 与图像共享 ViT
文本 标准 BPE 1 token 对应 1 字/子词 与 Qwen2.5 词表兼容

场景示例
假设你上传一段 18 s 的语音提问“下图是哪个城市?”并附带一张照片。

  • 音频被切成 18×(20/3)=120 tokens;
  • 图像被切成 4×4=16 个图块,产生 16×T≈256 tokens;
  • 文本问题“下图是哪个城市?”≈10 tokens;
    三条流先拼成一条“长序列”,再送进 MoE-Transformer,后面统一做自注意力——不需要外部融合模块。

2.2 动态容量 MoE(原文 2.3.2)

核心问题:固定 Top-K 专家数浪费算力,且无法区分“通用知识”与“模态私有知识”。
Uni-MoE 把每层 FFN 拆成三类专家:

  1. Routed Expert(4 个,5.7 B):存领域知识,Top-P 抽样决定激活几个,最多 3 个;
  2. Shared Expert(2 个,712 M):所有人永远激活,提供通用语言先验;
  3. Null Expert(1 个,0 参):输出恒为 0,用来“跳过”已学会或已过时的 token。

训练技巧

  • 用 Straight-Through 梯度估计解决 Top-P 不可导;
  • 采用“基线减法”降低方差(附录 A.4 给出 Euler/Heun 两种 ODE 格式);
  • 实际激活参数量 1.5 B~18 B 浮动,平均仅 8 B 就能跑 26 B 总参数模型。

场景示例
当模型看到一段语音 token,路由概率集中在 Audio Expert;切换到图像 token 时,同一层立刻把算力挪给 Vision Expert;遇到停用词,直接走 Null Expert——就像“地铁区间车”,哪里人多往哪里开。


2.3 时空 3D RoPE(原文 2.3.1)

文本用 1D RoPE;图像需要 (h,w) 两维;视频再叠加时间 t;音频也以 3 s 为粒度给 t。
Uni-MoE 把旋转位置编码拆成 (t,h,w) 三组 ID,同一图块内先扫宽再扫高,时间轴与音频严格对齐,保证“声画同步”注意力。


3. 生成头:把 token 变回人类可感知信号

3.1 Context-Aware MoE-TTS(原文 2.4 & 3.2.1)

  • 基模型:Qwen2.5-0.5 B 变体 + 4 专家 MoE;
  • 输入:文本 + 风格令牌(说话人、情感、语种);
  • 输出:WavTokenizer 离散码(40 tokens/s),再经 Codec 解码成 24 kHz 波形;
  • 支持 2 min+ 长语音:句级拆分+上下文指引,保证韵律连贯。

场景示例
让模型用“Jenny”音色朗读一段 90 s 儿童故事。它先生成 <speech start> Jenny <speech prompt> 控制头,再逐句产出语音码,最后拼成一整段连贯音频,WER 在 TinyStories-en 上低至 5.0%。


3.2 Task-Aware Diffusion Transformer(原文 2.4 图 4)

  • 冻结 PixWizard 的 DiT 权重,只训“任务投影器”;
  • 支持文生图、图生图、深度/Canny 条件生图、去雨/去噪/去雾等 20+ 任务;
  • <TASK> + <IMG> 令牌把指令压缩成 2×32 向量,交叉注意力注入 DiT,15 步推理出图。

场景示例
输入一张雨夜照片 + 提示“Remove the rain”,模型把任务码设为 derain,生成无雨版本,PSNR 25.41 dB,SSIM 0.82,超过多数专用去雨网络。


4. 四段式训练配方:如何把 7B 稠密模型“炼”成全模态 MoE

阶段 数据规模 可训组件 关键目标
跨模态预训练 75 B tokens MLP+QFormer 对齐音频/视觉 token 到文本空间
专家热身 30 B tokens dense 专家 先分别训好“语音理解”“视觉理解”“语音生成”三个稠密专家
混合 SFT 22 B tokens 完整 MoE 把专家并进来,学指令跟随、跨模态推理
退火 + RL 5 B tokens 全网络低 LR 数据再平衡 + GSPO-DPO 让推理链更稳定

退火细节

  • 图像数据做“质量过滤”只留 5 B;
  • 视频挑“音画同步”子集,扩到 21 B;
  • 文本仅 4 B,但全是 STEM/代码/思维链,保证推理不掉点。

反思
作者团队在博客中写道:“我们原本担心语音生成会拉低视觉指标,结果因为共享注意力层,语音的韵律建模反而给视频帧间一致性带来正迁移——这是把模态装进同一矩阵最意外的收获。”


5. 成绩单:85 个基准的“全图”

5.1 视频 & 全模态理解

  • Video-MME 无字幕 66.4(+6.6 vs Qwen2.5-Omni)
  • VSI-Bench 空间推理 56.0(+36.7 vs Qwen2.5-Omni)
  • WorldSense 长视频音画 QA 44.7(SOTA)

5.2 长语音 ASR(WER ↓ 更好)

数据集 Uni-MoE-2.0-Omni Qwen2.5-Omni 降幅
LibriSpeech-clean-long 2.04 % 7.73 % -4.2 %
LibriSpeech-other-long 4.20 % 7.98 % -3.8 %

5.3 图像编辑与恢复

任务 指标 Uni-MoE-2.0-Omni 次优模型 领先幅度
GEdit-Bench 分数↑ 6.02 PixWizard 3.20 +88 %
MagicBrush-CLIPimg 分数↑ 0.789 PixWizard 0.298 +165 %
Derain-SSIM 分数↑ 0.82 Qwen-Image 0.80 +2.5 %

6. 上手实践:从下载到推理,10 行命令

  1. 克隆仓库
git clone https://github.com/HITsz-TMG/Uni-MoE.git
cd Uni-MoE/Uni-MoE-2
  1. 安装环境(Python≥3.9,CUDA≥11.8)
pip install -r requirements.txt
  1. 下载权重(示例:8 专家通用版)
huggingface-cli download HIT-TMG/Uni-MoE-2-8E --local-dir ./ckpt
  1. 语音+图像对话推理
from unimoe import OmniInference
model = OmniInference(ckpt="./ckpt", device_map="auto")
audio_q = "./ask.wav"          # 18 s 语音提问
image   = "./city.jpg"         # 随手拍
out_text, out_speech, out_img = model.chat(audio_q, image, output_form=["text","speech","image"])

首次运行自动把多层 MoE 拆到多卡,显存峰值约 36 GB(bf16),A100-40G 单卡即可。


7. 常见问题(FAQ)

  1. Q:商业场景能否直接部署?
    A:权重采用 Apache 2.0,但含 Whisper/SigLIP 组件,请遵循对应许可证;语音生成仅开放研究用途。

  2. Q:训练成本大概多少?
    A:作者使用 128×A100-80G,四阶段合计约 18 万 GPU 小时;复现可只跑“混合 SFT”阶段,约 3 万 GPU 小时即可得到 90% 性能。

  3. Q:与 Qwen2.5-Omni 差异?
    A:Qwen2.5-Omni 为稠密 7B,Uni-MoE-2.0-Omni 用 MoE 稀疏激活,平均算力减半,长语音/长视频指标更高,且完全开源。

  4. Q:能否再微调自己的音色或画风?
    A:可以。MoE-TTS 支持 30 s 参考音频做说话人克隆;Task-DiT 支持 LoRA 微调,只需 5×24 图-文对即可把画风迁移到新主题。

  5. Q:为什么有时候生成语音会“跳字”?
    A:长句切分策略在极端语速下可能错位,可在推理时把 sentence_split_threshold 从默认 40 汉字降到 25,基本消除。

  6. Q:模型会“幻觉”图像内容吗?
    A:生成头依赖冻结 DiT,幻觉率低于端到端自回归方案;若出现不一致,可把 guidance_scale 从 7.5 提到 10,再抽样一次。


一页速览(打印版)

  • 一条序列搞定文本/语音/图像/视频
  • 动态 MoE:平均 8 B 激活参数跑 26 B 总量,Top-P 路由省 40% 算力
  • 四段训练:预训练→专家热身→混合 SFT→退火+RL
  • 85 基准新 SOTA:长视频+7%、长语音-4.2% WER、图像编辑 FID 低 29%
  • 全链路开源:5 个 checkpoint + 训练脚本 + 数据清单
  • 10 行命令即可推理,支持语音/图像/文本任意组合输入输出

作者反思
“把语音、视觉全塞进一个 LLM 并不是炫技,而是想让‘多模态’不再等于‘多流水线’。最惊喜的时刻是:当模型用 Jenny 的音色准确回答‘这张照片在桂林’,它其实同时理解了象鼻山的形状、语音提问的语调、以及图片角落里的渔船——三条信息在同一注意力矩阵里交汇,那一刻真正体会到‘统一 token’的价值。”

退出移动版