YOLOv11xと日本古典籍くずし字データセットを用いた文字の検出モデルの構築
概要
YOLOv11xと日本古典籍くずし字データセットを用いた文字の検出モデルの構築を行う機会がありましたので、備忘録です。
参考
過去に、YOLOv5を用いて同様のことを行いました。以下のspacesで動作デモや学習済みモデルをご確認いただけます。
以下は、「国宝 金沢文庫文書データベース」の公開画像に対する適用例です。
YOLOv11を用いることで、文字検出の精度向上を狙うことが目的です。
データセットの作成
「日本古典籍くずし字データセット」をダウンロードし、yoloで求められる形式に整形します。
形式は以下などで確認することができます。
画像のサイズを1280x1280に設定
以下のUltralytics HUBを使用しました。
以下が学習結果です。
テストデータに対して適用したところ、良い精度がでる画像データ(例:「『源氏物語』(東京大学総合図書館所蔵)」)もあれば、
あまり良い精度がでない画像データ(例:「国宝 金沢文庫文書データベース」)もありました。
画像のサイズを640x640に設定
エポック数が10の場合
エポック数が10の場合は、エポック数が10の場合、学習が完全に収束していない可能性がありました。
一方、エポック数が少ないにも関わらず、テストデータに対しては、1280x1280のものより良い結果を示すようでした。
エポック数が100の場合
from ultralytics import YOLO
# YOLOv8の分類モデルをロード
model = YOLO('yolo11x.pt') # Nanoサイズの分類モデル
# データセットとトレーニング設定
model.train(
data='/home/mdxuser/yolo/chars_640_split/data.yaml', # データセットのパス
epochs=100, # エポック数
# imgsz=224, # 入力画像サイズ
batch=24 # バッチサイズ(オプション)
)
バッチサイズが16(デフォルト)では、GPUメモリの使用率が低く、32に設定すると、OutOfMemoryErrorになってしまいました。
torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 4.49 GiB. GPU 0 has a total capacity of 39.39 GiB of which 4.46 GiB is free. Including non-PyTorch memory, this process has 34.92 GiB memory in use. Of the allocated memory 31.86 GiB is allocated by PyTorch, and 2.49 GiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)
バッチサイズが24
Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size
1/100 34.2G 1.749 1.258 1.147 7272 640: 21%|██ | 33/158 [00:14<00:49, 2.50it/s]
結果は以下のようになりました。
テストデータに対しては、以下の結果になりました。
yolov5で構築したモデルと比べて、劇的に精度が向上しているようには見えませんが、画像のサイズを1280x1280に設定したモデルに比べると、検出精度が向上しているように感じられました。
Hugging Face
構築したモデルを用いたスペースを以下で公開しています。
まとめ
mdx.jpや日本古典籍くずし字データセットを用いた物体検出モデルの構築にあたり、参考になりましたら幸いです。
Discussion