Ultralytics YOLO27:
Get Started

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

はじめに#

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

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



視聴: モデルのトレーニングのヒント | 大規模なデータセットの扱い方 | バッチサイズ、GPU使用率、混合精度

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

コンピュータービジョンモデルは、内部パラメーターを調整して誤差を最小化することでトレーニングされます。まず、ラベル付き画像の大規模なセットをモデルに入力します。モデルは画像に何が写っているかを予測し、その予測を実際のラベルや内容と比較して誤差を計算します。この誤差から、モデルの予測が正解値からどの程度外れているかが分かります。

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

What is Backpropagation?

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

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

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

大規模データセットを使ってモデルをトレーニングする計画を立てる際には、いくつかの点を考慮する必要があります。たとえば、バッチサイズの調整、GPU使用率の管理、マルチスケールトレーニングの利用などが挙げられます。それぞれの選択肢を詳しく見ていきましょう。

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

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



視聴: Ultralytics YOLO26でバッチ推論を使用する方法 | Pythonで物体検出を高速化 🎉

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

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

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

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

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

マルチスケールトレーニングは、異なるサイズの画像でモデルをトレーニングし、汎化能力を高める手法です。モデルは異なるスケールや距離にある物体を検出できるようになり、より堅牢になります。

たとえば、YOLO26のトレーニング時にscaleパラメーターを設定すると、スケール拡張を有効にできます。このパラメーターは、指定した係数でトレーニング画像のサイズを調整し、物体までの距離が異なる状況をシミュレートします。たとえば、scale=0.5を設定すると、トレーニング中に画像が0.5倍から1.5倍の範囲でランダムにズームされます。このパラメーターを設定すると、モデルはさまざまな画像スケールを経験し、異なる物体サイズや状況での検出能力を高められます。

Ultralyticsは、multi_scaleパラメーターによる画像サイズのマルチスケールトレーニングにも対応しています。画像をズームしてからimgszに合わせてパディングまたはクロップするscaleとは異なり、multi_scaleは各バッチでimgsz自体を変更します(モデルのストライドに合わせて丸められます)。たとえば、imgsz=640とmulti_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などのハードウェアが対応していることを確認する必要があります。PyTorchやTensorFlowなど、多くの最新のディープラーニングフレームワークは、混合精度に標準で対応しています。

YOLO26では混合精度トレーニングを簡単に利用できます。AMPはデフォルトで有効です(amp=True)。CUDA GPUでは、YOLOがトレーニング開始時に一度だけ機能チェックを行い、失敗した場合は完全なFP32にフォールバックします。CPUとAppleシリコンでは、AMPは完全にスキップされます。FP32を強制するにはamp=Falseを設定してください。

事前学習済み重み#

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

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

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

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

  • 学習率スケジューラー:学習率スケジューラーを導入すると、トレーニング中に学習率が動的に調整されます。学習率を適切に調整すると、モデルが最小値を通り越すのを防ぎ、安定性を高められます。YOLO26のトレーニングでは、lrfパラメーターを使い、初期学習率に対する割合として最終学習率を設定することで、学習率のスケジューリングを管理できます。層ごとの学習率や勾配クリッピングなど、引数で設定できない動作を変更するには、トレーナーをサブクラス化してください。
  • 分散トレーニング:大規模データセットを扱う場合、分散トレーニングは大きな効果を発揮します。複数のGPUやマシンにトレーニング処理を分散することで、トレーニング時間を短縮できます。この方法は、計算リソースを大量に必要とするエンタープライズ規模のプロジェクトで特に有効です。
  • channels-lastメモリ形式:CUDAでのトレーニングでは、遅いことが確認されているWindowsを除き、PyTorch 1.11以降で高速なNHWCメモリレイアウトが自動的に使われます。これを強制するにはchannels_last=Trueを、NCHWを維持するにはchannels_last=Falseを設定してください。PyTorch 1.10以前、CPU、MPSでは、デフォルトでNCHWが維持されます。

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

モデルのトレーニングにおけるエポックとは、トレーニングデータセット全体を1回処理することです。1エポック中にモデルはトレーニングセットの各サンプルを1回処理し、学習アルゴリズムに基づいてパラメーターを更新します。モデルが時間をかけて学習し、パラメーターを調整できるよう、通常は複数のエポックが必要です。

よくある質問の1つに、モデルのトレーニングでエポック数をどのように決めるかがあります。まずは300エポックから始めるとよいでしょう。モデルが早期に過学習する場合は、エポック数を減らしてください。300エポック後も過学習が起きない場合は、600、1200、またはそれ以上にトレーニングを延長できます。

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

早期停止#

早期停止は、モデルのトレーニングを最適化するための有効な手法です。検証性能を監視し、モデルの改善が止まった時点でトレーニングを終了できます。これにより、計算リソースを節約し、過学習を防げます。

この手法では、検証メトリクスが改善するまで何エポック待ってからトレーニングを停止するかを、patienceパラメーターで設定します。この期間内にモデルの性能が改善しなければ、時間とリソースの浪費を避けるためにトレーニングを停止します。

Early stopping to prevent model overfitting

YOLO26では、トレーニング設定のpatienceパラメーターを指定すると、早期停止を有効にできます。たとえば、patience=5は、検証メトリクスが5エポック連続で改善しない場合にトレーニングを停止することを意味します。この方法により、過剰な計算を避けながらトレーニングを効率よく進め、最適な性能を実現できます。

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

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

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

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

オプティマイザーの選択#

オプティマイザーは、モデルの性能を測定する損失関数を最小化するために、ニューラルネットワークの重みを調整するアルゴリズムです。簡単に言うと、オプティマイザーはパラメーターを調整して誤差を減らすことで、モデルの学習を支援します。適切なオプティマイザーを選ぶことは、モデルの学習速度と精度に直接影響します。

オプティマイザーのパラメーターを調整して、モデルの性能を向上させることもできます。学習率を調整すると、パラメーター更新時のステップ幅が設定されます。安定性を確保するには、中程度の学習率から始め、長期的な学習を改善するために徐々に下げていく方法があります。また、モメンタムを設定すると、過去の更新が現在の更新に与える影響の大きさが決まります。モメンタムの一般的な値は約0.9で、バランスの取れた設定です。

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

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

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

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

    • モメンタム付きSGDとRMSPropの両方の利点を組み合わせています。
    • 勾配の一次モーメントと二次モーメントの推定値に基づいて、各パラメーターの学習率を調整します。
    • ノイズの多いデータやスパースな勾配に適しています。
    • 効率的で、一般に必要なチューニングが少なくて済みます。短いトレーニングでは、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 Issues: YOLO26のGitHubリポジトリにアクセスし、Issuesタブから質問やバグの報告、新機能の提案を行ってください。コミュニティとメンテナーは活発に活動しており、サポートを提供しています。
  • Ultralytics Discordサーバー: Ultralytics Discordサーバーに参加して、ほかのユーザーや開発者と交流し、サポートを受けたり、経験を共有したりできます。

公式ドキュメント#

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

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

主なポイント#

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

よくある質問#

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

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

  • マルチスケールトレーニングでは、さまざまなサイズの画像を使って学習することで、異なるスケールや距離に対するモデルの汎化性能を高めます。YOLO26には、このための独立したパラメーターが2つあります。scale=0.5は0.5から1.5までのズーム倍率をサンプリングし、固定のimgszに合わせてパディングまたはクロップします。一方、multi_scale=0.25は、ストライド単位で各バッチのimgsz自体を変化させます。設定や詳細については、Trainモードのドキュメントをご覧ください。

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

コメント