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のアクティブラーニングループ図

カスタム物体検出モデルの開発は反復的なプロセスです。

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

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

ライセンス

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

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

Ultralytics Licensingページで、ライセンスオプションの詳細をご確認ください。

トレーニングを開始する前に、データセットの準備が必要です。

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形式に準拠していることを確認してください。画像ごとに*.txtファイルを1つ用意し、各行でオブジェクトをclass_index x_center y_center width height(正規化座標、0始まりのクラス)として表します。画像に対象オブジェクトがない場合、対応する*.txtファイルは必要ありません。

YOLO形式の*.txtファイル仕様は明確に定義されています。

  • バウンディングボックスごとに1行を記述します。
  • 各行にはclass_index x_center y_center width heightを含める必要があります。
  • 座標は0から1の範囲に正規化する必要があります。そのため、x_centerwidthのピクセル値を画像全体の幅で割り、y_centerheightを画像全体の高さで割ります。
  • クラスインデックスは0始まりです(つまり、最初のクラスは0、2番目のクラスは1で表し、以降も同様です)。

Example image with two persons and a tie annotated

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

YOLO format label file content example

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

以下に示すようにdatasetsディレクトリを構成します。デフォルトでは、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 Notebookをお試しください: Colabで開く

Comet UI showing YOLOv5 training metrics and visualizations

ClearMLによるログ記録と自動化#

ClearML統合により、詳細な実験追跡、データセットバージョン管理、さらにはトレーニング実行のリモート実行が可能になります。次の簡単な手順でClearMLを有効化します。

  • パッケージをインストールします: pip install clearml
  • ClearMLを初期化します: clearml-initを1回実行して、ClearMLサーバー(セルフホストまたは無料ティア)に接続します。

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

ClearML experiment management UI for YOLOv5

ローカルログ記録#

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

  • トレーニングと検証の損失および性能メトリクス。
  • 適用されたデータ拡張(モザイクなど)を示すサンプル画像。
  • 目視確認用の正解ラベルとモデル予測。
  • Precision-Recall(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)が保存され、デプロイまたはさらなる改良に使用できる状態になります。次のステップの例を以下に示します。

サポート対象の環境#

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

プロジェクトのステータス#

YOLOv5 Continuous Integration Status Badge

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

FAQ#

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

    1. データセットを準備する: 画像を収集してアノテーションを付けます。アノテーションが必要なYOLO形式になっていることを確認してください。画像とラベルをtrain/val/(および任意でtest/)ディレクトリに整理します。Google GeminiSAM2YOLOWorldなどのモデルを使用して、ラベル付けを支援または自動化することも検討してください(セクション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形式でなければなりません。

    • 画像ごとに.txtファイルを1つ作成します。ファイル名は画像のファイル名と一致させる必要があります(例: 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のオープンソースに関する義務がなくなり、クローズドソースでの配布が可能になります。詳しくはライセンスページをご覧いただくか、エンタープライズライセンスを申請してください。

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

コメント