☰
DeepSeek-OCR-2动态分辨率揭秘:(0-6)×768切块+1024全局视图如何平衡精度与视觉Token成本
2026/9/26 15:44:53 网站建设 项目流程

DeepSeek-OCR-2动态分辨率揭秘:(0-6)×768切块+1024全局视图如何平衡精度与视觉Token成本

【免费下载链接】DeepSeek-OCR-2Visual Causal Flow项目地址: https://gitcode.com/gh_mirrors/de/DeepSeek-OCR-2

DeepSeek-OCR-2是 DeepSeek 开源的文档 OCR 模型,它最聪明的成本控制手段就是动态分辨率:把任意尺寸的图片自适应地拆成 0~6 块 768×768 局部切块,再加 1 张 1024×1024 全局视图,把视觉 Token 稳稳压在256~1120之间。这篇文章带你彻底看懂这套机制如何"既读得清小字,又不烧 Token"。

🤔 为什么文档 OCR 需要动态分辨率?

用大模型做 OCR 时,图片要先变成视觉 Token再进模型,而 Token 是按"字"计费算成本的。固定分辨率有两大硬伤:

  • 整图缩小到 1024 硬塞:一页 A4 文档塞进 1024×1024,细字直接糊成马赛克,识别率暴跌;
  • 整图切满全分辨率小块:Token 数量随页面尺寸无上限膨胀,8K 长图轻松吃掉上万个 Token,显存和延迟双杀。

动态分辨率的目标很明确:小图少花 Token,大图锁死 Token 上限,同时保住文字细节。

⚙️ (0-6)×768 + 1024 的三步拆解流程

这套机制的核心实现在 image_process.py 的dynamic_preprocess函数中,由 config.py 里的几个常数驱动:

BASE_SIZE = 1024 # 全局视图尺寸 IMAGE_SIZE = 768 # 局部切块尺寸 MIN_CROPS = 2 # 最小切块数 MAX_CROPS = 6 # 最大切块数(硬上限)

第 1 步|比例感知:选最接近原图的 i×j 网格

程序先算出原图宽高比,然后在所有满足2 ≤ i×j ≤ 6的网格组合中,挑选与原始比例差距最小的那个。也就是说:横长的图就切 3×2,竖长的图就切 2×3,绝不变形拉伸。

第 2 步|局部视图:最多 6 块 768×768 高清切片

选定网格后,原图被等比缩放到i×768 × j×768,再均匀切成 768×768 的正方形切片,交给视觉编码器精细"逐字认读"。如果原图本身就很小(宽、高均 ≤ 768),则直接跳过切块——这就是标题里"(0-6)"中0的由来:小图一分钱切块成本都不花。

第 3 步|全局视图:一张 1024×1024 的"版面地图"

与此同时,整页图片会被整体缩放填充成一张1024×1024的全局视图。它分辨率不高,但保留了完整的版面信息:标题在哪、段落顺序如何、有没有表格和图片。局部切片负责"看清每个字",全局视图负责"看懂整页结构",两者各司其职。

上图即官方论文中的 DeepEncoder V2 架构:左侧 80M 的 SAM 分词器做非因果特征提取,右侧用 500M 的 Qwen2 语言模型以因果方式充当视觉编码器,这正是模型名"Visual Causal Flow"的由来,完整推导可阅读 DeepSeek_OCR2_paper.pdf。

🧮 视觉 Token 成本账:从 256 到 1120

Token 数量由 deepseek_ocr2.py 中的get_num_image_tokens精确计算,规则非常干净:

  • 视觉特征以16×16 像素为 patch,再经4 倍下采样;
  • 1024 全局视图 → (1024/16)/4 = 16,即 16×16 =256 个 Token;
  • 每块 768 切片 → (768/16)/4 = 12,即 12×12 =144 个 Token。
输入图片局部切块数视觉 Token 总量
≤768×768 小图0 块256
中等文档(约 3 块)3 块256 + 3×144 =688
大文档(触顶 6 块)6 块256 + 6×144 =1120

(模型还会追加 1 个视图分隔 Token,用于区分局部与全局特征。)

关键在最后一行:无论页面多大,Token 上限被MAX_CROPS = 6死死锁在 1120。不做上限的朴素切块方案,处理 8K 长页面可能需要 60+ 块、近万 Token;而这里的成本从第一天起就可预测、可预算。

⚖️ 为什么这个组合恰好是平衡点?

  1. 全局低清 + 局部高清,精度不妥协:文字识别靠 768 高清切片,版面理解靠 1024 全局图,"字"和"结构"两条信息链路都不缺;
  2. 小图极致省钱:768 以内的小图只消耗 256 个视觉 Token,比正文 Token 还便宜,适合批量处理截图、票据;
  3. 上限封顶,成本可控:切块数 2~6 由MIN_CROPS/MAX_CROPS约束,批量推理时显存占用稳定,config.py 中还提供了MAX_CONCURRENCY等并发旋钮;
  4. 比例自适应,杜绝拉伸伪影:网格始终贴合原始宽高比,避免文字被压扁变形导致识别错误。

🚀 快速上手:三条命令跑通

环境要求:CUDA 11.8 + PyTorch 2.6.0 + vLLM 0.8.5。

git clone https://gitcode.com/gh_mirrors/de/DeepSeek-OCR-2 conda create -n deepseek-ocr2 python=3.12.9 -y pip install -r requirements.txt

方式一:vLLM 推理(推荐,支持流式输出)

cd DeepSeek-OCR2-master/DeepSeek-OCR2-vllm python run_dpsk_ocr2_image.py # 图片识别 python run_dpsk_ocr2_pdf.py # PDF 并发处理

方式二:HuggingFace Transformers 推理

动态分辨率的三个核心参数在 run_dpsk_ocr2.py 中一目了然:

res = model.infer(tokenizer, prompt=prompt, image_file=image_file, base_size=1024, image_size=768, crop_mode=True)

两种常用 Prompt(见 config.py):

  • 文档转 Markdown:<image>\n<|grounding|>Convert the document to markdown.
  • 自由 OCR(保留原始顺序):<image>\nFree OCR.

📂 机制在源码里的位置一览

想了解什么去哪里看
1024/768/切块上下限配置config.py
动态切块与网格选择逻辑process/image_process.py
视觉 Token 数量精确计算deepseek_ocr2.py
局部/全局特征融合与分隔 Tokendeepseek_ocr2.py
HF 推理入口run_dpsk_ocr2.py
vLLM 图片推理入口run_dpsk_ocr2_image.py
论文原文DeepSeek_OCR2_paper.pdf

写在最后

DeepSeek-OCR-2 的动态分辨率本质上是一次Token 经济学的设计:用"1 张 1024 全局图 + 最多 6 块 768 高清图"的组合拳,让视觉 Token 花费从"随图片大小无限膨胀"变成"256 起步、1120 封顶"的固定区间。对于要批量处理文档、又在意推理成本的团队来说,这套机制值得直接抄进自己的多模态管线里。

【免费下载链接】DeepSeek-OCR-2Visual Causal Flow项目地址: https://gitcode.com/gh_mirrors/de/DeepSeek-OCR-2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询