YOLO Vision 2026:

機械学習のベストプラクティスとモデルトレーニングのヒント#

はじめに#

コンピュータビジョンプロジェクトに取り組む際、最も重要なステップの1つがモデルのトレーニングです。このステップに到達する前に、目標を定義し、データの収集とアノテーションを行う必要があります。データを前処理してクリーンで一貫性のある状態にしたら、モデルのトレーニングに進むことができます。

モデルのトレーニングは、視覚的なパターンを認識してデータから予測を行う方法をモデルに教えるプロセスであり、アプリケーションの精度を直接左右します。このガイドでは、コンピュータビジョンモデルを効果的にトレーニングするためのベストプラクティス、最適化手法、およびトラブルシューティングのヒントについて説明します。



Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision

機械学習モデルのトレーニング方法#

コンピュータビジョンモデルは、誤差を最小化するように内部パラメータを調整することでトレーニングされます。まず、ラベル付けされた画像の大きなセットがモデルに入力されます。モデルは画像の内容を予測し、その予測と実際のラベルや内容を比較して誤差を計算します。これらの誤差は、モデルの予測が真の値からどれだけ離れているかを示します。

トレーニング中、モデルは予測の作成、誤差の計算、そして逆伝播と呼ばれるプロセスを通じたパラメータの更新を反復的に行います。このプロセスにおいて、モデルは誤差を減らすために内部パラメータ(重みとバイアス)を調整します。このサイクルを何度も繰り返すことで、モデルは徐々に精度を向上させます。時間が経つにつれて、形状、色、テクスチャなどの複雑なパターンを認識できるようになります。

What is Backpropagation?

この学習プロセスにより、computer visionモデルは、object detectioninstance segmentationsemantic segmentationimage classificationなどのさまざまなtasksを実行できるようになります。最終的な目標は、モデルが新しい未見の画像に対して学習内容を汎化し、現実世界のアプリケーションで視覚データを正確に理解できるようにすることです。

モデルをトレーニングする際に背後で何が起こっているかが理解できたところで、トレーニング時に考慮すべき点を見ていきましょう。

大規模データセットでのトレーニング#

大規模データセットを使用してモデルをトレーニングする計画を立てる際には、いくつかの異なる側面を考慮する必要があります。例えば、バッチサイズの調整、GPU使用率の制御、マルチスケールトレーニングの使用の選択などが挙げられます。これらの各オプションについて詳しく説明します。

バッチサイズとGPU使用率#

大規模データセットでモデルをトレーニングする場合、GPUを効率的に活用することが鍵となります。バッチサイズは重要な要素です。これは、機械学習モデルが単一のトレーニング反復で処理するデータサンプル数です。GPUがサポートする最大バッチサイズを使用することで、その機能を最大限に活用し、モデルトレーニングにかかる時間を短縮できます。ただし、GPUメモリ不足は避ける必要があります。メモリエラーが発生した場合は、モデルがスムーズにトレーニングできるようになるまでバッチサイズを段階的に減らしてください。



Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉

YOLO26に関しては、training configurationbatch パラメータを設定して、GPUの容量に合わせることができます。また、トレーニングスクリプトで batch=-1 を設定すると、デバイスの機能に基づいて効率的に処理できるbatch sizeが自動的に決定されます。バッチサイズを微調整することで、GPUリソースを最大限に活用し、全体的なトレーニングプロセスを改善できます。

サブセットトレーニング#

サブセットトレーニングは、より大きなデータセットを代表する小さなデータセットでモデルをトレーニングする賢い戦略です。特に初期のモデル開発やテストの段階で、時間とリソースを節約できます。時間が不足している場合や、さまざまなモデル構成を試している場合に、サブセットトレーニングは良い選択肢です。

YOLO26を使用する場合、 fraction パラメータを使用することで、サブセットトレーニングを簡単に実装できます。このパラメータを使用すると、トレーニングに使用するデータセットの割合を指定できます。たとえば、 fraction=0.1 を設定すると、データの10%でモデルがトレーニングされます。このテクニックを使用すると、フルデータセットを使用したモデルのトレーニングを本格的に開始する前に、迅速なイテレーションとモデルのチューニングを行うことができます。サブセットトレーニングは、迅速な進捗を生み出し、潜在的な問題を早期に特定するのに役立ちます。

マルチスケールトレーニング#

マルチスケールトレーニングは、さまざまなサイズの画像でトレーニングを行うことで、モデルの一般化能力を向上させる手法です。モデルは、さまざまなスケールや距離にある物体を検出することを学習し、より堅牢になります。

たとえば、YOLO26をトレーニングする際、 scale パラメータを設定することでマルチスケールトレーニングを有効にできます。このパラメータは、指定された係数によってトレーニング画像のサイズを調整し、さまざまな距離にあるオブジェクトをシミュレートします。たとえば、 scale=0.5 を設定すると、トレーニング中にトレーニング画像が0.5から1.5の係数でランダムにズームされます。このパラメータを設定することで、モデルはさまざまな画像スケールを経験し、異なるオブジェクトサイズやシナリオ全体での検出能力を向上させることができます。

Ultralyticsは、multi_scale パラメータを介した画像サイズのスケーラブルなマルチスケールトレーニングもサポートしています。画像を拡大縮小してから imgsz に合わせてパディング/クロップする scale とは異なり、multi_scale はバッチごとに imgsz 自体を変更します(モデルのストライドに丸められます)。たとえば、imgsz=640multi_scale=0.25 を使用する場合、トレーニングサイズは480から800までストライドステップ(例:480、512、544、...、800)でサンプリングされますが、multi_scale=0.0 は固定サイズを維持します。

キャッシュ#

キャッシュは、機械学習モデルのトレーニング効率を向上させるための重要な手法です。前処理された画像をメモリに保存することで、キャッシュはGPUがディスクからのデータ読み込みを待機する時間を削減します。モデルはディスクI/O操作による遅延なしに、継続的にデータを受け取ることができます。

YOLO26のトレーニング時のキャッシングは、 cache パラメータを使用して制御できます。

  • cache=True: データセットの画像をRAMに保存し、最速のアクセス速度を提供しますが、メモリ使用量が増加するというデメリットがあります。
  • cache='disk': 画像をディスクに保存します。RAMよりも遅くなりますが、毎回新しいデータをロードするよりも高速です。
  • cache=False: キャッシングを無効にし、完全にディスクI/Oに依存します。最も遅いオプションです。

混合精度トレーニング#

混合精度トレーニングでは、16ビット(FP16)と32ビット(FP32)の両方の浮動小数点型を使用します。計算速度を上げるためにFP16を使用し、必要なところで精度を維持するためにFP32を使用することで、FP16とFP32の両方の長所が活かされます。ニューラルネットワークの操作のほとんどはFP16で行われ、計算の高速化とメモリ使用量の削減の恩恵を受けます。ただし、重みの更新ステップ中の精度を確保するため、モデルの重みのマスターコピーはFP32で保持されます。同じハードウェアの制約内で、より大きなモデルやより大きなバッチサイズを処理できるようになります。

Mixed precision FP16 training benefits

混合精度トレーニングを実装するには、トレーニングスクリプトを変更し、ハードウェア(GPUなど)がそれをサポートしていることを確認する必要があります。PyTorchTensorFlowなどの多くの最新のdeep learningフレームワークは、混合精度の組み込みサポートを提供しています。

YOLO26を操作する場合、混合精度トレーニングは簡単に行えます。トレーニング設定で amp フラグを使用できます。 amp=True を設定すると、自動混合精度(AMP)トレーニングが有効になります。混合精度トレーニングは、モデルのトレーニングプロセスを最適化するためのシンプルでありながら効果的な方法です。

事前学習済みウェイト#

事前学習済みの重みを使用することは、モデルのトレーニングプロセスをスピードアップするための賢い方法です。事前学習済みの重みは、大規模なデータセットで既にトレーニングされたモデルから取得されるため、モデルに有利なスタートを切ることができます。転移学習は、事前学習済みモデルを新しい関連タスクに適応させます。事前学習済みモデルのファインチューニングには、これらの重みから開始し、特定のデータセットでトレーニングを継続することが含まれます。モデルが基本機能の確かな理解から始まるため、このトレーニング方法により、トレーニング時間が短縮され、多くの場合パフォーマンスが向上します。

pretrained パラメータを使用すると、YOLO26で簡単に転移学習を行うことができます。 pretrained=True を設定するとデフォルトの事前学習済み重みが使用されます。あるいは、カスタムの事前学習済みモデルへのパスを指定することもできます。事前学習済みの重みと転移学習を効果的に使用することで、モデルの機能が向上し、トレーニングコストが削減されます。

大規模データセットを扱う際に考慮すべきその他の手法#

大規模データセットを扱う際に考慮すべき他の手法がいくつかあります。

  • 学習率スケジューラ: 学習率スケジューラを実装すると、トレーニング中に学習率が動的に調整されます。適切に調整された学習率により、モデルが最小値を行き過ぎてしまうのを防ぎ、安定性を向上させることができます。YOLO26をトレーニングする際、 lrf パラメータは、初期率の割合として最終的な学習率を設定することにより、学習率のスケジューリングを管理するのに役立ちます。
  • 分散トレーニング: 大規模データセットを扱う場合、分散トレーニングは状況を一変させる可能性があります。トレーニング負荷を複数のGPUやマシンに分散させることで、トレーニング時間を短縮できます。このアプローチは、膨大な計算リソースを必要とするエンタープライズ規模のプロジェクトで特に価値があります。

トレーニングするエポック数#

モデルをトレーニングする際、エポックとは、トレーニングデータセット全体を通した1回の完全なパスを指します。エポック中、モデルはトレーニングセット内の各例を1回処理し、学習アルゴリズムに基づいてパラメータを更新します。モデルが時間をかけて学習し、パラメータを洗練させるためには、通常、複数のエポックが必要です。

よくある質問として、モデルをトレーニングするエポック数をどのように決定するかというものがあります。良い出発点は300エポックです。モデルが早期に過学習する場合は、エポック数を減らすことができます。300エポック経過しても過学習が発生しない場合は、トレーニングを600、1200、またはそれ以上のエポックに拡張できます。

ただし、理想的なエポック数は、データセットのサイズやプロジェクトの目標によって異なる場合があります。データセットが大きい場合はモデルが効果的に学習するためにより多くのエポックが必要になる場合があり、データセットが小さい場合は過学習を避けるためにより少ないエポックが必要になる場合があります。YOLO26に関しては、トレーニングスクリプトで epochs パラメータを設定できます。

早期停止#

早期停止(Early Stopping)は、モデルのトレーニングを最適化するための価値ある手法です。検証パフォーマンスを監視することで、モデルの改善が止まった時点でトレーニングを停止できます。計算リソースを節約し、過学習を防ぐことができます。

このプロセスでは、検証メトリクスの改善が何エポック見られない場合にトレーニングを停止するかを決定する、patience(忍耐)パラメータを設定します。これらのエポック内にモデルのパフォーマンスが向上しない場合、時間とリソースの浪費を避けるためにトレーニングが停止されます。

Early stopping to prevent model overfitting

YOLO26の場合、トレーニング設定でpatienceパラメータを設定することで、早期終了(アーリーストッピング)を有効にできます。たとえば、 patience=5 は、検証指標が5連続エポックで改善しない場合、トレーニングが停止することを意味します。この方法を使用することで、過剰な計算を伴わずにトレーニングプロセスが効率的に維持され、最適なパフォーマンスが達成されます。

クラウドトレーニングとローカルトレーニングの選択#

モデルをトレーニングするには、クラウドトレーニングとローカルトレーニングという2つの選択肢があります。

クラウドトレーニングはスケーラビリティと強力なハードウェアを提供し、大規模なデータセットや複雑なモデルを処理するのに最適です。Google CloudAWSAzureなどのプラットフォームは、高性能なGPUやTPUへのオンデマンドアクセスを提供し、トレーニング時間を短縮し、より大きなモデルでの実験を可能にします。ただし、特に長期間にわたる場合、クラウドトレーニングは高価になる可能性があり、データ転送によってコストやレイテンシが増加する可能性があります。

ローカルトレーニングは、より優れた制御とカスタマイズを提供し、環境を特定のニーズに合わせて調整し、継続的なクラウドコストを回避できます。長期プロジェクトではより経済的であり、データはオンプレミスに留まるため、セキュリティも向上します。ただし、ローカルハードウェアにはリソース制限がある場合があり、保守が必要になるため、大規模なモデルではトレーニング時間が長くなる可能性があります。

オプティマイザの選択#

オプティマイザは、モデルのパフォーマンスを測定する損失関数を最小限に抑えるために、ニューラルネットワークの重みを調整するアルゴリズムです。簡単に言えば、オプティマイザは誤差を減らすためにパラメータを微調整することで、モデルの学習を支援します。適切なオプティマイザを選択することは、モデルがどれほど迅速かつ正確に学習するかを直接左右します。

モデルのパフォーマンスを向上させるために、オプティマイザのパラメータを微調整することもできます。学習率を調整することで、パラメータ更新時のステップサイズを設定します。安定性を高めるために、中程度の学習率から開始し、時間をかけて徐々に低下させて長期的な学習を改善するのがよいでしょう。さらに、モーメンタムを設定することで、過去の更新が現在の更新にどれだけ影響を与えるかを決定します。モーメンタムの一般的な値は約0.9であり、一般的にバランスが取れています。

一般的なオプティマイザ#

オプティマイザごとに強みと弱みがあります。いくつかの一般的なオプティマイザを簡単に見てみましょう。

  • SGD (Stochastic Gradient Descent / 確率的勾配降下法):

    • 損失関数のパラメータに対する勾配を使用してモデルパラメータを更新します。
    • シンプルで効率的ですが、収束が遅く、局所的な最小値(ローカルミニマ)に陥る可能性があります。
  • Adam(Adaptive Moment Estimation):

    • モーメンタム付きSGDとRMSPropの両方の利点を組み合わせたものです。
    • 勾配の一次および二次モーメントの推定に基づいて、各パラメータの学習率を調整します。
    • ノイズの多いデータや疎な勾配に適しています。
    • 効率的であり、通常は必要なチューニングが少なくて済みます。短いトレーニング実行の場合、YOLO26の optimizer=auto は、Adamそのものではなく、密接に関連する AdamW を選択します。
  • RMSProp (Root Mean Square Propagation):

  • MuSGD (Muon + SGD ハイブリッド):

    • SGDスタイルの更新とMuon風の挙動を組み合わせ、大規模トレーニングでの安定性を向上させます。
    • SGDのような一般化を求めつつ、標準のSGDよりもスムーズな収束が必要な場合に適しています。
    • YOLO26のトレーニングレシピにおいて特に重要です。確信が持てない場合は、 optimizer=auto から始めて、データセットでMuSGDと比較してください。

YOLO26では、 optimizer パラメータを使用して、SGD、MuSGD、Adam、Adamax、AdamW、NAdam、RAdam、RMSPropなどのさまざまなオプティマイザから選択できます。あるいは、モデル設定に基づいて自動選択されるように auto に設定することもできます。

yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD

コミュニティとのつながり#

コンピュータビジョンの愛好家コミュニティの一員になることは、問題を解決し、より速く学ぶのに役立ちます。つながり、助けを得て、アイデアを共有するためのいくつかの方法を紹介します。

コミュニティリソース#

  • GitHub Issues: YOLO26のGitHubリポジトリにアクセスし、Issuesタブを使用して質問をしたり、バグを報告したり、新機能の提案をしたりしてください。コミュニティやメンテナーは非常に活動的で、サポートする準備ができています。
  • Ultralytics Discordサーバー: Ultralytics Discordサーバーに参加して、他のユーザーや開発者とチャットしたり、サポートを受けたり、経験を共有したりしてください。

公式ドキュメント#

  • Ultralytics YOLO26ドキュメント: さまざまなコンピュータビジョンプロジェクトに関する詳細なガイドや役立つヒントについては、公式のYOLO26ドキュメントをご確認ください。

これらのリソースを使用することで、課題を解決し、コンピュータビジョンコミュニティにおける最新のトレンドや実践に遅れずについていくことができます。

重要なポイント#

コンピュータビジョンモデルのトレーニングには、優れた実践に従うこと、戦略を最適化すること、そして発生する問題に対処することが含まれます。バッチサイズの調整、混合精度トレーニング、事前学習済みの重みからの開始などの手法により、モデルの動作が向上し、トレーニングが高速化されます。サブセットトレーニングや早期終了などの方法は、時間とリソースを節約するのに役立ちます。コミュニティとつながり続け、新しいトレンドに遅れないようにすることで、モデルのトレーニングスキルを向上させ続けることができます。

よくある質問 (FAQ)#

Ultralytics YOLOで大規模データセットをトレーニングする際に、GPU使用率を向上させるにはどうすればよいですか?#

GPUの使用率を向上させるには、トレーニング設定で batch パラメータをGPUがサポートする最大サイズに設定します。これにより、GPUの機能を最大限に活用し、トレーニング時間を短縮できます。メモリエラーが発生した場合は、トレーニングがスムーズに実行されるまでバッチサイズを少しずつ減らしてください。YOLO26の場合、トレーニングスクリプトで batch=-1 を設定すると、効率的な処理に最適なバッチサイズが自動的に決定されます。詳細については、トレーニング設定を参照してください。

混合精度トレーニングとは何ですか?また、YOLO26でそれを有効にするにはどうすればよいですか?#

混合精度トレーニングでは、16ビット(FP16)と32ビット(FP32)の両方の浮動小数点型を利用して、計算速度と精度のバランスをとります。このアプローチにより、モデルの精度を犠牲にすることなく、トレーニングが高速化され、メモリ使用量が削減されます。YOLO26で混合精度トレーニングを有効にするには、トレーニング設定で amp パラメータを True に設定します。これにより、自動混合精度(AMP)トレーニングが有効になります。この最適化手法の詳細については、トレーニング設定をご覧ください。

マルチスケールトレーニングは、どのようにYOLO26のモデルパフォーマンスを向上させますか?#

マルチスケールトレーニングは、さまざまなサイズの画像でトレーニングを行うことでモデルのパフォーマンスを向上させ、モデルがさまざまなスケールや距離にわたってより適切に汎化できるようにします。YOLO26では、トレーニング設定で scale パラメータを設定することで、マルチスケールトレーニングを有効にできます。たとえば、 scale=0.5 は0.5から1.5の間でズームファクターをサンプリングし、 imgsz にパディング/クロップします。このテクニックは異なる距離にあるオブジェクトをシミュレートし、さまざまなシナリオでモデルをより堅牢にします。設定と詳細については、トレーニング設定をご確認ください。

YOLO26でトレーニングを高速化するために、事前学習済みの重みをどのように使用できますか?#

事前学習済みの重みを使用すると、基礎となる視覚的特徴をすでに学習しているモデルを活用することで、トレーニングを大幅に加速し、モデルの精度を高めることができます。YOLO26では、トレーニング設定で pretrained パラメータを True に設定するか、カスタムの事前学習済みの重みへのパスを指定するだけです。転移学習と呼ばれるこの方法により、大規模なデータセットでトレーニングされたモデルを特定のアプリケーションに効果的に適応させることができます。事前学習済みの重みの使用方法とその利点の詳細については、トレーニング設定ガイドをご覧ください。

モデルのトレーニングに推奨されるエポック数はいくつですか?また、YOLO26でこれを設定するにはどうすればよいですか?#

エポック数とは、モデルのトレーニング中にトレーニングデータセットを通した完全なパスを指します。一般的な出発点は300エポックです。モデルが早期に過学習する場合は、数を減らすことができます。あるいは、過学習が観察されない場合は、トレーニングを600、1200、またはそれ以上のエポックに拡張することもできます。YOLO26でこれを設定するには、トレーニングスクリプトで epochs パラメータを使用します。理想的なエポック数を決定するための追加のアドバイスについては、エポック数に関するこのセクションを参照してください。

コメント