Ultralytics YOLO27: ウェイティングリストに登録してください。
Get Started

Ultralytics YOLOによるモデルの検証#

Ultralytics YOLO ecosystem and integrations

はじめに#

検証は機械学習パイプラインにおける重要なステップであり、トレーニング済みモデルの品質を評価できます。Ultralytics YOLO26のValモードは、物体検出モデルと、その他すべての対応タスクを評価するためのツールや指標を提供します。このガイドでは、Valモードを使用してモデルの精度と信頼性を確認する方法を説明します。

予備的な検証結果については、未リリースのYOLO27プレビューを参照してください。



視聴: Ultralytics のモード解説: 検証

Ultralytics YOLOで検証する理由#

YOLO26のValモードを使用する理由:

  • 精度: mAP50-95をはじめ、mAP50やmAP75などの正確な指標を使用して、モデルを包括的に評価できます。
  • 利便性: トレーニング設定を記憶する組み込み機能により、検証プロセスを簡素化できます。
  • 柔軟性: 同じデータセットまたは異なるデータセットや画像サイズでモデルを検証できます。
  • ハイパーパラメーターの調整: 検証指標を使用してモデルを微調整し、性能を向上させます。

Valモードの主な機能#

YOLO26のValモードの主な機能:

  • 設定の自動化: モデルが学習時の設定を記憶するため、簡単に検証できます。
  • 複数指標への対応: さまざまな精度指標を使用してモデルを評価できます。
  • CLIとPython API: コマンドラインインターフェースまたはPython APIから、好みの方法で検証を実行できます。
  • データ互換性: トレーニング時に使用したデータセットだけでなく、カスタムデータセットにも対応します。
ヒント
  • YOLO26モデルは学習時の設定を自動的に記憶するため、yolo val model=path/to/best.ptまたはYOLO("path/to/best.pt").val()は元のデータセット上で学習時の画像サイズを使って検証します。公式ウェイトでは、タスクのデフォルトデータセットにフォールバックします。上書きするにはdataを渡してください。

使用例#

トレーニング済みのYOLO26nモデルの精度を検証します。modelにはトレーニング時のdataと引数がモデル属性として保持されるため、引数を指定する必要はありません。path/to/best.ptは、トレーニングに使用したデータセットで検証を実行します。公式の重みには、使用しているマシン上に存在しないトレーニングデータセットのパスが記録されているため、警告を出してタスクのデフォルトであるcoco8.yamlにフォールバックします。別のデータセットで検証するには、dataを渡してください。

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

Windowsでは、検証をスクリプトとして起動するとRuntimeErrorが表示される場合があります。検証コードの前にif __name__ == "__main__":ブロックを追加すると解決できます。

例
from ultralytics import YOLO

# モデルを読み込む
model = YOLO("yolo26n.pt")  # 公式モデルを読み込みます
model = YOLO("path/to/best.pt")  # カスタムモデルを読み込む

# モデルを検証します
metrics = model.val()  # データセットと設定が記憶されるため、引数は不要です
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # クラスごとの mAP50-95。検証セットに存在しないクラスには全体の mAP が設定されます
metrics.box.ap_class_index  # 実際に評価されたクラスのインデックス
metrics.box.image_metrics  # 画像ごとのprecision、recall、F1、TP、FP、FNを含む指標辞書

YOLOモデル検証の引数#

YOLOモデルを検証する際は、評価プロセスを調整するために複数の引数を変更できます。これらの引数は、入力画像サイズ、バッチ処理、性能のしきい値などを制御します。各引数について以下で説明します。

引数種類デフォルト説明
datastrNoneデータセットYAMLへのパス(例: coco8.yaml)を指定します。YAMLには検証データへのパスを含める必要があります。分類では、代わりにデータセットディレクトリまたは組み込みデータセット名(例: imagenet10)を指定します。
imgszint640入力画像のサイズを定義します。すべての画像は処理前にこのサイズへリサイズされます。サイズを大きくすると小さなオブジェクトの精度が向上する場合がありますが、計算時間は増加します。
batchint16バッチあたりの画像数を設定します。値を大きくするとGPUメモリをより効率的に使用できますが、より多くのVRAMが必要です。利用可能なハードウェアリソースに応じて調整してください。
save_jsonboolFalseTrue が有効な場合、結果をJSONファイルに保存し、詳細な分析、他のツールとの連携、またはCOCOなどの評価サーバーへの提出に利用できます。検出データセットでは、faster-coco-eval を使用して予測も評価し、小・中・大オブジェクトのmAPを報告します。トレーニング中、これらは results.csv 内にそれぞれ metrics/mAP_small(B)、metrics/mAP_medium(B)、metrics/mAP_large(B) として記録されます。セマンティックセグメンテーションの場合は、画像のサブディレクトリ構造を保ったまま、results/ の下にPNGクラスマスクを保存します。
conffloat0.001検出の最小信頼度しきい値を設定します。値を下げると再現率が向上しますが、誤検出が増える可能性があります。Precision-Recall曲線、mAP、検出の混同行列では、いずれもこの値を使用します。confを0.25のように高くすると、行列は予測出力に近づきますが、mAPが低下する場合があります。要約の適合率と再現率には最大F1値となる信頼度が使用されるため、confusion_matrix.pngから算出した値と異なる場合があります。OBB検証では、メモリ使用量を抑えるため、デフォルトで0.01になります。
ioufloat0.7Non-Maximum SuppressionのIntersection Over Unionしきい値を設定します。重複検出の除去を制御します。
max_detint300画像あたりの最大検出数を制限します。detect、segment、pose、OBBでは、値を300のままにすると、検証対象の分割データ内で画像の検出数が上限を超える場合に、ラベル付き物体数の最大値まで引き上げられ、警告が表示されます。それ以外の値は維持され、画像の検出数が上限を超えると再現率が制限される可能性を示す警告が表示されます。
quantizeintまたはstrNone検証精度: 16/"fp16"および32/"fp32"/未設定では、PyTorchおよびTorchScriptモデルの演算にFP16またはFP32を選択します(CPUではFP32)。その他の形式では、アーティファクトとランタイムによって選択される精度が使用されます。16では、OpenVINOは引き続きクライアント側で入力をFP16に丸めてからFP32に戻しますが、ランタイムの精度は変更しません。INT8/PTQ量子化はエクスポート時に設定し、その後、エクスポート済みモデルの検証時に使用します。非推奨のhalfフラグを置き換えます。
devicestrNone検証に使用するデバイスを指定します(cpu、cuda:0、npu、npu:0など)。Noneの場合、利用可能な最適なデバイスが自動的に選択されます。複数のCUDAデバイスはカンマ区切りで指定できます。
dnnboolFalseTrueの場合、ONNXモデルの推論にOpenCV DNNモジュールを使用します。PyTorchの推論方法に代わる選択肢を提供します。
plotsboolTrueTrueに設定すると、モデル性能を視覚的に評価するために、予測とGround Truthのプロット、混同行列、PR曲線を生成して保存します。
classeslist[int]None評価するクラスIDのリストを指定します。評価対象を特定のクラスに絞り込む場合に便利です。
rectboolTrueTrue の場合、アスペクト比が近い画像を長方形の形状にまとめます。各次元をストライドの倍数に切り上げる前に、ストライドの半分を加算します(semantic の場合、追加の半ストライドはありません)。ストライドが32の場合、imgsz=640 の640×640画像は、16 pxのオフセットを伴う672×672になりますが、predictでは640×640が使用されるため、メトリクスが異なる場合があります。rect=False は正方形画像でpredictと一致します。depth と RT-DETR では無視され、画像は imgsz の正方形に引き伸ばされます。
splitstr'val'検証に使用するデータセットsplit(val、test、train)を指定します。性能評価に使用するデータの区分を柔軟に選択できます。
fractionfloat、int、またはlist1.0検証対象splitのサブセットです。[train, val, test]リストを指定すると、splitに一致する項目が適用されます(1はsplit全体、1を超える整数は画像数、省略された項目は全体を意味します)。スカラー値はsplit=trainの場合にのみ適用されます。この場合、valとtestはsplit全体を使用します。
projectstrNone検証出力の保存先となるプロジェクトディレクトリの名前です。相対パスは runs_dir/<task> の下に配置され、絶対パスはそのまま使用されます。
namestrNone検証実行の名前です。プロジェクトフォルダー内にサブディレクトリを作成し、検証ログと出力を保存するために使用します。
verboseboolTrueTrueの場合、検証プロセス中にクラスごとの指標、バッチの進行状況、追加のデバッグ情報など、詳細情報を表示します。
save_txtboolFalseTrueの場合、検出結果をテキストファイルに保存します。画像ごとに1つのファイルが作成され、追加分析、カスタム後処理、他システムとの連携に利用できます。
save_confboolFalseTrueの場合、save_txtが有効であれば、保存するテキストファイルに信頼度の値を含めます。分析やフィルタリングに利用できる詳細な出力を提供します。
workersint8データ読み込みに使用するワーカースレッドの数です。値を大きくするとデータの前処理が高速になる場合がありますが、CPU使用量も増加する可能性があります。0に設定するとメインスレッドを使用し、環境によっては動作がより安定します。
augmentboolFalse検証時にテスト時拡張(TTA)を有効にし、変換した入力で推論を実行します。推論速度は低下する可能性がありますが、検出精度を高められる場合があります。Ultralytics PyTorchモデルでのみ利用できます。
agnostic_nmsboolFalseクラスに依存しない非極大値抑制を有効にし、予測クラスにかかわらず、スコアの低い重複ボックスを抑制します。インスタンスを重視するアプリケーションに適しています。NMS不要の推論(YOLO26またはYOLOv10でnms=False)では、同じ検出が複数のクラスラベルで出力されること(IoU=1.0の重複)だけを防ぎ、異なるボックス間でIoUしきい値に基づく抑制は行いません。
single_clsboolFalse検証中、すべてのクラスを単一のクラスとして扱います。二値検出タスクでモデル性能を評価する場合や、クラスの区別が重要でない場合に便利です。
visualizeboolFalse各画像のGround Truth、真陽性、偽陽性、偽陰性を可視化します。デバッグやモデルの解釈に便利です。
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_lastboolNoneネイティブPyTorch検証でchannels_last(NHWC)メモリ形式を使用します。Noneでは、oneDNNを有効にしたLinuxおよびWindowsのx86 CPU上でPyTorch 1.13以降を使用する場合に自動的に有効になり、Falseでは無効になり、Trueでは対応するx86 CPUまたはCUDAデバイスでの使用を指定します。ARM64、MPS、古いPyTorchバージョン、oneDNN非対応CPU、エクスポート形式では変更されません。トレーニング中の検証では、トレーニングモデルのレイアウトが維持されます。
nmsbool、省略可NoneデフォルトではNMSを使用したone-to-many推論(NoneまたはTrue)を実行します。利用可能な場合は、Falseを設定してNMSなしのone-to-oneヘッドを使用します。詳細はエンドツーエンド検出ガイドをご覧ください。

これらの設定をニーズやリソースに合わせて調整すると、評価の精度と速度の適切なバランスを実現できます。

矩形検証のジオメトリ (rect)#

静的エクスポートの検証には、正方形でないエクスポートも含め、記録された (height, width) の入力形状が使用されます。たとえば、モデルが imgsz=(384, 640) を使用してエクスポートされた場合、YOLO("yolo26n.onnx").val(data="coco8.yaml") は 384×640 の入力を使用します。

検出、インスタンスセグメンテーション、姿勢推定、OBBでは、矩形検証 (rect=True) により、各バッチ次元が ceil(shape * imgsz / stride + 0.5) * stride を使用して切り上げられます。ここで shape は、バッチの正規化された高さまたは幅です。結果として生じるパディングは、向かい合う辺に分割されます。たとえば、正方形の640×640画像を imgsz=640 で検証する場合、ストライド32では672×672の入力が使用され、各辺に16 pxのパディングが追加されます。一方、predict() ではパディングなしの640×640が使用されます。

この違いは検証指標に影響する場合があります。正方形でストライドに整合した入力の場合、model.val(rect=False) は predict() および正方形の固定形状エクスポートと同じジオメトリになります。トレーニング中、これらのYOLOタスクではトレーニングの rect 設定にかかわらず矩形検証バッチが使用されるため、model.train(rect=False) は矩形検証を使用して引き続き best.pt を選択します。その他のタスクでは動作が異なります。セマンティックセグメンテーションでは検証時に追加のパディングは行われず、深度推定では矩形検証が無効になり、分類では rect が無視され、RT-DETRでは独自のデータセットビルダーと rect=False が使用されます。

引数を指定した検証の例#



視聴: モデルの検証結果を CSV、JSON、SQL、Polars DataFrame などにエクスポートする方法

Explore model validation and different export methods in Google Colab

以下の例では、PythonとCLIでカスタム引数を指定してYOLOモデルの検証を実行します。

例
from ultralytics import YOLO

# モデルを読み込む
model = YOLO("yolo26n.pt")

# 検証設定をカスタマイズします
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
ConfusionMatrixをエクスポート

混同行列の結果は、DataFrameなどのさまざまな形式でエクスポートすることもできます。

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

# モデルを読み込む
model = YOLO("yolo26n.pt")

# 検証して画像ごとの指標にアクセスします
results = model.val(data="coco8.yaml")

# image_metricsは、画像ファイル名をキーとする辞書です
print(results.box.image_metrics)
# 出力: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# 特定の画像の指標にアクセスします
results.box.image_metrics["image1.jpg"]  # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}

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

キー説明
precision画像のprecisionスコア(tp / (tp + fp))。
recall画像のrecallスコア(tp / (tp + fn))。
f1precisionとrecallの調和平均です。
tp画像の真陽性数です。
fp画像の偽陽性数です。
fn画像の偽陰性数です。

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

返されるメトリクスオブジェクトには、後続の分析に使用できるDataExportMixinのエクスポート用ヘルパーも用意されています。

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

次のステップ#

指標に問題がなければ、モデルをデプロイ形式にエクスポートします。精度が不十分な場合は、戻って再学習し、ハイパーパラメーターを変更するか、学習データを追加してください。

よくある質問#

  • YOLO26モデルを検証するには、Ultralyticsが提供するValモードを使用できます。たとえば、Python APIでは、モデルを読み込んで次のように検証を実行できます。

    from ultralytics import YOLO
    
    # モデルを読み込む
    model = YOLO("yolo26n.pt")
    
    # モデルを検証します
    metrics = model.val()
    print(metrics.box.map)  # map50-95

    または、コマンドラインインターフェース(CLI)を使用できます。

    yolo detect val model=yolo26n.pt data=coco8.yaml

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

  • YOLO26モデルの検証では、モデルの性能を評価するための主要な指標をいくつか取得できます。次の指標が含まれます。

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

    Python APIでは、次のようにこれらの指標にアクセスできます。

    metrics = model.val()  # `model`が読み込み済みであることを前提とします
    print(metrics.box.map)  # mAP50-95
    print(metrics.box.map50)  # mAP50
    print(metrics.box.map75)  # mAP75
    print(metrics.box.maps)  # クラスごとの mAP50-95。検証セットに存在しないクラスには全体の mAP が設定されます
    print(metrics.box.ap_class_index)  # 実際に評価されたクラスのインデックス
    print(metrics.box.image_metrics)  # 画像ごとのprecision、recall、F1、TP、FP、FNを含む指標辞書

    性能を包括的に評価するため、これらの指標をすべて確認してください。

  • 検証にUltralytics YOLOを使用すると、次のようなメリットがあります。

    • 精度: YOLO26は、mAP50、mAP75、mAP50-95など、正確な性能指標を提供します。
    • 利便性: モデルが学習時の設定を記憶するため、簡単に検証できます。
    • 柔軟性: 同じデータセットまたは異なるデータセットや画像サイズで検証できます。
    • ハイパーパラメーターの調整: 検証指標を活用してモデルを微調整し、性能を向上できます。

    これらのメリットにより、モデルを徹底的に評価し、最適化できます。

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

    注

    検証ではモデル独自のクラス名が使用されます。クラス名はmodel.namesで確認できますが、データセットで定義されたクラス名とは異なる場合があります。

    Pythonでの例:

    from ultralytics import YOLO
    
    # モデルを読み込む
    model = YOLO("yolo26n.pt")
    
    # カスタムデータセットで検証します
    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
    
    # モデルを読み込む
    model = YOLO("yolo26n.pt")
    
    # 検証結果をJSONに保存します
    metrics = model.val(save_json=True)

    CLIを使った例:

    yolo val model=yolo26n.pt save_json=True

    検出データセットでは、save_json=Trueはfaster-coco-evalを通じて、小・中・大オブジェクトのmAPも報告します。詳細については、YOLOモデル検証の引数を確認してください。

コメント