操作手順書

YOLOv9 (MultimediaTechLab/YOLO) をバックエンドとしたオブジェクト検出モデルの学習〜配布変換までを行うアプリケーションです。本手順書では、データセット準備から学習、ONNX / TFLite / Core ML 各形式への変換、配布用アーカイブの取得までを順を追って説明します。

目次
  1. 前提条件
  2. データセット要件 (ZIP の中身)
  3. 基本操作の流れ
  4. セットアップ画面の使い方
  5. 学習中の進捗確認
  6. 変換結果と配布アーカイブ
  7. 既存プロジェクトの「変換のみ再実行」
  8. モバイル組み込みガイド
  9. トラブルシューティング
  10. 自動チューニングパラメータ一覧

1. 前提条件

2. データセット要件 (ZIP の中身)

アップロードする .zip は COCO 形式を想定しています。最低限以下の構造が必要です。

your_dataset.zip
├── annotations/
│   └── instances_train.json          ← COCO アノテーション
└── images/
    ├── 0001.jpg
    ├── 0002.jpg
    └── ...
破損画像の自動除外: 展開時の CRC エラーや、JPEG デコード時の壊れたバイト列は自動でスキップされます。残骸は学習対象から外れます。

3. 基本操作の流れ

  1. ホーム画面で「データ生成」を選択 → セットアップ画面へ
  2. ZIP をドラッグ&ドロップでアップロード
  3. プロジェクト名 (任意。空欄で自動採番)
  4. 学習数 (epoch)、モデルタイプ、データ拡張の有無を選択
  5. 準備 ボタンを押下し設定確定
  6. 実行 ボタンを押下し学習開始
  7. 進捗グラフが自動更新され、AP @ .5 / .5:.95 などが可視化
  8. 学習完了後、自動で ONNX → TFLite (各サイズ) → Core ML mlpackage の変換が走る
  9. 「プロジェクトをダウンロード」ボタンで成果物 ZIP を取得

4. セットアップ画面の使い方

4-1. プロジェクト名

未入力なら YYYYMMDDHHMMSS 形式で自動採番されます。半角英数・アンダースコア・ハイフンのみ使用可。日本語不可。

4-2. データ入力

ドロップゾーンへ ZIP をドラッグ、またはクリックでファイル選択。アップロード成功で「学習数」「Type」「データ拡張」が有効化されます。

4-3. 学習数 (epoch)

20〜500 の範囲。データ枚数に応じて目安:

画像枚数推奨 epoch
< 100150〜300
100〜500100〜200
500〜200075〜150
2000+50〜100

短い epoch では warmup が学習を食い潰すケースがあるため、内部で warmup epoch は総 epoch の 10% を上限に自動短縮しています。

4-4. Type (モデルサイズ)

TypeモデルFLOPs用途目安
nanoYOLOv9-T7.7GiPhone / 軽量 Android, 高速プレビュー
tinyYOLOv9-S26.4G汎用バランス型
middleYOLOv9-M76.8Gサーバー / 高精度モバイル
highYOLOv9-C102.1Gサーバー側オフライン解析向け

4-5. データ拡張

ON にすると Mosaic + RandomCrop が有効化されます。少枚数 (<100) では Mosaic 確率を自動で 0.3 に下げ、合成画像偏重を防いでいます。

4-6. 準備 / 実行 / キャンセル

5. 学習中の進捗確認

5-1. 進捗グラフ (Loss)

BoxLoss / DFLLoss / BCELoss と total_loss が epoch ごとに記録され折れ線で表示されます。最初の 10 epoch で単調減少していない場合は学習が破綻している可能性があります (ログ確認推奨)。

5-2. AP / AR グラフ

AP @ .5:.95 (mAP) と AP @ .5 を validation epoch ごとに描画。急上昇後プラトーが典型的な学習曲線。ずっと 0 のままなら設定の見直しが必要。

5-3. ETA (終了予定時刻)

直近 5 epoch の平均所要時間から残り時間を逆算しています。最初の 1〜2 epoch はキャッシュ生成・cuDNN benchmark が走るため遅く見えますが、3 epoch 目以降で安定します。

6. 変換結果と配布アーカイブ

学習完了直後、サブプロセスで以下が順次生成されます。

6-1. 出力ファイル一覧 (exports/)

ファイル用途
{project}.onnxONNX 単体 (640×640, opset 11)
{project}_320.tfliteTFLite FP16 320×320
{project}_416.tfliteTFLite FP16 416×416
{project}_416_litert.tfliteLiteRT 再変換版 416×416 (実験的)
{project}_480.tfliteTFLite FP16 480×480
{project}_640.tfliteTFLite FP16 640×640
{project}_640_litert.tfliteLiteRT 再変換版 640×640 (実験的)
label.txt1 行 1 クラス名
{project}.tflite.zip★ Android 配布用: 全 TFLite + label.txt
{project}.mlpackage/Core ML simple モード (Swift で NMS 必要)
{project}.metadata.jsonCore ML サイドカー (クラス名 / 入出力レイアウト)
{project}.coreml.zip★ iOS 配布用: mlpackage + metadata.json

6-2. プロジェクトダウンロード

「プロジェクトをダウンロード」ボタンを押すと、学習成果物 + exports/ 全体を含む ZIP がダウンロードされます。モバイルへ組み込む場合は ZIP 内の {project}.tflite.zip または {project}.coreml.zip を取り出してください。

7. 既存プロジェクトの「変換のみ再実行」

変換設定 (出力サイズ・LiteRT 有効化など) を変更した後、再学習せずに変換だけやり直したい場合に使用します。

7-1. 操作手順

  1. 「プロジェクト一覧」から該当プロジェクトの 選択 ボタン押下
  2. セットアップ画面が学習完了状態 (グラフ表示) で開く
  3. 「変換のみ再実行」ボタン押下
  4. 確認ダイアログで OK
  5. 「変換実行中…」と表示され、バックグラウンドで exports/ が再生成される
  6. 完了後 (約 3〜10 分) に「プロジェクトをダウンロード」を再押下

7-2. 必要なデータ (プロジェクト内に存在していること)

ファイル / ディレクトリ用途
setup_config.jsonbackend / type_selected / type_folder / model_name の解決
yolo_project_config/Hydra 設定 (class_num / class_list / image_size 含む)
runs/train/{project}/checkpoints/*.ckptLightning 学習済みチェックポイント

上記いずれかが欠けていると 400 エラーが返ります。プロジェクト削除後は再生成不可なので削除前に必ずダウンロードしてください。

8. モバイル組み込みガイド

8-1. Android (TFLite)

{project}.tflite.zip を展開し、用途に合うサイズの .tflite と label.txt を app/src/main/assets/ に配置。

サイズ速度 (Snapdragon 8 Gen 1 NNAPI)用途
320~10〜15 ms近距離検出 / プレビュー
416~15〜25 ms汎用
480~25〜35 ms中距離
640~40〜70 ms遠距離 / 小物体

LiteRT 版 (_litert サフィックス) は tf.lite.TFLiteConverter 経由で再変換した最適化版。新しい LiteRT ランタイム (ai_edge_litert.interpreter) で動作確認用。

8-2. iOS (Core ML)

{project}.coreml.zip を展開し .mlpackage と .metadata.json を Xcode プロジェクトに追加。

モデル出力 predictions の形状:

[num_anchors, 4 + num_classes]
  列 0..3: cx, cy, w, h (画像サイズで正規化済み 0..1)
  列 4..C: 各クラスの sigmoid 確率

Swift 側で 閾値フィルタ + NMS + 描画 を実装してください。metadata.json には classes / suggested_thresholds が入っているので参照可能。

9. トラブルシューティング

9-1. AP がずっと 0 / loss が動かない

9-2. GPU OOM

選択した Type を 1 段階下げる、または管理者にバッチサイズ閾値の調整を依頼。Mosaic 増強は VRAM を約 1.5 倍消費します。

9-3. 学習中に「予測不可」が出続ける

1 epoch も完了していない状態 (warmup や初回キャッシュ生成中)。 3〜5 分待って 1 epoch 完了すれば ETA 計算が始まります。

9-4. Xcode で .mlpackage を開いた瞬間にクラッシュ

simple モード mlpackage は対応済み。pipeline 版 (_pipeline.mlpackage) は Xcode 26 でクラッシュ報告あり。simple 版を使用してください。

9-5. 「変換のみ再実行」が 400 エラー

プロジェクトディレクトリ内に必要ファイル (上記 7-2) が揃っているか確認。手動削除や ZIP 抽出ミスで欠落することがあります。

10. 自動チューニングパラメータ一覧

システムが画像枚数 / 総 epoch / VRAM から内部で自動決定するパラメータ。学習時 app.log に出力されます。

パラメータ 決定ルール 例 (39 枚, 20 epoch, RTX 4090)
batch_size Type と VRAM から表引き v9-t: 32
num_workers CPU コア数 / 2, 上限 16 16
equivalent_batch_size min(64, batch × (batches/epoch ÷ 10)) 32 (累積 1 = 毎バッチ step)
warmup.epochs min(3.0, total_epoch × 0.1) 2.0
optimizer.lr <100=0.001 / <500=0.005 / その他=0.01 0.001
data_augment.Mosaic <100=0.3 / <500=0.5 / その他=1.0 (augOn 時) 0.3 (augOff なら無効化)
fp16 / pin_memory / cache VRAM 8GB以上で fp16 on, RAM 32GB 以上で cache on fp16=on, cache=on

手動で上書きしたい場合は管理者にお問い合わせください。設定は app.py 内のヘルパー関数 (resolve_learning_rate / resolve_mosaic_prob / resolve_equivalent_batch_size / resolve_warmup_epochs / choose_batch_size) で集中管理されています。


最終更新: アプリケーション内蔵