YOLO Vision 2026:

YOLOv5をカスタムデータで学習する#

📚 このガイドでは、YOLOv5モデルを使用して独自のカスタムデータセットをトレーニングする方法を説明します🚀。カスタムモデルのトレーニングは、一般的なオブジェクト検出を超えて、特定の現実世界のアプリケーションにコンピュータビジョンソリューションを適応させるための基本的なステップです。

始める前に#

まず、必要な環境が整っていることを確認してください。YOLOv5リポジトリをクローンし、requirements.txtから必要な依存関係をインストールします。Python>=3.8.0およびPyTorch>=1.8の環境が不可欠です。モデルとデータセットがローカルに見つからない場合は、最新のYOLOv5リリースから自動的にダウンロードされます。

git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependencies

カスタムデータでの学習#

Ultralytics active learning loop diagram

カスタムオブジェクト検出モデルの開発は、反復的なプロセスです。

  1. 画像の収集と整理: 特定のタスクに関連する画像を収集します。高品質で多様なデータが不可欠です。データ収集とアノテーションに関するガイドをご覧ください。
  2. オブジェクトにラベルを付ける: 画像内の対象オブジェクトに正確にアノテーションを施します。
  3. モデルのトレーニング: アノテーション付きデータを使用して、YOLOv5モデルをトレーニングします。事前学習済み重みから始めて、転移学習を活用してください。
  4. デプロイと予測: トレーニング済みのモデルを使用して、新しい未知のデータに対する推論を実行します。
  5. エッジケースの収集: モデルのパフォーマンスが低下するシナリオ(エッジケース)を特定し、ロバスト性を向上させるために同様のデータをデータセットに追加します。このサイクルを繰り返します。

Ultralytics Platformは、データセット管理、モデルのトレーニング、デプロイを含む、この機械学習オペレーション (MLOps)サイクル全体に対して、コード不要の合理化されたソリューションを提供します。

ライセンス

Ultralytics は、多様な使用シナリオに対応するため、2つのライセンスオプションを提供しています:

  • AGPL-3.0ライセンス: このOSI承認済みのオープンソースライセンスは、オープンなコラボレーションと知識の共有に情熱を注ぐ学生、研究者、愛好家に最適です。派生物を同じライセンスの下で共有することが求められます。詳細については、LICENSEファイルをご覧ください。
  • Enterprise License: 開発および本番環境での使用において、このライセンスにより、AGPL-3.0のオープンソース要件をバイパスして、UltralyticsのソフトウェアとAIモデルを内部ツール、自動化ワークフロー、本番デプロイメントなどのビジネス製品やサービスにシームレスに統合できます。開始するには、Ultralytics Licensingからお問い合わせください。

ライセンスオプションの詳細については、Ultralytics ライセンスページをご覧ください。

学習を開始する前に、データセットの準備が不可欠です。

1. データセットを作成する#

YOLOv5 モデルがオブジェクトクラスの視覚的特徴を学習するには、ラベル付けされたデータが必要です。データセットを適切に整理することが鍵となります。

1.1 dataset.yamlの作成#

データセット設定ファイル(例:coco128.yaml)には、データセットの構造、クラス名、画像ディレクトリへのパスが記述されています。COCO128は、広範なCOCOデータセットからの最初の128枚の画像で構成される、小規模なサンプルデータセットとして機能します。これは、トレーニングパイプラインを素早くテストし、過学習などの潜在的な問題を診断するのに役立ちます。

dataset.yamlファイルの構造には以下が含まれます:

  • path: データセットを含むルートディレクトリ。
  • trainvaltest: トレーニング、検証、およびテストセットの画像または画像パスをリストしたテキストファイルを含むディレクトリへの、pathからの相対パス。
  • names: クラスインデックス(0から開始)を対応するクラス名にマッピングする辞書。

YOLOv5リポジトリのルートからトレーニングを起動するときに、pathを絶対ディレクトリ(例:/home/user/datasets/coco128)または../datasets/coco128などの相対パスのいずれかに設定できます。

以下はcoco128.yamlの構造です(GitHubで表示):

# Dataset root directory relative to the yolov5 directory
path: coco128

# Train/val/test sets: specify directories, *.txt files, or lists
train: images/train2017 # 128 images for training
val: images/train2017 # 128 images for validation
test: # Optional path to test images

# Classes (example using 80 COCO classes)
names:
    0: person
    1: bicycle
    2: car
    # ... (remaining COCO classes)
    77: teddy bear
    78: hair drier
    79: toothbrush

1.2 自動ラベル付けのためのモデルを活用する#

手動ラベル付けは一般的ですが、時間がかかります。ファウンデーションモデルは、アノテーションを自動化または半自動化し、データセット作成を高速化できます。ラベル生成に役立つモデルの例:

  • Google Gemini: Geminiのような大規模マルチモーダルモデルは、強力な画像理解機能を備えています。これらは、画像内のオブジェクトを特定して位置を特定し、YOLO形式のラベルに変換できるバウンディングボックスや説明を生成するようにプロンプトを指示できます。提供されているチュートリアルノートブックでその可能性を探ってみてください。
  • SAM2 (Segment Anything Model 2): SAM2のようなセグメンテーションに焦点を当てた基盤モデルは、高精度でオブジェクトを識別および輪郭描画できます。主にセグメンテーション用ですが、結果として得られるマスクは、オブジェクト検出タスクに適したバウンディングボックスアノテーションに変換できることがよくあります。
  • YOLOWorld: このモデルは、オープン語彙検出機能を提供します。関心のあるオブジェクトのテキスト説明を提供すると、YOLOWorldはそれらの特定のクラスに対する事前のトレーニングを行わずに、画像内でそれらを見つけることができます。これは、初期ラベルを生成するための出発点として使用でき、その後洗練させることができます。

これらのモデルを使用すると「事前ラベリング」ステップを提供でき、必要な手動作業を削減できます。ただし、品質がトレーニングされたYOLOv5モデルのパフォーマンスに直接影響するため、正確性と一貫性を確保するために、自動生成されたラベルを確認して洗練させることが不可欠です。ラベルを生成(および必要に応じて洗練)した後、それらがYOLO形式に準拠していることを確認してください。画像ごとに1つの*.txtファイルがあり、各行はclass_index x_center y_center width height(正規化された座標、0から始まるインデックスのクラス)としてオブジェクトを表します。画像に対象のオブジェクトがない場合、対応する*.txtファイルは必要ありません。

YOLO形式の*.txtファイルの仕様は正確です:

  • オブジェクトのバウンディングボックスごとに1行。
  • 各行には次を含める必要があります: class_index x_center y_center width height
  • 座標は0から1の範囲に正規化されている必要があります。これを達成するには、x_centerおよびwidthのピクセル値を画像の総幅で割り、y_centerおよびheightを画像の総高さで割ります。
  • クラスインデックスは0から始まります(つまり、最初のクラスは0で表され、2番目は1などで表されます)。

Example image with two persons and a tie annotated

2つの「人」オブジェクト(クラスインデックス0)と1つの「ネクタイ」オブジェクト(クラスインデックス27)を含む、上記の画像に対応するラベルファイルは次のようになります:

YOLO format label file content example

1.3 ディレクトリを整理する#

データセットディレクトリを以下のように構成します。デフォルトでは、YOLOv5はデータセットディレクトリ(例:/coco128)が、/yolov5リポジトリディレクトリの隣に配置された/datasetsフォルダ内に存在することを想定しています。

YOLOv5は、画像パス内の最後の/images/インスタンスを/labels/に置き換えることで、各画像のラベルを自動的に見つけます。例:

../datasets/coco128/images/im0.jpg # Path to the image file
../datasets/coco128/labels/im0.txt # Path to the corresponding label file

推奨されるディレクトリ構造は以下の通りです:

/datasets/
└── coco128/  # Dataset root
    ├── images/
    │   ├── train2017/  # Training images
    │   │   ├── 000000000009.jpg
    │   │   └── ...
    │   └── val2017/    # Validation images (optional if using same set for train/val)
    │       └── ...
    └── labels/
        ├── train2017/  # Training labels
        │   ├── 000000000009.txt
        │   └── ...
        └── val2017/    # Validation labels (optional if using same set for train/val)
            └── ...

YOLOv5 recommended dataset directory structure

2. モデルを選択する#

トレーニングプロセスを開始するために事前学習済みモデルを選択します。事前学習済み重みから開始すると、最初からトレーニングするのと比較して学習が大幅に加速し、パフォーマンスが向上します。YOLOv5にはさまざまなモデルサイズがあり、それぞれ速度と精度のバランスが異なります。たとえば、YOLOv5sは2番目に小さく最も高速なモデルであり、リソースが制限された環境に適しています。利用可能なすべてのモデルの詳細な比較については、READMEテーブルを参照してください。

Comparison chart of YOLOv5 models showing size, speed, and accuracy

3. 学習#

train.pyスクリプトを使用してモデルのトレーニングを開始します。重要な引数には以下が含まれます:

  • --img: 入力画像サイズ(例:--img 640)を定義します。サイズが大きいほど通常は精度が向上しますが、より多くのGPUメモリが必要になります。
  • --batch: バッチサイズ(例:--batch 16)を決定します。GPUが処理できる最大のサイズを選択してください。
  • --epochs: トレーニングエポックの総数(例:--epochs 100)を指定します。1エポックは、トレーニングデータセット全体に対する1回のフルパスを表します。
  • --data: dataset.yamlファイルへのパス(例:--data coco128.yaml)。
  • --weights: 初期重みファイルへのパス。より早い収束と優れた結果を得るために、事前学習済みの重み(例:--weights yolov5s.pt)を使用することを強くお勧めします。ゼロからトレーニングするには(非常に大規模なデータセットと特定のニーズがない限り推奨されません)、--weights '' --cfg yolov5s.yamlを使用してください。

ローカルに見つからない場合、事前学習済みの重みは最新のYOLOv5リリースから自動的にダウンロードされます。

# Example: Train YOLOv5s on the COCO128 dataset for 3 epochs
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt
学習速度の最適化

💡 --cache ramまたは--cache diskを使用して、データセット画像をRAMまたはローカルディスクにそれぞれキャッシュします。これにより、特にデータセットのI/O(入力/出力)操作がボトルネックになっている場合に、トレーニングが劇的に加速します。これには、実質的なRAMまたはディスク容量が必要になることに注意してください。

ローカルデータストレージ

💡 常にローカルに保存されたデータセットを使用して学習してください。ネットワークドライブ(Google Driveなど)やリモートストレージからのデータアクセスは、大幅に遅くなる可能性があり、学習パフォーマンスを妨げる可能性があります。データセットをローカル SSD にコピーするのがベストプラクティスです。

重みやログを含むすべてのトレーニング出力は、runs/train/ディレクトリに保存されます。各トレーニングセッションによって、新しいサブディレクトリ(例:runs/train/expruns/train/exp2など)が作成されます。インタラクティブで実践的な体験をするには、公式チュートリアルノートブックのトレーニングセクションをご覧ください: Open In Colab Open In Kaggle

4. 可視化#

YOLOv5 は、学習の進捗状況を可視化し、結果を評価し、パフォーマンスをリアルタイムで監視するためのさまざまなツールとシームレスに統合されています。

Comet のログ記録と可視化#

Cometは、包括的な実験追跡のために完全に統合されています。インタラクティブなComet Custom Panelsを使用して、メトリクスをライブで視覚化し、ハイパーパラメータを保存し、データセットとモデルチェックポイントを管理し、モデルの予測を分析します。

開始は簡単です:

pip install comet_ml                                                          # 1. Install Comet library
export COMET_API_KEY=YOUR_API_KEY_HERE                                        # 2. Set your Comet API key (create a free account at Comet.ml)
python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. Train your model - Comet automatically logs everything!

Comet統合ガイドでサポートされている機能について詳しく掘り下げます。公式ドキュメントからCometの機能の詳細を学びます。ライブデモのためにComet Colabノートブックをお試しください: Open In Colab

Comet UI showing YOLOv5 training metrics and visualizations

ClearML のログ記録と自動化#

ClearML統合により、詳細な実験追跡、データセットのバージョン管理、さらにはトレーニング実行の遠隔実行が可能になります。次の簡単な手順でClearMLをアクティベートします:

  • パッケージのインストール: pip install clearml
  • ClearMLの初期化: clearml-initを一度実行して、ClearMLサーバー(自己ホスト型または無料枠)に接続します。

ClearMLは、実験の詳細、モデルのアップロード、比較、コミットされていないコードの変更、およびインストールされたパッケージを自動的にキャプチャし、完全な再現性を確保します。ClearML Dataを使用して、リモートエージェントでトレーニングタスクを簡単にスケジュールし、データセットのバージョンを管理できます。詳細については、ClearML統合ガイドをご覧ください。

ClearML experiment management UI for YOLOv5

ローカルでのログ記録#

トレーニング結果はTensorBoardを使用して自動的に記録され、特定の実験ディレクトリ(例:runs/train/exp)内にCSVファイルとして保存されます。記録されるデータには以下が含まれます:

  • 学習と検証の損失、およびパフォーマンス指標。
  • 適用された拡張(モザイクなど)を示すサンプル画像。
  • 視覚的検査のための、モデル予測と並んだ正解ラベル。
  • 適合率-再現率(PR)曲線などの主要な評価指標。
  • クラスごとの詳細なパフォーマンス分析のための混同行列
YOLOv5 local logging results with charts and mosaics

results.csvファイルはエポックごとに更新され、トレーニング終了後にresults.pngとしてプロットされます。提供されているユーティリティ関数を使用して、任意のresults.csvファイルを手動でプロットすることもできます:

from utils.plots import plot_results

# Plot results from a specific training run directory
plot_results("runs/train/exp/results.csv")  # This will generate 'results.png' in the same directory

YOLOv5 results.png training metrics plot

5. 次のステップ#

トレーニングが正常に完了すると、最もパフォーマンスの高いモデルチェックポイント(best.pt)が保存され、デプロイまたはさらなる洗練の準備が整います。次の考えられるステップには次が含まれます:

  • CLIまたはPythonを介して、トレーニング済みモデルを使用して新しい画像や動画に対して推論を実行します。
  • 検証を実行して、さまざまなデータ分割(例:ホールドアウトテストセット)に対するモデルの精度と汎化性能を評価します。
  • 多様なプラットフォームでの最適化された推論のために、モデルをONNXTensorFlow SavedModelTensorRTなどのさまざまなデプロイメントフォーマットにエクスポートします。
  • ハイパーパラメータチューニングのテクニックを採用して、追加のパフォーマンス向上を絞り出す可能性があります。
  • 最適なトレーニング結果のためのヒントに従い、パフォーマンス分析に基づいてより多様で困難なデータを反復的に追加して、モデルの改善を続けます。

サポートされている環境#

Ultralyticsは、スムーズな開始を促進するために、CUDAcuDNNPythonPyTorchなどの重要な依存関係を備えた、すぐに使用できる環境を提供します。

プロジェクトの状態#

YOLOv5 Continuous Integration Status Badge

このバッジは、すべてのYOLOv5 GitHub Actions 継続的インテグレーション (CI)テストが正常に合格していることを示しています。これらの厳格なCIテストは、macOS、Windows、およびUbuntuオペレーティングシステムにわたって、トレーニング検証推論エクスポート、およびベンチマークを含むコア機能をカバーしています。テストは24時間ごとに、および各コードコミット時に自動的に実行され、一貫した安定性と最適なパフォーマンスを確保します。

よくある質問 (FAQ)#

  • カスタムデータセットでのYOLOv5のトレーニングには、いくつかの重要なステップが含まれます:

    1. データセットの準備: データを収集し、アノテーションを付けます。アノテーションが必須のYOLO形式であることを確認してください。画像とラベルをtrain/およびval/(およびオプションでtest/)ディレクトリに整理します。Google GeminiSAM2、またはYOLOWorldなどのモデルを使用して、ラベリングプロセスを支援または自動化することを検討してください(セクション1.2を参照)。
    2. 環境のセットアップ: YOLOv5リポジトリをクローンし、pip install -r requirements.txtを使用して依存関係をインストールします。
      git clone https://github.com/ultralytics/yolov5
      cd yolov5
      pip install -r requirements.txt
    3. データセット設定の作成: dataset.yamlファイルで、データセットパス、クラス数、およびクラス名を定義します。
    4. トレーニングの開始: train.pyスクリプトを実行し、dataset.yamlへのパス、希望する事前学習済みの重み(例:yolov5s.pt)、画像サイズ、バッチサイズ、エポック数を指定します。
      python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt
  • Ultralytics Platformは、コードを書く必要なしに、YOLOモデル開発ライフサイクル全体を合理化するように設計された包括的なプラットフォームです。主な利点は次のとおりです:

    • トレーニングの簡素化:事前構成済みの環境と直感的なユーザーインターフェースを使用して、モデルを簡単にトレーニングできます。
    • 統合されたデータ管理:データセットのアップロード、バージョン管理、管理をプラットフォーム内で効率的に行えます。
    • リアルタイム監視: CometやTensorBoardなどの統合ツールを使用して、トレーニングの進捗を追跡し、パフォーマンス指標を視覚化します。
    • コラボレーション機能:共有リソース、プロジェクト管理ツール、容易なモデル共有を通じてチームワークを促進します。
    • ノーコードデプロイメント:トレーニング済みのモデルを様々なターゲットに直接デプロイします。

    実践的なチュートリアルについては、ブログ記事「Ultralytics Platformでカスタムモデルをトレーニングする方法」をご覧ください。

  • 手動でアノテーションを行う場合でも、自動ツール(セクション1.2で言及したもの)を使用する場合でも、最終的なラベルはYOLOv5が必要とする特定のYOLO形式である必要があります:

    • 画像ごとに1つの.txtファイルを作成します。ファイル名は画像のファイル名と一致させる必要があります(例:image1.jpgimage1.txtに対応します)。これらのファイルを、images/ディレクトリと並行するlabels/ディレクトリ(例:../datasets/mydataset/labels/train/)に配置します。
    • .txtファイル内の各行は、1つのオブジェクトアノテーションを表し、次の形式に従います: class_index center_x center_y width height
    • 座標(center_xcenter_ywidthheight)は、画像の寸法に対して正規化されている(0.0から1.0の値)必要があります。
    • クラスインデックスは0ベースです(最初のクラスは0、2番目は1など)。

    多く手動アノテーションツールは、YOLO形式への直接のエクスポートを提供しています。自動化されたモデルを使用する場合は、それらの出力(例:バウンディングボックスの座標、セグメンテーションマスク)をこの特定の正規化されたテキスト形式に変換するスクリプトまたはプロセスが必要です。最終的なデータセット構造がガイドに示されている例に準拠していることを確認してください。詳細については、データ収集およびアノテーションガイドをご覧ください。

  • Ultralyticsは、異なるニーズに合わせて柔軟なライセンスを提供しています:

    • AGPL-3.0ライセンス: このオープンソースライセンスは、学術研究、個人的なプロジェクト、およびオープンソースへの準拠が許容される状況に適しています。変更および派生物もAGPL-3.0の下でオープンソース化されることを義務付けています。AGPL-3.0ライセンスの詳細を確認してください。
    • エンタープライズライセンス: プロプライエタリな製品やサービスにYOLOv5を統合する企業向けに設計された商用ライセンスです。このライセンスはAGPL-3.0のオープンソースの義務を排除し、クローズドソースでの配布を可能にします。詳細やエンタープライズライセンスのリクエストについては、ライセンスページをご覧ください。

    プロジェクトの要件と配布モデルに最も適したライセンスを選択してください。

コメント