DeepEncoder
设计的主要动机
- 能够处理高分辨率
- 高分辨率下低激活值
- 视觉Token数量少
- 支持动态分辨率输入
- 参数量适中
DeepEncoder主要由前后串联两部分组成:窗口注意力的视觉感知特征提取器;稠密注意力的视觉知识特征提取器。为了最大程度的利用先前预训练模型的经验,这里分别采用了SAM-base以及CLIP-Large作为两个特征提取器的。对于CLIP,由于输入不再是原始的图像Patch,所以移除了Patch Embedding,并在前后两个特征提取器中加入了2层 16x下采样卷积.
几个疑问
- SAM起到什么作用?
Window Attention,局部感知+高分辨率输入
- 哪个部分实现低激活值的目的?
在SAM部分采用80M的参数,来保证在较小参数值和激活值。
- 下采样卷积起到什么作用?
原始的4096个token压缩到256个token,减少了输入token的数量,同时减少了CLIP部分的激活值。
每个卷积层的 kernel size 为 3,stride 为 2,padding 为 1,通道数从 256 增加到 1024。
- 如何支持动态分辨率输入的?
| 模型规模 | 分辨率 | Token数量 | 图像处理方式 |
|---|---|---|---|
| Tiny | 512x512 | 64 | resize |
| Small | 640x640 | 100 | resize |
| Base | 1024x1024 | 256 | padding |
| Large | 1280x1280 | 400 | padding |
- Tiny和Small分辨率小,直接按照原比例缩放
- Base和Large保持原始图像的宽高比,图像会被填充至对应尺寸
DeepEncoder主要由前后串联两部分组成:窗口注意力的视觉感知特征提取器;稠密注意力的视觉知识特征提取器。为了最大程度的利用先前预训练模型的经验,这里分别采用了SAM-base以及CLIP-Large作为两个特征提取器的。对于CLIP,由于输入不再是原始的图像Patch,所以移除了Patch Embedding,并在前后两个特征提取器中加入了2层 16x下采样卷积.
MoE Decoder
Decoder部分采用 DeepSeek-3B-MoE,解码器采用DeepSeek-3B-MoE。推理时模型从64个路由专家中激活6个,并额外激活2个共享专家,激活参数约为0.57B。解码器从 DeepEncoder 压缩后的潜在视觉 token 中重建原始文本表示:
其中 \(\mathbf{Z}\) 表示来自DeepEncoder的压缩视觉表示,而 \(\hat{\mathbf{X}}\) 是重建的表示,而 \(f_{\text{dec}}\) 表示MoE Decoder,用于通过OCR的训练来学习压缩视觉表示。
Data Engine 数据引擎
OCR 1.0 data:包含场景图OCR以及文档OCR数据
OCR 2.0 data:
OCR 1.0 Data
中英文语料共计25M页,其他语言页面5M页。建立了两类ground truth,粗粒度的标注和细粒度的标注。
- 粗粒度标注使用fitz提取,目的是教会模型识别光学图像文本,特别针对小语种。
- 细粒度标注中英文各2M页,使用 PP-DocLayout 或者MinerU等构建检测与识别交错的数据。
DeepSeekOCR 训练时,通过不同提示区分粗粒度标注与细粒度标注,精细标注的图文对真值见图 5。我们还采集了 300 万条 Word 数据,直接提取内容构建无版式的高质量图文对,主要提升公式与 HTML 表格效果。此外,我们选取部分开源数据 [28, 37] 作为补充。
自然场景OCR,我们的模型主要支持中文和英文。图像数据来源为LAION 和Wukong,使用PaddleOCR进行标注,中文和英文各有1000万数据样本。与文档OCR类似,自然场景OCR也可以通过提示控制是否输出检测框。
OCR 2.0 Data
图表、化学公式、平面解析几何作为OCR 2.0数据。
- 图表数据(10M)。使用pyechartsg渲染10M张图像,包括折线图、柱状图、饼图和组合图。并将图表理解作为图像到HTML表格的转换任务。
- 化学公式(5M)。使用来自PubChem的SMILES格式作为数据源,并用RDKit渲染为图像,构建了5M的图文对。
- 平面几何(1M)。遵循 Slow Perception 的方法。使用perception-ruler大小为 4 来建模每条线段。为了提升渲染数据的多样性,引入了几何平移不变性来做数据增强:将同一几何图形在原始图像中平移,对应在坐标系中心位置绘制的相同标注。共构建了 100 万条平面几何解析数据,
通用视觉数据
参考 DeepSeek-VL2,为字幕、检测和定位等任务生成了相关数据。DeepSeek-OCR 并非通用 VLM 模型,这部分数据仅占总数据的 20%。我们引入这类数据主要是为了保留通用视觉接口,以便未来对我们模型和通用视觉任务感兴趣的研究人员能够方便地推进
文本数据
为确保模型的语言能力,我们引入了 10% 的自有纯文本预训练数据,所有数据均被处理为 8192 个 token 的长度,也是 DeepSeek-OCR 的序列长度。
训练流水线
训练流程包括两个阶段,a). 独立训练 DeepEncoder;b). 训练 DeepSeek-OCR。
训练DeepEncoder
使用一个紧凑的语言模型(opt)来以 next token prediction 方式训练 DeepEncoder。使用上述 OCR 1.0 和 2.0 数据,以及从 LAION 数据集中采样的 100M 条通用数据。所有数据训练 2 个 epoch,批次大小为 1280,使用带有余弦退火调度器的 AdamW 优化器,学习率为 5e-5。训练序列长度为 4096。
训练完整的DeepSeek-OCR。使用所有数据训练 DeepSeek-OCR,整个训练过程在HAI-LLM平台上进行。整个模型采用流水线并行PP,划分为4个部分:DeepEncoder 占2部分,解码器占2部分。
- 把 SAM 和压缩器(下采样卷积)视为视觉Tokenizer,放在 PP0 并冻结其参数
- 把 CLIP 部分视为输入嵌入层,放在 PP1 并保持权重可训练
- 语言模型部分,由于 DeepSeek3B-MoE 有 12 层,PP2和PP3各放置6层
训练使用 20 个节点,每个节点 8 张 A100-40G GPU。数据并行(DP)为 40,全局 batch size 为 640。优化器采用 AdamW,并使用基于 step 的调度器,初始学习率为 3e-5
Checkpoint
DeepSeek-Ocr解读:
- https://xie.infoq.cn/article/3a244a7f9564233519fcdca5f
- https://zhuanlan.zhihu.com/p/81845230473
SAM 模型结构:https://zhuanlan.zhihu.com/p/661793344
Navit的讨论,如何变分辨率:
- https://zhuanlan.zhihu.com/p/30276134009
- https://zhuanlan.zhihu.com/p/718515978
大模型的分辨率
- 大模型的位置编码 https://zhuanlan.zhihu.com/p/650469278
LLM+推荐/搜索
- OneSearch: A Preliminary Exploration of the Unified End-to-End Generative Framework for E-commerce Search
- OneSug: The Unified End-to-End Generative Framework for E-commerce Query Suggestion
