Meet YOLO26: next-gen vision AI.

Link to this sectionYOLOv5で最良の学習結果を得るためのヒント#

📚 本ガイドでは、YOLOv5を使用して最高のmAPと学習結果を生み出す方法を解説します 🚀。

多くの場合、データセットが十分に大きく、適切にラベル付けされていれば、モデルや学習設定を変更しなくても良好な結果が得られます。最初に良好な結果が得られなかった場合、改善のために実行できるステップはありますが、変更を検討する前に、常にすべてのデフォルト設定で学習を実行することを推奨します。これにより、パフォーマンスのベースラインを確立し、改善の余地がある領域を特定するのに役立ちます。

If you have questions about your training results we recommend you provide the maximum amount of information possible if you expect a helpful response, including results plots (train losses, val losses, P, R, mAP), PR curve, confusion matrix, training mosaics, test results and dataset statistics images such as labels.png. All of these are located in your project/name directory, typically yolov5/runs/train/exp.

以下に、YOLOv5の学習で最良の結果を得ようとしているユーザーのための完全なガイドをまとめました。

Link to this sectionデータセット#

  • クラスごとの画像数。 クラスごとに1500枚以上の画像を推奨します。
  • クラスごとのインスタンス数。 クラスごとに10000インスタンス(ラベル付けされたオブジェクト)以上を推奨します。
  • 画像の多様性。 デプロイ環境を代表するものである必要があります。現実世界のユースケースでは、時間帯、季節、天候、照明、角度、ソース(オンラインスクレイピング、ローカル収集、異なるカメラなど)が異なる画像を使用することを推奨します。
  • ラベルの一貫性。 すべての画像内の全クラスの全インスタンスにラベルを付ける必要があります。部分的なラベル付けでは機能しません。
  • ラベルの accuracy ラベルは各オブジェクトを密接に囲んでいる必要があります。オブジェクトと bounding box の間に隙間があってはなりません。ラベルのないオブジェクトが存在してはなりません。
  • 学習/検証分割の規律。 楽観的すぎる指標を避けるため、検証およびテスト用の画像が学習セットに決して含まれないようにしてください。分割間でクラス分布が類似するように維持してください。
  • ラベルの検証。 学習開始時に train_batch*.jpg を確認し、ラベルが正しく表示されているかを確認してください( のモザイクを参照)。
  • 背景画像。 背景画像とは、False Positive (FP) を減らすためにデータセットに追加される、オブジェクトのない画像のことです。FPを減らすために、0〜10%程度の背景画像を含めることを推奨します(参考としてCOCOには合計の1%にあたる1000枚の背景画像が含まれています)。背景画像にはラベルは必要ありません。

COCO dataset class distribution analysis

Link to this sectionモデルの選択#

YOLOv5xや YOLOv5x6 のような大型モデルは、ほぼすべての場合においてより良い結果を生み出しますが、パラメータ数が多く、学習に多くの CUDA メモリを必要とし、実行速度が遅くなります。モバイル向けデプロイメントには YOLOv5s/m を、クラウド向けデプロイメントには YOLOv5l/x を推奨します。すべてのモデルの完全な比較については、README の table を参照してください。

YOLOv5 Models

  • 事前学習済みウェイトから開始。 小規模から中規模のデータセット(例: VOCVisDroneGlobalWheat)に推奨されます。モデル名を --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
  • スクラッチから開始。 大規模なデータセット(例: COCOObjects365OIv6)に推奨されます。興味のあるモデルアーキテクチャの YAML と、空の --weights '' 引数を渡します。

    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

Link to this section学習設定#

何かを変更する前に、最初にデフォルト設定で学習を行い、パフォーマンスのベースラインを確立してください。train.py の全設定リストは、train.py の argparser で確認できます。

  • Epochs 300エポックから開始してください。早期に過学習が発生する場合はエポック数を減らすことができます。300エポック経過しても overfitting が発生しない場合は、600、1200エポックなど、さらに長く学習してください。
  • 画像サイズ。 COCOはネイティブ解像度の --img 640 で学習されますが、データセット内に小さなオブジェクトが多いため、--img 1280 のような高解像度での学習が有利に働く場合があります。小さなオブジェクトが多い場合、カスタムデータセットはネイティブ解像度またはそれ以上の解像度で学習することで利益を得られます。推論結果は学習時と同じ --img 設定で最良の結果が得られます。つまり、--img 1280 で学習した場合は、テストや検出も --img 1280 で行う必要があります。
  • Batch size ハードウェアが許容する最大の --batch-size を使用してください。バッチサイズが小さいと batch normalization の統計が不正確になるため、避けるべきです。--batch-size -1 を使用すると、GPUにとって最適なバッチサイズが自動的に選択されます。
  • Learning rate デフォルトの学習率スケジュールはほとんどの場合でうまく機能します。収束を早めるには、--cos-lr フラグを使用してコサイン学習率スケジュールを有効にすることを試してください。これは、エポックにわたってコサイン曲線に従って徐々に学習率を減らします。
  • Data augmentation. YOLOv5 includes various augmentation techniques like mosaic, which combines multiple training images. Adjust augmentation strength via the mosaic hyperparameter in your --hyp file to help stabilize training.
  • ハイパーパラメータ。 デフォルトのハイパーパラメータは hyp.scratch-low.yaml にあります。変更を検討する前に、まずはデフォルトのハイパーパラメータで学習することを推奨します。一般的に、拡張ハイパーパラメータを増やすと過学習が減少・遅延し、より長期間の学習と高い最終 mAP が可能になります。hyp['obj'] のような損失成分ゲインのハイパーパラメータを減らすことは、それらの特定の損失成分における過学習を抑えるのに役立ちます。これらのハイパーパラメータを最適化する自動的な方法については、Hyperparameter Evolution Tutorial を参照してください。
  • Mixed precision 学習。 YOLOv5は、サポートされている GPU が検出されると自動的に Automatic Mixed Precision (AMP) を有効にし、モデルの精度を犠牲にすることなく学習を高速化し、メモリ使用量を削減します。
  • マルチ GPU 学習。 複数の GPU を持っている場合は、--device 0,1,2,3 を使用して学習を分散させることで、学習時間を大幅に短縮できます。
  • 早期終了 (Early stopping)。 検証指標が 50 エポック改善しない場合に学習を停止するには --patience 50 を使用し、時間を節約して過学習を防ぎます。

Link to this section高度な最適化テクニック#

  • Transfer learning 特殊なデータセットの場合は、事前学習済みのウェイトから開始し、学習中に徐々に層のフリーズを解除して、モデルを特定のタスクに適応させます。
  • Model pruning 学習後、冗長なウェイトを取り除いてパフォーマンスを大きく損なうことなくモデルサイズを削減するモデルの枝刈り(Pruning)を検討してください。
  • Model ensemble クリティカルなアプリケーションでは、異なる構成で複数のモデルを学習させ、その予測を組み合わせて精度を向上させます。
  • Test-time augmentation 推論時に --augment を指定して TTA を有効にすると、入力画像の拡張バージョンからの結果を平均化することで、予測精度が向上します。

Link to this sectionさらなる学習#

詳細を知りたい場合、まずは Karpathy 氏の 'Recipe for Training Neural Networks' から始めるのが良いでしょう。これには、あらゆる ML ドメインに広く適用できる優れた学習のアイデアが含まれています: https://karpathy.github.io/2019/04/25/recipe/

学習設定と構成の詳細については、利用可能なすべてのパラメータの包括的な説明を提供している Ultralytics train settings documentation を参照してください。

幸運を祈ります 🍀。他にも質問があればお知らせください!

Link to this sectionよくある質問 (FAQ)#

Link to this sectionモデルが過学習しているかどうかはどうすればわかりますか?#

学習損失が減少を続けている一方で検証損失が増加し始めた場合、モデルが過学習している可能性があります。検証 mAP を監視してください。学習損失が改善し続けているのに mAP が停滞または減少している場合は、過学習の兆候です。解決策としては、学習データを増やす、データ拡張を増やす、あるいは正則化手法を実装することが挙げられます。

Link to this sectionYOLOv5の学習に最適なバッチサイズは何ですか?#

最適なバッチサイズは GPU メモリに依存します。バッチサイズが大きいほど、通常はバッチ正規化の統計が改善され、学習が安定します。メモリ不足にならずに扱える最大のバッチサイズを使用してください。--batch-size -1 を使用すると、セットアップに最適なバッチサイズを自動的に決定できます。

Link to this sectionYOLOv5の学習を高速化するにはどうすればよいですか?#

学習を高速化するには、--device 0,1,2,3 で複数の GPU を使用する、--cache でデータセットをキャッシュする、バッチサイズを最適化する(混合精度はサポートされている GPU で自動的に有効になります)ことを試してください。また、絶対的な精度が重要でない場合は、YOLOv5s のような小さなモデルバリアントの使用も検討してください。

コメント