DeepSeek的新OCR將文件壓縮10倍

DeepSeek的新OCR將文件壓縮10倍

文章目录

  • 什麼是DeepSeek OCR?
  • 上下文光學壓縮
  • 視覺語言OCR模型
  • DeepSeek OCR架構
  • DeepEncoder(視覺編碼器)
  • DeepSeek-3B-MoE解碼器
  • 多解析度輸入模式
  • 如何訪問DeepSeek OCR?
  • 嘗試DeepSeek OCR
  • 基本文件轉換
  • 複雜文件處理
  • 重新整理快取
  • 效能和基準測試
  • Fox Benchmark壓縮測試
  • OmniDocBench上的表現
  • 小結

DeepSeek的新OCR將文件壓縮10倍

幾天前,DeepSeek 社羣推出了其最新、最先進的文字到視覺模型:DeepSeek-OCR,它正在改變我們從影像中提取文字的方式。此前,我們一直依賴傳統的 OCR 模型,這些模型在從 PDF、影像或雜亂的手寫筆記中提取文字時,準確性和佈局理解能力都存在問題。

但是,DeepSeek-OCR 徹底改變了這一切。

它能夠以極高的精度專業地讀取、理解視覺文字並將其轉換為數字文字。DeepSeek-OCR 不僅僅是一個 OCR 工具,它是一個基於 DeepSeek-VL2 視覺語言模型 (VLM) 構建的智慧視覺文字系統,該模型以速度和準確性著稱。它可以透過先進的視覺演算法輕鬆識別多種語言的視覺文字,即使是手寫文字也是如此。在本文中,我們將研究 DeepSeek-OCR 的架構,並在幾張文字影像上測試其功能。

什麼是DeepSeek OCR?

DeepSeek-OCR 是一個多模態系統,透過將文字轉換為視覺表示來壓縮文字。它也採用編碼器和解碼器風格的架構。首先,它將整個文件編碼為影像形式,然後利用視覺語言模型恢復文字。實際上,這意味著通常包含數千個標記的一頁文字最終僅由幾百個視覺標記表示。DeepSeek 將這種方法稱為“上下文光學壓縮”。

什麼是DeepSeek OCR?

Source: DeepSeek-OCR

上下文光學壓縮

DeepSeek 會透過編碼器從影像中提取文字,但不會將所有單詞都輸入模型,而只是將文字顯示為影像。例如,對於一個頁面,影像可能只需要 200-400 個標記,而對於全是文字的頁面,可能需要 2000-5000 個文字標記。

視覺標記可以更密集地捕獲所有基本資訊,例如佈局、間距、單詞形狀。視覺編碼器學習壓縮影像,以便解碼器可以重建原始文字,這意味著:每個視覺標記可以編碼相當於許多文字標記的資訊。

視覺語言OCR模型

由於視覺標記可以輕鬆捕獲佈局和單詞形狀,因此,它們共同構成了視覺語言模型的端到端影像到文字的流程,類似於一般的視覺轉換器。然而,由於視覺標記能夠更密集地捕獲資訊,我們能夠減少所需的標記數量,並最大限度地提高模型對文字視覺結構的關注度。

DeepSeek OCR架構

DeepSeek-OCR 採用兩階段編碼器-解碼器架構,其工作原理如下:DeepEncoder(約 3.8 億個引數)對影像進行編碼以生成視覺標記,DeepSeek-3B-MoE(約 5.7 億個活動引數)將標記擴充套件迴文字。

DeepSeek OCR架構

Source: DeepSeek-OCR

DeepEncoder(視覺編碼器)

DeepEncoder 由兩個串聯的視覺轉換器組成。第一個是 SAM-base 模組,擁有 80M 個引數,使用視窗化自注意力機制來編碼區域性細節。第二個是 CLIP-large 模組,擁有 300M 個引數,使用全域性注意力機制來編碼整體佈局。

在兩個視覺轉換器之間,有一個卷積模組,它將視覺標記的數量從 16 倍減少 16 倍。例如,一張 1024×1024 的影像被解析成 4096 個塊,然後減少到只有 256 個標記。

  • SAM-base(80M):使用視窗化自注意力機制來掃描精細的影像細節。
  • CLIP-large(300M):應用密集註意力機制來編碼全域性上下文。
  • 16 倍卷積:減少視覺標記的數量(例如,1024² 的標記數量從 4096 減少到 256)。

DeepSeek-3B-MoE解碼器

解碼器模組是一個採用混合專家架構的語言轉換器。該模型包含 64 位專家,但平均每個標記只有 6 位專家處於活躍狀態,用於將視覺標記擴充套件迴文字。小型解碼器在豐富的文件資料上進行訓練,作為 OCR 型別的任務,例如文字、數學方程式、圖表、化學圖表和混合語言。因此,它可以擴充套件每個標記中大致的素材範圍。

  • 混合專家:總共 64 位專家,每一步有 6 位活躍專家
  • 視覺到文字訓練:使用來自一般文件的 OCR 型別資料進行訓練,保留來自各種文字來源的佈局設定。

多解析度輸入模式

DeepSeek-OCR 支援多種輸入解析度,允許使用者選擇細節與壓縮之間的平衡。它提供四種原生模式,以及一種特殊的 Gundam(平鋪)模式:

模式 解析度 約視覺標記數 描述
微型模式 512×512 ~64 超輕量級模式,適用於快速掃描和簡單文件處理
小型模式 640×640 ~100 平衡速度與精度的預設模式
基礎模式 1024×1024 ~256 高質量OCR模式,適用於詳細文件分析
大型模式 1280×1280 ~400 高精度模式,專為佈局複雜的密集型文件設計
高達動態模式 動態分塊:<br>n×640×640 + 1×1024×1024 變數<br>(典型值:n×100 + 256) 動態解析度模式,透過將超高解析度文件分割為多個區塊,專門處理極端複雜的複合型文件架構

這種靈活性使得 DeepSeek 能夠根據頁面的複雜程度,以不同的方式進行壓縮。

如何訪問DeepSeek OCR?

安裝必要的庫

!pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu118 
!pip install flash-attn 
!pip install transformers==4.46.3 
!pip install accelerate==1.1.1 
!pip install safetensors==0.4.5 
!pip install addict

安裝完成後,進入步驟 2。

載入模型

from transformers import AutoModel, AutoTokenizer
import torch
model_name = "deepseek-ai/DeepSeek-OCR"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModel.from_pretrained(model_name, trust_remote_code=True, use_safetensors=True)
model = model.eval().cuda().to(torch.bfloat16)

嘗試DeepSeek OCR

現在我們已經瞭解瞭如何使用 DeepSeek OCR,我們將透過兩個示例進行測試:

基本文件轉換

此示例處理 PNG 文件影像,使用 DeepSeek 的視覺標記提取所有文字內容,並將其轉換為乾淨的 Markdown 格式,同時測試模型的壓縮能力。

prompt = "<image>\n<|grounding|>Convert the document to markdown. "
image_file = '/content/img_1.png'
output_path = '/content/out_1'
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)

這將在 GPU 上載入 DeepSeek-OCR。在提供的示例提示中,指示將文件轉換為 Markdown 格式。在 output_path 中,我們將儲存執行 infer() 後識別出的文字。

輸入影像:

Input-Image-DeepSeek-OCR

Source: Image

DeepSeek OCR的回應:

DeepSeek-OCR-Output

複雜文件處理

本示例演示瞭如何處理更復雜的 JPG 文件,在轉換為 Markdown 格式的同時保持格式和佈局結構,展現了該模型處理高難度視覺文字場景的能力。

prompt = "<image>\n<|grounding|>Convert the document to markdown. "
image_file = '/content/img_2.jpg'
output_path = '/content/out_2'
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)

輸入影像:

Complex-Document-Processing-1

Source: Image

DeepSeek OCR 的響應:

Output-from-DeepSeek-OCR

我們可以使用 small/medium/large base_size/image_size 來生成 Tiny、Small、Base 或 Large 模式,以獲得不同的效能輸出。

重新整理快取

現在,所有庫都已安裝完畢,並且您已執行上述程式碼塊並遇到任何錯誤,請執行以下命令,如果您使用的是 Jupyter Notebook 或 Collab,請重啟核心。此命令將刪除快取中的所有資料和預先存在的變數。

!rm -rf ~/.cache/huggingface/modules/transformers_modules/deepseek-ai/DeepSeek-OCR/

注意:硬體配置要求:CUDA GPU,搭配約 16-30GB VRAM(例如 A100),用於處理大影像。完整程式碼請訪問此處

效能和基準測試

DeepSeek-OCR 實現了卓越的壓縮率和 OCR 準確率,如下圖所示。基準測試中的對比結果反映了該模型在不損失準確率的情況下對視覺標記進行編碼的程度。

DeepSeek-Performance

Source: DeepSeek-OCR

Fox Benchmark壓縮測試

DeepSeek-OCR 即使在更高壓縮率下也能展現出良好的文字保留率。在 10 倍壓縮率下,每頁僅需 64-100 個視覺標記,即可達到 96% 以上的準確率;在 15-20 倍壓縮率下,準確率仍可維持在 85-87% 左右。這表明該模型能夠高效地編碼大量文字,這為大型語言模型提供了在有限標記使用量的情況下處理更長文件的機會。

視覺 Tokens 精度 (%) 壓縮率 (×)
64 Tokens 96.5% 10×
64 Tokens 85.8% 15×
100 Tokens 97.3% 10×
100 Tokens 87.1% 20×

OmniDocBench上的表現

在 OmniDocBench 上,DeepSeek-OCR 的表現超越了領先的 OCR 模型和視覺語言模型,實現了編輯距離 (ED) < 0.25 的準確率,接近人類水平。儘管 DeepSeek-OCR 每張影像使用的視覺標記數量不到 1000 個,但仍取得了如此令人印象深刻的成果,而其他模型(如 Qwen2.5-VL、InternVL3 或 GOT-OCR2.0)則需要使用超過 1500 個視覺標記才能達到相當的準確率。

模型 平均視覺標記數/影像 編輯距離(越低越好) 準確度區域 備註
DeepSeek-OCR (高達-M 200dpi) <1000 <0.25 高準確度 精度與效率的最佳平衡
DeepSeek-OCR (基礎/大型) <1000 <0.25 高準確度 持續保持頂尖效能
GOT-OCR2.0 >1500 >0.35 中等 需要消耗更多視覺標記
Qwen2.5-VL / InternVL3 >1500 >0.30 中等 處理效率相對較低
SmolDocling <500 >0.45 低準確度 體積小巧但OCR質量較弱

小結

Deepseek-OCR 為文字讀取提供了一種全新的創新方法。它透過使用視覺作為壓縮層,顯著減少了文字的 token 使用量(通常可降低 7-20 倍),同時仍保留了大部分資訊。該模型是開源的,任何開發者都可以使用。

這對於能夠以緊湊、高效的方式表示文字的人工智慧來說意義重大。大多數 OCR 在處理手寫文字(尤其是在醫療收據上)時都會失敗。但 DeepSeek-OCR 在這方面也表現出色。它傳遞的資訊超越了 OCR 本身,並指向了人工智慧記憶和上下文管理的新可能性。

評論留言