最高のトレーニング結果を得るためのヒント
📚 このガイドでは、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
yolov5m.pt
yolov5l.pt
yolov5x.pt
custom_pretrained.pt
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml
トレーニング設定
何かを変更する前に、パフォーマンスのベースラインを確立するために、まずデフォルトの設定でトレーニングしてください。train.pyの設定の完全なリストはtrain.pyargparserにあります。
- エポック。300エポックから始める。早期にオーバーフィットが発生する場合は、エポック数を減らすことができる。300エポックでオーバーフィッティングが発生しない場合は、600、1200エポックなど、より長いエポックを学習する。
- 画像サイズ。 COCOはネイティブ解像度の
--img 640
しかし、データセットには小さなオブジェクトが多いため、以下のような高解像度でトレーニングすることが有効である。--img 1280
.小さなオブジェクトが多い場合、カスタムデータセットはネイティブ解像度またはそれ以上の解像度で学習するのが効果的である。最高の推論結果は、同じ--img
でトレーニングする。--img 1280
をテストし、検出する必要がある。--img 1280
. - バッチサイズ。 最大のものを使う
--batch-size
ハードウェアが許容するバッチサイズが小さいとバッチノルム統計が悪くなるので避けるべきである。 - ハイパーパラメータ。 デフォルトのハイパーパラメータは hyp.scratch-low.yaml.ハイパーパラメータの変更を考える前に、まずデフォルトのハイパーパラメータでトレーニングすることをお勧めします。一般的に、オーグメンテーション・ハイパーパラメータを増やすと、オーバーフィッティングを減らし、遅らせることができ、より長い学習とより高い最終mAPが可能になります。のような損失成分ゲインのハイパーパラメータを減らす。
hyp['obj']
は、特定の損失成分におけるオーバーフィッティングを減らすのに役立つ。これらのハイパーパラメータを最適化する自動化された方法については、我々の ハイパーパラメータ進化チュートリアル.
さらに読む
もっと詳しく知りたいのであれば、カルパシーの「Recipe for TrainingNeural Networks(ニューラルネットワークをトレーニングするためのレシピ)」から始めるのがいいだろう。この本には、すべてのMLドメインに広く適用できるトレーニングの素晴らしいアイデアが載っている。https://karpathy.github.io/2019/04/25/recipe/
頑張ってください🍀また、他に質問があれば教えてください!