揭秘Youtu-Parsing-Omni:单一Omni编码器如何统一图像、音频与视频解析
Youtu-Parsing-Omni是腾讯优图实验室推出的 5B 级多模态解析模型:给定一张文档页、一张自然图像、一个图表/流程图/几何图、一段音频或一段含声音的视频,它都能输出一份结构化的 JSON 解析结果。它的核心架构创新在于:用一个单一 Omni 编码器同时处理图像、音频和音视频混合输入,替代传统"双塔"方案。本文带你完整拆解这套架构的设计原理与关键实现。
为什么是"单一编码器":双塔架构的困境
传统的全模态(omni-modal)解析模型通常采用双塔设计:像素由一个预训练的视觉塔编码,音频由另一个预训练的音频塔编码,两条特征流直到进入语言模型时才第一次"相遇"。
这带来一个根本问题:跨模态的相互理解被推迟到了解码阶段。视觉塔和音频塔各自独立学习,模型只能靠语言模型"事后拼接"两条信息流,既增加训练难度,也让感知参数随模态数量成倍膨胀。
Youtu-Parsing-Omni 的解法是:用一个 Youtu-Omni-Encoder 替换掉两个塔。这个编码器本身是一个 Transformer 主干,而且是从预训练文本语言模型初始化而来的——这样它天生就具备读文本的能力,对文档、图表这类以文字为核心的输入尤其友好。图像、音频不再各自拥有独立的深层网络,只保留一层轻量的模态专属"前端"(stem),感知能力的绝大部分由共享参数承担。
Omni编码器内部机制:前端、共享主干与合并器
理解编码器内部,只需记住三段式结构:模态前端 → 共享双向 Transformer → 模态合并器。
1)模态前端(stem):把像素和声波变成 token
- 图像路径:图像被切分为 16×16 的 patch,通过线性层 patch_embedding 投影为 token 序列。
- 音频路径:128 维 log-mel 频谱经过三层 Conv2d 堆叠(YoutuVITACNNAudioEmbeddings),时间方向下采样 8 倍——每秒音频最终只产生约 12.5 个 token,长音频也能被高效表示。
2)共享主干:28 层双向 Transformer
config.json 中omni_config字段记录了主干配置:num_hidden_layers: 28、hidden_size: 1024、16 个注意力头(8 个 KV 头,GQA)、vocab_size: 280256,且全部为full_attention层。它工作在 packed(打包变长)序列上,可以一次处理图像、音频块和视频的任意混合,并支持最长 100 万 token 的上下文(max_position_embeddings)。
3)模态合并器(merger)与投影器
编码器之后是模态专属的压缩头:图像走 2×2 空间合并(token 数降为 1/4)YoutuVITAOmniVisionPatchMerger,音频走 2 倍时间合并 YoutuVITAOmniAudioPatchMerger,随后统一投影到 2560 维,与文本提示一起送入 Youtu-LLM 解码器(40 层、hidden 2560,见 text_config),最终输出 OmniSchema JSON。
💡 关键结论:只有轻量的前端 stem 和 merger/投影头是模态相关的,几乎全部感知参数都是共享的。这意味着图像、音频、视频的能力可以互相迁移——学会看图表的模型,也学会了"听"。
音视频融合:在感知层对齐"画面与声音"
对视频输入,融合发生在编码器内部,由两个机制配合完成。
① 融合窗口(fusion windows)
视频处理器把帧序列与音频块按真实时间顺序打包成一条序列(每个音频块对应 2~30 秒,见 video_processing_youtu_vita.py)。28 层中有 4 层是融合层,由 config.json 的video_fusion_layer_freq指定——第 12、13、26、27 层。
- 非融合层(24 层):每个帧、每个音频块各自拥有独立的注意力窗口,互不干扰;
- 融合层(4 层):在每个"音频→帧"的边界开启新窗口,让帧 token 直接关注同一时刻的声音 token。
实现上,forward_video会预构建两种分段方案(每层用哪套),逐层分发给编码器:YoutuVITAOmniModel.forward_video。融合层的选择逻辑与 A→I 边界分组规则见 第 3354-L3397 行。
② 统一时间位置编码
跨模态对齐的核心是 4D 位置编码:把注意力头的维度切分为M | T | H | W四段(模态 | 时间 | 高 | 宽),代码在 YoutuVITAOmniEncoder。
- 视觉 token:
t取自帧索引,(h, w)取自 patch 网格; - 音频 token:
t取自时间偏移,h = w = 0。
两种模态因此共享同一套时间坐标系:12.5 个 t 单位对应 1 秒(与音频 token 速率严格对齐),同一时刻出现的画面与声音落在相同的t上(时间步进定义)。模态本身由 M 段区分——图像=0、音频=1、视频帧=2、视频音频=3(modality 定义)。
🎯 跨模态对齐在编码器内直接算出,而不是交给解码器去"猜"——这是音视频理解质量的关键来源。
OmniSchema 与 OSAD:一套格式训练所有任务
统一输出格式:所有解析任务共用同一个 JSON 信封OmniSchema,同时覆盖感知层(布局元素、文本、表格、公式、bbox 坐标、时间戳、ASR、声学事件、镜头运动)与认知层(caption、narrative、report)。具体输出哪个"家族"由任务提示(--task)决定,支持文档、自然图像、图表、流程图、几何图、音频、自然视频、富文本视频等 8 种输入。
OSAD 自进化后训练:所有任务共享 OmniSchema 之后,训练侧可以用同一个自进化蒸馏流程OSAD(OmniSchema-Aware On-Policy Distillation)统一处理:
- 学生模型采样自己的解析结果,通过准入门(JSON 合法性、schema 合规、框语法、重复检查)的 rollout,交给一个"能看到参考答案"的冻结模型副本打分;
- 得益于统一 schema,每个 token 都能被识别为内容 token(Jensen–Shannon 散度)或结构 token(较高温度下的前向 KL);
- 每轮结束时把学生的 LoRA 适配器合并,学生变成下一轮的 teacher——解析器与监督信号共同进化,无需手工设计奖励,也无需单独训练的 teacher。
性能表现:5B 小模型的 SOTA 实力
单一编码器的收益最终体现在结果上(完整数据见 README.md):
| 基准 | 指标 | 成绩 |
|---|---|---|
| OmniDocBench v1.6(文档解析) | Overall | 96.96(SOTA,超过 TeleOCR、OvisOCR2、GPT-5.2) |
| OmniParsingBench(跨模态综合) | Avg. | 75.08(开源权重模型最佳,仅次于 Gemini-3-Pro) |
| 其中 Chart / Audio | 单项 | 95.02/78.08(全场最高) |
| ChemOCR(化学结构) | Tani@1.0 | 54.2,与 13B 专用模型 ChemDFM-X 相当 |
| PDMX-Synth(乐谱识别) | CER | 22.73,超越专用 OMR 模型 LEGATO |
5B 的参数规模、全模态的输入覆盖、以及文档解析上对专用模型和 GPT-5.2 的领先,说明"共享感知参数"带来的能力迁移是真实存在的。
源码导读:从哪里开始读架构
核心实现集中在 modeling_youtu_vita.py,建议按以下路径阅读:
- YoutuVITAOmniModel:顶层编码器,包含 vision / audio / video 三条前向分发与融合层掩码初始化;
- YoutuVITAOmniEncoder:共享 28 层 Transformer 主干 + 4D (M|T|H|W) 位置编码构建;
- forward_video:视频帧与音频块的按时间交织、融合/非融合窗口划分;
- config.json:
omni_config记录全部关键开关(video_fusion_layer_freq、video_group_attention、video_omni_chunked_mthw_rope、video_omni_fusion等); - README.md:Method 章节配有官方原理图,Results 章节有全部基准数据。
理解了这套架构,你就理解了多模态大模型的一个重要走向:从"多个塔各自编码、再拼接",进化到"单一编码器统一表示"。Youtu-Parsing-Omni 把"统一"做到了感知层——图像、音频、视频不再各说各话,而是共享一套参数、在同一个时间坐标系里相互对齐。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考