YOLO Vision 2026:

Ultralytics YOLOによるモデル検証#

Ultralytics YOLO ecosystem and integrations

はじめに#

バリデーションは機械学習パイプラインにおいて重要なステップであり、トレーニング済みモデルの品質を評価することができます。Ultralytics YOLO26のValモードは、物体検出モデルのパフォーマンスを評価するための堅牢なツールとメトリクスのスイートを提供します。このガイドは、モデルが正確で信頼性の高いものであることを確認するために、Valモードを効果的に使用する方法を理解するための完全なリソースとして機能します。



Watch: Ultralytics Modes Tutorial: Validation

なぜUltralytics YOLOで検証するのか?#

YOLO26のValモードを使用する利点は以下の通りです:

  • 精度: mAP50、mAP75、mAP50-95などの正確なメトリクスを取得し、モデルを包括的に評価できます。
  • 利便性: 学習設定を記憶する組み込み機能を利用することで、検証プロセスを簡素化できます。
  • 柔軟性: 同じデータセットまたは異なるデータセットや画像サイズでモデルを検証できます。
  • ハイパーパラメータチューニング: バリデーションメトリクスを使用してモデルを微調整し、パフォーマンスを向上させます。

Valモードの主な機能#

YOLO26のValモードが提供する注目すべき機能は以下の通りです:

  • 自動設定: モデルが学習時の構成を記憶しているため、検証が容易に行えます。
  • マルチメトリクスサポート: さまざまな精度メトリクスに基づいてモデルを評価します。
  • CLIとPython API: 検証の好みに合わせて、コマンドラインインターフェースまたはPython APIから選択できます。
  • データ互換性: 学習フェーズで使用されたデータセットだけでなく、カスタムデータセットともシームレスに動作します。
ヒント
  • YOLO26モデルはトレーニング設定を自動的に記憶するため、yolo val model=yolo26n.ptまたはYOLO("yolo26n.pt").val()を使用するだけで、同じ画像サイズと元のデータセットでモデルを簡単に検証できます。

使用例#

COCO8データセットでトレーニング済みのYOLO26nモデルの精度を検証します。modelはトレーニング時のdataと引数をモデル属性として保持するため、引数は必要ありません。バリデーション引数の完全なリストについては、以下の「引数」セクションを参照してください。

Windowsのマルチプロセッシングエラー

Windowsでは、バリデーションをスクリプトとして起動するときにRuntimeErrorを受け取る場合があります。これを解決するには、バリデーションコードの前にif __name__ == "__main__":ブロックを追加します。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # a list containing mAP50-95 for each category
metrics.box.image_metrics  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

YOLOモデル検証のための引数#

YOLOモデルを検証する際、評価プロセスを最適化するために複数の引数を微調整できます。これらの引数は、入力画像サイズ、バッチ処理、パフォーマンスしきい値などの側面を制御します。以下に、検証設定を効果的にカスタマイズするための各引数の詳細な内訳を示します。

引数タイプデフォルト説明
datastrNoneデータセット YAML(例:coco8.yaml)へのパスを指定します。これには検証データへのパスを含める必要があります。分類の場合は、代わりにデータセットディレクトリまたは組み込みのデータセット名(例:imagenet10)を指定します。
imgszint640入力画像のサイズを定義します。すべての画像は処理前にこの寸法にリサイズされます。サイズを大きくすると小さな物体の精度が向上する可能性がありますが、計算時間が増加します。
batchint16バッチあたりの画像数を設定します。値を大きくするとGPUメモリをより効率的に活用できますが、より多くのVRAMが必要です。利用可能なハードウェアリソースに基づいて調整してください。
save_jsonboolFalseTrue の場合、さらなる分析、他のツールとの統合、またはCOCOなどの評価サーバーへの提出のために、結果をJSONファイルに保存します。
conffloat0.001検出の最小信頼度しきい値を設定します。値を下げるとリコールが向上しますが、偽陽性が増える可能性があります。適合率-再現率曲線はデフォルトで 0.001 になり、検出混同行列は明示的な conf 値を使用するか、省略された場合は 0.25 を使用します。サマリーの適合率と再現率はmax-F1信頼度を使用するため、confusion_matrix.png から導出された値とは異なる場合があります。メモリ使用量を削減するためのOBB検証では、デフォルトで 0.01 に設定されます。
ioufloat0.7非最大値抑制Intersection Over Unionしきい値を設定します。重複する検出結果の削除を制御します。
max_detint300画像ごとの最大検出数を制限します。高密度なシーンで過剰な検出を防ぎ、計算リソースを管理するのに役立ちます。
quantizeint または strNone検証の精度:16/"fp16" はサポートされているGPUでのFP16検証を有効にし、32/"fp32"/未設定はFP32です。INT8/PTQ量子化はエクスポート時に設定され、エクスポートされたモデルを検証して使用されます。非推奨となった half フラグを置き換えます。
devicestrNone検証用のデバイスを指定します(cpucuda:0npunpu:0 など)。None の場合、利用可能な最適なデバイスが自動的に選択されます。カンマ区切りで複数のCUDAデバイスを指定できます。
dnnboolFalseTrue の場合、ONNXモデル推論にOpenCV DNNモジュールを使用し、PyTorch推論方法の代替手段を提供します。
plotsboolTrueTrue に設定すると、モデルのパフォーマンスを視覚的に評価するために、正解に対する予測のプロット、混同行列、およびPR曲線を生成して保存します。
classeslist[int]None評価対象のクラスIDのリストを指定します。評価中に特定のクラスのみを抽出したり、注目したりする場合に便利です。
rectboolTrueTrue の場合、バッチ処理に矩形推論を使用し、パディングを削減して画像を元の縦横比のまま処理することで、速度と効率を向上させる可能性があります。すべての画像をパディングではなく固定の imgsz 正方形に変形する depth の検証では無視されます。
splitstr'val'検証に使用するデータセットの分割を決定します(valtest、または train)。パフォーマンス評価のためのデータセグメントの選択に柔軟性を持たせます。
projectstrNone検証結果が保存されるプロジェクトディレクトリの名前です。異なる実験やモデルの結果を整理するのに役立ちます。
namestrNone検証実行の名前です。プロジェクトフォルダ内にサブディレクトリを作成し、そこに検証ログと出力が保存されます。
verboseboolTrueTrue の場合、クラスごとのメトリクス、バッチの進行状況、追加のデバッグ情報など、検証プロセス中の詳細な情報を表示します。
save_txtboolFalseTrue の場合、画像ごとに1つのファイルとしてテキストファイルに検出結果を保存します。これは、さらなる分析、カスタム後処理、または他のシステムとの統合に役立ちます。
save_confboolFalseTrue の場合、save_txt が有効なときに保存されるテキストファイルに信頼度値を含め、分析とフィルタリングのためのより詳細な出力を提供します。
workersint8データ読み込み用のワーカースレッド数です。値を大きくするとデータの前処理は高速化されますが、CPU使用率が増加する可能性があります。0に設定するとメインスレッドが使用され、環境によってはより安定します。
augmentboolFalse検証中のテスト時拡張(TTA)を有効にし、入力の変換済みバージョンで推論を実行することで、推論速度と引き換えに検出精度を向上させる可能性があります。Ultralytics PyTorchモデルでのみ利用可能です。
agnostic_nmsboolFalse予測されたクラスに関係なく、スコアが低い重複バウンディングボックスを抑制するクラス非依存のNon-Maximum Suppressionを有効にします。インスタンスに焦点を当てたアプリケーションに役立ちます。エンドツーエンドモデル(YOLO26、YOLOv10)の場合、これは同じ検出が複数のクラスラベルで表示されるのを防ぐだけで(IoU=1.0 の重複)、異なるボックス間での IoU しきい値に基づく抑制は行いません。
single_clsboolFalse検証時にすべてのクラスを単一のクラスとして扱います。バイナリ検出タスクの性能評価や、クラスの区別が重要ではない場合に役立ちます。
visualizeboolFalse画像ごとに正解データ、真陽性、偽陽性、偽陰性を可視化します。デバッグやモデルの解釈に役立ちます。
show_labelsboolTruevisualize=True のとき、検証の可視化でクラスラベルを表示します。一致とエラーをより明確に表示するには False に設定します。
show_confboolTruevisualize=True のとき、検証の可視化で信頼度スコアを表示します。一致とエラーをより明確に表示するには False に設定します。
compilebool または strFalsePyTorch 2.x torch.compile グラフコンパイルを backend='inductor' で有効にします。 True"default"False →無効、または "default""reduce-overhead""max-autotune-no-cudagraphs" などの文字列モードを受け入れます。サポートされていない場合は、警告を出してeagerにフォールバックします。
channels_lastboolFalse検証中の畳み込みに channels_last (NHWC) メモリフォーマットを使用することで、結果を変えずに CUDA Tensor Core GPU の処理を高速化します。ネイティブ PyTorch モデルにのみ適用され、CPU、MPS、および TensorRT や ONNX などのエクスポートされたフォーマットでは無視されます。
end2endboolNoneNMSフリー推論をサポートするYOLOモデル(YOLO26、YOLOv10)のエンドツーエンドモードをオーバーライドします。これを False に設定すると、従来のNMSパイプラインを使用して検証を実行でき、さらに iou 引数を利用できるようになります。

これらの各設定は検証プロセスにおいて重要な役割を果たし、YOLOモデルのカスタマイズ可能で効率的な評価を可能にします。特定のニーズとリソースに応じてこれらのパラメータを調整することで、精度とパフォーマンスの最適なバランスを実現できます。

引数を使用した検証の例#



Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More

Google Colabでモデル検証とさまざまなエクスポート方法を探索

以下の例では、PythonおよびCLIでカスタム引数を使用したYOLOモデルの検証を紹介しています。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
ConfusionMatrixのエクスポート

提供されたコードを使用して、ConfusionMatrixの結果をさまざまな形式で保存することもできます。

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
画像ごとの精度(Precision)、再現率(Recall)、F1スコア

バリデーションでは、分類を除くすべてのタスクについて、画像ごとの適合率、再現率、F1、TP、FP、FNのメトリクス(IoUしきい値0.5)が保存されます。バリデーション完了後、検出とOBBはresults.box.image_metrics、セグメンテーションはresults.seg.image_metrics、ポーズはresults.pose.image_metricsからアクセスできます。

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate and access per-image metrics
results = model.val(data="coco8.yaml")

# image_metrics is a dictionary with image filenames as keys
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Access metrics for a specific image
results.box.image_metrics["image1.jpg"]  # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}

image_metricsの各エントリには、次のキーが含まれています。

キー説明
precision画像の適合率スコア(tp / (tp + fp))。
recall画像の再現率スコア(tp / (tp + fn))。
f1適合率と再現率の調和平均です。
tp画像ごとの真陽性(True Positive)の数。
fp画像ごとの偽陽性(False Positive)の数。
fn画像ごとの偽陰性(False Negative)の数。

この機能は、検出、セグメンテーション、姿勢推定、OBBタスクで使用可能です。

メソッド戻り値の型説明
summary()List[Dict[str, Any]]検証結果を要約された辞書に変換します。
to_df()DataFrame検証結果を構造化されたPolars DataFrameとして返します。
to_csv()str検証結果をCSV形式でエクスポートし、CSV文字列を返します。
to_json()str検証結果をJSON形式でエクスポートし、JSON文字列を返します。

詳細については、DataExportMixin クラスドキュメントを参照してください。

次のステップ#

メトリクスに満足しましたか?モデルをエクスポートしてデプロイメント形式にします。精度がずれている場合は、異なるハイパーパラメータまたはより多くのトレーニングデータを使用して戻って再トレーニングしてください。

よくある質問 (FAQ)#

  • YOLO26モデルを検証するには、Ultralyticsが提供するValモードを使用できます。例えば、Python APIを使用する場合、モデルをロードして以下のように検証を実行できます:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Validate the model
    metrics = model.val()
    print(metrics.box.map)  # map50-95

    あるいは、コマンドラインインターフェース(CLI)を使用することもできます:

    yolo val model=yolo26n.pt

    さらにカスタマイズするには、PythonモードとCLIモードの両方で、imgszbatchconfなどのさまざまな引数を調整できます。パラメータの完全なリストについては、YOLOモデルバリデーションの引数セクションを確認してください。

  • YOLO26モデルの検証では、モデルの性能を評価するためのいくつかの重要なメトリクスが提供されます。これらには以下が含まれます:

    • mAP50(IoUしきい値0.5における平均適合率)
    • mAP75(IoUしきい値0.75における平均適合率)
    • mAP50-95(0.5から0.95までの複数のIoUしきい値における平均適合率)

    Python APIを使用して、これらのメトリクスに以下のようにアクセスできます:

    metrics = model.val()  # assumes `model` has been loaded
    print(metrics.box.map)  # mAP50-95
    print(metrics.box.map50)  # mAP50
    print(metrics.box.map75)  # mAP75
    print(metrics.box.maps)  # list of mAP50-95 for each category
    print(metrics.box.image_metrics)  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

    完全なパフォーマンス評価を行うためには、これらすべてのメトリクスを確認することが不可欠です。詳細については、Valモードの主な特徴を参照してください。

  • 検証にUltralytics YOLOを使用することには、いくつかの利点があります:

    • 適合率: YOLO26は、mAP50、mAP75、mAP50-95などの正確なパフォーマンスメトリクスを提供します。
    • 利便性: モデルが学習設定を記憶しているため、検証が簡単に行えます。
    • 柔軟性: 同じデータセットまたは異なるデータセットや画像サイズで検証できます。
    • ハイパーパラメータチューニング: 検証メトリクスは、より良いパフォーマンスのためにモデルを微調整するのに役立ちます。

    これらの利点により、モデルが徹底的に評価され、優れた結果が得られるように最適化されることが保証されます。これらの利点の詳細については、Ultralytics YOLOで検証する理由セクションを参照してください。

  • はい、カスタムデータセットを使用してYOLO26モデルを検証できます。データセットのYAMLへのパスを指定する data 引数を設定してください。このYAMLには検証データへのパスが含まれている必要があります。分類の場合は、代わりにデータセットディレクトリまたは組み込みのデータセット名(例:imagenet10)を指定します。

    注意

    検証はモデル自身のクラス名を使用して実行されます。これらは model.names を使用して確認でき、データセット自体が定義しているクラス名とは異なる場合があります。

    Pythonでの例:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Validate with a custom dataset
    metrics = model.val(data="path/to/your/custom_dataset.yaml")
    print(metrics.box.map)  # map50-95

    CLIを使用した例:

    yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yaml

    バリデーション中のよりカスタマイズ可能なオプションについては、引数を使用したバリデーションの例セクションを参照してください。

  • バリデーション結果をJSONファイルに保存するには、バリデーションの実行時にsave_json引数をTrueに設定します。これはPython APIとCLIの両方で行うことができます。

    Pythonでの例:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Save validation results to JSON
    metrics = model.val(save_json=True)

    CLIを使用した例:

    yolo val model=yolo26n.pt save_json=True

    この機能は、さらなる分析や他のツールとの統合に特に役立ちます。詳細については、YOLOモデルバリデーションの引数を確認してください。

コメント