Ultralytics YOLO27: ウェイトリストに登録する
YOLOのライセンス
Ultralytics用語集に戻る

Validation Data

検証データは、開発中に評価する、学習から分離されたデータです。ハイパーパラメーターの調整、チェックポイントの選択、最終テスト前の過学習検出に使います。

検証データは、ラベル付きデータのうちトレーニングから除外され、開発中に繰り返しスコアを算出するデータです。モデルの比較、ハイパーパラメーターの調整、チェックポイントの選択、過学習の検出に使います。モデルは検証データで重みを更新しないため、検証スコアからは、トレーニングデータで学習した内容が未見の画像にどれだけ適用できるかが分かります。検証セットと開発(dev)セットは同義です。検証スコアに基づく判断を重ねるたびに、モデルはその特定の分割に少しずつ適合していきます。そのため、最終的な偏りのない推定値を得るために、別のテストセットを確保します。

学習、検証、テストの分割#

ラベル付きデータセットは通常、3つの部分に分割されます。

  • トレーニングセット: オプティマイザーが重みを学習するために使うデータで、通常は全データの70~80%です。
  • 検証セット: トレーニング実行後または各エポック後にスコアを算出し、学習率、モデルサイズ、データ拡張の強度、トレーニングを停止するタイミングなどの判断に役立てます。
  • テストセット: すべての選択を確定した後に一度だけスコアを算出し、実環境で予想される性能を報告します。

数千枚の画像を含むデータセットでは、70/15/15または80/10/10の分割が一般的です。非常に大規模なデータセットでは、信頼できる推定値を得るために、より少ない割合を検証用に確保します。ImageNet-1kでは、トレーニング画像1,281,167枚に対して、検証画像50,000枚を確保しています。テストラベルは公開されていないため、ImageNetの精度は慣例的にこの検証セットで報告され、この検証セットがテストセットの役割も果たします。

有用な検証セットは、モデルがデプロイ後に遭遇するデータと一致し、トレーニングセットと重複しないものです。同じ動画、患者、場所から複数の画像がある場合、画像単位でランダムに分割すると、モデルが物体ではなくシーンを認識できるため、情報が漏洩します。患者や録画セッションなどの単位でグループごとに分割すれば、このデータ漏洩を防げます。

ハイパーパラメーターの調整とモデル選択#

重みは勾配降下法で学習します。一方、ハイパーパラメーターは複数の候補をトレーニングし、検証スコアが最も高いものを選んで決定します。トレーニングスコアではこの選択を行えません。モデルが大きく、トレーニング時間が長いほど、トレーニングデータへの適合度はほぼ常に高くなるためです。以下のscikit-learnスクリプトでは、付属のdigitsデータセットを使って決定木の深さを調整します。

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# Split 1,797 digit images 60/20/20 into training, validation, and test sets
X, y = load_digits(return_X_y=True)
X_train, X_rest, y_train, y_rest = train_test_split(X, y, test_size=0.4, random_state=0, stratify=y)
X_val, X_test, y_val, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=0, stratify=y_rest)

# Fit one model per candidate tree depth and score each on the validation set
val_scores = {}
for depth in (2, 4, 8, 16):
    model = DecisionTreeClassifier(max_depth=depth, random_state=0).fit(X_train, y_train)
    val_scores[depth] = model.score(X_val, y_val)
    print(f"depth {depth}: train {model.score(X_train, y_train):.3f}, validation {val_scores[depth]:.3f}")

# Refit the winner and score the test set exactly once
best = max(val_scores, key=val_scores.get)
final = DecisionTreeClassifier(max_depth=best, random_state=0).fit(X_train, y_train)
print(f"Chosen depth {best}: test accuracy {final.score(X_test, y_test):.3f}")

深さが増すにつれてトレーニング精度は上昇し、深さ16で1.000に達します。一方、検証精度は深さ8で0.836の最高値に達した後、木がデータを記憶し始めるため、深さ16では0.825に低下します。検証結果に基づいて深さ8を選択すると、未使用のテストセットで0.853のスコアを記録します。

早期終了とチェックポイントの選択#

ディープラーニングのトレーニングループでは、通常、エポックごとに検証セットのスコアを算出します。トレーニング損失は、ネットワークがトレーニングデータにより適合するにつれて低下し続けますが、検証損失や精度はやがて横ばいになり、その後悪化します。早期終了では、patienceと呼ばれる所定のエポック数にわたって検証スコアが改善しなかった時点でトレーニングを終了し、最良のエポックの重みを保持します。

UltralyticsでのYOLO26のトレーニングでは、デフォルトでこのループが実行されます。各エポック後に、データセットYAMLのval分割でスコアを算出し、最も高い検証適合度(検出ではmAP50-95)を記録したエポックをbest.ptとして保存します。また、改善がない状態がpatienceエポック続くと停止します。デフォルトは100エポックです。

from ultralytics import YOLO

# 学習済みのYOLO26 nano検出器を読み込む
model = YOLO("yolo26n.pt")

# 各エポック後にval分割で検証し、改善がない状態が10エポック続いたら停止します
results = model.train(data="coco8.yaml", epochs=50, patience=10)

小規模データセットに対する交差検証#

データが少ない場合、単一のホールドアウト分割ではデータを無駄にし、スコアのばらつきも大きくなります。K分割交差検証では、データをK個の分割に分け、それぞれ異なる分割を検証用に除外してK個のモデルをトレーニングし、K個のスコアを平均します。これにより、すべてのデータ例をトレーニングと検証の両方に使用できます。5分割と10分割が一般的です。また、層化やグループ化を行う手法では、各分割内のクラス比率を均等にしたり、関連する画像を同じ分割にまとめたりします。テストセットは、引き続きすべての分割の外に確保します。

  • テストデータ: 最後に一度だけスコアを算出します。選択の判断に再利用すると、2つ目の検証セットになり、スコアは偏りのない推定値ではなくなります。
  • トレーニングデータ: オプティマイザーが重みを学習する唯一の分割です。
  • 交差検証: 検証データとして使う例を入れ替え、1つのデータセットからK個の検証スコアを得る手順です。
  • 臨床・規制関連文書における検証: 医療や規制対象の業界では、モデルの検証は、完成したモデルを独立した外部データで評価することを意味する場合がよくあります。これは、機械学習用語におけるテストセットに相当します。

ソリューションを見る

スポーツにおけるコンピュータービジョン

スポーツにおけるコンピュータービジョン

Ultralytics YOLOが、選手やボールの追跡、パフォーマンス分析、コーチングへの知見、アスリートのリハビリを通じて、スポーツビジョンをどのように支えるかをご紹介します。
詳しく見る
航空画像向けコンピュータービジョン

航空画像向けコンピュータービジョン

Ultralytics YOLOを使用して、ドローンや航空画像をリアルタイムの知見に変換し、農業、水産養殖、自然保護、地理空間分析に活用できます。
詳しく見る
航空宇宙分野のコンピュータービジョン

航空宇宙分野のコンピュータービジョン

Ultralytics YOLOを活用して航空宇宙分野でコンピュータビジョンを導入し、航空機検査、滑走路上のFOD検出、空港の地上業務、複合材の欠陥検出に活用できます。
詳しく見る
セキュリティ分野のコンピュータービジョン

セキュリティ分野のコンピュータービジョン

Ultralytics YOLOモデルであらゆる施設を保護しましょう。ビジョンAIは、周辺監視、脅威検知、ナンバープレート認識、職場の安全管理を支援します。
詳しく見る
ロボティクス分野のコンピュータービジョン

ロボティクス分野のコンピュータービジョン

Ultralytics YOLOモデルで、よりスマートなマシンを実現しましょう。ロボティクスにおけるビジョンAIは、自律ナビゲーション、認識、物体追跡、リアルタイム制御を支援します。
詳しく見る
物流におけるコンピュータービジョン

物流におけるコンピュータービジョン

Ultralytics YOLOモデルで物流を効率化しましょう。ビジョンAIにより、荷物検査、仕分け、車両追跡、倉庫のリアルタイム安全監視を実現します。
詳しく見る
小売業におけるコンピュータービジョン

小売業におけるコンピュータービジョン

Ultralytics YOLOモデルで小売のあり方を変革しましょう。ビジョンAIにより、在庫追跡、棚の監視、行列管理、より高度な顧客インサイトを実現します。
詳しく見る
医療分野におけるコンピュータービジョン

医療分野におけるコンピュータービジョン

Ultralytics YOLOモデルで医療ソリューションを構築しましょう。医療分野のビジョンAIは、医用画像処理の高速化、より高度な診断、患者モニタリングを実現します。
詳しく見る
製造業におけるコンピュータービジョン

製造業におけるコンピュータービジョン

Ultralytics YOLOモデルで製造を最適化しましょう。ビジョンAIは、品質管理、欠陥検出、PPE準拠、組立ラインの自動化を推進します。
詳しく見る
自動車分野におけるコンピュータービジョン

自動車分野におけるコンピュータービジョン

Ultralytics YOLOモデルで自動車分野にコンピュータービジョンを導入しましょう。ビジョンAIは、道路の安全性、運転支援、車両の自動化を向上させ、よりスマートな道路を実現します。
詳しく見る
農業におけるコンピュータービジョン

農業におけるコンピュータービジョン

Ultralytics YOLOモデルでスマート農業にビジョンAIを導入しましょう。作物のモニタリング、家畜の追跡、精密農業を支援し、より高く効率的な収量を実現します。
詳しく見る

AIの未来を一緒に築きましょう!

機械学習の未来に向けた歩みを始めましょう