💡
NDL古典籍OCRをAmazon EC2のCPU環境で実行する
概要
NDL古典籍OCRをAmazon EC2のCPU環境で実行してみましたので、その備忘録です。高額になりがちなGPU環境を用意せずに実行できる点が利点ですが、1画像あたり30秒から1分程度の時間がかかりますので、ご注意ください。
本環境の構築にあたり、以下の記事を参考にしています。
インスタンス
クイックスタートのUbuntuを選択します。
インスタンスタイプについえは、t2.medium
以上をおすすめします。それより小さいインスタンスだと、エラーが発生しました。
サーバ内での設定
sshでログインし、以下を実行します。
sudo apt-get update && sudo apt-get upgrade -y
sudo apt -y install build-essential
sudo apt -y install libgl1-mesa-dev libglib2.0-0
sudo apt -y install unzip
sudo apt install -y python3-pip
sudo apt install -y python3.10-venv
python3 -m venv app
source app/bin/activate
pip install --upgrade pip
git clone https://github.com/ndl-lab/ndlkotenocr_cli.git
cd ndlkotenocr_cli
vi requirements.txt
requirements.txt
を開き、scikit-image
のバージョンを除く。また、torch
とtorchvision
を追加する。
click
lmdb==1.2.1
natsort==7.1.1
nltk==3.6.6
numpy==1.22.4
albumentations==1.2.1
opencv-python==4.6.0.66
protobuf==3.19.6
pyyaml
scikit-image # scikit-image==0.16.2
scipy==1.7.3
lightgbm==3.3.2
transformers==4.19.1
pandas==1.3.5
mmcls==0.23.1
mmdet==2.25.0
datasets==2.2.1
jiwer==2.3.0
wheel
torch
torchvision
引き続き以下を実行する。
pip install -r requirements.txt
mmcv-fullのインストールや、学習済みモデルのダウンロードを行う。以下のようなファイルを準備して、実行する。
prepare.py
import os
import torch
import json
print(torch.__version__)
torch_ver, cuda_ver = torch.__version__.split('+')
PROJECT_DIR = os.getcwd()
os.system(f'pip install mmcv-full==1.5.3 -f https://download.openmmlab.com/mmcv/dist/{cuda_ver}/torch{torch_ver}/index.html --no-cache-dir')
os.system(f'wget https://lab.ndl.go.jp/dataset/ndlkotensekiocr/trocr/models.zip -P {PROJECT_DIR}/src/text_kotenseki_recognition/')
os.system(f'cd {PROJECT_DIR}/src/text_kotenseki_recognition/ && unzip -o models.zip')
os.system(f'wget https://lab.ndl.go.jp/dataset/ndlkotensekiocr/layoutmodel/models.zip -P {PROJECT_DIR}/src/ndl_kotenseki_layout/')
os.system(f'cd {PROJECT_DIR}/src/ndl_kotenseki_layout/ && unzip -o models.zip')
os.system(f'cd {PROJECT_DIR}/')
os.system("wget https://dl.ndl.go.jp/api/iiif/2585098/R0000003/full/full/0/default.jpg -O example.jpg")
cpuで実行するに当たり、config.yml
のdevice
を修正する
config.yml
ndl_kotenseki_layout:
config_path: 'src/ndl_kotenseki_layout/models/ndl_kotenseki_layout_config.py'
checkpoint_path: 'src/ndl_kotenseki_layout/models/ndl_kotenseki_layout_v1.pth'
device: 'cpu' # ここを編集した。
'score_thr': 0.3
text_kotenseki_recognition:
saved_preprocessor_model: 'src/text_kotenseki_recognition/models/trocr-base-preprocessor'
saved_tokenize_model: 'src/text_kotenseki_recognition/models/decoder-roberta-v3'
saved_ocr_model: 'src/text_kotenseki_recognition/models/kotenseki-trocr-honkoku-v3'
accept_empty: True
batch_size: 100
device: 'cpu' # ここを編集した。
kotenseki_reading_order:
checkpoint_path: 'src/kotenseki_reading_order/models/kotenseki_reading_order_model.joblib'
実行
処理対象のフォルダと画像の準備
mkdir -p input/img
mv example.jpg input/img
mkdir -p tmp/output
実行
python main.py infer input tmp/output
まとめ
推論に時間がかかってもよい環境などで、参考になりましたら幸いです。
Discussion