カスタムデータでのYOLOv5の学習
📚 このガイドでは、YOLOv5モデル🚀を使用して、独自のカスタムデータセットをトレーニングする方法について説明します。カスタムモデルのトレーニングは、汎用的な物体検出を超えて、特定の現実世界のアプリケーションにコンピュータビジョンソリューションを適合させるための基本的なステップです。
始める前に
まず、必要な環境がセットアップされていることを確認してください。YOLOv5 リポジトリをクローンし、必要な依存関係をインストールします。 requirements.txt
です。A 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
カスタムデータでトレーニング
カスタム物体検出モデルの開発は反復的なプロセスです:
- Collect & Organize Images: 特定のタスクに関連する画像を集めます。高品質で多様なデータが重要です。データ収集とアノテーションに関するガイドをご覧ください。
- オブジェクトのラベル付け: 画像内の関心のあるオブジェクトに正確にアノテーションを付けます。
- モデルの学習: ラベル付けされたデータを使用して、YOLOv5モデルを学習させます。事前学習済みの重みを使用して、転移学習を活用します。
- デプロイと予測: トレーニング済みモデルを新しい、未知のデータに対する推論に活用します。
- Collect Edge Cases: モデルの性能が低いシナリオ(エッジケース)を特定し、同様のデータをデータセットに追加して、堅牢性を向上させます。このサイクルを繰り返します。
Ultralytics HUBは、データセット管理、モデルトレーニング、デプロイメントなど、この機械学習運用(MLOps)サイクル全体に対して、効率的なノーコードソリューションを提供します。
ライセンス
Ultralyticsは、多様な利用シナリオに対応するために、2つのライセンスオプションを提供しています。
- AGPL-3.0ライセンス: このOSI承認済みオープンソースライセンスは、オープンなコラボレーションと知識の共有に情熱を注ぐ学生、研究者、愛好家にとって理想的です。派生著作物も同じライセンスで共有する必要があります。詳細については、LICENSEファイルを参照してください。
- エンタープライズライセンス: 商用アプリケーション向けに設計されたこのライセンスにより、AGPL-3.0のオープンソースの規定なしに、UltralyticsソフトウェアとAIモデルを商用製品およびサービスにシームレスに統合できます。プロジェクトで商用展開が必要な場合は、エンタープライズライセンスをリクエストしてください。
ライセンスオプションの詳細については、Ultralytics Licensingページをご覧ください。
トレーニングを開始する前に、データセットの準備が不可欠です。
1. データセットを作成する
YOLOv5モデルは、オブジェクトクラスの視覚的特徴を学習するために、ラベル付けされたデータを必要とします。データセットを正しく整理することが重要です。
1.1 作成 dataset.yaml
データセット構成ファイル(例: coco128.yaml
)は、データセットの構造、クラス名、および画像ディレクトリへのパスの概要を示します。 COCO128 大規模なデータセットの最初の128枚の画像で構成される、小さなサンプルデータセットとして機能します。 COCO データセットです。トレーニングパイプラインを迅速にテストしたり、以下のような潜在的な問題を診断したりするのに役立ちます。 過学習.
The dataset.yaml
ファイル構造には以下が含まれます。
path
: データセットを含むルートディレクトリ。train
,val
,test
: からの相対パスpath
トレーニング、検証、およびテストセット用の画像パスをリストした画像またはテキストファイルを含むディレクトリに対して。names
: クラスのインデックス(0から開始)を、対応するクラス名にマッピングする辞書。
以下は、構造です。 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
(正規化された座標、ゼロから始まるインデックスのクラス)。画像に目的のオブジェクトがない場合、対応する *.txt
ファイルが必要です。
YOLO形式 *.txt
ファイル仕様は正確です。
- オブジェクトバウンディングボックスごとに1行。
- 各行には以下を含める必要があります:
class_index x_center y_center width height
. - 座標は次のようになっている必要があります。 正規化済み 0から1の範囲にするには、ピクセル値を
x_center
およびwidth
画像の全幅で割り、y_center
およびheight
画像の全高で割ります。 - クラスのインデックスはゼロから始まります(つまり、最初のクラスはで表されます)。
0
は、2番目の1
など)。
上記の画像に対応するラベルファイルには、2つの「person」オブジェクト(クラスインデックス 0
)と1つの「tie」オブジェクト(クラスインデックス 27
)は、次のようになります。
1.3 ディレクトリを整理する
構造化する データセット ディレクトリを以下に示すように想定しています。デフォルトでは、YOLOv5はデータセットのディレクトリ(例: /coco128
)内に配置します。 /datasets
フォルダの場所 隣接する その /yolov5
リポジトリディレクトリ。
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エポックは、トレーニングデータセット全体の完全なパスを表します。--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ドライブのような)ネットワークドライブやリモートストレージからデータにアクセスすると、大幅に速度が低下し、トレーニングパフォーマンスが妨げられる可能性があります。データセットをローカルSSDにコピーすることが多くの場合、最良の方法です。
重みやログを含むすべてのトレーニング出力は、以下に保存されます。 runs/train/
ディレクトリに作成します。各トレーニングセッションは、新しいサブディレクトリ(例: runs/train/exp
, runs/train/exp2
など)。インタラクティブな実践体験については、公式チュートリアルノートブックのトレーニングセクションをご覧ください。
4. 可視化
YOLOv5は、トレーニングの進捗状況の視覚化、結果の評価、およびリアルタイムでのパフォーマンスの監視のためのさまざまなツールとシームレスに統合します。
Cometのログ記録と可視化 🌟 NEW
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 ロギングと自動化 🌟 NEW
ClearMLの統合により、詳細な実験の追跡、データセットのバージョン管理、さらにはトレーニング実行のリモート実行が可能になります。ClearMLを有効にするには、次の簡単な手順を実行します。
- パッケージのインストール:
pip install clearml
- ClearMLの初期化:実行
clearml-init
ClearMLサーバー(セルフホストまたは 無料の階層)。
ClearML は、実験の詳細、モデルのアップロード、比較、コミットされていないコードの変更、インストールされたパッケージを自動的にキャプチャし、完全な再現性を保証します。リモートエージェントでのトレーニングタスクのスケジュールや、ClearML Data を使用したデータセットのバージョン管理も簡単に行えます。詳細については、ClearML 統合ガイドをご覧ください。
ローカルロギング
トレーニング結果は、を使用して自動的に記録されます。 TensorBoard として保存されます CSV 特定の実験ディレクトリ内のファイル(例: runs/train/exp
)記録されるデータは次のとおりです。
- 学習および検証の損失とパフォーマンス指標。
- 適用された拡張(モザイクなど)を示すサンプル画像。
- 目視検査のためのモデル予測と並んだ正解ラベル。
- 適合率-再現率(PR)曲線などの主要な評価指標。
- 詳細なクラスごとのパフォーマンス分析のための混同行列。
The 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 Notebooks:
- クラウドプラットフォーム:
- Google Cloud:GCPクイックスタートガイド
- Amazon AWS: AWSクイックスタートガイド
- Microsoft Azure: AzureMLクイックスタートガイド
- ローカルセットアップ:
- Docker: Dockerクイックスタートガイド
- Docker: Dockerクイックスタートガイド
プロジェクトのステータス
このバッジは、すべてのYOLOv5 GitHub Actions 継続的インテグレーション(CI)テストが正常に合格していることを示します。これらの厳格なCIテストは、macOS、Windows、Ubuntuの各オペレーティングシステムにわたるトレーニング、検証、推論、エクスポート、ベンチマークなどのコア機能を網羅しています。テストは24時間ごと、およびコードがコミットされるたびに自動的に実行され、一貫した安定性と最適なパフォーマンスを保証します。
よくある質問
よくある質問
カスタムデータセットでYOLOv5をトレーニングするにはどうすればよいですか?
カスタムデータセットで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
file。 - 学習を開始: 以下のコマンドを実行
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 HUBを使用する理由は何ですか?
Ultralytics HUBは、YOLOモデルの開発ライフサイクル全体を効率化するために設計された包括的なプラットフォームであり、多くの場合、コードを記述する必要はありません。主な利点は次のとおりです。
- トレーニングの簡素化: 事前構成された環境と直感的なユーザーインターフェースを使用して、モデルを簡単にトレーニングできます。
- 統合データ管理:プラットフォーム内でデータセットのアップロード、バージョン管理、効率的な管理が可能です。
- リアルタイム監視:CometやTensorBoardなどの統合ツールを使用して、トレーニングの進捗状況を追跡し、パフォーマンス指標を視覚化します。
- Collaboration Features: 共有リソース、プロジェクト管理ツール、簡単なモデル共有を通じて、チームワークを促進します。
- ノーコードデプロイメント: トレーニング済みモデルをさまざまなターゲットに直接デプロイします。
実践的なチュートリアルについては、ブログ記事「Ultralytics HUB でカスタムモデルをトレーニングする方法」をご覧ください。
アノテーションされたデータをYOLOv5形式に変換するにはどうすればよいですか?
手動でアノテーションを付ける場合でも、自動化ツール(セクション1.2で言及されているものなど)を使用する場合でも、最終的なラベルは、YOLOv5で必要な特定のYOLO形式である必要があります。
- 1つ作成します
.txt
各画像のファイル。ファイル名は画像ファイル名と一致する必要があります(例:image1.jpg
に対応image1.txt
)これらのファイルをlabels/
ディレクトリをあなたのimages/
ディレクトリ(例:../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
は、2番目は1
など)。
多くの手動アノテーションツールは、YOLO形式への直接エクスポートを提供しています。自動モデルを使用する場合は、その出力(例:バウンディングボックスの座標、セグメンテーションマスク)をこの特定の正規化されたテキスト形式に変換するためのスクリプトまたはプロセスが必要になります。最終的なデータセット構造が、ガイドに記載されている例に準拠していることを確認してください。詳細については、データ収集とアノテーションのガイドをご覧ください。
商用アプリケーションでYOLOv5を使用する場合のライセンスオプションは何ですか?
Ultralyticsは、さまざまなニーズに合わせて調整された柔軟なライセンスを提供しています。
- AGPL-3.0ライセンス: このオープンソースライセンスは、学術研究、個人プロジェクト、およびオープンソースのコンプライアンスが許容される状況に適しています。修正および派生著作物もAGPL-3.0の下でオープンソース化されることが義務付けられています。AGPL-3.0ライセンスの詳細をご確認ください。
- エンタープライズライセンス: YOLOv5を独自の製品またはサービスに統合する企業向けに設計された商用ライセンスです。このライセンスは、AGPL-3.0のオープンソース義務をなくし、クローズドソースでの配布を可能にします。詳細またはエンタープライズライセンスのリクエストについては、ライセンスページをご覧ください。
プロジェクトの要件と配布モデルに最適なライセンスを選択してください。