YOLOv12で署名検出を試してみた

YOLOv12で署名検出を試してみた

2025.10.29

こんにちは!コンサルティング部のくろすけです!

マネージドに SageMaker を使いこなしたいと思い、前準備としてローカル環境で物体検出を試してみることにしました。
「YOLOv12」を使って署名検出にチャレンジしてみたので、その手順と結果を共有します!

YOLOとは?

YOLO(You Only Look Once)は、ワシントン大学のJoseph RedmonとAli Farhadiによって開発された、広く普及している物体検出および画像セグメンテーションモデルです。

抜粋:Ultralytics YOLOドキュメント

環境構築

必要なライブラリのインストール

まず、Ultralyticsライブラリをインストールします。
このライブラリには、YOLOv12の実装とデータセットのダウンロード機能が含まれています。

pip install ultralytics

version を確認してみると、こんな感じです。
YOLOv12 使うなら 12.. じゃないの?と思いましたが、ライブラリのバージョンと YOLO バージョンは別でした。
モデルをロードする際に YOLO のバージョンを選択可能です。

$ yolo version
8.3.221

実行環境

  • CPU: Apple M3 Pro
  • GPU: なし
  • メモリ: 16GB
  • Python 3.13.1

データセット準備

今回は、Ultralyticsが提供する署名検出用のデータセットを使用しました。このデータセットには、学習用143枚、検証用35枚の画像が含まれています。

https://docs.ultralytics.com/ja/datasets/detect/signature/

データセットの設定は、YAMLファイルで定義します。
YAMLファイルは下記からダウンロードできます。

https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/signature.yaml

データセット自体は学習時に自動的にダウンロードされるため、手動でのダウンロードは不要です。

モデル学習

学習コードは非常にシンプルです。事前学習済みのYOLOv12 nanoモデルをベースに、ファインチューニングを行います。
自分の環境だと、学習完了までに 1時間40分 くらいかかりました。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo12n.pt")  # load pretrained model

# Train the model
results = model.train(data="signature.yaml", epochs=100, imgsz=640)

学習パラメータの説明

  • yolo12n.pt: YOLOv12のnano(最軽量)モデル
  • epochs=100: 100エポック学習
  • imgsz=640: 入力画像サイズを640x640にリサイズ

出力重みファイル

ファインチューニングした重みファイルはデフォルトでは、../../runs/detect/train/weights/ に保存されます。
出力重みファイルは、best.ptlast.pt の2つが生成されます。
best.pt がトレーニング中に最も精度が良かったモデルの重みになりますので、基本的にはこちらを使用します。

推論実行

学習したモデルを使って、実際に署名検出を試してみます。

推論対象ファイル(https://ultralytics.com/assets/signature-s.mp4)は勝手にダウンロードして、推論結果を保存してくれます。
後述しますが、むしろこのファイルでないとうまく推論できないので注意。

from ultralytics import YOLO

# Load a model
model = YOLO("../../runs/detect/train/weights/best.pt")  # load fine-tuned model

# Inference using the model
results = model.predict("https://ultralytics.com/assets/signature-s.mp4", conf=0.75, save=True)

推論パラメータの説明

  • best.pt: 学習で最も精度が良かったモデルの重み
  • conf=0.75: 信頼度閾値(75%以上の確信度で検出したもののみ表示)
  • save=True: 結果を画像/動画ファイルとして保存

公式ドキュメントでは、save パラメータが指定されていませんでした。
実際には指定しないと、推論結果を付与した出力ファイルが保存されなかったので注意。

検出結果

推論結果は、../../runs/detect/predict/ に保存されます。
動画でお見せしたかったので、gifにしましたがアップロードできるまで圧縮した影響で画質が落ちてしまいました。
見辛いと思いますが、ご容赦いただければと思います。

yolo-signature-detection

圧縮した影響で見辛いですが、実際はクリアで、よく検出できていました!
ただし学習データを見るとわかるんですが、データセットが完全に今回の推論ファイル専用のものです。
のでオーバーフィッティングしており、他の署名画像などにおいてはうまく検出できませんでした。

つまづきポイントまとめ

今回つまづいたポイントをまとめます。

  1. 重みファイルの保存先
    ../../runs/detect/train/weights/に保存されます。
  2. 推論結果の保存設定
    save=True を指定しないと、推論結果を付与した出力ファイルが保存されないので注意。
  3. 推論結果の保存先
    ../../runs/detect/predict/に保存されます。

あとがき

どうやら YOLO は GPU を搭載していると、勝手に GPU を使ってくれるようです。
CPU だとどうしても遅いな...という印象でしたので、GPU を搭載した環境でも試してみたいと思います。

ただ数行でファインチューニングしてくれたので、めちゃめちゃ簡単だなという印象です。

YOLO の使用感がわかったので、次回は SageMaker を活用したモデル学習と推論を試してみたいと思います!
YOLO の論文も読んでみようかな。
以上、くろすけでした!

参考資料

https://docs.ultralytics.com/ja/

この記事をシェアする

FacebookHatena blogX

関連記事