Link to this section機械学習のベストプラクティスとモデルトレーニングのヒント#
Link to this sectionはじめに#
コンピュータビジョンプロジェクトに取り組む際、最も重要なステップの一つがモデルトレーニングです。このステップに到達する前に、目標の定義とデータの収集およびアノテーションが必要です。データの前処理を行ってクリーンで一貫性のある状態にしたら、モデルのトレーニングに進むことができます。
Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision
では、モデルトレーニングとは何でしょうか。モデルトレーニングとは、モデルに視覚的なパターンを認識させ、データに基づいて予測を行うよう教えるプロセスです。これはアプリケーションのパフォーマンスと精度に直接影響します。このガイドでは、コンピュータビジョンモデルを効果的にトレーニングするためのベストプラクティス、最適化手法、トラブルシューティングのヒントについて説明します。
Link to this section機械学習モデルのトレーニング方法#
コンピュータビジョンモデルは、誤差を最小化するように内部パラメータを調整することでトレーニングされます。まず、ラベル付けされた画像の大きなセットがモデルに入力されます。モデルは画像の内容を予測し、その予測と実際のラベルや内容を比較して誤差を計算します。これらの誤差は、モデルの予測が真の値からどれだけ離れているかを示します。
トレーニング中、モデルは反復的に予測を行い、誤差を計算し、逆伝播と呼ばれるプロセスを通じてパラメータを更新します。このプロセスで、モデルは内部パラメータ(重みとバイアス)を調整して誤差を減らします。このサイクルを何度も繰り返すことで、モデルは徐々に精度を向上させます。時間の経過とともに、形状、色、テクスチャなどの複雑なパターンを認識できるようになります。
This learning process makes it possible for the computer vision model to perform various tasks, including object detection, instance segmentation, semantic segmentation, and image classification. The ultimate goal is to create a model that can generalize its learning to new, unseen images so that it can accurately understand visual data in real-world applications.
モデルをトレーニングする際に背後で何が起こっているかが理解できたところで、トレーニング時に考慮すべき点を見ていきましょう。
Link to this section大規模データセットでのトレーニング#
大規模データセットを使用してモデルをトレーニングする計画を立てる際には、いくつかの異なる側面を考慮する必要があります。例えば、バッチサイズの調整、GPU使用率の制御、マルチスケールトレーニングの使用の選択などが挙げられます。これらの各オプションについて詳しく説明します。
Link to this sectionバッチサイズとGPU使用率#
大規模データセットでモデルをトレーニングする場合、GPUを効率的に活用することが鍵となります。バッチサイズは重要な要素です。これは、機械学習モデルが単一のトレーニング反復で処理するデータサンプル数です。GPUがサポートする最大バッチサイズを使用することで、その機能を最大限に活用し、モデルトレーニングにかかる時間を短縮できます。ただし、GPUメモリ不足は避ける必要があります。メモリエラーが発生した場合は、モデルがスムーズにトレーニングできるようになるまでバッチサイズを段階的に減らしてください。
Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉
With respect to YOLO26, you can set the batch parameter in the training configuration to match your GPU capacity. Also, setting batch=-1 in your training script will automatically determine the batch size that can be efficiently processed based on your device's capabilities. By fine-tuning the batch size, you can make the most of your GPU resources and improve the overall training process.
Link to this sectionサブセットトレーニング#
サブセットトレーニングは、より大きなデータセットを代表する小さなデータセットでモデルをトレーニングする賢い戦略です。特に初期のモデル開発やテストの段階で、時間とリソースを節約できます。時間が不足している場合や、さまざまなモデル構成を試している場合に、サブセットトレーニングは良い選択肢です。
YOLO26の場合、 fraction パラメータを使用することで簡単にサブセットトレーニングを実装できます。このパラメータを使用すると、データセットのどの割合をトレーニングに使用するかを指定できます。例えば、 fraction=0.1 を設定すると、データセットの10%でモデルがトレーニングされます。この手法は、完全なデータセットでトレーニングを開始する前に、素早い反復やモデルの調整を行うために使用できます。サブセットトレーニングは、迅速に進捗を生み出し、潜在的な問題を早期に特定するのに役立ちます。
Link to this sectionマルチスケールトレーニング#
マルチスケールトレーニングは、さまざまなサイズの画像でトレーニングを行うことで、モデルの一般化能力を向上させる手法です。モデルは、さまざまなスケールや距離にある物体を検出することを学習し、より堅牢になります。
例えば、YOLO26をトレーニングする際、 scale パラメータを設定してマルチスケールトレーニングを有効にできます。このパラメータは、指定された係数によってトレーニング画像のサイズを調整し、異なる距離にある物体をシミュレートします。例えば、 scale=0.5 を設定すると、トレーニング中にトレーニング画像が0.5から1.5の係数でランダムにズームされます。このパラメータを設定することで、モデルはさまざまな画像スケールを経験し、異なる物体サイズやシナリオ全体で検出能力を向上させることができます。
Ultralytics also supports image-size multi-scale training via the multi_scale parameter. Unlike scale, which zooms images and then pads/crops back to imgsz, multi_scale changes imgsz itself each batch (rounded to the model stride). For example, with imgsz=640 and multi_scale=0.25, the training size is sampled from 480 up to 800 in stride steps (e.g., 480, 512, 544, ..., 800), while multi_scale=0.0 keeps a fixed size.
Link to this sectionキャッシュ#
キャッシュは、機械学習モデルのトレーニング効率を向上させるための重要な手法です。前処理された画像をメモリに保存することで、キャッシュはGPUがディスクからのデータ読み込みを待機する時間を削減します。モデルはディスクI/O操作による遅延なしに、継続的にデータを受け取ることができます。
YOLO26をトレーニングする際のキャッシュは、 cache パラメータで制御できます。
cache=True: データセットの画像をRAMに保存します。アクセス速度は最速ですが、メモリ使用量が増加するという代償があります。cache='disk': 画像をディスクに保存します。RAMよりは遅いですが、毎回新しいデータを読み込むよりは高速です。cache=False: キャッシュを無効にします。完全にディスクI/Oに依存するため、最も遅いオプションです。
Link to this section混合精度トレーニング#
混合精度トレーニングでは、16ビット(FP16)と32ビット(FP32)の両方の浮動小数点型を使用します。FP16を計算の高速化に使用し、FP32を必要な場所での精度維持に使用することで、両方の長所を活用します。ニューラルネットワークの操作の大部分は、より高速な計算と低いメモリ使用量の利点を活かすためにFP16で行われます。ただし、重みの更新ステップ中に精度を確保するため、モデルの重みのマスターコピーはFP32で保持されます。これにより、同じハードウェア制約内で、より大きなモデルやより大きなバッチサイズを扱うことができます。
To implement mixed precision training, you'll need to modify your training scripts and ensure your hardware (like GPUs) supports it. Many modern deep learning frameworks, such as PyTorch and TensorFlow, offer built-in support for mixed precision.
YOLO26を使用する場合、混合精度トレーニングは簡単です。トレーニング構成で amp フラグを使用できます。 amp=True を設定すると、自動混合精度(AMP)トレーニングが有効になります。混合精度トレーニングは、モデルのトレーニングプロセスを最適化するためのシンプルかつ効果的な方法です。
Link to this section事前学習済みウェイト#
事前学習済みの重みを使用することは、モデルのトレーニングプロセスをスピードアップするための賢い方法です。事前学習済みの重みは、すでに大規模なデータセットでトレーニングされたモデルから得られるため、モデルに有利なスタートを切らせることができます。転移学習は、事前学習済みのモデルを新しい関連タスクに適応させます。事前学習済みのモデルを微調整(ファインチューニング)するには、これらの重みから始めて、特定のデータセットでトレーニングを続けます。このトレーニング手法は、モデルが基本的な特徴をしっかり理解した状態で始まるため、トレーニング時間の短縮やパフォーマンスの向上が期待できます。
YOLO26では、 pretrained パラメータを使用して簡単に転移学習を行えます。 pretrained=True を設定するとデフォルトの事前学習済み重みが使用されます。あるいは、カスタムの事前学習済みモデルへのパスを指定することもできます。事前学習済みの重みと転移学習を効果的に使用することで、モデルの能力を向上させ、トレーニングコストを削減できます。
Link to this section大規模データセットを扱う際に考慮すべきその他の手法#
大規模データセットを扱う際に考慮すべき他の手法がいくつかあります。
- 学習率スケジューラ: 学習率スケジューラを実装すると、トレーニング中に学習率を動的に調整できます。適切に調整された学習率は、モデルが最小値を行き過ぎるのを防ぎ、安定性を向上させます。YOLO26をトレーニングする際、
lrfパラメータは、最終的な学習率を初期学習率の割合として設定することで、学習率スケジューリングを管理するのに役立ちます。 - 分散トレーニング: 大規模データセットを扱う場合、分散トレーニングは状況を一変させる可能性があります。トレーニング負荷を複数のGPUやマシンに分散させることで、トレーニング時間を短縮できます。このアプローチは、膨大な計算リソースを必要とするエンタープライズ規模のプロジェクトで特に価値があります。
Link to this sectionトレーニングするエポック数#
モデルをトレーニングする際、エポックとは、トレーニングデータセット全体を一度通過することを指します。1エポックの間、モデルはトレーニングセット内の各例を一度処理し、学習アルゴリズムに基づいてパラメータを更新します。モデルが時間をかけて学習し、パラメータを洗練させるためには、通常複数のエポックが必要です。
よくある質問として、モデルをトレーニングするエポック数をどのように決定するかという点があります。良い出発点は300エポックです。モデルが早期に過学習する場合は、エポック数を減らすことができます。300エポック後に過学習が発生しない場合は、トレーニングを600、1200、あるいはそれ以上のエポックに延長できます。
ただし、理想的なエポック数は、データセットのサイズやプロジェクトの目標によって異なります。大規模なデータセットではモデルが効果的に学習するために多くのエポックが必要な場合があり、逆に小規模なデータセットでは過学習を避けるために少ないエポック数が必要な場合があります。YOLO26に関しては、トレーニングスクリプトで epochs パラメータを設定できます。
Link to this section早期停止#
早期停止(Early Stopping)は、モデルのトレーニングを最適化するための価値ある手法です。検証パフォーマンスを監視することで、モデルの改善が止まった時点でトレーニングを停止できます。計算リソースを節約し、過学習を防ぐことができます。
このプロセスでは、検証メトリクスの改善が何エポック見られない場合にトレーニングを停止するかを決定する、patience(忍耐)パラメータを設定します。これらのエポック内にモデルのパフォーマンスが向上しない場合、時間とリソースの浪費を避けるためにトレーニングが停止されます。
YOLO26では、トレーニング構成でpatienceパラメータを設定することで早期停止を有効にできます。例えば、 patience=5 は、検証メトリクスが5エポック連続で改善しなかった場合にトレーニングが停止することを意味します。この方法を使用すると、過度な計算を行うことなく、効率的なトレーニングプロセスを維持し、最適なパフォーマンスを達成できます。
Link to this sectionクラウドトレーニングとローカルトレーニングの選択#
モデルをトレーニングするには、クラウドトレーニングとローカルトレーニングという2つの選択肢があります。
クラウドトレーニングはスケーラビリティと強力なハードウェアを提供し、大規模なデータセットや複雑なモデルを扱うのに適しています。Google Cloud、AWS、Azureなどのプラットフォームは、高性能なGPUやTPUへのオンデマンドアクセスを提供しており、トレーニング時間を短縮し、より大きなモデルでの実験を可能にします。ただし、クラウドトレーニングは特に長期間利用する場合に高額になる可能性があり、データ転送がコストやレイテンシの増加につながることもあります。
ローカルトレーニングは、より優れた制御とカスタマイズを提供し、環境を特定のニーズに合わせて調整し、継続的なクラウドコストを回避できます。長期プロジェクトではより経済的であり、データはオンプレミスに留まるため、セキュリティも向上します。ただし、ローカルハードウェアにはリソース制限がある場合があり、保守が必要になるため、大規模なモデルではトレーニング時間が長くなる可能性があります。
Link to this sectionオプティマイザの選択#
オプティマイザは、モデルのパフォーマンスを測定する損失関数を最小化するためにニューラルネットワークの重みを調整するアルゴリズムです。簡単に言えば、オプティマイザは誤差を減らすようにパラメータを調整することで、モデルの学習を支援します。適切なオプティマイザを選択することは、モデルがどれだけ速く、正確に学習するかに直結します。
モデルのパフォーマンスを向上させるために、オプティマイザのパラメータを微調整することもできます。学習率を調整することで、パラメータ更新時のステップサイズを設定します。安定性を高めるために、中程度の学習率から開始し、時間をかけて徐々に低下させて長期的な学習を改善するのがよいでしょう。さらに、モーメンタムを設定することで、過去の更新が現在の更新にどれだけ影響を与えるかを決定します。モーメンタムの一般的な値は約0.9であり、一般的にバランスが取れています。
Link to this section一般的なオプティマイザ#
オプティマイザごとに強みと弱みがあります。いくつかの一般的なオプティマイザを簡単に見てみましょう。
-
SGD (Stochastic Gradient Descent / 確率的勾配降下法):
- 損失関数のパラメータに対する勾配を使用してモデルパラメータを更新します。
- シンプルで効率的ですが、収束が遅く、局所的な最小値(ローカルミニマ)に陥る可能性があります。
-
Adam (Adaptive Moment Estimation / 適応的モーメント推定):
- モーメンタム付きSGDとRMSPropの両方の利点を組み合わせたものです。
- 勾配の一次および二次モーメントの推定に基づいて、各パラメータの学習率を調整します。
- ノイズの多いデータや疎な勾配に適しています。
- 効率的で調整が少なくて済むことが多いため、YOLO26に推奨されるオプティマイザです。
-
RMSProp (Root Mean Square Propagation):
- 勾配の大きさの移動平均で勾配を除算することにより、各パラメータの学習率を調整します。
- 勾配消失問題の解決に役立ち、回帰ニューラルネットワークに効果的です。
-
MuSGD (Muon + SGD ハイブリッド):
- SGDスタイルの更新とMuon風の挙動を組み合わせ、大規模トレーニングでの安定性を向上させます。
- SGDのような一般化を求めつつ、標準のSGDよりもスムーズな収束が必要な場合に適しています。
- 特にYOLO26のトレーニングレシピに関連しており、迷った場合は
optimizer=autoで開始し、データセットでMuSGDと比較してください。
YOLO26では、 optimizer パラメータを使用して、SGD、MuSGD、Adam、AdamW、NAdam、RAdam、RMSPropなどのさまざまなオプティマイザから選択できます。また、モデル構成に基づいて自動的に選択されるよう auto に設定することもできます。
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDLink to this sectionコミュニティとのつながり#
コンピュータビジョンの愛好家コミュニティの一員になることは、問題を解決し、より速く学ぶのに役立ちます。つながり、助けを得て、アイデアを共有するためのいくつかの方法を紹介します。
Link to this sectionコミュニティリソース#
- GitHub Issues: YOLO26 GitHubリポジトリにアクセスし、Issuesタブを使用して質問したり、バグを報告したり、新機能を提案したりしてください。コミュニティとメンテナーは非常にアクティブで、いつでも助ける準備ができています。
- Ultralytics Discordサーバー: Ultralytics Discordサーバーに参加して、他のユーザーや開発者とチャットしたり、サポートを得たり、経験を共有したりしてください。
Link to this section公式ドキュメント#
- Ultralytics YOLO26ドキュメント: 公式YOLO26ドキュメントをチェックして、さまざまなコンピュータビジョンプロジェクトに関する詳細なガイドや役立つヒントを確認してください。
これらのリソースを使用することで、課題を解決し、コンピュータビジョンコミュニティにおける最新のトレンドや実践に遅れずについていくことができます。
Link to this section重要なポイント#
コンピュータビジョンモデルのトレーニングには、優れた実践に従い、戦略を最適化し、問題が発生したときに対処することが含まれます。バッチサイズの調整、混合精度トレーニング、事前学習済みの重みから開始するといったテクニックは、モデルをより適切に機能させ、トレーニングを高速化します。サブセットトレーニングや早期停止などの方法は、時間とリソースの節約に役立ちます。コミュニティとつながり、新しいトレンドを把握することで、モデルトレーニングのスキルを向上させ続けることができます。
Link to this sectionよくある質問 (FAQ)#
Link to this sectionUltralytics YOLOで大規模データセットをトレーニングする際に、GPU使用率を向上させるにはどうすればよいですか?#
GPUの利用率を向上させるには、トレーニング設定のbatchパラメータをGPUがサポートする最大サイズに設定してください。これにより、GPUの能力を最大限に活用でき、トレーニング時間を短縮できます。メモリ関連のエラーが発生した場合は、トレーニングがスムーズに実行されるまでバッチサイズを段階的に小さくしてください。YOLO26では、トレーニングスクリプトでbatch=-1を設定すると、効率的な処理のための最適なバッチサイズが自動的に決定されます。詳細については、training configurationを参照してください。
Link to this section混合精度トレーニングとは何ですか?また、YOLO26でそれを有効にするにはどうすればよいですか?#
混合精度トレーニングは、16ビット(FP16)と32ビット(FP32)の浮動小数点型を使用して、計算速度と精度のバランスを取る手法です。このアプローチにより、モデルの精度を犠牲にすることなく、トレーニングを加速し、メモリ使用量を削減できます。YOLO26で混合精度トレーニングを有効にするには、トレーニング構成で amp パラメータを True に設定してください。これにより自動混合精度(AMP)トレーニングが有効になります。この最適化手法の詳細については、トレーニング構成を参照してください。
Link to this sectionマルチスケールトレーニングは、どのようにYOLO26のモデルパフォーマンスを向上させますか?#
マルチスケールトレーニングは、さまざまなサイズの画像でトレーニングを行うことでモデルパフォーマンスを向上させ、モデルがさまざまなスケールや距離でより良く一般化できるようにします。YOLO26では、トレーニング構成の scale パラメータを設定することでマルチスケールトレーニングを有効にできます。例えば、 scale=0.5 は0.5から1.5のズーム係数をサンプリングし、その後 imgsz に戻るようにパディング/クロップします。この手法は、異なる距離にある物体をシミュレートし、さまざまなシナリオでモデルをより堅牢にします。設定や詳細については、トレーニング構成をチェックしてください。
Link to this sectionYOLO26でトレーニングを高速化するために、事前学習済みの重みをどのように使用できますか?#
事前学習済みの重みを使用すると、基本的な視覚的特徴をすでに理解しているモデルを活用できるため、トレーニングを大幅に加速し、モデル精度を向上させることができます。YOLO26では、トレーニング構成で pretrained パラメータを True に設定するか、独自のカスタム事前学習済み重みへのパスを指定するだけです。転移学習と呼ばれるこの手法により、大規模データセットでトレーニングされたモデルを特定のアプリケーションに効果的に適応させることができます。事前学習済みの重みの使用方法とその利点については、トレーニング構成ガイドで詳しく学ぶことができます。
Link to this sectionモデルのトレーニングに推奨されるエポック数はいくつですか?また、YOLO26でこれを設定するにはどうすればよいですか?#
エポック数とは、モデルトレーニング中にトレーニングデータセットを完全に通過する回数を指します。典型的な出発点は300エポックです。モデルが早期に過学習する場合は、この回数を減らすことができます。あるいは、過学習が見られない場合は、トレーニングを600、1200、あるいはそれ以上のエポックまで延長できます。YOLO26でこれを設定するには、トレーニングスクリプトの epochs パラメータを使用してください。理想的なエポック数を決定するための追加のアドバイスについては、エポック数に関するセクションを参照してください。