Falcon OCR 是一个拥有 3 亿参数的早期融合视觉语言模型,专为文档 OCR 设计。给定一张图像,它能够根据请求的输出格式,生成纯文本、公式的 LaTeX 代码或表格的 HTML 代码。
大多数 OCR VLM 系统采用流水线架构,由视觉编码器向独立的文本解码器提供输入,并辅以额外的特定任务粘合模块。Falcon OCR 则采用了不同的方法:单个 Transformer 从第一层开始就在共享参数空间中处理图像块和文本标记,并使用混合注意力掩码——图像标记进行双向注意力计算,而文本标记则在图像的条件下进行因果解码。
我们采用这种设计主要基于两个实际考虑。首先,它简化了接口:一个主干网络、一个解码路径,通过提示词实现任务切换,而非依赖不断增加的模块。其次,3 千万参数的模型比 9 千万参数级别的 OCR VLM 具有更低的延迟和成本,在我们基于 vLLM 的服务设置中,这转化为更高的吞吐量,根据序列长度和批处理配置的不同,通常快 2-3 倍。据我们所知,这是首次尝试将这种早期融合单栈方案直接应用于该规模的高性能文档 OCR。
tiiuae/falcon-perceptionpip install "torch>=2.5" transformers pillow einopsFalcon OCR 需 PyTorch 2.5 或更新版本以支持 FlexAttention。首次调用可能会较慢,因为 torch.compile 正在构建优化内核。
import torch
from PIL import Image
from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained(
"tiiuae/Falcon-OCR",
trust_remote_code=True,
torch_dtype=torch.bfloat16,
device_map="auto",
)
image = Image.open("document.png")
texts = model.generate(image) # default category is "plain"
print(texts[0])category 选择输出格式texts = model.generate(image, category="text") # plain text
texts = model.generate(image, category="formula") # LaTeX
texts = model.generate(image, category="table") # HTML tablemodel.generate(images, category="plain", **kwargs)images:一个 PIL.Image.Image 或图像列表category:可选值为 plain、text、table、formula、caption、footnote、list-item、page-footer、page-header、section-header、titlelist[str],每张图像对应一个提取的字符串对于内容稀疏的文档,直接对整幅图像运行 OCR 即可获得良好效果。对于包含异构区域的密集文档(如多栏布局、表格与公式交错、小型图注等),我们提供了一个可选的两阶段流水线:
results = model.generate_with_layout(image)
for det in results[0]:
print(f"[{det['category']}] {det['text'][:100]}...")批处理模式:
results = model.generate_with_layout(
[Image.open("page1.png"), Image.open("page2.png")],
ocr_batch_size=32,
)布局模型在首次调用 generate_with_layout() 时延迟加载,并与 OCR 模型运行在同一 GPU 上。
返回值:list[list[dict]],每张图像对应一个列表,按阅读顺序排列:
{
"category": "text", # layout category
"bbox": [x1, y1, x2, y2], # in original image pixels
"score": 0.93, # detection confidence
"text": "..." # extracted text
}| 模式 | 最适用于 | 使用方法 |
|---|---|---|
| 纯文本 OCR | 简单文档、实景照片、幻灯片、收据、发票 | model.generate(image) |
| 布局 + OCR | 复杂多栏文档、学术论文、报告、报纸等密集页面 | model.generate_with_layout(image) |
FalconOCR 与最先进 OCR 模型的类别性能比较。我们报告所有类别划分的准确率(%)。
| 模型 | 平均值 | ArXiv 数学 | 基础 | 页眉/页脚 | 微小文本 | 多栏 | 旧扫描件 | 旧数学公式 | 表格 |
|---|---|---|---|---|---|---|---|---|---|
| Mistral OCR 3 | 81.7 | 85.4 | 99.9 | 93.8 | 88.9 | 82.1 | 48.8 | 68.3 | 86.1 |
| Chandra | 82.0 | 81.4 | 99.8 | 88.8 | 91.9 | 82.9 | 49.2 | 73.6 | 88.2 |
| Gemini 3 Pro | 80.2 | 70.6 | 99.8 | 84.0 | 90.3 | 79.2 | 47.5 | 84.9 | 84.9 |
| PaddleOCR VL 1.5 | 79.3 | 85.4 | 98.8 | 96.9 | 80.8 | 82.6 | 39.2 | 66.4 | 84.1 |
| PaddleOCR VL | 79.2 | 85.4 | 98.6 | 96.9 | 80.8 | 82.5 | 38.8 | 66.4 | 83.9 |
| DeepSeek OCR v2 | 78.8 | 81.9 | 99.8 | 95.6 | 88.7 | 83.6 | 33.7 | 68.8 | 78.1 |
| Gemini 3 Flash | 77.5 | 66.5 | 99.8 | 83.8 | 88.2 | 73.7 | 46.0 | 85.8 | 75.9 |
| GPT 5.2 | 69.8 | 61.0 | 99.8 | 75.6 | 62.2 | 70.2 | 34.6 | 75.8 | 79.0 |
| FalconOCR | 80.3 | 80.5 | 99.5 | 94.0 | 78.5 | 87.1 | 43.5 | 69.2 | 90.3 |
全页文档解析性能比较。Overall↑ 综合了三个子指标。Edit↓ 衡量文本编辑距离(值越低越好)。CDM↑ 评估公式识别准确率。TEDS↑ 衡量表格结构相似度。
| 模型 | Overall↑ | Edit↓ | CDM↑ | TEDS↑ |
|---|---|---|---|---|
| PaddleOCR VL 1.5 | 94.37 | 0.025 | 94.4 | 91.1 |
| PaddleOCR VL | 91.76 | 0.024 | 91.7 | 85.9 |
| Chandra | 88.97 | 0.046 | 88.1 | 89.5 |
| DeepSeek OCR v2 | 87.66 | 0.037 | 89.2 | 77.5 |
| GPT 5.2 | 86.56 | 0.061 | 88.0 | 77.7 |
| Mistral OCR 3 | 85.20 | 0.053 | 84.3 | 76.1 |
| FalconOCR | 88.64 | 0.055 | 86.8 | 84.6 |
首先,当接口简单且训练信号具有针对性时,轻量级模型也能具备竞争力。在olmOCR上,Falcon OCR在多列文档和表格上表现出色,整体性能与规模大得多的系统相比也具有竞争力。其次,全页解析的评估对匹配和表示细节较为敏感。在OmniDocBench上,表格和公式的评估指标不仅取决于识别质量,还取决于预测元素与真实标签的匹配方式以及输出结构的规范化方式。
从更广泛的角度来看,这些结果表明,对于OCR任务,早期融合的单栈Transformer可以成为常见的“视觉编码器+文本解码器”方案的可行替代方案。我们并不认为这是一个最终答案,而是一个充满前景的方向:一个早期融合的主干网络、文本与图像共享的参数空间、单一的解码接口,以及更优质的数据和训练信号,而非日益复杂的流水线。据我们所知,这是首次证明这种早期融合方案能够在如此规模上达到具有竞争力的文档OCR accuracy,我们希望这能鼓励该方向的进一步研究。
在单张A100-80GB GPU上使用vLLM进行测量,在高并发下处理来自olmOCR-Bench的文档图像,以实现vLLM的最佳利用率。
| 模式 | tok/s | img/s | 描述 |
|---|---|---|---|
| Layout + OCR | 5,825 | 2.9 | 完整流水线:布局检测 → 裁剪 → 区域级OCR |
Falcon OCR的参数规模为0.3B,比0.9B级别的OCR VLM(如PaddleOCR VL)小约3倍,这直接转化为在保持竞争力accuracy的同时实现更高的服务吞吐量。
点击下方各部分可展开查看。
我们还提供一个基于Docker的vLLM推理服务器,能够实现约6000 tokens/秒的服务能力。
单个Docker镜像包含两个服务:
| 服务 | 默认端口 | 描述 |
|---|---|---|
| vLLM | 8000 | Falcon-OCR视觉语言模型(兼容OpenAI API) |
| Pipeline | 5002 | 完整文档解析:布局检测 → 裁剪 → OCR → markdown |
布局模型在pipeline进程内部运行——它不是一个独立的服务。
docker run -d --name falcon-ocr \
--gpus '"device=0,1"' \
-e EXPOSED_GPU_IDS=0,1 \
-e VLLM_GPU=0 \
-e PIPELINE_GPU=1 \
-e VLLM_GPU_MEM_UTIL=0.90 \
-p 8000:8000 \
-p 5002:5002 \
ghcr.io/tiiuae/falcon-ocr:latestcurl http://localhost:8000/health # vLLM
curl http://localhost:5002/health # Pipeline发送文件的最简单方式。支持图片和多页 PDF:
# Single image
curl -X POST http://localhost:5002/falconocr/upload \
-F "files=@photo.jpg;type=image/jpeg"
# PDF document
curl -X POST http://localhost:5002/falconocr/upload \
-F "files=@document.pdf;type=application/pdf"发送经过 base64 编码的图像,以进行布局检测、裁剪和 OCR 识别:
curl -X POST http://localhost:5002/falconocr/parse \
-H "Content-Type: application/json" \
-d '{
"images": ["data:image/jpeg;base64,<...>"],
"skip_layout": false
}'响应:
{
"json_result": [[{
"index": 0,
"mapped_label": "text",
"content": "The Manuscript",
"bbox": [273, 273, 937, 380],
"score": 0.3145
}]],
"markdown_result": "The Manuscript",
"total_output_tokens": 93,
"processing_time_ms": 414
}跳过布局检测,将完整图像直接发送至 VLM:
curl -X POST http://localhost:5002/falconocr/parse \
-H "Content-Type: application/json" \
-d '{
"images": ["data:image/jpeg;base64,<...>"],
"skip_layout": true
}'curl -X POST http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "falcon-ocr",
"messages": [{"role": "user", "content": [
{"type": "image_url", "image_url": {"url": "data:image/png;base64,<...>"}},
{"type": "text", "text": "Extract the text content from this image.\n<|OCR_PLAIN|>"}
]}],
"max_tokens": 2048
}'所有设置在 docker run 时通过环境变量控制。
| 变量 | 默认值 | 描述 |
|---|---|---|
VLLM_GPU | 0 | vLLM 进程使用的主机 GPU ID |
PIPELINE_GPU | 0 | 流水线(布局模型)使用的主机 GPU ID |
EXPOSED_GPU_IDS | (所有可见 GPU) | 通过 --gpus 传递的逗号分隔主机 GPU ID(用于索引重映射) |
| 变量 | 默认值 | 描述 |
|---|---|---|
VLLM_PORT | 8000 | vLLM OpenAI 兼容 API 的端口 |
PIPELINE_PORT | 5002 | 流水线 API 的端口 |
| 变量 | 默认值 | 描述 |
|---|---|---|
VLLM_GPU_MEM_UTIL | 0.90 | vLLM 可使用的 GPU 内存比例 |
MAX_NUM_SEQS | 2048 | vLLM 中的最大并发序列数 |
MAX_MODEL_LEN | 8192 | 模型最大上下文长度 |
DTYPE | bfloat16 | 模型数据类型 |
MAX_NUM_BATCHED_TOKENS | (自动) | 每次迭代的最大批处理令牌数 |
CHUNKED_PREFILL | false | 启用分块预填充 |
| 变量 | 默认值 | 描述 |
|---|---|---|
LAYOUT_BATCH_SIZE | 64 | 布局检测推理的批处理大小 |
| 变量 | 默认值 | 描述 |
|---|---|---|
FALCON_OCR_MODEL | /models/Falcon-OCR | Falcon-OCR VLM 权重路径(容器内) |
SERVED_MODEL_NAME | falcon-ocr | vLLM API 公开的模型名称 |
vLLM 在一个 GPU 上运行,布局模型在另一个 GPU 上运行 — 无 GPU 资源竞争:
docker run -d --name falcon-ocr \
--gpus '"device=3,4"' \
-e EXPOSED_GPU_IDS=3,4 \
-e VLLM_GPU=3 \
-e PIPELINE_GPU=4 \
-e VLLM_GPU_MEM_UTIL=0.90 \
-p 8000:8000 \
-p 5002:5002 \
ghcr.io/tiiuae/falcon-ocr:latest两个服务共享一个 GPU —— 调整 VLLM_GPU_MEM_UTIL 以给布局模型留出空间:
docker run -d --name falcon-ocr \
--gpus '"device=0"' \
-e EXPOSED_GPU_IDS=0 \
-e VLLM_GPU=0 \
-e PIPELINE_GPU=0 \
-e VLLM_GPU_MEM_UTIL=0.55 \
-e LAYOUT_BATCH_SIZE=32 \
-e MAX_NUM_SEQS=512 \
-p 8000:8000 \
-p 5002:5002 \
ghcr.io/tiiuae/falcon-ocr:latestdocker run -d --name falcon-ocr \
--gpus '"device=0,1"' \
-e EXPOSED_GPU_IDS=0,1 \
-e VLLM_GPU=0 \
-e PIPELINE_GPU=1 \
-e VLLM_PORT=18000 \
-e PIPELINE_PORT=15002 \
-p 18000:18000 \
-p 15002:15002 \
ghcr.io/tiiuae/falcon-ocr:latestDocker --gpus "device=3,4" 会使容器将 GPU 识别为本地索引 0,1。
EXPOSED_GPU_IDS=3,4 允许您引用主机 GPU ID(VLLM_GPU=3、PIPELINE_GPU=4);
入口点会将它们重新映射到正确的容器本地索引。
If you use Falcon OCR, please cite:
@article{bevli2026falcon,
title = {Falcon Perception},
author = {Bevli, Aviraj and Chaybouti, Sofian and Dahou, Yasser and Hacid, Hakim and Huynh, Ngoc Dung and Le Khac, Phuc H. and Narayan, Sanath and Para, Wamiq Reyaz and Singh, Ankit},
journal = {arXiv preprint arXiv:2603.27365},
year = {2026},
url = {https://arxiv.org/abs/2603.27365}
}