YOLOv5 トレーニングで最高の結果を出すためのヒント
📚 このガイドでは、YOLOv5 🚀で最高のmAPとトレーニング結果を出す方法を説明します。
データセットが十分に大きく、十分にラベル付けされていれば、ほとんどの場合、モデルやトレーニングの設定を変更することなく、良い結果を得ることができます。もし最初に良い結果が得られなかった場合、改善するためのステップがあるかもしれませんが、変更を検討する前に、まずすべてのデフォルト設定でトレーニングすることをお勧めします。これは、パフォーマンスのベースラインを確立し、改善のための領域を見つけるのに役立ちます。
トレーニングの結果について質問がある場合 可能な限り最大限の情報を提供することをお勧めします。 結果のプロット(トレインロス、バルブロス、P、R、mAP)、PRカーブなど、有益な回答を期待する場合、 混同行列トレーニングモザイク、テスト結果、labels.pngのようなデータセット統計画像。これらはすべて project/name
ディレクトリ、通常は yolov5/runs/train/exp
.
YOLOv5 トレーニングで最高の結果を出したいユーザーのために、以下に完全なガイドをまとめた。
データ集合
- 1クラスあたり1500枚以上を推奨
- クラスあたりのインスタンス。
- 画像の多様性。配備された環境を代表するものでなければならない。実際のユースケースでは、異なる時間帯、異なる季節、異なる天候、異なる照明、異なるアングル、異なるソース(オンラインでスクレイピング、ローカルで収集、異なるカメラ)などの画像を推奨する。
- ラベルの一貫性。すべての画像のすべてのクラスのすべてのインスタンスにラベルを付ける必要があります。部分的なラベル付けは機能しません。
- ラベルの正確さ。ラベルは各オブジェクトを密接に囲んでいなければならない。オブジェクトとそのバウンディング・ボックスの間にスペースがあってはならない。ラベルがないオブジェクトがあってはならない。
- ラベルの検証。 表示
train_batch*.jpg
列車の発車時に、ラベルが正しく表示されていることを確認する。 例 モザイク - 背景画像。背景画像とは、FP(False Positives:誤検出)を減らすためにデータセットに追加される、対象物のない画像のことです。FPを減らすために、0~10%程度の背景画像を推奨する(COCOには参考として1000枚の背景画像があり、全体の1%である)。背景画像にラベルは不要。
モデルの選択
YOLOv5xやYOLOv5x6のような大きなモデルは、ほぼすべてのケースでより良い結果を出しますが、パラメータが多く、学習にはより多くのCUDA メモリを必要とし、実行速度は遅くなります。モバイル・デプロイメントにはYOLOv5s/mを、クラウド・デプロイメントにはYOLOv5l/xを推奨する。すべてのモデルの完全な比較については、READMEの表をご覧ください。
- 訓練前のウェイトから開始する。 小規模から中規模のデータセットにお勧めします。 VOC, ヴィスドローン, グローバル小麦).モデルの名前を
--weights
引数モデルは 最新YOLOv5 リリース.
python train.py --data custom.yaml --weights yolov5s.pt
python train.py --data custom.yaml --weights yolov5m.pt
python train.py --data custom.yaml --weights yolov5l.pt
python train.py --data custom.yaml --weights yolov5x.pt
python train.py --data custom.yaml --weights custom_pretrained.pt
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml
python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml
python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml
トレーニング設定
何かを変更する前に、パフォーマンスのベースラインを確立するために、まずデフォルトの設定でトレーニングしてください。train.pyの設定の完全なリストはtrain.pyargparserにあります。
- エポック。300エポックから始める。早期にオーバーフィットが発生する場合は、エポック数を減らすことができる。300エポックでオーバーフィッティングが発生しない場合は、600、1200エポックなど、より長いエポックを学習する。
- 画像サイズ。 COCOはネイティブ解像度の
--img 640
しかし、データセットには小さなオブジェクトが多いため、以下のような高解像度でトレーニングすることが有効である。--img 1280
.小さなオブジェクトが多い場合、カスタムデータセットはネイティブ解像度またはそれ以上の解像度で学習するのが効果的である。最高の推論結果は、同じ--img
でトレーニングする。--img 1280
をテストし、検出する必要がある。--img 1280
. - バッチサイズ。 最大のものを使う
--batch-size
ハードウェアが許す限り。バッチサイズが小さいと 一括正規化 を使うことができる。使用できるのは--batch-size -1
を使用して、GPU最適なバッチサイズを自動的に選択します。 - 学習率。 ほとんどの場合、デフォルトの学習率スケジュールがうまく機能する。より速く収束させるには
--cos-lr
フラグを付けると、コサイン学習率スケジューリングが有効になり、エポックにわたってコサイン曲線に従って学習率を徐々に下げていく。 - データの増強。 YOLOv5 、複数の学習画像を組み合わせるモザイクのような様々な補強技術が含まれている。最後の数エポックには
--close-mosaic 10
トレーニングの安定に役立つモザイク補強を無効にする。 - ハイパーパラメータ。 デフォルトのハイパーパラメータは hyp.scratch-low.yaml.ハイパーパラメータの変更を考える前に、まずデフォルトのハイパーパラメータでトレーニングすることをお勧めします。一般的に、オーグメンテーション・ハイパーパラメータを増やすと、オーバーフィッティングを減らし、遅らせることができ、より長い学習とより高い最終mAPが可能になります。のような損失成分ゲインのハイパーパラメータを減らす。
hyp['obj']
は、特定の損失成分におけるオーバーフィッティングを減らすのに役立つ。これらのハイパーパラメータを最適化する自動化された方法については、我々の ハイパーパラメータ進化チュートリアル. - ミックス精密トレーニング。 との混合精度トレーニングを可能にする。
--amp
モデルの精度を犠牲にすることなく、学習を高速化し、メモリ使用量を削減する。 - GPU GPUトレーニング。 複数のGPUがある場合は
--device 0,1,2,3
トレーニング時間を大幅に短縮できる。 - 早めに止める。 用途
--patience 50
50エポックの間、検証メトリクスが改善されない場合、トレーニングを停止することで、時間を節約し、オーバーフィッティングを防ぐ。
高度な最適化技術
- 転移学習。特殊なデータセットの場合は、事前に学習させた重みで開始し、学習中に徐々にレイヤーの凍結を解除して、モデルを特定のタスクに適応させる。
- モデルの刈り込み。トレーニング後、冗長な重みを削除し、パフォーマンスを大きく落とすことなくモデルサイズを小さくするために、モデルの刈り込みを検討します。
- モデル・アンサンブル。クリティカルなアプリケーションでは、精度を向上させるために、異なる構成で複数のモデルを訓練し、それらの予測を組み合わせます。
- テスト時間の増強。 で推論中のTTAを有効にする。
--augment
入力画像の拡張バージョンからの結果を平均化することにより、予測精度を向上させる。
さらに読む
もっと詳しく知りたいのであれば、カルパシーの「Recipe for TrainingNeural Networks(ニューラルネットワークをトレーニングするためのレシピ)」から始めるのがいいだろう。この本には、すべてのMLドメインに広く適用できるトレーニングの素晴らしいアイデアが載っている。https://karpathy.github.io/2019/04/25/recipe/
トレーニング設定と構成の詳細については、Ultralytics トレーニング設定のドキュメントを参照してください。
頑張ってください🍀また、他に質問があれば教えてください!
よくあるご質問
自分のモデルがオーバーフィットしているかどうかを知るには?
トレーニングの損失が減少し続け、検証の損失が増加し始めた場合、モデルはオーバーフィットしている可能性があります。検証MAPを監視してください - もし検証MAPが停滞または減少し、トレーニング損失が改善し続けるなら、それはオーバーフィッティングの兆候です。解決策としては、トレーニングデータの追加、データの増強、正則化テクニックの実装などがあります。
YOLOv5トレーニングに最適なバッチサイズは?
最適なバッチサイズはGPU メモリに依存します。一般にバッチサイズが大きいほど、バッチの正規化統計とトレーニングの安定性が向上します。ハードウェアがメモリ不足にならずに処理できる最大のバッチサイズを使用してください。以下を使用できます --batch-size -1
を使用して、セットアップに最適なバッチサイズを自動的に決定します。
YOLOv5 トレーニングをスピードアップするには?
トレーニングのスピードを上げるには、以下の方法を試してみてほしい。 --amp
で複数のGPUを使用する。 --device 0,1,2,3
でデータセットをキャッシュする。 --cache
そしてバッチサイズを最適化する。また、絶対的な精度が重要でない場合は、YOLOv5sのような小型モデルのバリエーションを使用することも検討してください。