Ultralytics YOLO27: ウェイトリストに登録する。
Get Started
Ultralytics Platformで構築する·トレーニングと評価·レッスン 5/10
レッスン中級

トレーニング、実行結果の確認、ファインチューニング

予算を決めてクラウド実行を開始し、エポックごとの曲線から実行結果を判断します。また、デフォルトのオプティマイザーに学習率を無視されないようにファインチューニングします。

クラウドGPUは、失敗が明らかな実行を続ける間も毎分課金されます。また、ファインチューニングで最もよくあるミスは、費用がかからないものの、実行を気付かないうちに無駄にします。デフォルトのオプティマイザーが設定した学習率を無視することです。このレッスンでは、医薬品錠剤データセットで実際のモデルをトレーニングし、判断基準に基づいて曲線を読み取り、設定が実際に適用されるようにファインチューニングします。

成果

Platformでトレーニングを開始する際にコストを把握し、曲線を見て停止、継続、または保持を判断できます。また、以前のモデルから、意図した学習率を使ってファインチューニングできます。

短期集中コース
すでに使い方をご存じの方は、こちらをご覧ください。
  1. New Modelをクリックし、YOLO26のベースモデルとデータセットを選択して、Save Dataset Versionを有効にします。

  2. 特別な理由がなければ、エポック数は100、バッチサイズはauto、画像サイズは640のままにします。コスト見積もりを確認してください。

  3. 実行結果の判断:最終エポックでも改善が続いている場合は、エポック数を増やします。横ばいでval損失が増加している場合は、データを修正します。

  4. 独自のlr0でファインチューニングするには、optimizerもSGDまたはAdamWに設定します。autoはlr0を無視します。

  5. project="username/project"とULTRALYTICS_API_KEYを使ってローカルでトレーニングし、実行結果をPlatformにストリーミングします。

実践的

実行を開始する#

プロジェクトまたはデータセットのページでNew Modelをクリックします。Cloud Trainingタブで次の設定を行います。

Ultralytics PlatformのTrain New Modelダイアログ。ベースモデルにyolo26n、データセットにCOCO8、エポック数に100、バッチサイズにauto、GPUにRTX PRO 6000が選択され、アカウント残高と0.03ドルの推定コストが表示されています

設定項目デフォルト変更する場合
ベースモデルOfficialから選択します(YOLO26を推奨)ファインチューニングの場合:My Modelsから以前の実行を選択します
データセット—実行をデータに固定するため、必ずSave Dataset Versionを有効にします
エポック数100スモークテスト(10~20)または非常に大規模なデータセット
バッチサイズ-1(GPUメモリに合わせて自動調整)2つの実行結果を厳密に比較する必要がある場合
画像サイズ640対象物が小さい場合は大きくします(スライダーは1280まで、YAMLエディターでは4096まで設定可能です)
詳細設定デフォルトYAMLで設定する50個以上のmodel.train()引数。オプティマイザー、学習率、データ拡張などが含まれます

引数はローカルでmodel.train(...)に渡すものと同じです。モデルページには後で、デフォルト以外の値を含むコピー可能なyolo trainコマンドが表示されます。

GPUを選び、実行予算を決める#

ティア例(VRAM、1時間あたりの料金)適した用途
低RTX 2000 Ada(16 GB、$0.24)、RTX A5000(24 GB、$0.27)、RTX 4090(24 GB、$0.69)スモークテスト、nanoモデルおよびsmallモデル
中L40S(48 GB、$0.86)、RTX 5090(32 GB、$0.99)、A100 SXM(80 GB、$1.49)中規模モデル、大きめのバッチ
デフォルトRTX PRO 6000(96 GB、$2.09)ほとんどのジョブ
高性能H100 SXM(80 GB、$3.29)、H200 SXM(141 GB、$4.39)時間が重要な大規模データセット
ProおよびEnterpriseB200(180 GB、$5.89)、B300(288 GB、$7.39)最大規模のジョブ

コストカードでは、開始前に所要時間と料金を見積もれます。デフォルトのRTX PRO 6000でYOLO26nを1,000枚の画像、100エポックで学習すると約$0.23、RTX 4090より約3.4倍高速なH100 SXMでYOLO26sを5,000枚の画像、100エポックで学習すると約$1.56です。請求は実際のGPU使用時間に基づきます。GPUが起動した後は、完了・キャンセル・失敗した実行にも料金が発生します。実行には見積もり額(GPU時間で最低15分)をカバーする残高が必要で、残高がマイナスになると実行中のジョブは停止するため、長時間のジョブでは Settings > Billing で自動チャージを有効にしてください。RTX PRO 6000より安いGPUを選択すると、Ultralyticsが管理するキャパシティに空きがある場合、選択した料金のままでRTX PRO 6000へ無料でアップグレードされることがあります。

判断の目安:新しいデータセットは、まずデフォルトGPUで10~20エポックのスモークテストを実施してください。実行に数時間かかり、誰かが結果を待っている場合は、H100またはH200に切り替えてください。GPU使用率が低い状態が続く場合は、より高速なGPUではなく、より安価なGPUを選んでください。

実行状況を確認する#

モデルページの Train タブには、3つのサブタブから情報がストリーミングされます。Charts にはメトリクス、学習損失と検証損失、エポックごとの学習率がプロットされます。Console には直近2,000行が保持され、トレースバックまたはCUDAのメモリ不足エラーが発生すると実行が直ちに停止します。System にはGPU使用率、メモリ、温度が表示されます。

4つのメトリクスサマリーカードと、エポックごとのprecision、recall、mAP50-95曲線を表示するChartsサブタブがあるUltralytics PlatformのモデルTrainタブ

Systemサブタブを開き、GPUモデルを示すホストカードと、エポックごとのCPUおよびRAM使用率のグラフを表示するUltralytics PlatformのモデルTrainタブ

4時間にわたって何も報告されない実行は、失敗としてマークされます。ベストチェックポイントは定期的にアップロードされるため、実行をキャンセルしても、その時点までのベストエポックが保持されます。また、実行の完了や失敗を知らせる Slackアラート も利用できます。

実例:実行の学習、ストリーミング、確認#

どこで学習しても、Platformで実行状況を追跡できます。Settings > API Keys から取得したAPIキーを ULTRALYTICS_API_KEY としてエクスポートすると、username/project 形式の project によって、チャート、コンソール、ベストチェックポイントがそのプロジェクトにストリーミングされます。

from ultralytics import YOLO

# export ULTRALYTICS_API_KEY="..." first to stream this run into your Platform project
model = YOLO("yolo26n.pt")
results = model.train(data="medical-pills.yaml", epochs=10, imgsz=320, project="username/pill-inspection", name="v1-baseline")
print(f"mAP50-95 {results.box.map:.3f}, best checkpoint: {model.trainer.best}")
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all         23        399       0.97      0.957      0.977      0.659
mAP50-95 0.659, best checkpoint: .../runs/detect/username/pill-inspection/v1-baseline/weights/best.pt

New Model をクリックすると、同じコマンドをPlatformのGPUで実行できます。ローカルでは、ノートPCのCPUで imgsz=320 を使い、2分もかかりませんでした。実行の results.csv には、Chartsサブタブにプロットされるエポックごとの系列が格納されます。数行のコードで「曲線を確認する」をルールにできます。

import pandas as pd

df = pd.read_csv("results.csv")  # the per-epoch metrics behind the Charts subtab
df.columns = df.columns.str.strip()
m = df["metrics/mAP50-95(B)"]
best_epoch = int(df.loc[m.idxmax(), "epoch"])
recent_gain = m.iloc[-1] - m.iloc[-4]  # change over the last 3 epochs
val_loss = df["val/box_loss"]
print(f"epochs={len(df)} best mAP50-95={m.max():.3f} at epoch {best_epoch}")
print(f"gain over last 3 epochs: {recent_gain:+.3f}")
print(f"val box loss: {val_loss.iloc[0]:.3f} -> {val_loss.iloc[-1]:.3f}")
if recent_gain < 0.005 and val_loss.iloc[-1] >= val_loss.iloc[-4]:
    print("verdict: plateaued - stop, and fix the data before training longer")
elif best_epoch == len(df):
    print("verdict: still improving at the last epoch - more epochs should help")
else:
    print("verdict: converged - keep best.pt")
epochs=10 best mAP50-95=0.659 at epoch 10
gain over last 3 epochs: +0.028
val box loss: 1.367 -> 1.045
verdict: still improving at the last epoch - more epochs should help

ベストエポックは最後のエポックで、mAP50-95は直近3エポックで2.8ポイント上昇し、検証損失はまだ低下しています。この10エポックの実行は早期に停止しており、さらに長く学習するかファインチューニングすると改善が見込めます。Platformの実行では、Chartsサブタブで同じ3つのシグナルを確認してください。ベストエポックの位置、直近の改善幅、検証損失の推移です。

以前のモデルからファインチューニングする#

My Models から以前のモデルをベースモデルとして選択します。Platformは、そのチェックポイントから開始する新しいモデルを作成し、以前のモデルは変更しません。通常は学習率を下げることが推奨されますが、デフォルトの optimizer: auto では学習時にオプティマイザーと学習率が自動選択され、lr0 は無視されます。コンソールの最初の数行にその旨が表示されます。

optimizer: 'optimizer=auto' found, ignoring 'lr0=0.01' and determining best 'optimizer' and 'lr0' automatically...
optimizer: AdamW(lr=0.002, momentum=0.9) with parameter groups 114 weight(decay=0.0), 126 weight(decay=0.0005), 126 bias(decay=0.0)

Advanced Settingsで optimizer を明示的に設定すると、その値が適用されます。optimizer: SGD と lr0: 0.001 を指定してpillモデルをさらに5エポックファインチューニングすると、次のログが出力されます。

optimizer: SGD(lr=0.001, momentum=0.937) with parameter groups 114 weight(decay=0.0), 126 weight(decay=0.0005), 126 bias(decay=0.0)
                   all         23        399      0.969      0.962      0.983      0.687

mAP50-95は0.659から0.687に上昇しました。次のレッスンでは、この候補モデルを昇格ゲートにかけます。

Advanced Settingsを展開し、epochs、batch、imgsz、patience、seedなどの学習設定を含むYAMLエディターを表示したUltralytics PlatformのTrain New Modelダイアログ

以前の実行を再現するには、モデルページのTraining Configurationテーブルを開き、Copy JSON を選択してAdvanced Settingsに貼り付けます。ファインチューニングガイドではレイヤーの凍結について、ハイパーパラメータチューニングガイドでは体系的な探索について説明しています。

よくある落とし穴#

ファインチューニングの学習率が無視されます

症状: lr0: 0.001 を設定したのに、コンソールには ignoring 'lr0=...' と表示されます。対処法: optimizer: auto を使用すると、トレーニング時にオプティマイザーと学習率が自動的に選択されます。lr0 と合わせて、optimizer を SGD または AdamW に設定し、コンソールの optimizer: の行を確認してください。

GPU を十分に活用できず、費用がかさむ

症状: 実行中、System サブタブで GPU 使用率が 80% を大きく下回っています。対処法: ボトルネックは GPU ではなくデータの読み込みなので、より高速な GPU にすると費用が増えるだけです。より安価な GPU を選ぶか、メモリに余裕があればバッチサイズを大きくしてください。

手遅れになるまでトレーニングを続ける

症状: 検証 mAP50-95 が 10 エポックにわたって横ばいなのに、検証損失は徐々に増えています。対処法: キャンセルしてください。それまでの最良チェックポイントは保持されます。次の改善は、エポックを増やすことではなく、データ(レッスン 3 と 4)から得られます。

試してみる

データセットでYOLO26nモデルを10~20エポック学習します(クラウドではSave Dataset Versionを使用するか、ローカルで project="username/project" を使ってストリーミングします)。その results.csv に対して read_run.py を実行するか、Chartsサブタブで同じ3つのチェックを行います。次に、明示的な optimizer と lr0 を指定してファインチューニングし、コンソールの optimizer: 行に指定した値が使われていることを確認します。

完了条件
以下のすべてを満たすと、レッスンは完了です。
  • Platformプロジェクトに完了済みの実行があり、データセットバージョンまたは ul:// データセットに紐付いています。

  • 判断の根拠となる3つの数値を添えて、実行の判定(停止、継続、または維持)を記録しました。

  • ファインチューニングした実行のコンソールには、optimizer=auto ではなく、選択したオプティマイザーと学習率が表示されます。

解答を表示

pillモデルでの回答例:10エポックのベースラインはエポック10でピークに達し、mAP50-95は0.659、直近3エポックで+0.028、検証ボックス損失は1.367から1.045に低下しています。そのため、判定は「継続」です。最初から再学習するのではなく、My Modelsにあるベースモデル v1-baseline を使い、5エポック、Advanced Settingsの optimizer: SGD と lr0: 0.001 を指定してファインチューニングします。コンソールで SGD(lr=0.001, momentum=0.937) を確認でき、mAP50-95は0.687に達します。デフォルトGPUでの費用は数セントです。Start Trainingをクリックする前にコストカードで見積もりを確認でき、実際の請求額は後から Settings > Billing で確認できます。

次のステップ

ベースラインと候補モデルが揃いました。次は、事前に定めたゲートに基づき、候補モデルをリリースすべきか判断します。