機械学習のベストプラクティスとモデルトレーニングのヒント
はじめに
コンピュータ・ビジョンのプロジェクトで最も重要なステップの1つは、モデルのトレーニングです。このステップに到達する前に、目標を定義し、データを収集し、注釈を付ける必要があります。データの前処理を行い、データがクリーンで一貫性があることを確認したら、モデルのトレーニングに移ります。
見るんだ: モデルトレーニングのヒント|大規模データセットの扱い方|バッチサイズ、GPU 利用率、そして ミックスド・プレシジョン
では、モデルのトレーニングとは何でしょうか?モデルのトレーニングとは、視覚的なパターンを認識し、データに基づいて予測を行うようにモデルを教えるプロセスです。これは、アプリケーションのパフォーマンスと精度に直接影響します。このガイドでは、コンピュータビジョンモデルを効果的にトレーニングするためのベストプラクティス、最適化テクニック、トラブルシューティングのヒントについて説明します。
機械学習モデルのトレーニング方法
コンピュータ・ビジョンのモデルは、誤差が最小になるように内部パラメータを調整することで学習される。最初に、モデルにはラベル付けされた大量の画像セットが与えられる。これらの画像に何が写っているか予測し、予測値を実際のラベルや内容と比較して誤差を計算する。この誤差は、モデルの予測が真の値からどれだけずれているかを示す。
学習中、モデルは繰り返し予測を行い、誤差を計算し、バックプロパゲーションと呼ばれるプロセスを通じてパラメータを更新する。この過程で、モデルは誤差を減らすために内部パラメータ (weights and biases) を調整する。このサイクルを何度も繰り返すことで、モデルは徐々に精度を高めていく。そのうちに、形状、色、テクスチャなどの複雑なパターンを認識できるようになる。
この学習プロセスにより、コンピュータビジョンモデルは、物体検出、インスタンス分割、画像分類など、さまざまなタスクを実行できるようになる。最終的な目標は、実世界のアプリケーションで視覚データを正確に理解できるように、新しい未見の画像に学習を汎化できるモデルを作成することである。
モデルをトレーニングするときに舞台裏で何が起こっているかがわかったところで、モデルをトレーニングするときに考慮すべき点を見てみよう。
大規模データセットでのトレーニング
大規模なデータセットを使ってモデルを学習する場合、いくつかの異なる側面について考える必要がある。例えば、バッチ・サイズの調整、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を使用して必要な部分の精度を維持することで活用されます。ニューラル・ネットワークのほとんどの演算は FP16 で行われ、計算の高速化とメモリ使用量の低減を実現しています。しかし、モデルの重みのマスターコピーはFP32で保持され、重みの更新ステップ中の精度を保証します。同じハードウェア制約の中で、より大きなモデルやより大きなバッチサイズを扱うことができます。
混合精度学習を実装するには、学習スクリプトを修正し、ハードウェア(GPUなど)がそれをサポートしていることを確認する必要がある。最新のディープラーニングフレームワークの多くは PyTorchや TensorFlowなどの最近の深層学習フレームワークの多くは、混合精度の組み込みサポートを提供しています。
混合精度トレーニングは、YOLO11 を使えば簡単です。 amp
フラグを設定します。設定 amp=True
は、自動混合精度(AMP)トレーニングを可能にします。混合精度トレーニングは、モデルトレーニングプロセスを最適化するシンプルで効果的な方法です。
事前に訓練されたウェイト
事前学習済みの重みを使用することは、モデルの学習プロセスをスピードアップする賢い方法です。事前訓練された重みは、すでに大規模なデータセットで訓練されたモデルから得られたものであり、モデルに先手を与えます。転移学習は、事前に訓練されたモデルを新しい関連タスクに適応させます。事前訓練されたモデルを微調整するには、これらの重みから開始し、特定のデータセットで訓練を続けます。この学習方法では、モデルが基本的な特徴をしっかりと理解した状態で学習を開始するため、学習時間が短縮され、パフォーマンスが向上することがよくあります。
について pretrained
パラメータを使用すると、YOLO11 で移籍学習を簡単に行うことができます。設定 pretrained=True
はデフォルトの事前学習済み重みを使用しますが、カスタム事前学習済みモデルへのパスを指定することもできます。事前学習済みの重みと転移学習を使用することで、モデルの能力を効果的に高め、学習コストを削減することができます。
大規模データセットを扱う際に考慮すべきその他のテクニック
大規模なデータセットを扱う際に考慮すべきテクニックは他にもいくつかある:
- 学習率スケジューラー:学習率スケジューラを実装することで、学習中に学習率を動的に調整することができる。学習率をうまく調整することで、モデルのオーバーシュートを防ぎ、安定性を向上させることができる。YOLO11 を学習するとき
lrf
パラメータは、最終的な学習レートを初期レートの何分の一かに設定することで、学習レートのスケジューリングを管理するのに役立つ。 - 分散トレーニング:大規模なデータセットを扱う場合、分散トレーニングは大きな変化をもたらす。トレーニングのワークロードを複数のGPUやマシンに分散することで、トレーニング時間を短縮することができます。このアプローチは、大規模な計算リソースを持つ企業規模のプロジェクトで特に有用です。
トレーニングするエポックの数
モデルをトレーニングする際、エポックとはトレーニングデータセット全体を1回完全に通過することを指す。エポックの間、モデルはトレーニングセットの各例を1回ずつ処理し、学習アルゴリズムに基づいてパラメータを更新します。モデルが時間をかけて学習し、パラメータを改良するためには、通常、複数のエポックが必要である。
よくある質問は、モデルを訓練するエポック数をどのように決定するかということです。良いスタートポイントは300エポックです。モデルが早期にオーバーフィットした場合は、エポック数を減らすことができます。300エポックを超えてもオーバーフィットが発生しない場合は、600、1200、またはそれ以上のエポックまで学習を延長することができます。
しかし、理想的なエポック数は、データセットのサイズやプロジェクトの目標によって異なります。より大きなデータセットでは、モデルを効果的に学習させるために、より多くのエポックが必要になるかもしれませんし、より小さなデータセットでは、オーバーフィッティングを避けるために、より少ないエポックが必要になるかもしれません。YOLO11 に関しては epochs
パラメータを使用します。
アーリーストッピング
早期停止は、モデルのトレーニングを最適化するための貴重なテクニックです。検証のパフォーマンスを監視することで、モデルの改善が止まったらトレーニングを停止することができます。計算リソースを節約し、オーバーフィッティングを防ぐことができます。
このプロセスでは、トレーニングを停止する前に、検証メトリクスの改善を何エポック待つかを決定する忍耐パラメータを設定する。このエポック数内にモデルの性能が向上しない場合、時間とリソースの浪費を避けるためにトレーニングは停止される。
YOLO11 の場合、トレーニング設定でpatienceパラメータを設定することで、早期停止を有効にすることができます。例えば patience=5
つまり、5エポック連続で検証メトリクスの改善が見られない場合、トレーニングは停止する。この方法を使用することで、学習プロセスを効率的に維持し、過剰な計算を行うことなく最適なパフォーマンスを達成することができます。
クラウドとローカルトレーニングの選択
モデルのトレーニングには、クラウドトレーニングとローカルトレーニングの2つのオプションがある。
クラウドトレーニングは、スケーラビリティと強力なハードウェアを提供し、大規模なデータセットや複雑なモデルを扱うのに理想的です。Google Cloud、AWS、Azureなどのプラットフォームは、高性能GPUやTPUへのオンデマンドアクセスを提供し、トレーニング時間を短縮し、より大きなモデルでの実験を可能にする。しかし、クラウド・トレーニングは、特に長期間のトレーニングにはコストがかかり、データ転送はコストとレイテンシーを増加させます。
ローカル・トレーニングは、より大きなコントロールとカスタマイズが可能で、特定のニーズに合わせて環境をカスタマイズし、継続的なクラウドコストを回避することができます。長期的なプロジェクトではより経済的で、データはオンプレミスに保存されるため、より安全です。しかし、ローカルのハードウェアにはリソースの制限があり、メンテナンスが必要な場合があります。
オプティマイザーの選択
オプティマイザは、モデルの性能を測定する損失関数を最小化するために、 ニューラルネットワークの重みを調整するアルゴリズムです。もっと簡単に言えば、オプティマイザは誤差を減らすためにパラメータを調整することで、 モデルの学習を支援します。適切なオプティマイザを選択することは、モデルの学習の速さと正確さに直接影響します。
また、モデルのパフォーマンスを向上させるために、オプティマイザ・パラメータを微調整することもできます。学習率を調整することで、パラメータを更新する際のステップの大きさを設定します。安定性を保つために、最初は中程度の学習率に設定し、長期的な学習を改善するために、時間の経過とともに徐々に低下させることができます。さらに、モメンタムを設定することで、過去の更新が現在の更新に与える影響度を決定します。モメンタムの一般的な値は0.9程度である。これは一般的に良いバランスを提供する。
一般的なオプティマイザー
さまざまなオプティマイザーには、さまざまな長所と短所があります。一般的なオプティマイザーをいくつか見てみよう。
-
SGD(確率的勾配降下法):
- パラメータに対する損失関数の勾配を使用してモデルパラメータを更新する。
- シンプルで効率的だが、収束に時間がかかり、ローカル・ミニマムにはまり込む可能性がある。
-
アダム(適応モーメント推定):
- モメンタム付きSGDとRMSPropの両方の利点を兼ね備えている。
- 勾配の1次モーメントと2次モーメントの推定値に基づいて、各パラメータの学習率を調整する。
- ノイズの多いデータや疎な勾配に適している。
- 効率的で、一般的にチューニングが少なくて済むので、YOLO11 にお勧めのオプティマイザです。
-
RMSProp (二乗平均平方根伝播):
- 勾配を最近の勾配の大きさの実行平均で割ることによって、各パラメータの学習率を調整する。
- 消失勾配問題の処理に役立ち、リカレント・ニューラル・ネットワークに有効である。
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
倍にする。このテクニックは、さまざまな距離のオブジェクトをシミュレートし、モデルをさまざまなシナリオに対してよりロバストにする。設定や詳細については トレーニング構成.
YOLO11 、事前学習された重みを使用してトレーニングを高速化するにはどうすればよいですか?
事前にトレーニングされた重みを使用することで、トレーニング時間を大幅に短縮し、基本的な特徴をすでに理解しているモデルから始めることで、モデルのパフォーマンスを向上させることができます。YOLO11 では pretrained
パラメータを True
または、トレーニング設定にカスタム事前トレーニング重みへのパスを指定します。転移学習として知られるこのアプローチでは、大規模なデータセットからの知識を活用して、特定のタスクに適応させます。事前学習された重みとその利点についてもっと知る これ.
モデルのトレーニングに推奨されるエポック数と、YOLO11 でこれを設定する方法は?
エポック数とは、モデル学習中に学習データセットを完全に通過する回数のことである。典型的な開始点は300エポックです。モデルが早期にオーバーフィットした場合は、この数を減らすことができます。また、オーバーフィッティングが見られない場合は、600、1200、またはそれ以上のエポック数まで学習を延長することもできます。この設定はYOLO11 で epochs
パラメータを使用します。理想的なエポック数の決定に関するその他のアドバイスについては、以下のセクションを参照してください。 エポック数.