腾讯优图发布 5B 多模态解析模型 Youtu-Parsing-Omni
tencent/Youtu-Parsing-Omni
腾讯优图实验室发布 5B 参数的多模态解析模型 Youtu-Parsing-Omni,用单一 Youtu-Omni-Encoder 处理文档页、自然图像、图表、流程图、几何图、音频和音视频输入,按任务提示词输出统一的 OmniSchema JSON。
5B 参数统一编码器覆盖文档、图像、音视频七类解析任务,并给出 vLLM 插件与评测代码,可据此判断轻量多模态解析的落地成本。
新闻
- [2026-10] OmniDocBench 评测代码已发布(见 OmniDocBench Evaluation)。
- [2026-10] 技术报告、模型权重、vLLM 插件和推理示例已发布。
简介
Youtu-Parsing-Omni 是一个紧凑型(5B)全模态解析模型。给定单一输入——文档页面、自然图像、图表/流程图、几何图形、音频片段或音视频视频——它生成一个结构化 JSON 封装,同时涵盖感知(布局元素、文本、表格、公式、边界框、时间戳、ASR、OCR、声学事件、相机运动)和认知(字幕、叙述、报告)。输出族由任务提示选择(示例中的 --task,prompts/youtu_parsing_omni.json 的键)。
| 输入 | --task |
modality / subtype |
关键内容 |
|---|---|---|---|
| 文档页面 | document |
image / document |
带 bbox 的布局元素、文本 / LaTeX / OTSL 表格 / Markdown 图表 / Mermaid 流程图、阅读顺序 |
| 自然图像 | natural_image |
image / natural_image |
带 bbox 的实体和文本、标签、字幕、全局描述 |
| 图表 | graphics_chart |
image / document |
一个 chart 元素:Markdown 表格、注释、字幕 |
| 流程图 | graphics_flowchart |
image / document |
一个 flowchart 元素:Mermaid、字幕 |
| 几何图形 | graphics_geometric |
image / document |
一个 geometric 元素:点、线、弧、形状、几何关系和测量 |
| 音频 | audio |
audio / – |
带时间戳的人声 / 非人声片段、说话人、ASR、音色 / 场景字幕、声学事件 |
| 自然视频 | natural_video |
video / natural_video |
带视觉元素、动作、交互、相机运动、音轨的时间片段 |
| 文本密集视频 | textrich_video |
video / text_rich_video |
带 OCR + ASR 的片段以及整个视频的 Markdown structured_report |
亮点(详见技术报告):
- 统一模式 – 一个 JSON 封装覆盖七个解析族,由任务提示驱动。
- 全模态编码器 – 在单一模型中支持图像、音频和交错的音视频视频输入(帧 + 音轨)。
- 小尺寸下的强劲结果 – 在 OmniDocBench v1.6 上达到最先进水平(96.96 Overall),在 OmniParsingBench 上是最佳开放权重模型(75.08 Avg.,仅次于 Gemini-3-Pro),在化学结构(ChemOCR)和乐谱(PDMX-Synth)识别上与专用模型相当(结果)。
- 易于部署 – 包含 vLLM 插件、固定的服务设置、任务提示和推理示例。
方法
一个编码器处理所有模态
现有的全模态解析器 (a) 使用两个分别预训练的塔来编码像素和音频,其流首先在语言模型内部汇合。Youtu-Parsing-Omni (b) 用一个单一的Youtu-Omni-Encoder 替换两个塔,该编码器从预训练的文本语言模型初始化以增强文本阅读。薄的模态特定主干将像素和 log-mel 帧映射为 token;一个共享的双向 Transformer 在一种 (t, h, w) 位置编码下对任意打包混合的图像、音频块和视频进行上下文化;然后模态特定的合并器和投影器将 token 连同文本提示一起馈送到 Youtu-LLM 解码器,后者输出 OmniSchema JSON。只有主干和合并器 / 投影器头依赖于模态,因此几乎所有感知参数都是共享的。
感知内部的音视频融合
视频的帧和音频块按时间顺序打包。(a) 非融合层为每一帧和每个音频块分配各自的注意力窗口,而少数融合层在每个音频到帧的边界处开启新窗口,因此一帧能关注到同一时刻的声音。(b) 视觉 token 从帧索引取 t,从 patch 网格取 (h, w);音频 token 用 t 从其时间偏移取 h = w = 0,因此两种模态共享同一时间坐标系。跨模态对齐因而在编码器内部计算,而非由解码器重建。
所有任务共用一套 schema:OmniSchema 感知的 On-Policy 蒸馏(OSAD)
全部十项解析任务共用 OmniSchema,因此在 SFT 和 schema 路由的 RLVR 之后,一个单一的自演化后训练流程 OSAD 在各任务上应用相同的基于 token 角色的目标。学生模型采样自己的解析结果;通过准入闸门(JSON 有效性、schema 符合性、框语法、重复检查)的 rollout 由模型的一个冻结副本评分,该副本还能看到参考解析。由于每个输出都遵循 OmniSchema,每个 token 被识别为内容(Jensen–Shannon 散度)或结构(更高温度下的前向 KL),外加一个全 token JS 项。在每个轮次边界,学生的 LoRA 适配器被合并,学生成为下一个教师,因此解析器及其监督共同演化,无需手工设计的奖励或单独训练的教师。
模型库
| 模型 | 参数 | 下载 |
|---|---|---|
| Youtu-Parsing-Omni | 5B | 🤗HF Mirror | 🤖ModelScope |
结果
OmniDocBench v1.6
| 模型 | 参数 | 总体 ↑ | 文本编辑 ↓ | 公式 CDM ↑ | 表格 TEDS ↑ | 表格 TEDS-S ↑ | 阅读顺序编辑 ↓ |
|---|---|---|---|---|---|---|---|
| Youtu-Parsing-Omni | 5B | 96.96 | 0.0271 | 96.80 | 96.79 | 98.20 | 0.1104 |
| TeleOCR | 1.2B | 96.91 | 0.0267 | 96.59 | 96.82 | 98.18 | 0.1184 |
| OvisOCR2 | 0.8B | 96.47 | 0.0265 | 97.49 | 94.58 | 96.98 | 0.1120 |
| PaddleOCR-VL-1.6 | 0.9B | 96.34 | 0.0326 | 97.53 | 94.76 | 97.10 | 0.1278 |
| MinerU2.5-Pro | 1.2B | 95.75 | 0.0360 | 97.45 | 93.42 | 95.92 | 0.1200 |
| GLM-OCR | 0.9B | 95.22 | 0.0440 | 97.18 | 92.83 | 95.39 | 0.1330 |
| HunyuanOCR-1.5 | 1B | 94.74 | 0.0390 | 94.50 | 93.67 | 94.71 | 0.1290 |
| Qianfan-OCR | 4B | 93.90 | 0.0400 | 95.08 | 90.53 | 93.31 | 0.1300 |
| Youtu-Parsing | 2.5B | 93.74 | 0.0440 | 93.63 | 92.02 | 95.00 | 0.1160 |
| Ovis2.6-30B-A3B | 30B-A3B | 93.70 | 0.0350 | 95.17 | 89.44 | 92.40 | 0.1350 |
| Logics-Parsing-v2 | 4B | 93.33 | 0.0410 | 95.65 | 88.42 | 91.98 | 0.1370 |
| FireRed-OCR | 2B | 93.26 | 0.0370 | 95.44 | 88.04 | 91.06 | 0.1310 |
| Gemini-3-Pro | – | 92.91 | 0.0640 | 95.99 | 89.15 | 92.96 | 0.1650 |
| dots.ocr | 3B | 90.77 | 0.0480 | 89.95 | 87.18 | 90.58 | 0.1380 |
| OpenDoc-0.1B | 0.1B | 90.67 | 0.0490 | 93.02 | 83.88 | 87.45 | 0.1400 |
| DeepSeek-OCR 2 | 3B | 90.25 | 0.0500 | 91.84 | 83.89 | 87.75 | 0.1440 |
| Qwen3-VL-235B | 235B-A22B | 89.78 | 0.0630 | 92.55 | 83.07 | 86.75 | 0.1660 |
| Dolphin-v2 | 3B | 89.50 | 0.0690 | 91.01 | 84.40 | 87.44 | 0.1500 |
| OCRVerse | 4B | 88.60 | 0.0630 | 89.61 | 82.44 | 86.27 | 0.1630 |
| MonkeyOCR-pro-3B | 3B | 88.57 | 0.0740 | 88.74 | 84.35 | 88.62 | 0.1890 |
| GPT-5.2 | – | 86.59 | 0.1140 | 88.21 | 82.95 | 87.93 | 0.1930 |
OmniParsingBench
| 模型 | 图表 | 几何 | 自然图像 | 音频 | 自然视频 | 富文本视频 | 平均 |
|---|---|---|---|---|---|---|---|
| Gemini-3-Pro | 92.79 | 85.43 | 69.73 | 76.74 | 74.82 | 76.80 | 77.44 |
| Youtu-Parsing-Omni | 95.02 | 74.33 | 62.84 | 78.08 | 74.18 | 75.62 | 75.08 |
| Logics-Parsing-Omni | 94.65 | 76.34 | 67.53 | 75.58 | 67.34 | 65.36 | 72.26 |
| Qwen3-Omni-30B-A3B | 87.07 | 58.60 | 59.35 | 75.23 | 65.19 | 59.59 | 66.44 |
| Qwen3.5-397B-A17B | 93.51 | 72.16 | 63.87 | – | – | – | – |
| GPT-5.4 | 90.92 | 81.16 | 60.50 | – | – | – | – |
ChemOCR 与 PDMX-Synth
ChemOCR
| 模型 | 参数 | 类别 | 平均相似度 ↑ | [email protected] ↑ |
|---|---|---|---|---|
| DeepSeek-OCR 2 | 3B | 通用解析 MLLM | 74.9 | 49.6 |
| Youtu-Parsing-Omni | 5B | 统一解析 MLLM | 74.6 | 54.2 |
| ChemDFM-X | 13B | 化学 MLLM | 70.9 | 36.5 |
| GPT-4o | – | 专有通用 MLLM | 36.8 | 3.4 |
| Qwen2.5-VL-7B | 7B | 开源通用 MLLM | 25.5 | 0.4 |
| InternVL2.5-4B | 4B | 开源通用 MLLM | 4.4 | 0.0 |
PDMX-Synth
| 模型 | 类别 | CER ↓ | SER ↓ | LER ↓ |
|---|---|---|---|---|
| Youtu-Parsing-Omni | 统一解析 MLLM | 22.73 | 26.73 | 33.20 |
| LEGATO | 专用 OMR 模型 | 23.30 | 25.80 | 31.70 |
| GPT-5.6 | 专有通用 MLLM | 45.02 | 54.74 | 87.52 |
| Gemini-3-Pro | 专有通用 MLLM | 54.26 | 68.10 | 82.33 |
| Logics-Parsing-Omni | 通用解析 MLLM | 72.44 | 81.93 | 81.34 |
| GOT-OCR2.0 | 通用解析 MLLM | 93.98 | 98.54 | 97.76 |
快速开始
1. 安装
git clone https://github.com/TencentCloudADP/youtu-parsing.git
cd youtu-parsing/youtu_parsing_omni
# choose one mode per Python environment (Python >= 3.10, CUDA GPUs for inference)
bash scripts/setup_env.sh # vLLM serving + plugin (transformers==5.2.0)
bash scripts/setup_env.sh --transformers # Transformers inference (transformers==5.10.2)
- vLLM 服务和 Transformers 推理固定使用不同的
transformers版本 (5.2.0和5.10.2);请将它们安装到各自独立的 Python 环境中。peft不得安装在服务环境中(脚本会将其移除)。 - 音频/视频输入需要
ffmpeg可用。
手动安装
# serving (vllm==0.19.0, transformers==5.2.0)
pip install -r requirements/vllm.txt
pip install transformers==5.2.0 # overrides vllm's transformers<5 pin
pip uninstall -y peft
pip install --no-deps ./vllm-plugin-vita-omni
# Transformers inference (separate env, transformers==5.10.2)
pip install -r requirements/transformers.txt
2. 使用 vLLM 提供服务
MODEL=tencent/Youtu-Parsing-Omni DATA_ROOT=/path/to/media GPU=0 bash scripts/vllm.sh
这会在 http://127.0.0.1:8000/v1 上启动一个 OpenAI 兼容服务器(提供的模型名称为
Youtu-Parsing-Omni),使用 vllm-plugin-vita-omni 模型
实现以及所报告结果的运行时设置。
| 变量 | 默认值 | 含义 |
|---|---|---|
MODEL |
必填 | HF Mirror 模型 id(tencent/Youtu-Parsing-Omni)或本地检查点目录 |
DATA_ROOT |
必填 | 服务器可从中读取本地媒体的唯一目录(--allowed-local-media-path) |
GPU |
0 |
服务器运行的 GPU(CUDA_VISIBLE_DEVICES) |
PORT |
8000 |
服务器端口 |
- 引擎设置:
--max-model-len 65536 --max-num-batched-tokens 65536 --max-num-seqs 1、--gpu-memory-utilization 0.70、--limit-mm-per-prompt '{"image": 8, "video": 4, "audio": 8}'、--seed 1234、bfloat16;其余均使用 vLLM 默认值。 - 服务器仅监听
127.0.0.1并在前台运行(日志输出到终端);Ctrl-C可将其停止。vLLM 的内部端口为30000(可通过VLLM_PORT覆盖)。 - 该脚本还会导出插件读取的媒体 token 预算
(
YOUTU_VITA_*,见vllm-plugin-vita-omni)。 MODEL会原样传给vllm serve:tencent/Youtu-Parsing-Omni从 HF Mirror Hub 下载(缓存在HF_HOME中);本地检查点目录同样可用。
3. 解析文件
媒体文件必须位于 DATA_ROOT 之下。
python examples/infer_vllm.py --task document --media /path/to/media/page.png
python examples/infer_vllm.py --task natural_image --media /path/to/media/photo.jpg
python examples/infer_vllm.py --task graphics_chart --media /path/to/media/chart.png
python examples/infer_vllm.py --task graphics_flowchart --media /path/to/media/flowchart.png
python examples/infer_vllm.py --task graphics_geometric --media /path/to/media/geometry.png
python examples/infer_vllm.py --task audio --media /path/to/media/speech.wav
python examples/infer_vllm.py --task natural_video --media /path/to/media/clip.mp4
python examples/infer_vllm.py --task textrich_video --media /path/to/media/lecture.mp4
使用 --api-base 可指向另一台服务器。任务提示词列在
prompts/youtu_parsing_omni.json 中。
请求必须将媒体放在文本之前,并启用模型自带的
聊天模板的解析模式
(chat_template_kwargs = {"enable_thinking": false, "enable_parsing": true}),
该模式会直接渲染媒体 token 后接提示词,不带角色标记。
与所报告的结果一致,解码采用贪心策略,在 <|image_pad|> / <|end_of_text|> 处停止
(stop_token_ids,通过服务器的 /tokenize 端点查找)并保留特殊 token,
这些 token 携带坐标。
原始 OpenAI API 请求
import requests
from openai import OpenAI
# token ids of <|image_pad|> and <|end_of_text|>
stop_token_ids = sorted(requests.post("http://127.0.0.1:8000/tokenize", timeout=60, json={
"model": "Youtu-Parsing-Omni", "prompt": "<|image_pad|><|end_of_text|>",
"add_special_tokens": False}).json()["tokens"])
client = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="EMPTY")
prompt = "Please perform end-to-end document parsing on the provided image. ..." # see prompts json
response = client.chat.completions.create(
model="Youtu-Parsing-Omni",
messages=[{"role": "user", "content": [
{"type": "image_url", "image_url": {"url": "file:///path/to/media/page.png"}},
{"type": "text", "text": prompt},
]}],
temperature=0.0,
max_tokens=32768,
extra_body={
"chat_template_kwargs": {"enable_thinking": False, "enable_parsing": True},
"skip_special_tokens": False,
"min_tokens": 16,
"stop_token_ids": stop_token_ids,
},
)
print(response.choices[0].message.content)
音频文件以 audio_url 发送。对于视频,在
--allowed-local-media-path 之下发送一个 file:// video_url,并将
"mm_processor_kwargs": {"nframes": 64, "use_audio_in_video": true, "use_vision_in_video": true}
添加到 extra_body;随后插件会将音轨与帧一起解码
(见 视频请求)。
Transformers
Transformers 推理需要 transformers==5.10.2
(bash scripts/setup_env.sh --transformers,在与 vLLM 独立的环境中)。
最小示例见 examples/infer_transformers.py:
MODEL=tencent/Youtu-Parsing-Omni
python examples/infer_transformers.py --model $MODEL --task document --media /path/to/media/page.png
python examples/infer_transformers.py --model $MODEL --task natural_image --media /path/to/media/photo.jpg
python examples/infer_transformers.py --model $MODEL --task graphics_chart --media /path/to/media/chart.png
python examples/infer_transformers.py --model $MODEL --task graphics_flowchart --media /path/to/media/flowchart.png
python examples/infer_transformers.py --model $MODEL --task graphics_geometric --media /path/to/media/geometry.png
python examples/infer_transformers.py --model $MODEL --task audio --media /path/to/media/speech.wav
python examples/infer_transformers.py --model $MODEL --task natural_video --media /path/to/media/clip.mp4
python examples/infer_transformers.py --model $MODEL --task textrich_video --media /path/to/media/lecture.mp4
--task 接受与 examples/infer_vllm.py 相同的值,并从
prompts/youtu_parsing_omni.json 中选择提示词;此处媒体路径不
限于 DATA_ROOT。Hub id 会下载到 --download-dir
(默认 ~/.cache/youtu-parsing-omni)。模型使用
trust_remote_code=True 加载,该参数会执行检查点附带的 Python 代码;当
--model 是 HF Mirror Hub id 时,请用 --revision <commit-hash> 固定一个经过审查的提交。
所报告的结果是使用 vLLM(scripts/vllm.sh)生成的。
输出格式
模型以一个围栏 ```json 块作答。坐标使用
相对于 0–1000 网格的专用 token 编码,例如
"bbox": "<box><x_85><y_275><x_1000><y_1000></box>"(左上角 x/y,右下角 x/y);
时间戳使用 HH:MM:SS。每个任务的顶层 modality / subtype 对列在
简介 中;图像任务返回 elements(文档类输出还会返回 reading_order),
音频和视频任务返回时间 segments,每个输出
都有一个 global_description。
{
"modality": "image",
"subtype": "natural_image",
"elements": [
{"id": "e_000", "category": "entity", "bbox": "<box><x_350><y_465><x_590><y_715></box>",
"tag": "snake bookmark", "content": {"text": "", "caption": "A silver snake-shaped bookmark ..."}}
],
"global_description": {"caption": "...", "narrative": "...", "scene": "..."}
}
OmniDocBench 评估
推理在 vLLM 环境中运行;评分通过 Docker 使用官方
OmniDocBench 评估器
(ghcr.io/zeng-weijun/omnidocbench-eval:repro-ubuntu2204)。
MODEL=tencent/Youtu-Parsing-Omni OMNIDOCBENCH=/path/to/OmniDocBench \
OUTPUT_DIR=outputs/omnidocbench_$(date +%Y%m%d_%H%M%S) bash scripts/eval_omnidocbench.sh
OMNIDOCBENCH:包含images/和OmniDocBench.json的数据集目录。GPUS:要使用的 GPU(默认:所有可见 GPU),每个 GPU 一个 vLLM 服务器。- 要恢复运行,请使用现有的
OUTPUT_DIR路径重新运行(不要使用新的时间戳)。 - 输出:预测结果在
<OUTPUT_DIR>/predictions/中,最终报告在<OUTPUT_DIR>/results.md中, 日志在<OUTPUT_DIR>/logs/中。
## Citation
If you find Youtu-Parsing-Omni useful in your research or applications, please consider citing our work:
```bibtex
@article{youtu-parsing-omni,
title = {Youtu-Parsing-Omni: One Encoder, One Schema, Every Modality},
author={Tencent Youtu Lab},
journal = {arXiv preprint arXiv:[TBD]},
year = {2026}
}
@article{youtu-parsing,
title={Youtu-Parsing: Perception, Structuring and Recognition via High-Parallelism Decoding},
author={Tencent Youtu Lab},
year={2026},
eprint={2601.20430},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2601.20430},
}
@article{youtu-vl,
title={Youtu-VL: Unleashing Visual Potential via Unified Vision-Language Supervision},
author={Tencent Youtu Lab},
year={2026},
eprint={2601.19798},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2601.19798},
}
@article{youtu-llm,
title={Youtu-LLM: Unlocking the Native Agentic Potential for Lightweight Large Language Models},
author={Tencent Youtu Lab},
year={2025},
eprint={2512.24618},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2512.24618},
}
致谢
我们感谢以下项目和社区,是它们让 Youtu-Parsing-Omni 成为可能:
来源:腾讯混元模型发布 · hf-mirror.com