カスタムデータで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カスタムデータでトレーニングする#
カスタム物体検出モデルの開発は反復的なプロセスです。
- 画像の収集と整理: 特定のタスクに関連する画像を収集します。高品質で多様なデータが重要です。データの収集とアノテーションに関するガイドを参照してください。
- オブジェクトのラベル付け: 画像内の対象オブジェクトに正確にアノテーションを付けます。
- モデルのトレーニング: ラベル付けしたデータを使用してYOLOv5モデルをトレーニングします。事前トレーニング済みの重みから開始して転移学習を活用します。
- デプロイと予測: トレーニング済みモデルを使用して、新しい未知のデータに対する推論を実行します。
- エッジケースの収集: モデルの性能が低いシナリオ(エッジケース)を特定し、堅牢性を向上させるために類似データをデータセットへ追加します。このサイクルを繰り返します。
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: データセットを含むルートディレクトリです。train、val、test: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: toothbrush1.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_centerとwidthのピクセル値を画像全体の幅で割り、y_centerとheightを画像全体の高さで割ります。 - クラスインデックスは0始まりです(つまり、最初のクラスは
0、2番目のクラスは1で表し、以降も同様です)。

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

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)
└── ...
2. モデルを選択する#
トレーニングプロセスを開始するために、事前トレーニング済みモデルを選択します。事前トレーニング済みの重みから開始すると、スクラッチからトレーニングする場合と比べて学習が大幅に高速化し、性能も向上します。YOLOv5にはさまざまなモデルサイズがあり、それぞれ速度と精度のバランスが異なります。たとえば、YOLOv5sは2番目に小さく最速のモデルで、リソースに制約のある環境に適しています。利用可能なすべてのモデルの詳細な比較については、READMEの表を参照してください。

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/exp、runs/train/exp2 など)が作成されます。インタラクティブで実践的な体験を得るには、公式チュートリアルノートブックのトレーニングセクションをご覧ください:
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をお試しください:
ClearMLによるログ記録と自動化#
ClearML統合により、詳細な実験追跡、データセットバージョン管理、さらにはトレーニング実行のリモート実行が可能になります。次の簡単な手順でClearMLを有効化します。
- パッケージをインストールします:
pip install clearml - ClearMLを初期化します:
clearml-initを1回実行して、ClearMLサーバー(セルフホストまたは無料ティア)に接続します。
ClearMLは、実験の詳細、モデルのアップロード、比較、コミットされていないコード変更、インストール済みパッケージを自動的に取得し、完全な再現性を確保します。リモートエージェントでトレーニングタスクを簡単にスケジュールし、ClearML Dataを使用してデータセットのバージョンを管理できます。詳細については、ClearML統合ガイドをご覧ください。
ローカルログ記録#
トレーニング結果は、TensorBoardを使用して自動的にログに記録され、各実験専用ディレクトリ(例: runs/train/exp)内にCSVファイルとして保存されます。ログに記録されるデータには、次の項目が含まれます。
- トレーニングと検証の損失および性能メトリクス。
- 適用されたデータ拡張(モザイクなど)を示すサンプル画像。
- 目視確認用の正解ラベルとモデル予測。
- Precision-Recall(PR)曲線などの主要な評価メトリクス。
- クラスごとの性能を詳細に分析するための混同行列。
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
5. 次のステップ#
トレーニングが正常に完了すると、最高性能のモデルチェックポイント(best.pt)が保存され、デプロイまたはさらなる改良に使用できる状態になります。次のステップの例を以下に示します。
- トレーニング済みモデルを使用し、CLIまたはPython経由で新しい画像や動画に対して推論を実行します。
- 検証を実行して、異なるデータ分割(例: 保留したテストセット)におけるモデルの精度と汎化能力を評価します。
- モデルをONNX、TensorFlow SavedModel、TensorRTなどのさまざまなデプロイ形式にエクスポートし、多様なプラットフォームでの推論を最適化します。
- ハイパーパラメータチューニング手法を活用して、さらなる性能向上を目指します。
- 最高のトレーニング結果を得るためのヒントに従い、性能分析に基づいてより多様で難易度の高いデータを反復的に追加することで、モデルの改善を続けます。
サポート対象の環境#
Ultralyticsは、CUDA、cuDNN、Python、PyTorchなどの必須依存関係を備えたすぐに使用できる環境を提供し、スムーズな開始を支援します。
- 無料GPUノートブック:
- クラウドプラットフォーム:
- Google Cloud: GCPクイックスタートガイド
- Amazon AWS: AWSクイックスタートガイド
- Microsoft Azure: AzureMLクイックスタートガイド
- ローカルセットアップ:
- Docker: Docker クイックスタートガイド
- Docker: Docker クイックスタートガイド
プロジェクトのステータス#
このバッジは、すべてのYOLOv5 GitHub Actions 継続的インテグレーション(CI)テストが正常に合格していることを示します。これらの厳格なCIテストでは、macOS、Windows、Ubuntuオペレーティングシステム上で、トレーニング、検証、推論、エクスポート、ベンチマークなどの中核機能を対象としています。テストは24時間ごと、およびコードコミットごとに自動実行され、一貫した安定性と最適な性能を確保します。
FAQ#
カスタムデータセットでYOLOv5をトレーニングするには、いくつかの重要なステップがあります。
- データセットを準備する: 画像を収集してアノテーションを付けます。アノテーションが必要なYOLO形式になっていることを確認してください。画像とラベルを
train/、val/(および任意でtest/)ディレクトリに整理します。Google Gemini、SAM2、YOLOWorldなどのモデルを使用して、ラベル付けを支援または自動化することも検討してください(セクション1.2を参照)。 - 環境をセットアップする: YOLOv5リポジトリをクローンし、
pip install -r requirements.txtを使用して依存関係をインストールします。git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt - データセット設定を作成する:
dataset.yamlファイルにデータセットのパス、クラス数、クラス名を定義します。 - トレーニングを開始する:
train.pyスクリプトを実行し、dataset.yamlへのパス、使用する事前トレーニング済みの重み(例:yolov5s.pt)、画像サイズ、バッチサイズ、エポック数を指定します。python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt
- データセットを準備する: 画像を収集してアノテーションを付けます。アノテーションが必要なYOLO形式になっていることを確認してください。画像とラベルを
Ultralytics Platformは、YOLOモデル開発のライフサイクル全体を効率化するために設計された包括的なプラットフォームで、多くの場合、コードを記述する必要もありません。主なメリットは次のとおりです。
- トレーニングの簡素化: 事前設定済みの環境と直感的なユーザーインターフェースを使用して、モデルを簡単にトレーニングできます。
- データ管理の統合: プラットフォーム内でデータセットを効率的にアップロードし、バージョン管理して、管理できます。
- リアルタイム監視: CometやTensorBoardなどの統合ツールを使用して、トレーニングの進行状況を追跡し、パフォーマンス指標を可視化できます。
- コラボレーション機能: 共有リソース、プロジェクト管理ツール、モデルの簡単な共有により、チームワークを促進します。
- ノーコードデプロイ: トレーニング済みモデルをさまざまなターゲットに直接デプロイできます。
実践的な手順については、ブログ記事Ultralytics Platformでカスタムモデルをトレーニングする方法をご覧ください。
手動でアノテーションする場合でも、自動化ツール(セクション1.2で説明したものなど)を使用する場合でも、最終的なラベルはYOLOv5で必要とされる特定のYOLO形式でなければなりません。
- 画像ごとに
.txtファイルを1つ作成します。ファイル名は画像のファイル名と一致させる必要があります(例:image1.jpgはimage1.txtに対応します)。これらのファイルを、images/ディレクトリと同じ階層にあるlabels/ディレクトリに配置します(例:../datasets/mydataset/labels/train/)。 .txtファイル内の各行は1つのオブジェクトアノテーションを表し、次の形式に従います:class_index center_x center_y width height。- 座標(
center_x、center_y、width、height)は、画像のサイズを基準として正規化する必要があります(値は0.0から1.0の範囲です)。 - クラスインデックスは0始まりです(最初のクラスは
0、2番目のクラスは1などです)。
多くの手動アノテーションツールでは、YOLO形式に直接エクスポートできます。自動化モデルを使用する場合は、その出力(例: バウンディングボックス座標、セグメンテーションマスク)を、この特定の正規化テキスト形式に変換するスクリプトまたはプロセスが必要です。最終的なデータセット構造が、ガイドに記載されている例に準拠していることを確認してください。詳しくは、データ収集およびアノテーションガイドをご覧ください。
- 画像ごとに
Ultralyticsでは、さまざまなニーズに合わせた柔軟なライセンスを提供しています。
- AGPL-3.0ライセンス: このオープンソースライセンスは、学術研究、個人プロジェクト、オープンソースライセンスへの準拠が許容される状況に適しています。変更および派生物もAGPL-3.0の下でオープンソース化することが義務付けられています。AGPL-3.0ライセンスの詳細をご確認ください。
- エンタープライズライセンス: YOLOv5を独自の製品やサービスに統合する企業向けに設計された商用ライセンスです。このライセンスではAGPL-3.0のオープンソースに関する義務がなくなり、クローズドソースでの配布が可能になります。詳しくはライセンスページをご覧いただくか、エンタープライズライセンスを申請してください。
プロジェクトの要件と配布モデルに最も適したライセンスを選択してください。
