从 ViT 到 M-RoPE:TeleOCR 的 1.2B 架构里藏着哪些细节
从 ViT 到 M-RoPETeleOCR 的 1.2B 架构里藏着哪些细节【免费下载链接】TeleOCR项目地址: https://ai.gitcode.com/XingChen-AGI/TeleOCR当 OmiDocBench 榜单上出现一个只有 1.2B 参数的模型以 96.87 的综合得分压过 235B 的 Qwen3-VL89.78和 GPT-5.286.52时绝大多数人的第一反应是这不科学。参数差了近两百倍凭什么能在文本识别、表格还原、公式转写这些硬指标上全面反超答案不在魔法里而在架构细节中。TeleOCR 并非从零发明了一套新范式而是站在 Qwen2.5-VL 的肩膀上把轻量二字做到了极致32 层窗口注意力 ViT 负责把像素吃干榨净28 层 GQA Decoder 用 M-RoPE 三维位置编码把版面几何关系编码进注意力再用 4 倍 token 压缩的 PatchMerger 把视觉特征廉价地喂给语言模型。这篇文章直接翻开仓库源码逐行拆解这份 1.2B 的参数预算到底花在了哪里。一张 config.json 看懂 1.2B 的参数分布TeleOCR 的完整配置都写在仓库根目录的 config.json 里。用hidden_size × 层数粗算一下参数体量模块关键配置参数规模ViT 视觉编码器depth32hidden_size1280intermediate_size342016 头≈ 6 亿Decoder 语言模型28 层hidden_size1024intermediate_size307216 头≈ 5 亿PatchMerger Embeddingout_hidden_size1024词表 151936tie_word_embeddingstrue≈ 1.5 亿共享后大幅压缩这份配置最扎眼的地方在于语言模型的 hidden_size1024刻意做得比视觉编码器1280小这不同于多数 VLM语言侧为主的惯例。文档解析的瓶颈在看懂版面而非生成文本把算力向视觉侧倾斜是 1.2B 能打 235B 的第一个信号。同时tie_word_embeddings: trueconfig.json 第 95 行让词表 embedding 与 LM Head 权重共享151936 词表的词嵌入只存一份为 Decoder 侧又省下近亿参数。32 层 ViT窗口注意力 每隔 8 层一次的全局拥抱视觉编码器的实现在 modeling_naviocr.py 的Qwen2_5_VisionTransformerPretrainedModel第 307 行中。整条流水线是Conv3d Patch Embed → 32 层 Vision Block → PatchMerger。Patch Embed 是一个 3D 卷积。Qwen2_5_VisionPatchEmbed第 68 行用temporal_patch_size2, patch_size14的 Conv3d 直接把输入的 RGB 像素切成 14×14 的 patch每 2×14×14 的体素块映射成 1280 维向量。对单张文档图来说temporal 维取 2 是为了与 Qwen2.5-VL 的视频预训练结构对齐保持权重可继承。注意力是窗口 全局的混合。32 层并非全部做全局注意力fullatt_block_indexes配置为[7, 15, 23, 31]config.json即每隔 7 层才做一次全局注意力其余 28 层全部限制在局部窗口内。窗口的计算逻辑在get_window_index第 366 行vit_merger_window_size self.window_size // self.spatial_merge_size // self.patch_size # 112 // 2 // 14 4即每个窗口覆盖 4×4 个合并后的 patch再结合 forward 循环中的分派逻辑第 448-452 行for layer_num, blk in enumerate(self.blocks): if layer_num in self.fullatt_block_indexes: cu_seqlens_now cu_seqlens # 全局注意力 else: cu_seqlens_now cu_window_seqlens # 4×4 窗口注意力这套设计对文档场景极其关键一个 1036×1036 的分辨率下ViT 会产生 5476 个 patch token全局注意力是 O(N²) 的平方开销而 4×4 窗口把每次注意力的视野锁死在相邻 16 个 token 内28 层窗口 4 层全局的组合让模型用约 1/8 的注意力预算拿到了局部纹理精细、全局结构在场的版面理解能力。文档 OCR 恰好是这种需求的完美匹配字符细节靠局部阅读顺序与表格行列结构靠全局。PatchMerger 是 4 倍 token 压缩器。视觉特征在进入语言模型前要经过Qwen2_5_VLPatchMerger第 108 行self.hidden_size context_dim * (spatial_merge_size**2) # 1280 * 4 5120 self.ln_q Qwen2RMSNorm(context_dim, eps1e-6) self.mlp nn.Sequential( nn.Linear(self.hidden_size, self.hidden_size), nn.GELU(), nn.Linear(self.hidden_size, dim), # 5120 → 1024 )spatial_merge_size2意味着每 2×2 相邻 patch 被打包成一个 5120 维的向量经 LN 两层 MLP 压缩回语言模型的 1024 维。token 数直接除以 4一张 1036×1036 的图从 5476 个视觉 token 降到 1369 个KV Cache 和自回归解码的长度压力同步缩减——这是 1.2B 模型能把 4096 个新 token 的生成控制在消费级显卡上的直接原因。28 层 DecoderGQA 省显存M-RoPE 管几何视觉特征压缩完毕后进入 28 层Qwen2_5_VLDecoderLayer。两个最值得展开的细节GQA 和 M-RoPE。GQAGrouped Query Attention16 个头共享 8 组 KV。在Qwen2_5_VLAttention第 615 行中配置明确num_attention_heads16, num_key_value_heads8self.num_key_value_groups self.num_heads // self.num_key_value_heads # 2 self.q_proj nn.Linear(self.hidden_size, self.num_heads * self.head_dim, biasFalse) self.k_proj nn.Linear(self.hidden_size, self.num_key_value_heads * self.head_dim, biasFalse) self.v_proj nn.Linear(self.hidden_size, self.num_key_value_heads * self.head_dim, biasFalse)KV 头数减半意味着每层 KV Cache 减半。文档解析的生成序列动辄数千 token公式、表格展开都很长KV 占用随序列线性增长GQA 在这里省下的不是几个百分点而是把长序列解码从显存爆炸拉回可部署的直接手段。另一处细节是q_norm/k_norm第 656-657 行query 和 key 在进入注意力前各自过一层 Qwen3RMSNormRMSNorm 应用到 head 维度这是 Qwen3 系模型训练稳定性增强的标配被完整继承了下来。M-RoPE三维位置编码让注意力知道版面长什么样。这是全文最核心的机制。先看位置编码的生成Qwen2_5_VLRotaryEmbedding.forward第 516 行把频率矩阵扩展成 3 份inv_freq_expanded self.inv_freq[None, None, :, None].float().expand(3, position_ids.shape[1], -1, 1)而apply_multimodal_rotary_pos_emb第 549 行按mrope_section把隐藏维度切成三段分别旋转mrope_section mrope_section * 2 # [16, 24, 24] → [32, 48, 48] cos torch.cat([m[i % 3] for i, m in enumerate(cos.split(mrope_section, dim-1))], dim-1)配置中的mrope_section: [16, 24, 24]config.json 第 23 行配合rope_theta: 1000000.0含义是128 维的 head 中前 16 维承载时序位置随后各 24 维分别承载高度、宽度方向的位置三者用不同频率的旋转角编码。文本 token 的三个位置索引相同退化为普通 1D RoPE而图像 token 的位置索引来自_get_vision_position_ids逻辑第 1064-1146 行position_ids torch.ones(3, input_ids.shape[0], input_ids.shape[1], ...) # 对每个图像 patch token 生成 (t_index, h_index, w_index) 三元组 llm_pos_ids_list.append(torch.stack([t_index, h_index, w_index]) text_len st_idx)最终传入 Decoder 的position_ids是(3, batch, seq)的张量视觉 token 的每个维度位置各不相同。这意味着注意力在做 Q·K 计算时旋转相位差里天然编码了这两个 patch 在纸面上相距多高、多宽。对弯折、透视变形的手机拍摄文档来说模型不需要显式的矫正模块位置编码本身就承载了扭曲的几何关系——这正是 README 里无需 dewarping 预处理的直接架构根源。顺带一提Decoder 的 MLP 用的是 SwiGLU 结构Qwen2MLP第 533 行gate/up/down 三投影 silu 门控FFN 比 Vision 侧多一组投影是标准 Qwen 系配方此处不赘述。动态分辨率适配与贪心解码精度与速度的平衡术分辨率不是固定死的。仓库的 preprocessor_config.json 给出了两个关键阈值min_pixels: 3136、max_pixels: 12845056。Qwen2VLImageProcessor 会根据输入图的长宽比在上下限之间把图缩放到像素数恰好达标的尺寸再切成 patch。1.2B 模型之所以能同时处理数字文档与手机实拍图正是因为这层动态缩放分辨率上限开到 1280 万像素约 3584×3584足够承载弯折文档中变形字符的细节下限 3136 又保证小图不会被过度上采样。README 的 Quick Start 中布局示例统一resize((1036, 1036))只是为了演示实际推理完全交给 processor 按像素预算动态决定。生成阶段直接用贪心解码。仓库 generation_config.json 里do_sample: true、temperature: 0.1、top_k: 1的参数组合本质上是极低温采样而 README 官方推理代码README.md 第 339-344 行更进一步output_ids model.generate( **inputs, use_cacheTrue, max_new_tokens4096, do_sampleFalse, # 贪心解码逐 token 取 argmax )do_sampleFalse意味着每个 token 都是当前条件下概率最大的那个输出完全确定、可复现。对 OCR 这类答案唯一的任务采样带来的随机性只会引入字符漂移而贪心配合repetition_penalty: 1.05抑制长公式、长表格序列中的复读在确定性之外把质量下限兜住。这也是社区实测中同一张图多次推理结果一致的直接原因——对生产流水线的后处理解析比如把 OTSL 转 HTML来说确定性输出意味着整条管线可以稳定复现。结构化的确定性不止体现在解码表格输出走 OTSL 中间格式README 中仅 6 个特殊 token 描述单元格与行列跨度由后处理函数convert_otsl_to_html确定性地转成 HTML绕开了让模型直接生成 HTML 的语法错误风险公式输出则由后处理统一包装成$$...$$块README 第 312-317 行。架构上省参数、解码上保确定两条线合起来才凑出了轻量 高分的完整答案。1.2B 打 235B参数的乘法效应最后回到那个不科学的榜单。以 README.md 公布的 OmniDocBench v1.6 数据看模型参数量Overall ↑Table TEDS ↑Read Order Edit ↓TeleOCR1.2B96.8797.050.122Qwen3-VL-235B235B89.7883.070.166GPT-5.2—86.5282.950.193235B 的通用大模型在表格结构还原这一项上被 1.2B 的专用模型拉开 14 个点原因恰恰是本文拆出的这些细节窗口注意力让视觉侧在有限参数下看到了足够多的 patch 细节M-RoPE 把版面几何直接烙进位置编码GQA PatchMerger 贪心解码把算力和显存省下来投给更长的序列和更高的分辨率。同样的结论也出现在 Wild_OmniDocBench88.53第一、PureDocBenchClean 86.90第一和 ICDAR2026 Sci-ImageMiner加权 41.81第一上——弯折文档、退化文档这些脏活累活正是几何感知建模最占优势的战场。1.2B 的架构说明了一件事在文档解析这个垂直赛道上架构和数据的针对性比无脑堆参数量更接近正确答案。而这份答案的全部细节都摊开在仓库的 1754 行模型代码与 141 行配置里任何人随时可以翻开对照。【免费下载链接】TeleOCR项目地址: https://ai.gitcode.com/XingChen-AGI/TeleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

XERJ语义搜索完全指南:semantic_text字段与neural嵌入模式怎么配才对?

XERJ语义搜索完全指南:semantic_text字段与neural嵌入模式怎么配才对?

XERJ语义搜索完全指南:semantic_text字段与neural嵌入模式怎么配才对? 【免费下载链接】xerj XERJ is the new way for AI to search data. Its autoindex capability activates agents to know your data without the token waste of grep and sed. One…

2026/10/16 14:55:10 阅读更多 →
MLP还是Attention?Qwen3.8-27B-singprobe两种探针结构(SingProbeMlpModel vs SingProbeAttnModel)深度对比

MLP还是Attention?Qwen3.8-27B-singprobe两种探针结构(SingProbeMlpModel vs SingProbeAttnModel)深度对比

【免费下载链接】Qwen3.8-27B-singprobe 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Qwen3.8-27B-singprobe 点击查看 免费下载 Qwen3.8-27B-singprobe 是 inclusionAI 推出的轻量级大模型安全探针(Probe),基于 Q…

2026/10/16 14:55:10 阅读更多 →
Python TCP断线重连实战:原理、策略与避坑指南

Python TCP断线重连实战:原理、策略与避坑指南

做网络编程时间久了,你会发现一个很尴尬的事实——TCP连接断没断,你的代码多半是最后一个知道的。服务端崩了、网线被拔了、路由半夜重启了,客户端这边往往还在傻乎乎地等着收数据,直到超时或报错才如梦初醒。更麻烦的是&#xff…

2026/10/16 14:55:10 阅读更多 →

最新新闻

企业级LLM大模型落地实战:从微调对齐到生产安全

企业级LLM大模型落地实战:从微调对齐到生产安全

简介:这是一份面向AI工程师、机器学习工程师、数据科学家及科研人员的《企业级生成式人工智能LLM大模型技术、算法及案例实战》PDF电子书。内容以2024年7月线上高级实训班为骨架,系统覆盖Generative AI原理本质、工业级Prompting、Llama 2/3模型深度解密…

2026/10/16 15:30:50 阅读更多 →
飞机性能计算Matlab代码:从飞行数据反解气动系数实现

飞机性能计算Matlab代码:从飞行数据反解气动系数实现

简介:这是一份由Jon Borman在长期学术与职业实践中整理的开源编码样本合集,内容涵盖飞机性能计算、空气动力学、数据处理等方向,适合航空工程学习者、CFD初学者以及Matlab、Fortran、Python开发者参考。压缩包共包含59个文件,整体…

2026/10/16 15:30:50 阅读更多 →
高光谱图像Matlab读取:从ENVI头文件到BSQ/BIL/BIP正确解析

高光谱图像Matlab读取:从ENVI头文件到BSQ/BIL/BIP正确解析

简介:面向高光谱图像学习与研究者的MATLAB读取与处理工具包,适合刚接触遥感影像、需要将TIFF格式多波段数据导入MATLAB进行分析的初学者,也可作为高校遥感、农业、地质与环境科学相关课程的上手素材。压缩包共6个文件,包含MATLAB脚…

2026/10/16 15:30:50 阅读更多 →
强化学习入门实战:GridWorld与Q-learning可替换实例

强化学习入门实战:GridWorld与Q-learning可替换实例

简介:这份强化学习实例面向零基础或初学强化学习的开发者,提供可直接运行的乒乓球对战模拟环境,帮助理解智能体如何通过与环境交互不断优化击球策略。压缩包共10个文件,以6个pth模型权重、3个py脚本和1个pyc缓存文件为主&#xff…

2026/10/16 15:30:50 阅读更多 →
语音合成 Mod 实战:拆包、接入、调参与避坑

语音合成 Mod 实战:拆包、接入、调参与避坑

简介:面向 FreeSWITCH 语音业务开发者和运维人员,这是一份基于阿里云 TTS 的扩展放音模块,可在拨号方案的播放动作中直接引用合成语音,替代传统音频文件,满足 IVR 欢迎语、通知播报等场景的动态播报需求。模块内置两种…

2026/10/16 15:30:50 阅读更多 →
Iris-3B图像修复与4倍超分教程:一步生成式修复模糊退化老照片

Iris-3B图像修复与4倍超分教程:一步生成式修复模糊退化老照片

人工智能大模型基础模型媒体生成计算机视觉 【免费下载链接】iris-3b 项目地址: https://ai.gitcode.com/hf_mirrors/speridlabs/iris-3b 点击查看 免费下载 Iris-3B 是一款 30 亿参数的像素空间生成模型,它的超分辨支模型支持一步图像修复与 4 倍超分&…

2026/10/16 15:29:49 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →