モデル学習のための機械学習のベストプラクティスとヒント
はじめに
コンピュータービジョンプロジェクトに取り組む際に最も重要なステップの1つは、モデルのトレーニングです。このステップに到達する前に、目標を定義し、データを収集してアノテーションを付ける必要があります。データがクリーンで一貫性があることを確認するためにデータを前処理した後、モデルのトレーニングに進むことができます。
見る: モデルトレーニングのヒント | 大規模データセットの処理方法 | バッチサイズ、GPU使用率と 混合精度
では、モデルのトレーニングとは何でしょうか?モデルのトレーニングとは、モデルに視覚的なパターンを認識させ、データに基づいて予測を行わせるプロセスです。これは、アプリケーションのパフォーマンスと精度に直接影響します。このガイドでは、コンピュータビジョンモデルを効果的にトレーニングするためのベストプラクティス、最適化手法、およびトラブルシューティングのヒントについて説明します。
機械学習モデルをトレーニングする方法
コンピュータビジョンモデルは、エラーを最小限に抑えるために内部パラメータを調整することでトレーニングされます。最初に、モデルにはラベル付けされた画像の大きなセットが与えられます。モデルはこれらの画像の内容について予測を行い、予測を実際のラベルまたは内容と比較してエラーを計算します。これらのエラーは、モデルの予測が真の値からどれだけずれているかを示します。
トレーニング中、モデルは反復的に予測を行い、誤差を計算し、バックプロパゲーションと呼ばれるプロセスを通じてパラメータを更新します。このプロセスにおいて、モデルは誤差を減らすために内部パラメータ(重みとバイアス)を調整します。このサイクルを何度も繰り返すことで、モデルは徐々に精度を向上させます。時間をかけて、形状、色、テクスチャなどの複雑なパターンを認識することを学習します。
この学習プロセスにより、コンピュータビジョンモデルは、物体検出、インスタンスセグメンテーション、画像分類など、さまざまなタスクを実行できるようになります。最終的な目標は、学習内容を新しい、未知の画像に一般化できるモデルを作成し、現実世界のアプリケーションで視覚データを正確に理解できるようにすることです。
モデルのトレーニング時に何が起こっているかを理解したところで、モデルのトレーニング時に考慮すべき点を見てみましょう。
大規模データセットでの学習
大規模なデータセットを使用してモデルをトレーニングする場合、考慮すべき点がいくつかあります。例えば、バッチサイズを調整したり、GPU 使用率を制御したり、マルチスケールトレーニングを使用したりできます。これらのオプションについて詳しく見ていきましょう。
バッチサイズとGPU使用率
大規模なデータセットでモデルをトレーニングする場合、GPUを効率的に利用することが重要です。バッチサイズは重要な要素です。これは、機械学習モデルが1回のトレーニングイテレーションで処理するデータサンプル数です。 GPUでサポートされている最大バッチサイズを使用すると、その機能を最大限に活用し、モデルのトレーニングにかかる時間を短縮できます。ただし、GPUメモリの不足は避けたいところです。メモリエラーが発生した場合は、モデルがスムーズにトレーニングされるまでバッチサイズを段階的に小さくしてください。
見る: Ultralytics YOLO11でバッチ推論を使用する方法 | pythonでの物体検出を高速化 🎉
YOLO11に関して、以下を設定できます。 batch_size
におけるパラメータ 学習構成 GPU の容量に合わせて調整します。また、以下を設定します。 batch=-1
トレーニングスクリプトでは、自動的に決定されます。 バッチサイズ デバイスの機能に基づいて効率的に処理できます。バッチサイズを微調整することで、GPUリソースを最大限に活用し、トレーニングプロセス全体を改善できます。
サブセットトレーニング
サブセットトレーニングは、大規模なデータセットを代表する小規模なデータセットでモデルをトレーニングする賢い戦略です。特に初期のモデル開発やテストの際に、時間とリソースを節約できます。時間がない場合や、さまざまなモデル構成を試している場合は、サブセットトレーニングが適しています。
YOLO11に関しては、以下を使用することで、サブセットトレーニングを簡単に実装できます。 fraction
パラメータ。このパラメータを使用すると、トレーニングに使用するデータセットの割合を指定できます。たとえば、 fraction=0.1
これは、データの10%でモデルをトレーニングします。この手法を使用すると、完全なデータセットを使用してモデルをトレーニングする前に、迅速な反復とモデルの調整を行うことができます。サブセットトレーニングは、迅速な進捗を支援し、潜在的な問題を早期に特定するのに役立ちます。
マルチスケール学習
マルチスケール学習は、さまざまなサイズの画像で学習させることで、モデルの汎化能力を向上させるテクニックです。モデルは、異なるスケールや距離でオブジェクトを検出し、より堅牢になることを学習できます。
たとえば、YOLO11をトレーニングするときに、 scale
パラメータ。このパラメータは、指定された係数でトレーニング画像のサイズを調整し、さまざまな距離にあるオブジェクトをシミュレートします。たとえば、 scale=0.5
トレーニング中に、トレーニング画像を0.5〜1.5倍の範囲でランダムにズームします。このパラメータを設定することで、モデルはさまざまな画像スケールを経験し、異なるオブジェクトサイズやシナリオにおける検出能力を向上させることができます。
キャッシング
キャッシングは、機械学習モデルのトレーニング効率を向上させるための重要なテクニックです。前処理された画像をメモリに保存することで、GPUがディスクからデータをロードするのを待つ時間を短縮します。モデルは、ディスクI/O操作による遅延なしに、継続的にデータを受信できます。
YOLO11のトレーニング時にキャッシングを制御するには、以下を使用します。 cache
パラメータ:
cache=True
:データセットの画像をRAMに保存します。これにより、最速のアクセス速度が得られますが、メモリ使用量が増加します。cache='disk'
:画像をディスクに保存します。RAMよりは遅いですが、毎回新しいデータをロードするよりは高速です。cache=False
: キャッシュを無効にし、ディスクI/Oのみに依存します。これは最も遅いオプションです。
混合精度トレーニング
混合精度トレーニングでは、16ビット(FP16)と32ビット(FP32)の浮動小数点型を組み合わせて使用します。FP16による高速な計算と、必要な箇所でFP32を使用することによる精度の維持という、両者の利点を活用します。ほとんどのニューラルネットワークの演算はFP16で行われ、計算速度の向上とメモリ使用量の削減に貢献します。ただし、モデルの重みのマスターコピーはFP32で保持され、重みの更新ステップ中の精度を保証します。これにより、同じハードウェア制約内で、より大きなモデルやより大きなバッチサイズを扱うことができます。
混合精度トレーニングを実装するには、トレーニングスクリプトを変更し、ハードウェア(GPUなど)がそれをサポートしていることを確認する必要があります。多くの最新の深層学習フレームワーク(PyTorchやTensorFlowなど)は、混合精度に対する組み込みサポートを提供しています。
YOLO11を使用する場合、混合精度トレーニングは簡単に行えます。 amp
トレーニング構成のflag。設定 amp=True
自動混合精度(AMP)トレーニングを有効にします。混合精度トレーニングは、モデルのトレーニングプロセスを最適化するためのシンプルかつ効果的な方法です。
事前学習済み重み
事前学習済みの重みを使用することは、モデルのトレーニングプロセスをスピードアップするための賢明な方法です。事前学習済みの重みは、大規模なデータセットで既にトレーニングされたモデルから取得され、モデルに有利なスタートを切らせます。転移学習は、事前学習済みモデルを新しい、関連するタスクに適応させます。事前学習済みモデルの微調整には、これらの重みから開始し、特定のデータセットでトレーニングを継続することが含まれます。このトレーニング方法では、モデルが基本的な特徴をしっかりと理解した状態で開始するため、トレーニング時間が短縮され、多くの場合、パフォーマンスが向上します。
The pretrained
パラメータを使用すると、YOLO11で転移学習が簡単になります。このパラメータを pretrained=True
デフォルトの事前学習済み重みが使用されます。または、カスタムの事前学習済みモデルへのパスを指定することもできます。事前学習済み重みと転移学習を使用すると、モデルの機能が効果的に向上し、トレーニングコストが削減されます。
大規模なデータセットを扱う際に検討すべきその他の手法
大規模なデータセットを扱う際に検討すべき、いくつかの手法があります。
- 学習率スケジューラ: 学習率スケジューラを実装すると、トレーニング中に学習率が動的に調整されます。適切に調整された学習率により、モデルが最小値をオーバーシュートするのを防ぎ、安定性を向上させることができます。YOLO11をトレーニングする場合、
lrf
parameterは、初期学習率に対する最終学習率の割合を設定することにより、学習率のスケジューリングを管理するのに役立ちます。 - Distributed Training: 大規模データセットを扱う場合、分散学習は非常に有効です。複数のGPUまたはマシンに学習ワークロードを分散させることで、学習時間を短縮できます。このアプローチは、特に大規模な計算リソースを必要とするエンタープライズ規模のプロジェクトに役立ちます。
トレーニングするエポック数
モデルのトレーニング時、エポックは、トレーニングデータセット全体を1回完全に通過することを指します。 1つのエポック中に、モデルはトレーニングセット内の各サンプルを1回処理し、学習アルゴリズムに基づいてパラメーターを更新します。モデルが学習し、時間の経過とともにパラメーターを改良するには、通常、複数のエポックが必要です。
よくある質問として、モデルをトレーニングするエポック数をどのように決定するかというものがあります。良い出発点は300エポックです。モデルが早期に過学習する場合は、エポック数を減らすことができます。300エポック後に過学習が発生しない場合は、トレーニングを600、1200、またはそれ以上のエポックに延長できます。
ただし、理想的なエポック数は、データセットのサイズとプロジェクトの目標によって異なります。データセットが大きいほど、モデルが効果的に学習するためにより多くのエポックが必要になる場合がありますが、データセットが小さいほど、過学習を避けるために必要なエポック数は少なくなる場合があります。YOLO11に関しては、以下を設定できます。 epochs
トレーニングスクリプトのパラメータ。
早期終了
早期終了は、モデルのトレーニングを最適化するための有効なテクニックです。検証パフォーマンスを監視することで、モデルの改善が停止した時点でトレーニングを停止できます。これにより、計算リソースを節約し、過学習を防ぐことができます。
このプロセスでは、トレーニングを停止する前に、検証メトリクスの改善を待つエポック数を決定する忍耐パラメータを設定します。モデルのパフォーマンスがこれらのエポック内で改善しない場合、時間とリソースの浪費を避けるためにトレーニングは停止されます。
YOLO11では、トレーニング構成でpatienceパラメータを設定することで、早期停止を有効にできます。例えば、 patience=5
は、検証メトリクスの改善が5エポック連続して見られない場合、トレーニングが停止することを意味します。この方法を使用することで、トレーニングプロセスが効率的になり、過剰な計算なしに最適なパフォーマンスを達成できます。
クラウドとローカル学習の選択
モデルをトレーニングするには、クラウドトレーニングとローカルトレーニングの 2 つのオプションがあります。
クラウドトレーニングは、スケーラビリティと強力なハードウェアを提供し、大規模なデータセットと複雑なモデルの処理に最適です。Google Cloud、AWS、Azure などのプラットフォームは、高性能 GPU および TPU へのオンデマンドアクセスを提供し、トレーニング時間を短縮し、より大きなモデルでの実験を可能にします。ただし、クラウドトレーニングは、特に長期間の場合、高価になる可能性があり、データ転送によってコストと遅延が増加する可能性があります。
ローカルでのトレーニングは、より高度な制御とカスタマイズが可能であり、特定のニーズに合わせて環境を調整し、継続的なクラウドコストを回避できます。長期的なプロジェクトではより経済的であり、データはオンプレミスに保持されるため、より安全です。ただし、ローカルハードウェアにはリソースの制限があり、メンテナンスが必要になる場合があるため、大規模なモデルのトレーニング時間が長くなる可能性があります。
オプティマイザの選択
オプティマイザとは、モデルの性能を測る損失関数を最小化するために、ニューラルネットワークの重みを調整するアルゴリズムのことです。簡単に言うと、オプティマイザは、パラメータを調整してエラーを減らすことで、モデルの学習を支援します。適切なオプティマイザを選択することは、モデルがどれだけ迅速かつ正確に学習するかに直接影響します。
オプティマイザのパラメータを微調整して、モデルのパフォーマンスを向上させることもできます。学習率を調整すると、パラメータを更新する際の手順のサイズが設定されます。安定性を保つために、適度な学習率から始めて、長期的な学習を向上させるために徐々に学習率を下げていくとよいでしょう。さらに、モメンタムを設定することで、過去の更新が現在の更新にどれだけ影響を与えるかを決定します。モメンタムの一般的な値は約 0.9 です。これは一般的に良好なバランスを提供します。
一般的なオプティマイザ
異なるオプティマイザには、さまざまな長所と短所があります。いくつかの一般的なオプティマイザを見てみましょう。
-
SGD (確率的勾配降下法):
- パラメータに関する損失関数の勾配を使用して、モデルパラメータを更新します。
- シンプルで効率的ですが、収束が遅く、局所的な最小値でスタックする可能性があります。
-
Adam (Adaptive Moment Estimation):
- モメンタム付きSGDとRMSPropの両方の利点を兼ね備えています。
- 勾配の一次モーメントと二次モーメントの推定に基づいて、各パラメータの学習率を調整します。
- ノイズの多いデータやスパースな勾配に適しています。
- 効率的で一般的にチューニングが少なくて済むため、YOLO11に推奨されるオプティマイザです。
-
RMSProp (Root Mean Square Propagation):
- 最近の勾配の大きさの移動平均で勾配を除算することにより、各パラメータの学習率を調整します。
- 勾配消失問題の処理に役立ち、リカレントニューラルネットワークに有効です。
YOLO11の場合、 optimizer
パラメータを使用すると、SGD、Adam、AdamW、NAdam、RAdam、RMSPropなどのさまざまなオプティマイザから選択できます。または、 auto
モデル構成に基づいて自動選択する場合。
コミュニティと繋がる
コンピュータビジョンの愛好家のコミュニティに参加することは、問題を解決し、より速く学習するのに役立ちます。つながり、助けを得て、アイデアを共有するためのいくつかの方法を以下に示します。
コミュニティリソース
- GitHub Issues: YOLO11 GitHubリポジトリにアクセスして、Issuesタブを使用して質問、バグの報告、新機能の提案を行ってください。コミュニティとメンテナーは非常に活発で、いつでも支援できます。
- Ultralytics Discordサーバー: Ultralytics Discordサーバーに参加して、他のユーザーや開発者とチャットしたり、サポートを受けたり、あなたの経験を共有しましょう。
公式ドキュメント
- Ultralytics YOLO11ドキュメント: さまざまなコンピュータビジョンプロジェクトに関する詳細なガイドと役立つヒントについては、公式YOLO11ドキュメントをご覧ください。
これらのリソースを使用すると、課題を解決し、コンピュータービジョンコミュニティの最新のトレンドとプラクティスを常に把握できます。
主なポイント
コンピュータビジョンモデルの学習には、優れたプラクティスに従い、戦略を最適化し、発生する問題を解決することが含まれます。バッチサイズの調整、混合精度学習、事前学習済みの重みから始めるなどの手法を使用すると、モデルの動作が向上し、学習が高速化されます。サブセット学習や早期停止などの方法を使用すると、時間とリソースを節約できます。コミュニティとのつながりを維持し、新しいトレンドを把握することで、モデルの学習スキルを向上させ続けることができます。
よくある質問
Ultralytics YOLOで大規模なデータセットをトレーニングする際に、GPU使用率を向上させるにはどうすればよいですか?
GPU の使用率を向上させるには、以下を設定します。 batch_size
トレーニング構成のパラメータを、GPUがサポートする最大サイズに設定してください。これにより、GPUの能力を最大限に活用し、トレーニング時間を短縮できます。メモリ不足のエラーが発生した場合は、トレーニングがスムーズに実行されるまで、バッチサイズを徐々に小さくしてください。YOLO11の場合、 batch=-1
トレーニングスクリプトでは、効率的な処理のために最適なバッチサイズが自動的に決定されます。詳細については、以下を参照してください。 学習構成.
混合精度学習とは何ですか?また、YOLO11で有効にするにはどうすればよいですか?
混合精度トレーニングは、16ビット(FP16)と32ビット(FP32)の浮動小数点型を利用して、計算速度と精度を両立させます。このアプローチにより、モデルの精度を犠牲にすることなく、トレーニングを高速化し、メモリ使用量を削減します。 精度。YOLO11で混合精度トレーニングを有効にするには、以下を設定します。 amp
パラメータを True
トレーニング構成内。これにより、Automatic Mixed Precision(AMP)トレーニングが有効になります。この最適化手法の詳細については、以下を参照してください。 学習構成.
マルチスケールトレーニングは、YOLO11モデルのパフォーマンスをどのように向上させますか?
マルチスケール学習は、さまざまなサイズの画像で学習することにより、モデルのパフォーマンスを向上させ、モデルがさまざまなスケールや距離に対してより適切に一般化できるようにします。YOLO11では、以下を設定することで、マルチスケール学習を有効にできます。 scale
トレーニング構成におけるパラメータ。例: scale=0.5
画像サイズを半分に縮小し、 scale=2.0
が2倍になります。この手法は、異なる距離にあるオブジェクトをシミュレートし、さまざまなシナリオでモデルをより堅牢にします。設定と詳細については、以下をご覧ください。 学習構成.
YOLO11 で、事前学習済みの重みを使用して学習を高速化するにはどうすればよいですか?
事前学習済みの重みを使用すると、基礎となる視覚的特徴をすでに学習しているモデルを活用することで、トレーニングを大幅に加速し、モデルの精度を高めることができます。YOLO11では、単に pretrained
パラメータを True
または、トレーニング構成でカスタムの事前学習済みウェイトへのパスを指定します。この転移学習と呼ばれる手法により、大規模なデータセットでトレーニングされたモデルを特定のアプリケーションに効果的に適応させることができます。事前学習済みウェイトの使用方法とその利点については、 トレーニング設定ガイド.
モデルのトレーニングに推奨されるエポック数はいくつですか?また、YOLO11でこれを設定するにはどうすればよいですか?
エポック数とは、モデルのトレーニング中にトレーニングデータセットを完全に通過する回数を指します。一般的な開始点は300エポックです。モデルが早期に過学習する場合は、数を減らすことができます。または、過学習が観察されない場合は、トレーニングを600、1200、またはそれ以上のエポックに拡張できます。YOLO11でこれを設定するには、 epochs
トレーニングスクリプトのパラメータ。理想的なエポック数を決定するための追加のアドバイスについては、こちらのセクションを参照してください。 エポック数.