
YOLOv12で署名検出を試してみた
こんにちは!コンサルティング部のくろすけです!
マネージドに SageMaker を使いこなしたいと思い、前準備としてローカル環境で物体検出を試してみることにしました。
「YOLOv12」を使って署名検出にチャレンジしてみたので、その手順と結果を共有します!
YOLOとは?
YOLO(You Only Look Once)は、ワシントン大学のJoseph RedmonとAli Farhadiによって開発された、広く普及している物体検出および画像セグメンテーションモデルです。
環境構築
必要なライブラリのインストール
まず、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枚の画像が含まれています。
データセットの設定は、YAMLファイルで定義します。
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.pt と last.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にしましたがアップロードできるまで圧縮した影響で画質が落ちてしまいました。
見辛いと思いますが、ご容赦いただければと思います。

圧縮した影響で見辛いですが、実際はクリアで、よく検出できていました!
ただし学習データを見るとわかるんですが、データセットが完全に今回の推論ファイル専用のものです。
のでオーバーフィッティングしており、他の署名画像などにおいてはうまく検出できませんでした。
つまづきポイントまとめ
今回つまづいたポイントをまとめます。
- 重みファイルの保存先
../../runs/detect/train/weights/に保存されます。 - 推論結果の保存設定
save=Trueを指定しないと、推論結果を付与した出力ファイルが保存されないので注意。 - 推論結果の保存先
../../runs/detect/predict/に保存されます。
あとがき
どうやら YOLO は GPU を搭載していると、勝手に GPU を使ってくれるようです。
CPU だとどうしても遅いな...という印象でしたので、GPU を搭載した環境でも試してみたいと思います。
ただ数行でファインチューニングしてくれたので、めちゃめちゃ簡単だなという印象です。
YOLO の使用感がわかったので、次回は SageMaker を活用したモデル学習と推論を試してみたいと思います!
YOLO の論文も読んでみようかな。
以上、くろすけでした!
参考資料









