YOLOX 学習方法ガイド

YOLOX 学習方法ガイド

1. はじめに

たびたびBlogに紹介しているYOLOX は高速・高精度な物体検出モデルとして注目されています。本稿では、YOLOX の学習準備からハイパーパラメータ調整、トラブルシューティングまで、ステップごとに解説します。初心者でも迷わないよう、具体的なコマンド例や設定ファイル例を交えて説明します。

1.5. YOLOX のメリット

  • アンカーフリー設計でボックス予測がシンプルかつ高速
  • Decoupled Head による検出性能向上と学習安定性
  • Mosaic や MixUp、RandomAffine といった強力なデータ拡張で汎化性能が高い
  • 学習率ウォームアップやコサインアニーリングなど最新の学習スケジューラを搭載
  • FP16 対応でメモリ効率が良く、大規模バッチ学習が可能
  • 公式実装が豊富な設定例(YOLOX-S/M/L/X)を用いた迅速な実験開始が可能
  • ONNX/TensorRT 変換で推論最適化し、リアルタイム応用に適合

2. 環境構築

2.1 Python と依存ライブラリ

  • Python 3.8〜3.10 を推奨。
  • 仮想環境の作成:
    python -m venv yolox_env
    source yolox_env/bin/activate
  • 必要パッケージ:
    pip install torch torchvision cython -f https://download.pytorch.org/whl/torch_stable.html
    pip install -U pip
    pip install -r requirements.txt

2.2 YOLOX のクローン

git clone https://github.com/Megvii-BaseDetection/YOLOX.git
cd YOLOX
pip install -v -e .  # 開発モードでインストール

3. データセット準備

3.1 COCO フォーマットへの変換

独自データセットを使用する場合、COCO 形式に変換します。アノテーションは JSON 形式で以下の構成が必要です。

  • images/ フォルダ:画像ファイル
  • annotations/instances_train2017.json:学習用ラベル
  • annotations/instances_val2017.json:検証用ラベル

3.2 データの分割

学習用と検証用を 8:2 などで分割します。スクリプト例:

python tools/train_val_split.py --input_dir ./dataset --out_dir ./coco_dataset --val_ratio 0.2

4. 設定ファイル(.yaml)

YOLOX では exps/default/yolox_s.py のような Python スクリプトで設定を管理します。主なパラメータ:

  • num_classes:クラス数
  • input_size:入力解像度(例:640)
  • random_size:ランダムリサイズバッチの範囲
  • batch_size:バッチサイズ
  • max_epoch:最大エポック数
  • lr:初期学習率

例:

exp = {
    "name": "yolox_s_custom",
    "num_classes": 3,
    "input_size": (640, 640),
    "random_size": (10, 20),
    "batch_size": 16,
    "max_epoch": 50,
    "lr": 0.01,
}

5. 学習実行

基本的なコマンド:

python tools/train.py -f exps/default/yolox_s.py -d 1 -b 16 --fp16 -o
  • -d:GPU 数
  • -b:バッチサイズ
  • --fp16:半精度(AMP)有効
  • -o:オプティマイザ設定読み込み

学習中は TensorBoard でログを可視化できます。

tensorboard --logdir runs/

6. ハイパーパラメータ調整

6.1 学習率スケジューラ

Cosine Annealing や StepLR を試し、収束スピードと最終 mAP を改善します。

6.2 バッチサイズ

バッチサイズが大きいほど安定しますが、GPU メモリに注意。小さい場合は学習率を下げるなどの工夫を。

6.3 データ拡張

  • Mosaic:4 画像を結合して学習させる
  • MixUp:2 画像を重ねてラベルを補間
  • RandomFlip / ColorJitter:基本拡張

7. 検証と評価

学習後、検証データで mAP (0.5:0.95) を算出:

python tools/eval.py -n yolox-s -c ./weights/yolox_s.pth -b 16 -d 1 --conf 0.001

結果は JSON 形式でも出力可能。低い場合は前節のハイパーパラメータを見直しましょう。

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

8.1 学習が進まない

  • 学習率が高すぎる → 小さくする
  • データバランスが偏っている → リサンプリング
  • バッチサイズが小さい → 小さくてもレイヤノルムを追加

8.2 オーバーフィッティング

  • データ拡張の強化
  • 早期停止(EarlyStopping)の導入
  • 重み減衰(weight decay)の調整

9. 推論とデプロイ

9.1 ONNX エクスポート

python tools/export_onnx.py -n yolox-s -c ./weights/yolox_s.pth --opset 12

9.2 TensorRT 最適化

エクスポートした ONNX モデルを TensorRT で最適化して高速推論。

trtexec --onnx=yolox_s.onnx --fp16 --saveEngine=yolox_s.trt

10. まとめと次のステップ

本ガイドでは、YOLOX の環境構築からデータ準備、学習、評価、推論までを網羅しました。 まずは公式の YOLOX リポジトリ を参照し、小規模データで動作確認後にカスタマイズを加えていくことをおすすめします。

11. ライセンスと商用利用に関する注意

YOLOX は Apache License 2.0 のもとで提供されています。商用・非商用利用ともにほぼ制限なく利用可能ですが、以下の点にご注意ください。

  • 著作権表示およびライセンス文をソースコードに含める必要があります。
  • 派生物(ファインチューニング済モデルや改変コード)を再配布する場合も、同じライセンスを適用する必要はありませんが、元のライセンス文を明示することが推奨されます。
  • 学習時に利用するデータセットや前処理ツールに別ライセンスのものが含まれる場合、そのライセンス条件にも従う必要があります。
  • ONNX や TensorRT など他のフレームワークに変換・組み込んで利用する際、変換後のライブラリやプラグインのライセンスを確認してください。
  • 特許権や商標権など、ライセンス外の知的財産権は適用外ですので注意が必要です。

弊社 © 株式会社ビー・ナレッジ・デザイン ではYOLOXをメインに物体認識を行っています。理由はライセンストラブルが少ない、拡張可能といったものだけでなく、上で紹介した内容をWebブラウザ上で最小の手続きにて、学習やその学習内容をグラフ等に可視化するカスタマイズツールを準備しています。簡易に使いたい、システムの構成等でお悩みの方はお問い合わせください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA