Ultralytics YOLO27:

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

はじめに#

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

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



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

機械学習モデルの学習方法#

コンピュータービジョンモデルは、誤差を最小限に抑えるように内部パラメーターを調整して学習します。最初に、ラベル付き画像の大規模なセットをモデルに入力します。モデルは画像に何が写っているかを予測し、その予測を実際のラベルまたは内容と比較して誤差を計算します。この誤差から、モデルの予測が真の値からどの程度外れているかが分かります。

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

What is Backpropagation?

この学習プロセスにより、コンピュータービジョンモデルは、物体検出インスタンスセグメンテーションセマンティックセグメンテーション画像分類など、さまざまなタスクを実行できます。最終的な目標は、未知の新しい画像に対して学習内容を一般化し、実際のアプリケーションで視覚データを正確に理解できるモデルを作成することです。

モデルの学習時に内部で何が起きているかが分かったところで、モデルを学習させる際に考慮すべきポイントを見ていきましょう。

大規模データセットでの学習#

大規模なデータセットを使ってモデルを学習させる計画を立てる際には、いくつかの異なる側面を検討する必要があります。たとえば、バッチサイズの調整、GPU使用率の制御、マルチスケール学習の使用などです。これらの選択肢をそれぞれ詳しく見ていきましょう。

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

大規模なデータセットでモデルを学習させる場合、GPUを効率的に利用することが重要です。バッチサイズは重要な要素です。これは、機械学習モデルが1回の学習イテレーションで処理するデータサンプルの数です。 GPUがサポートする最大のバッチサイズを使用すると、その性能を最大限に活用でき、モデルの学習時間を短縮できます。ただし、GPUメモリが不足しないようにする必要があります。メモリエラーが発生した場合は、モデルがスムーズに学習できるようになるまで、バッチサイズを少しずつ減らしてください。



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

YOLO26では、Train modeの引数batchパラメーターをGPU容量に合わせて設定できます。単一のアクセラレーターでは、batch=-1がモデルのプロファイリングを行い、メモリ使用率がおよそ60%になるバッチサイズを選択します。batch=0.70のような小数を指定すると、異なる使用率を目標にできます。マルチGPU実行では、デバイス数の倍数であるグローバルバッチサイズを明示的に指定する必要があります。CPUとApple siliconでは、AutoBatchが警告を出し、batch=16にフォールバックします。

サブセット学習#

サブセット学習は、大規模なデータセットを代表する小規模なデータセットでモデルを学習させる、効率的な手法です。特にモデル開発の初期段階やテスト時に、時間とリソースを節約できます。時間が限られている場合や、異なるモデル構成を試している場合に適しています。

YOLO26では、fractionパラメーターを使ってサブセット学習を簡単に実装できます。学習データの10%にはfraction=0.1のような比率を、学習画像300枚にはfraction=300のような整数を使用できます。また、[train, val, test]のリスト(fraction=[300, 100, 0]など)を指定すると、各分割のサイズを制限してテスト画像をスキップできます。[300, 100]のような2要素リストでは、テスト分割が完全なまま維持されます。NDJSONデータセットでは、ダウンロード前に等間隔のレコードが選択されるため、繰り返し実行しても同じサブセットが再利用されます。この手法により、完全なデータセットを使う前に、迅速な反復とチューニングを行えます。

マルチスケール学習#

マルチスケール学習は、さまざまなサイズの画像でモデルを学習させることで、モデルの一般化能力を高める手法です。モデルは異なるスケールや距離にある物体を検出できるようになり、より堅牢になります。

たとえば、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で保持されます。同じハードウェアの制約内で、より大規模なモデルや大きなバッチサイズを扱えます。

Mixed precision FP16 training benefits

混合精度学習を実装するには、学習スクリプトを変更し、ハードウェア(GPUなど)が対応していることを確認する必要があります。現代の多くのディープラーニングフレームワーク(PyTorchTensorFlowなど)は、混合精度を標準でサポートしています。

YOLO26では、混合精度学習を簡単に利用できます。AMPはデフォルトで有効になっています(amp=True)。CUDA GPUでは、YOLOが学習開始時に1回だけ対応状況を確認し、失敗した場合は完全なFP32にフォールバックします。CPUとApple siliconではAMPは完全にスキップされます。FP32を強制するにはamp=Falseを設定してください。

事前学習済み重み#

事前学習済みの重みを使用すると、モデルの学習プロセスを効率的に高速化できます。事前学習済みの重みは大規模なデータセットですでに学習されたモデルから得られるため、モデルの学習を有利な状態から開始できます。転移学習では、事前学習済みモデルを新しい関連タスクに適応させます。事前学習済みモデルのファインチューニングでは、これらの重みから開始し、特定のデータセットで学習を継続します。この手法では、モデルが基本的な特徴をすでに十分理解した状態から始めるため、学習時間が短縮され、性能も向上することがよくあります。

事前学習済みの重みはmodel引数から取得されるため、model=yolo26n.ptはすでにCOCOの重みから開始します。pretrainedパラメーターでは、重みを保持する(デフォルトのTrue)、破棄する(False)、または別のチェックポイントに置き換える(pretrained=path/to/best.pt)かを制御します。*.yamlモデルでpretrained=Trueを設定しても、自動的に重みが取得されることはありません。転移学習の完全なワークフローについては、カスタムデータセットでYOLOをファインチューニングする方法をご覧ください。

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

大規模なデータセットを扱う際には、他にもいくつか検討すべき手法があります。

  • 学習率スケジューラー:学習率スケジューラーを実装すると、学習中に学習率が動的に調整されます。適切に調整された学習率は、モデルが最小値を飛び越えるのを防ぎ、安定性を向上させます。YOLO26の学習時には、lrfパラメーターによって、最終学習率を初期学習率の割合として設定し、学習率スケジューリングを管理できます。レイヤーごとの学習率や勾配クリッピングなど、引数で公開されていない動作については、トレーナーをサブクラス化してください。
  • 分散学習:大規模なデータセットを扱う場合、分散学習は大きな効果を発揮します。複数のGPUやマシンに学習負荷を分散することで、学習時間を短縮できます。この方法は、十分な計算リソースを備えたエンタープライズ規模のプロジェクトで特に有効です。
  • チャネルラストメモリ形式: CUDAトレーニングはPyTorch 1.11以降において、Windows環境を除き自動的に高速なNHWCメモリレイアウトを使用します(Windowsでは動作が遅いことが測定されています)。強制的に適用するには channels_last=True を設定し、NCHWを維持するには channels_last=False を設定してください。PyTorch 1.10以前、CPU、およびMPSではデフォルトでNCHWのままとなります。

学習するエポック数#

モデル学習におけるエポックとは、学習データセット全体を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の利点を組み合わせています。
    • 勾配の1次モーメントと2次モーメントの推定値に基づいて、各パラメーターの学習率を調整します。
    • ノイズの多いデータやスパースな勾配に適しています。
    • 効率的で、通常は必要なチューニングが少なくて済みます。短い学習では、YOLO26のoptimizer=autoがAdam自体ではなく、密接に関連するAdamWを選択します。
  • RMSProp(二乗平均平方根伝播)

    • 勾配を最近の勾配の大きさの移動平均で割ることで、各パラメーターの学習率を調整します。
    • 勾配消失問題への対処に役立ち、再帰型ニューラルネットワークに効果的です。
  • 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 IssuesYOLO26 GitHubリポジトリにアクセスし、Issuesタブを使って質問、バグの報告、新機能の提案を行ってください。コミュニティとメンテナーは非常に活発で、すぐに支援を受けられます。
  • Ultralytics DiscordサーバーUltralytics Discordサーバーに参加して、他のユーザーや開発者とチャットしたり、サポートを受けたり、経験を共有したりできます。

公式ドキュメント#

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

これらのリソースを活用すると、課題を解決し、コンピュータービジョンコミュニティの最新のトレンドや実践方法を把握できます。

主なポイント#

コンピュータービジョンモデルの学習には、優れたプラクティスの実践、戦略の最適化、発生した問題の解決が必要です。バッチサイズの調整、混合精度学習、事前学習済みの重みからの開始などの手法により、モデルの性能を高め、学習を高速化できます。サブセット学習や早期停止などの方法は、時間とリソースの節約に役立ちます。コミュニティとのつながりを維持し、新しいトレンドを把握することで、モデル学習のスキルを継続的に向上させられます。

FAQ#

  • GPU使用率を向上させるには、batchパラメーターをGPUがサポートする最大サイズに設定してください。単一のアクセラレーターでは、batch=-1がモデルのプロファイリングを行い、メモリ使用率約60%を目標にします。CPUとApple siliconではbatch=16にフォールバックします。一方、マルチGPU実行では、デバイス数の倍数であるグローバルバッチサイズを明示的に指定する必要があります。詳しくは、Train modeの引数をご覧ください。

  • 混合精度学習では、16ビット(FP16)と32ビット(FP32)の浮動小数点型を使用して、計算速度と精度のバランスを取ります。YOLO26ではamp=Trueによってデフォルトで有効になっています。FP32を強制するにはamp=Falseを設定してください。CPUとApple siliconではAMPがスキップされます。詳しくは、Train modeの引数をご覧ください。

  • マルチスケール学習では、さまざまなサイズの画像で学習するため、モデルは異なるスケールや距離に対してより適切に一般化できます。YOLO26には、このための独立した2つのパラメーターがあります。scale=0.5は0.5~1.5のズーム係数をサンプリングしてから、固定されたimgszにパディングまたはクロップします。一方、multi_scale=0.25は各バッチでimgsz自体をストライド単位で変化させます。設定と詳細については、Train modeのドキュメントをご確認ください。

  • 事前学習済みの重みを使用すると、基本的な視覚特徴をすでに学習しているモデルを活用できるため、学習を大幅に高速化し、モデルの精度を高められます。model引数を通じて、model=yolo26n.ptのように読み込んでください。続いてpretrainedによって、重みを保持する(デフォルトのTrue)、破棄する(False)、または別のチェックポイントに置き換える(pretrained=path/to/best.ptmodel=*.yamlビルドに重みを転移する方法)かが決まります。詳しくは、Train modeのドキュメントをご覧ください。

  • エポック数とは、モデル学習中に学習データセット全体を処理する完全な回数を指します。一般的な開始点は300エポックです。モデルが早期に過学習する場合は、エポック数を減らせます。反対に、過学習が見られない場合は、600、1200、またはそれ以上のエポックまで学習を延長できます。YOLO26で設定するには、学習スクリプトでepochsパラメーターを使用してください。理想的なエポック数の決め方については、エポック数に関するこのセクションをご覧ください。

コメント