StepFun/GOT-OCR-2.0-hfのセットアップと環境構築

StepFunが開発したGOT-OCR-2.0-hfは、多言語対応の高性能OCRモデルであり、日常的な文書から複雑な図表や数式、楽譜に至るまで幅広いコンテンツを高精度で認識可能です。1024×1024ピクセルの高解像度入力に対応し、複数ページの一括処理や動的領域分割、色・座標指定による選択的認識など柔軟な機能を備えています。Apache 2.0ライセンスで公開されており、Hugging Face経由での利用やソースコードのカスタマイズも容易で、研究から実務まで幅広く活用できます。

実行環境の準備と依存ライブラリのインストール

GOT-OCR-2.0-hfを動作させるには、以下のハードウェアおよびソフトウェア要件を満たす必要があります。

推奨ハードウェア仕様

項目最低限推奨
CPU4コア8コア以上
メモリ8GB16GB以上
GPUなしNVIDIA GPU(CUDA 11.0+)
ディスク容量10GB20GB以上

必要なソフトウェア

  • 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"
)

タグ: OCR GOT-OCR-2.0-hf HuggingFace PyTorch 画像認識

5月31日 08:15 投稿