DeepSeek 又双叒叕出圈了!
最新发布的 DeepSeek-OCR 刷爆外网,直接冲上 X 热搜。
网友们已经夸疯了。
卡神 Andrej Karpathy 发帖评价:
老马也闪现他的评论区加入讨论:
不到 24 小时,GitHub 星标就突破 4.3k ,还在快速增长中。
不得不说,过去一年来的 OCR 领域就跟下面的表情包一样。
那这次爆火的 DeepSeek-OCR 究竟有什么不同?
指路链接:
GitHub :
https://github.com/deepseek-ai/DeepSeek-OCR
Hugging Face :
https://huggingface.co/deepseek-ai/DeepSeek-OCR
论文链接:
https://github.com/deepseek-ai/DeepSeek-OCR/blob/main/DeepSeek_OCR_paper.pdf
一、上下文光学压缩
DeepSeek-OCR 是一个从 LLM 出发,研究视觉编码器作用的模型,旨在探索视觉文本压缩的边界。
核心目标是:用视觉模态(图像)来压缩长文本上下文,从而解决 LLM 处理长文本时计算量过大的问题。
这种"光学上下文压缩"可以让模型用更少的 token 保留长文本信息。
类似于模型可以像看图一样去"看"文字,不用再一行行去"读"。
取得的成效
用更少的视觉token达到更高精度。
实验数据表明:当文本 token 数量在视觉 token 的 10 倍以内(即压缩率 <10×)时,模型可以实现 97% 的解码(OCR)精度。
即使在 20× 的压缩比下,OCR 精度仍保持在 60% 左右。
除此之外,DeepSeek-OCR 还展现出很高的实用价值。
在 OmniDocBench 基准测试上,它仅使用 100 个视觉 token 就超过了 GOT-OCR2.0(256 个 token /页)。使用不到 800 个视觉 token 就优于 MinerU2.0(平均每页 6000+ 个 token )。
在实际生产中,单张 A100-40G GPU 每天可生成超过 20 万页的 LLM/VLM 训练数据。
这些数据有力地证明了:把图像作为大模型的"信息压缩介质",可以实现 7–20× 级别的上下文压缩。
该结果在 LLM 上的历史长上下文压缩和记忆遗忘机制等研究领域显示出相当大的前景。
接下来,一起来看看 DeepSeek-OCR 是怎么做到的。
二、论文细解
架构
DeepSeek-OCR 使用由编码器和解码器组成的统一端到端 VLM 架构。
DeepSeek-OCR = DeepEncoder + DeepSeek3B-MoE
DeepEncoder 负责提取图像特征并将其压缩为视觉 token。
解码器用于根据视觉 token 和提示生成所需的结果。
参数规模
DeepEncoder 的参数约为 380M ,主要由一个 80M 大小的 SAM-base 和一个 300M 规模的 CLIP-large 串联组成。解码器采用 3B MoE 架构,激活参数为 570M 。
训练流程
主要包括两个阶段:
独立训练 DeepEncoder 训练 DeepSeek-OCR
训练 DeepEncoder
遵循 Vary 方法,团队采用了一个紧凑的语言模型并且使用下一个 Token 预测的框架来进行训练。
所有数据共训练 2 个 epoch ,使用带有余弦退火调度器的 AdamW 优化器进行训练,批处理大小为 1280 ,学习率为 5e-5 。训练序列长度为 4096 。
训练 DeepSeek-OCR
接着在 HAI-LLM 平台上采用了流水线并行( PP )训练整个模型,一共分为了 4 部分。
对于 DeepEncoder,团队将 SAM 和压缩器视为视觉 Tokenizer,放在 PP0 上并冻结其参数;同时将 CLIP 部分视为输入嵌入层,放置在具有未冻结权重的 PP1 中进行训练。
对于语言模型部分,由于 DeepSeek3B-MoE 有 12 层,团队在 PP2 和 PP3 上各放置 6 层。
模型一共使用了 20 个节点 (每个节点配备了 8 个 A100-40G GPU ) 进行训练,数据并行 ( DP ) 度为 40,全局批处理大小为 640 。优化器仍然使用的是 AdamW,配合基于步进的调度器,初始学习率为 3e-5。
对于纯文本数据,训练速度为 90B token /天。对于多模态数据,训练速度为 70B token /天。
实验结果
在视觉文本压缩能力方面,团队选择了 Fox 基准测试进行评估。
对于 Fox 的英文文档部分,团队使用 DeepSeek-OCR 的分词器对基本实况文本进行标记化(词汇量约为 129k ),并选择具有 600-1300 个 token 的文档进行测试。由于文本标记的数量不大,团队只需要在 Tiny 和 Small 模式下测试性能,其中 Tiny 模式对应 64 个 token ,Small 模式对应 100 个 token 。
可以看到,在 10×的压缩比内,模型的解码精度可以达到 97%左右。
论文认为:未来,通过文本到图像的方法,或许可以实现近 10×无损上下文压缩。
当压缩比超过 10×时,性能开始下降,论文认为背后的原因可能有两个:一是长文档的布局变得更加复杂,另一个原因可能是长文本在 512×512 或 640×640 分辨率时变得模糊。
第一个问题可以通过将文本渲染到单个布局页面上来解决,而第二个问题将成为遗忘机制的一个特征。该遗忘机制在后文会进行介绍。
当将代币压缩近 20× 时,精度仍然可以接近 60% 。
这些结果表明,光学上下文压缩是一个非常有前途和值得研究的方向,这种方法不会带来任何开销,因为它可以利用 VLM 基础设施,多模态系统本质上需要一个额外的视觉编码器。
定性研究
深度解析
深度解析是指 DeepSeek-OCR 模型同时具备布局和 OCR 2.0 功能,使其能够通过辅助模型调用进一步解析文档中的图像,包括图表、几何、化学式甚至自然图像。
多语言识别
对于 PDF 文档,DeepSeek-OCR 可以处理近 100 种语言。并且多语言文档同样支持布局和非布局 OCR 格式。
通用视觉理解
DeepSeek-OCR 保留了在一般视觉理解方面的能力,主要包括图像描述、物体检测等。
同时,由于包含纯文本数据,DeepSeek-OCR 的语言功能也得以保留。注意,由于模型训练不包括 SFT(监督微调)阶段,因此该模型不是聊天机器人,某些功能需要完成提示才能激活。
"光学遗忘机制"
人类记忆会随时间衰减,视觉感知会随空间距离下降,两者都表现出类似的渐进式信息丢失模式。
论文受这样的自然平行关系启发,提出对于较旧的上下文,可以逐步缩小渲染图像的大小,以进一步减少令牌消耗。
通过结合这些机制,上下文光学压缩方法实现了一种反映生物遗忘曲线的记忆衰减形式,其中最新信息保持高保真度,而遥远的记忆会随着压缩比的增加而自然消失。
该方法提出了一条通往理论上无限上下文架构的途径,有待开展进一步的研究。
三、快速上手
安装
团队使用的环境是 cuda11.8+torch2.6.0 。
克隆此存储库并导航到 DeepSeek-OCR 文件夹:
git clone https://github.com/deepseek-ai/DeepSeek-OCR.git
建立虚拟环境并激活:
conda create -n deepseek-ocr python=3.12.9 -y
conda activate deepseek-ocr
下载 vllm-0.8.5 whl :
pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu118
pip install vllm-0.8.5+cu118-cp38-abi3-manylinux1_x86_64.whl
pip install -r requirements.txt
pip install flash-attn==2.7.3 --no-build-isolation
注意: 如果希望 vLLM 和 transformers 代码在同一个环境中运行,则无需担心此安装错误,例如:vllm 0.8.5+cu118 需要 transformers>=4.51.1
vLLM-推理
VLLM
注意: 更改 DeepSeek-OCR-master/DeepSeek-OCR-vllm/config.py 中的 INPUT_PATH/OUTPUT_PATH 和其他设置。
cd DeepSeek-OCR-master/DeepSeek-OCR-vllm
图像:流输出
python run_dpsk_ocr_image.py
pdf:并发性~2500tokens/s(A100-40G)
python run_dpsk_ocr_pdf.py
基准的批量评估:
python run_dpsk_ocr_eval_batch.py
Transformers-推理
from transformers import AutoModel, AutoTokenizer
import torch
import os
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
model_name = 'deepseek-ai/DeepSeek-OCR'
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModel.from_pretrained(model_name, _attn_implementation='flash_attention_2', trust_remote_code=True, use_safetensors=True)
model = model.eval().cuda().to(torch.bfloat16)
# prompt = "<image>\nFree OCR. "
prompt = "<image>\n<|grounding|>Convert the document to markdown. "
image_file = 'your_image.jpg'
output_path = 'your/output/dir'
res = model.infer(tokenizer, prompt=prompt, image_file=image_file, output_path = output_path, base_size = 1024, image_size = 640, crop_mode=True, save_results = True, test_compress = True)
四、最后
DeepSeek-OCR 模型成功验证了上下文光学压缩的可行性,可以有效地从少量的视觉标记中解码出数量超过 10 倍的文本标记,大力促进未来 VLM 和 LLM 的发展。
未来团队还将进行数字光学文本交错预训练、needle-in-a-haystack 测试以及其他评估。
这篇论文真挺有看头的,有兴趣的小伙伴抓紧去看看吧~
>/ 本期作者:Tashi & JackCui
>/ JackCui:AI领域从业者,毕业于东北大学,大厂算法工程师,热爱技术分享。
没有评论:
发表评论