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

はじめに

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



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

では、モデルトレーニングとは何でしょうか?モデルトレーニングとは、視覚的なパターンを認識し、データに基づいて予測を行うようにモデルを教えるプロセスです。これは、アプリケーションのパフォーマンスと精度に直接影響します。このガイドでは、コンピュータビジョンモデルを効果的にトレーニングするためのベストプラクティス、最適化テクニック、トラブルシューティングのヒントについて説明します。

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

コンピュータビジョンモデルは、誤差を最小限に抑えるために内部パラメータを調整することでトレーニングされます。初期段階では、モデルにラベル付けされた大量の画像セットが供給されます。モデルは画像内に何があるかを予測し、その予測と実際のラベルや内容を比較して誤差を算出します。これらの誤差は、モデルの予測が真の値からどれだけ離れているかを示します。

トレーニング中、モデルは予測、誤差の算出、およびバックプロパゲーションと呼ばれるプロセスによるパラメータの更新を繰り返します。このプロセスで、モデルは誤差を減らすために内部パラメータ(重みとバイアス)を調整します。このサイクルを何度も繰り返すことで、モデルは徐々に精度を向上させます。時間の経過とともに、形状、色、テクスチャなどの複雑なパターンを認識する方法を学習します。

What is Backpropagation?

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.

モデルトレーニングの裏側で何が起きているのかが分かったところで、次はモデルをトレーニングする際に考慮すべき点を見ていきましょう。

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

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

バッチサイズと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_size 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.

サブセットトレーニング

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

YOLO26の場合、fractionパラメータを使用することで簡単にサブセットトレーニングを実装できます。このパラメータを使用すると、トレーニングに使用するデータセットの割合を指定できます。例えば、fraction=0.1を設定すると、データセットの10%でモデルがトレーニングされます。このテクニックは、完全なデータセットを使用してトレーニングを確定させる前の、迅速なイテレーションやモデルのチューニングに使用できます。サブセットトレーニングは、迅速に進捗を図り、潜在的な問題を早期に特定するのに役立ちます。

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

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

例えば、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.

キャッシュ

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

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

  • cache=True: データセットの画像をRAMに保存します。アクセス速度は最速ですが、メモリ使用量が増加するというコストがかかります。
  • cache='disk': 画像をディスクに保存します。RAMよりは遅いですが、毎回新鮮なデータを読み込むよりは高速です。
  • cache=False: キャッシュを無効にします。完全にディスクI/Oに依存するため、最も低速なオプションです。

混合精度トレーニング

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

Mixed precision FP16 training benefits

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)トレーニングが有効になります。混合精度トレーニングは、モデルのトレーニングプロセスを最適化するためのシンプルかつ効果的な方法です。

事前学習済み重み

事前学習済み重みを使用することは、モデルのトレーニングプロセスをスピードアップする賢い方法です。事前学習済み重みは、すでに大規模データセットでトレーニングされたモデルからのものであり、モデルを有利なスタートに導きます。転移学習は、事前学習済みモデルを新しい関連タスクに適応させます。事前学習済みモデルの微調整(ファインチューニング)には、これらの重みから開始し、特定のデータセットでトレーニングを継続することが含まれます。このトレーニング方法は、モデルが基本的な特徴をしっかりと理解した状態で始まるため、トレーニング時間の短縮と、多くの場合においてより優れたパフォーマンスをもたらします。

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

大規模データセットを扱う際に考慮すべきその他のテクニック

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

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

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

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

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

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

早期終了(アーリーストッピング)

早期終了は、モデルトレーニングを最適化するための貴重なテクニックです。検証パフォーマンスを監視することで、モデルが改善しなくなった時点でトレーニングを停止できます。これにより、計算リソースを節約し、過学習を防ぐことができます。

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

Early stopping to prevent model overfitting

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

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

モデルのトレーニングには、クラウドトレーニングとローカルトレーニングの2つのオプションがあります。

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

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

オプティマイザー(最適化アルゴリズム)の選択

オプティマイザーは、モデルのパフォーマンスを測定する損失関数を最小化するためにニューラルネットワークの重みを調整するアルゴリズムです。簡単に言うと、オプティマイザーはパラメータを調整して誤差を減らすことで、モデルが学習するのを助けます。適切なオプティマイザーを選択することは、モデルがどれだけ速く、正確に学習するかに直接影響します。

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

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

オプティマイザーにはそれぞれ異なる長所と短所があります。一般的なオプティマイザーをいくつか見てみましょう。

  • SGD(確率的勾配降下法):

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

    • モメンタム付き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=MuSGD

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

コンピュータビジョン愛好家のコミュニティに参加することは、問題を解決し、より速く学ぶのに役立ちます。接続し、ヘルプを取得し、アイデアを共有するためのいくつかの方法を以下に示します。

コミュニティリソース

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

公式ドキュメンテーション

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

これらのリソースを使用することで、課題を解決し、コンピュータビジョンコミュニティの最新のトレンドや慣習を最新の状態に保つことができます。

重要なポイント

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

FAQ

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

GPU使用率を向上させるには、トレーニング設定のbatch_sizeパラメータを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パラメータを使用します。理想的なエポック数を決定するための追加のアドバイスについては、エポック数に関するこのセクションを参照してください。

コメント