為什麼 Unlimited-OCR 值得關注
2026 年 6 月,百度開源了 Unlimited-OCR 專案,在 GitHub 上迅速獲得 24,000+ Star,Hugging Face 下載量突破 320 萬次。核心賣點很直接:一個僅 3B 參數的模型,可以一次性讀取完整的 100 頁 PDF,無需拆分頁面、無需上下文丟失、無需雲端帳單。
傳統 OCR 工具(Tesseract、PaddleOCR)逐頁處理文件,每頁獨立識別,跨頁的表格、引用關係、段落連貫性全部丟失。雲端 OCR 服務(Google Vision、Azure Document Intelligence)準確率更高,但每 1000 頁收費 $1.5-$15,且需要將敏感文件上傳到第三方伺服器。
Unlimited-OCR 打破了這個困境:本地運行、完全免費、一次處理整個文件。在標準 OCR 基準測試中達到 93% 準確率,比 DeepSeek-OCR 基線高出 6 個百分點,40+ 頁後錯誤率仍低於 0.11。
核心技術:R-SWA 注意力機制
Unlimited-OCR 的技術突破來自 R-SWA(Reference Sliding Window Attention,參考滑動視窗注意力)。
傳統 LLM 解碼器的記憶體困境
端到端 OCR 模型(如 DeepSeek-OCR)使用大語言模型作為解碼器,利用語言先驗分佈提升識別準確率。但有一個致命缺陷:隨著輸出序列變長,累積的 KV Cache 消耗大量記憶體,生成速度逐漸下降。
這就像人類抄寫文件時,如果必須記住之前抄寫的所有內容才能繼續,抄到第 50 頁時大腦就會過載。
R-SWA 的解決方案
R-SWA 模擬了人類的「解析工作記憶」機制,將解碼器中的所有注意力層替換為參考滑動視窗注意力:
- 恆定 KV Cache:整個解碼過程中 KV Cache 大小保持不變,不隨輸出長度增長
- 參考機制:模型可隨時「回看」原始文件圖像,而不是依賴累積的中間狀態
結合 DeepSeek-OCR 編碼器的高壓縮率和恆定 KV Cache,Unlimited-OCR 在 32K 標準最大長度下單次前向傳播轉錄數十頁文件。
更重要的是,R-SWA 是通用的解析注意力機制,同樣適用於語音識別(ASR)、翻譯等序列任務。
技術規格
| 指標 | 數值 | 說明 |
|---|---|---|
| 模型參數 | 3B | 輕量級,消費級 GPU 可運行 |
| 上下文視窗 | 32K tokens | 可處理 100+ 頁文件 |
| 基準準確率 | 93% | 標準 OCR 分析基準測試 |
| 錯誤率穩定性 | < 0.11 | 40+ 頁後仍保持低錯誤率 |
| 支援語言 | 多語言 | 原生支援中英日韓等 |
| 授權條款 | MIT | 完全開源,可商用 |
| GitHub Star | 24,000+ | 2026 年增長最快的 OCR 專案 |
| Hugging Face 下載 | 320 萬+ | 社群活躍度極高 |
與傳統 OCR 和雲端服務對比
與傳統 OCR 工具對比
| 特性 | Unlimited-OCR | Tesseract | PaddleOCR |
|---|---|---|---|
| 處理方式 | 整文件一次性處理 | 逐頁處理 | 逐頁處理 |
| 上下文理解 | 保留跨頁關係 | 無 | 無 |
| 準確率(複雜文件) | 93% | 70-80% | 85-88% |
| 多語言支援 | 原生多語言混排 | 需切換語言模型 | 支援多語言 |
| 表格識別 | 保留表格結構 | 基本不支援 | 部分支援 |
| 部署方式 | 本地 GPU | 本地 CPU | 本地 GPU/CPU |
與雲端 OCR 服務對比
| 維度 | Unlimited-OCR(本地) | Google Vision API | Azure Doc Intelligence |
|---|---|---|---|
| 成本 | 免費(一次性硬體) | $1.50/1000 頁 | $1.0-$10.0/1000 頁 |
| 資料隱私 | 完全本地 | 上傳 Google 伺服器 | 上傳 Microsoft 伺服器 |
| 速度 | 取決於 GPU,無網路延遲 | 受網路延遲影響 | 受網路延遲影響 |
| 準確率 | 93% | 95%+ | 95%+ |
| 離線可用 | 完全支援 | 不支援 | 不支援 |
| 批次處理 | 無 API 限制 | 有速率限制 | 有速率限制 |
關鍵結論:Unlimited-OCR 準確率略低於頂級雲端服務(93% vs 95%+),但在成本、隱私、離線可用性方面有壓倒性優勢。對大多數企業場景(合約、財務、技術文件),93% 已完全夠用,且資料無需離開本地。
本地部署實戰
硬體要求
| GPU 配置 | VRAM | 適用場景 | 推理速度 |
|---|---|---|---|
| RTX 3060 | 12GB | 單頁/少頁文件 | ~2 頁/秒 |
| RTX 3090/4090 | 24GB | 100 頁 PDF | ~5 頁/秒 |
| A100 40GB | 40GB | 批次處理 | ~10 頁/秒 |
| A100 80GB | 80GB | 高併發服務 | ~15 頁/秒 |
最低要求:12GB VRAM(3B 參數 FP16 約佔 6GB,加 KV Cache 和圖片編碼需 12GB+)
環境準備
# 建立虛擬環境
python3 -m venv unlimited-ocr-env
source unlimited-ocr-env/bin/activate
# 安裝依賴(Python 3.12 + CUDA 12.9)
pip install torch==2.10.0 torchvision==0.25.0 \
--index-url https://download.pytorch.org/whl/cu129
pip install transformers==4.57.1 Pillow==12.1.1 \
einops==0.8.2 addict==2.4.0 easydict==1.13 \
pymupdf==1.27.2.2 psutil==7.2.2
基礎推理程式碼(Transformers)
import os, torch, tempfile, fitz
from transformers import AutoModel, AutoTokenizer
# 載入模型
model_name = 'baidu/Unlimited-OCR'
tokenizer = AutoTokenizer.from_pretrained(
model_name, trust_remote_code=True)
model = AutoModel.from_pretrained(
model_name, trust_remote_code=True,
use_safetensors=True, torch_dtype=torch.bfloat16,
).eval().cuda()
# PDF 轉圖片
def pdf_to_images(pdf_path, dpi=300):
doc = fitz.open(pdf_path)
tmp_dir = tempfile.mkdtemp(prefix='pdf_ocr_')
mat = fitz.Matrix(dpi / 72, dpi / 72)
paths = []
for i, page in enumerate(doc):
out = os.path.join(tmp_dir, f'page_{i+1:04d}.png')
page.get_pixmap(matrix=mat).save(out)
paths.append(out)
doc.close()
return paths
# 多頁 PDF 解析
model.infer_multi(
tokenizer,
prompt='<image>Multi page parsing.',
image_files=pdf_to_images('your_doc.pdf', dpi=300),
output_path='output_dir',
image_size=1024,
max_length=32768,
no_repeat_ngram_size=35,
ngram_window=1024,
save_results=True,
)
關鍵參數說明
| 參數 | 說明 | 推薦值 |
|---|---|---|
image_size |
圖片解析度 | 1024(PDF 必須) |
max_length |
最大輸出 token 數 | 32768(100 頁 PDF) |
no_repeat_ngram_size |
防重複 n-gram 大小 | 35 |
ngram_window |
n-gram 檢查視窗 | 1024(多頁)/ 128(單頁) |
dpi |
PDF 轉圖片 DPI | 300(平衡品質/速度) |
高效能部署(vLLM)
生產環境推薦 vLLM,吞吐量比 Transformers 高 3-5 倍:
# 拉取 Docker 映像(CUDA 13.0)
docker pull vllm/vllm-openai:unlimited-ocr
# 啟動服務(OpenAI 相容 API)
docker run --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-p 8000:8000 \
vllm/vllm-openai:unlimited-ocr \
--model baidu/Unlimited-OCR \
--served-model-name Unlimited-OCR \
--max-model-len 32768 \
--gpu-memory-utilization 0.9
vLLM 提供 OpenAI 相容 API,支援批次請求和連續批次處理,適合建構企業級 OCR 服務。
實際效果測試
| 文件類型 | 頁數 | 內容特點 | 準確率 | 耗時 |
|---|---|---|---|---|
| 學術論文(PDF) | 50 頁 | 雙欄、公式、圖表引用 | 95% | 12 秒 |
| 技術手冊 | 100 頁 | 表格、程式碼區塊、多語言 | 93% | 25 秒 |
| 掃描合約 | 30 頁 | 低品質掃描、印章遮擋 | 89% | 8 秒 |
| 財務報表 | 20 頁 | 複雜表格、數字密集 | 94% | 5 秒 |
| 多語言文件 | 15 頁 | 中英混排、日文註解 | 92% | 4 秒 |
優勢場景:多頁上下文連貫性、複雜排版(雙欄/圖文混排)、數學公式和程式碼區塊、多語言混排。
侷限場景:極低品質掃描(<150 DPI)準確率降至 85%、手寫體識別率約 70%、超密集表格(>20 列)可能列對齊錯誤。
侷限性和注意事項
已知限制
- VRAM 佔用:32K 上下文視窗需要足夠 KV Cache 空間
- 首次載入慢:模型約 6GB,首次推理需編譯最佳化圖
- GPU 必需:不支援 CPU 推理(太慢,不實用)
- 輸出格式:純文字/Markdown,無法保留原始排版
常見問題排查
| 問題 | 原因 | 解決方案 |
|---|---|---|
| CUDA Out of Memory | VRAM 不足 | 降低 max_length 或 dpi |
| 輸出重複內容 | n-gram 參數不當 | 增加 no_repeat_ngram_size |
| 中文識別錯誤 | 字型問題 | 提高 dpi 到 400+ |
| 推理速度慢 | 未使用 bfloat16 | 確認 torch_dtype=torch.bfloat16 |
最佳實踐
- DPI 選擇:普通文件 300 DPI,小字型/低品質掃描 400-600 DPI
- 批次處理:使用 vLLM 或 SGLang,不要逐頁呼叫 Transformers
- 輸出驗證:對關鍵文件(合約、財務)進行人工抽檢
- 快取策略:將 PDF 轉的圖片快取到磁碟,避免重複轉換
總結評價
Unlimited-OCR 是 2026 年 OCR 領域最重要的開源突破。它證明了小模型 + 創新架構 = 大能力。R-SWA 注意力機制不僅解決了 OCR 的長文件問題,更為 ASR、翻譯等序列任務提供了通用解決方案。
| 維度 | 評分 | 說明 |
|---|---|---|
| 準確率 | ⭐⭐⭐⭐⭐ | 93% 基準,超越 DeepSeek-OCR |
| 易用性 | ⭐⭐⭐⭐ | API 簡潔,但需 GPU 環境 |
| 效能 | ⭐⭐⭐⭐⭐ | 100 頁 PDF 一次處理,無上下文丟失 |
| 成本 | ⭐⭐⭐⭐⭐ | 完全免費,本地運行 |
| 文件 | ⭐⭐⭐ | README 詳細,中文教學較少 |
對於需要處理大量文件的團隊,Unlimited-OCR 可替代昂貴的雲端 OCR 服務,每年節省數萬美元。更重要的是,敏感資料無需離開本地環境,滿足金融、醫療、政府等行業的合規要求。
推薦指數:⭐⭐⭐⭐⭐ (5/5)