OCR 模型

FireRed-OCR 2B 模型:文档解析的 SOTA 时刻,超越 397B 大模型

2026 年 3 月 6 日 15 分钟阅读
FireRed-OCR Logo

小红书开源了 FireRed-OCR,2B 参数模型在 OmniDocBench v1.5 拿到 92.94%。什么概念?超过 Qwen3.5-397B(90.80%)、Gemini-3.0 Pro(90.33%)。Apache 2.0 协议,代码和权重都能商用。

一、文档解析的"结构幻觉"痛点

通用大模型读 PDF 时有个通病:文字认得准,结构全乱套。

结构幻觉示例

典型场景:

这不是偶发 bug。通用 VLM 训练时更擅长生成语义连贯的文字,对文档的像素级空间结构缺乏精确约束。

FireRed-OCR 的思路很直接:把通用 VLM 改造成"结构工程师",用系统化的训练框架,让模型对格式语法拥有强制约束能力。

二、技术方案:三阶段训练 + 格式约束 GRPO

FireRed-OCR 不是简单微调,是一套完整的训练流水线:

模型架构图

第一阶段:多任务预对齐

在视觉感知层面建立"空间基础"。模型先学会目标检测、区域识别、版面到 Markdown 的映射,打好空间定位的底子。

第二阶段:专项监督微调(SFT)

在高质量、规范化的 Markdown 数据集上精调,确保输出具备逻辑一致性和层级表达能力。

第三阶段:格式约束强化学习(Format-Constrained GRPO)

核心创新在这里。GRPO(组相对策略优化)是一种强化学习方法,FireRed-OCR 在此基础上引入专门的格式奖励信号,覆盖四个维度:

维度 奖励信号
公式语法正确性 LaTeX 是否合法
表格结构完整性 标签是否闭合
层级标签闭合性 Markdown 嵌套是否正确
文本准确率 字符级别的识别精度

模型每输出一次结果,系统就从这四个维度打分,反馈给模型自我纠正。

三、数据对比:92.94% 意味着什么

FireRed-OCR-2B 在 OmniDocBench v1.5 的表现:

模型 整体得分 参数量 方案类型
FireRed-OCR-2B 92.94% 2B 端到端
Qwen3.5-397B 90.80% 397B 端到端
Gemini-3.0 Pro 90.33% - 端到端
DeepSeek-OCR 2 91.09% - 端到端
GLM-OCR 94.60% - 流水线
PaddleOCR-VL-1.5 94.50% 1.5B 流水线

FireRed-OCR 是端到端单模型中的最优解。PaddleOCR-VL-1.5 和 GLM-OCR 是流水线方案(多个专用模型串联),得分更高但部署复杂。

文字识别单项(OCRBench TextRec),FireRed-OCR-2B 以 93.5 分位居所有模型首位,超过 GPT-5.2(93.0)和 Gemini-3.0 Pro(91.9)。

在 FireRedBench(团队自建的"压力测试"基准,专门收录现实中非标准版式的文档),FireRed-OCR-2B 以 74.62 分拿下端到端方案第一,同时超越了流水线方案 GLM-OCR(74.33),仅略低于 PaddleOCR-VL-1.5(76.47)。

基座模型 Qwen3-VL-2B-Instruct 只有 65.58 分,提升幅度相当显著。

四、实战:几行代码部署

2B 参数模型,bfloat16 精度下显存占用约 4-5GB,RTX 3090 / A10 单卡即可流畅推理。

安装依赖:

pip install transformers qwen-vl-utils
git clone https://github.com/FireRedTeam/FireRed-OCR.git
cd FireRed-OCR

推理示例:

from transformers import Qwen3VLForConditionalGeneration, AutoProcessor
from conv_for_infer import generate_conv

model = Qwen3VLForConditionalGeneration.from_pretrained(
    "FireRedTeam/FireRed-OCR",
    torch_dtype=torch.bfloat16,
    device_map="auto",
)
processor = AutoProcessor.from_pretrained("FireRedTeam/FireRed-OCR")

image_path = "./examples/complex_table.png"
messages = generate_conv(image_path)

inputs = processor.apply_chat_template(
    messages, tokenize=True, add_generation_prompt=True,
    return_dict=True, return_tensors="pt"
).to(model.device)

generated_ids = model.generate(**inputs, max_new_tokens=8192)
output_text = processor.batch_decode(generated_ids_trimmed, skip_special_tokens=True)
print(output_text)  # 标准 Markdown 格式

性能优化建议:

五、适合的场景

FireRed-OCR 最擅长需要结构完整性的文档解析:

下游任务对"表格不能乱行"、"公式不能出错"要求很高,它是目前端到端方案里最可靠的选择。

不适合的场景:

六、结论

FireRed-OCR 是一次"专项优化"示范:不靠堆参数,靠精心设计的训练框架,让 2B 小模型在专项任务上打赢 235B 的通用大模型。

在垂直任务上,专项训练的效率高于扩大模型规模。

资源链接