StepFunが開発したGOT-OCR-2.0-hfは、多言語対応の高性能OCRモデルであり、日常的な文書から複雑な図表や数式、楽譜に至るまで幅広いコンテンツを高精度で認識可能です。1024×1024ピクセルの高解像度入力に対応し、複数ページの一括処理や動的領域分割、色・座標指定による選択的認識など柔軟な機能を備えています。Apache 2.0ライセンスで公開されており、Hugging Face経由での利用やソースコードのカスタマイズも容易で、研究から実務まで幅広く活用できます。
実行環境の準備と依存ライブラリのインストール
GOT-OCR-2.0-hfを動作させるには、以下のハードウェアおよびソフトウェア要件を満たす必要があります。
推奨ハードウェア仕様
| 項目 | 最低限 | 推奨 |
|---|---|---|
| CPU | 4コア | 8コア以上 |
| メモリ | 8GB | 16GB以上 |
| GPU | なし | NVIDIA GPU(CUDA 11.0+) |
| ディスク容量 | 10GB | 20GB以上 |
必要なソフトウェア
- Python 3.8+
- PyTorch 1.12.0+(CUDA対応版推奨)
- Transformers 4.49.0+
- 補助ライブラリ:numpy, pillow, tqdm
インストール手順
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113
pip install transformers==4.49.0 numpy pillow tqdm
GPU非対応環境では、以下のようにインストールします:
pip install torch torchvision torchaudio
pip install transformers==4.49.0 numpy pillow tqdm
環境確認スクリプト
import torch
from transformers import AutoModelForImageTextToText, AutoProcessor
print(f"PyTorch: {torch.__version__}")
print(f"CUDA有効: {torch.cuda.is_available()}")
try:
model = AutoModelForImageTextToText.from_pretrained("stepfun-ai/GOT-OCR-2.0-hf", device_map="auto")
processor = AutoProcessor.from_pretrained("stepfun-ai/GOT-OCR-2.0-hf")
print("✅ モデル読み込み成功")
except Exception as e:
print(f"❌ エラー: {e}")
よくあるトラブルと対処法
- CUDAバージョン不一致:
nvcc --versionで確認し、PyTorch再インストール。 - メモリ不足:
入力画像サイズやバッチ数を縮小して再試行。 - 依存関係の衝突:
仮想環境で隔離推奨:python -m venv ocr_env source ocr_env/bin/activate # Linux/macOS ocr_env\Scripts\activate # Windows
モデルの取得と初期化
Hugging Face Hubから直接モデルをロードできます。キャッシュは~/.cache/huggingface/hubに保存されます。
基本的なロード例
import torch
from transformers import AutoModelForImageTextToText, AutoProcessor
device = "cuda" if torch.cuda.is_available() else "cpu"
ocr_model = AutoModelForImageTextToText.from_pretrained(
"stepfun-ai/GOT-OCR-2.0-hf",
torch_dtype=torch.bfloat16,
device_map=device
)
ocr_processor = AutoProcessor.from_pretrained("stepfun-ai/GOT-OCR-2.0-hf")
主要設定パラメータ
| パラメータ名 | 説明 |
|---|---|
image_seq_length | 画像トークンの最大長(デフォルト: 576) |
image_token_index | 画像トークン識別子(例: 151859) |
text_config | テキストエンコーダーの内部構造設定 |
vision_config | ビジョンエンコーダー設定(現状は空) |
設定ファイルの詳細
config.json の構成
{
"architectures": ["GotOcr2ForConditionalGeneration"],
"image_seq_length": 576,
"image_token_index": 151859,
"model_type": "got_ocr2",
"text_config": {
"hidden_size": 1024,
"num_attention_heads": 16,
"num_hidden_layers": 24,
"vocab_size": 151860
},
"torch_dtype": "bfloat16"
}
preprocessor_config.json の内容
{
"do_convert_rgb": true,
"do_normalize": true,
"image_mean": [0.48145466, 0.4578275, 0.40821073],
"image_std": [0.26862954, 0.26130258, 0.27577711],
"size": {"height": 1024, "width": 1024},
"resample": 3
}
tokenizer_config.json の一部
{
"added_tokens_decoder": {
"151643": {
"content": "<|endoftext|>",
"special": true
}
}
}
典型的なエラーと回避策
1. 解像度制限の回避
大判画像はパッチ分割で処理:
inputs = ocr_processor(
image,
return_tensors="pt",
crop_to_patches=True,
max_patches=3
).to(device)
2. 複数ページ処理
inputs = ocr_processor(
[page1_img, page2_img],
return_tensors="pt",
multi_page=True
).to(device)
3. 特定領域の抽出
# 座標指定
inputs = ocr_processor(image, box=[x1,y1,x2,y2]).to(device)
# 色指定
inputs = ocr_processor(image, color="green").to(device)
4. 出力形式の調整
generated = ocr_model.generate(**inputs, max_new_tokens=512)
text_output = ocr_processor.decode(
generated[0][inputs.input_ids.shape[1]:],
skip_special_tokens=True
)
5. VRAM節約テクニック
# 半精度浮動小数点使用
model = AutoModelForImageTextToText.from_pretrained(
"stepfun-ai/GOT-OCR-2.0-hf",
torch_dtype=torch.float16,
device_map="auto"
)