Ultralytics YOLOによるモデル検証#
はじめに#
検証は機械学習パイプラインにおける重要なステップであり、学習済みモデルの品質を評価できます。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では、検証をスクリプトとして起動すると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 FNYOLOモデル検証の引数#
YOLOモデルを検証する際は、評価プロセスを最適化するために複数の引数を微調整できます。これらの引数は、入力画像サイズ、バッチ処理、性能しきい値などを制御します。以下では各引数を詳しく説明し、検証設定を効果的にカスタマイズできるようにしています。
| 引数 | 型 | デフォルト | 説明 |
|---|---|---|---|
data | str | None | データセットYAMLへのパスを指定します(例: coco8.yaml)。検証データへのパスを含める必要があります。Classificationでは、代わりにデータセットディレクトリまたは組み込みデータセット名(例: imagenet10)を指定します。 |
imgsz | int | 640 | 入力画像のサイズを定義します。すべての画像は処理前にこのサイズへリサイズされます。サイズを大きくすると小さなオブジェクトの精度が向上する場合がありますが、計算時間は増加します。 |
batch | int | 16 | バッチあたりの画像数を設定します。値を大きくするとGPUメモリを効率的に利用できますが、より多くのVRAMが必要になります。利用可能なハードウェアリソースに応じて調整してください。 |
save_json | bool | False | Trueの場合、結果をJSONファイルに保存します。追加分析、他のツールとの統合、COCOなどの評価サーバーへの提出に利用できます。 |
conf | float | 0.001 | 検出の最小信頼度しきい値を設定します。値を小さくすると再現率は向上しますが、偽陽性が増える場合があります。Precision-Recall曲線のデフォルトは0.001です。検出の混同行列では、明示的にconfが指定されるか、省略時は0.25が使用されます。概要の適合率と再現率にはmax-F1信頼度が使用されるため、confusion_matrix.pngから算出した値とは異なる場合があります。OBB検証では、メモリ使用量を削減するためのデフォルト値は0.01です。 |
iou | float | 0.7 | Non-Maximum Suppressionに対するIntersection Over Unionしきい値を設定します。重複検出の除去を制御します。 |
max_det | int | 300 | 1画像あたりの最大検出数を制限します。detect、segment、pose、OBBにおいて、300のままにしておくと、画像がそれを超えた場合に検証スプリット内の最大のラベル付きオブジェクト数に引き上げられ、警告が表示されます。その他の値に設定されている場合はそのまま維持され、画像がそれを超えた場合にリコールが制限される可能性があるという警告が表示されます。 |
quantize | intまたはstr | None | 検証精度: 16/"fp16" および 32/"fp32"/unset は、PyTorch および TorchScript モデルの FP16 または FP32 計算を選択します。その他のフォーマットは、アーティファクトとランタイムが選択する精度で計算を行います。16 では、OpenVINO は依然としてクライアント側で入力を FP16 に丸めてから FP32 に戻しますが、ランタイムが計算を行う精度自体を変更するわけではありません。INT8/PTQ 量子化はエクスポート時に設定され、その後エクスポートされたモデルを検証して使用されます。非推奨となった half フラグを置き換えます。 |
device | str | None | 検証に使用するデバイスを指定します(cpu、cuda:0、npu、npu:0など)。Noneの場合、利用可能な最適なデバイスを自動選択します。複数のCUDAデバイスはカンマ区切りで指定できます。 |
dnn | bool | False | Trueの場合、ONNXモデルの推論にOpenCV DNNモジュールを使用し、PyTorchの推論方式に代わる手段を提供します。 |
plots | bool | True | Trueに設定すると、モデルパフォーマンスを視覚的に評価するため、予測とグラウンドトゥルースの比較、混同行列、PR曲線のプロットを生成して保存します。 |
classes | list[int] | None | 評価するクラスIDのリストを指定します。評価中に特定のクラスだけに絞り込み、その他を除外する場合に役立ちます。 |
rect | bool | True | Trueの場合、バッチ処理に矩形推論を使用します。パディングを減らし、画像を元のアスペクト比で処理することで、速度と効率が向上する場合があります。depth検証では無視されます。この場合、パディングの代わりにすべての画像を固定されたimgszの正方形へ引き伸ばします。 |
split | str | 'val' | 検証に使用するデータセット分割(val、test、train)を決定します。パフォーマンス評価に使用するデータセグメントを柔軟に選択できます。 |
project | str | None | 検証出力を保存するプロジェクトディレクトリの名前です。異なる実験やモデルの結果を整理するのに役立ちます。 |
name | str | None | 検証実行の名前です。プロジェクトフォルダー内にサブディレクトリを作成するために使用され、検証ログと出力がそこに保存されます。 |
verbose | bool | True | Trueの場合、クラスごとのメトリクス、バッチの進行状況、追加のデバッグ情報など、検証処理中の詳細情報を表示します。 |
save_txt | bool | False | Trueの場合、検出結果をテキストファイルに保存します。画像ごとに1ファイルが作成され、追加分析、カスタム後処理、他のシステムとの統合に役立ちます。 |
save_conf | bool | False | Trueの場合、save_txtが有効であれば、保存するテキストファイルに信頼度の値を含め、分析やフィルタリングに利用できる詳細な出力を提供します。 |
workers | int | 8 | データ読み込みに使用するワーカースレッド数です。値を大きくするとデータの前処理が高速化する場合がありますが、CPU使用量が増加する可能性があります。0に設定するとメインスレッドを使用し、一部の環境では安定性が向上します。 |
augment | bool | False | 検証中のテストタイムオーグメンテーション(TTA)を有効にします。入力を変換したバージョンで推論を実行するため、推論速度を犠牲にして検出精度が向上する場合があります。Ultralytics PyTorchモデルでのみ使用できます。 |
agnostic_nms | bool | False | クラス非依存の Non-Maximum Suppression を有効にし、予測されたクラスに関係なく、スコアの低い重複バウンディングボックスを抑制します。インスタンスに特化したアプリケーションで役立ちます。NMS フリー推論(YOLO26 または YOLOv10 の nms=False)の場合、これは同じ検出結果が複数のクラスラベル付きで表示されるのを防ぐ(IoU=1.0 の重複)だけであり、異なるバウンディングボックス間の IoU 閾値ベースの抑制は実行しません。 |
single_cls | bool | False | 検証中、すべてのクラスを単一のクラスとして扱います。バイナリ検出タスクや、クラスの区別が重要でない場合のモデルパフォーマンス評価に役立ちます。 |
visualize | bool | False | 各画像のグラウンドトゥルース、真陽性、偽陽性、偽陰性を可視化します。デバッグやモデルの解釈に役立ちます。 |
show_labels | bool | True | visualize=Trueの場合、検証の可視化にクラスラベルを表示します。Falseに設定すると、一致とエラーをより明瞭に表示できます。 |
show_conf | bool | True | visualize=Trueの場合、検証の可視化に信頼度スコアを表示します。Falseに設定すると、一致とエラーをより明瞭に表示できます。 |
compile | boolまたはstr | False | PyTorch 2.xのtorch.compileグラフコンパイルをbackend='inductor'で有効にします。True → "default"、False → 無効、または"default"、"reduce-overhead"、"max-autotune-no-cudagraphs"などの文字列モードを指定できます。サポートされていない場合は、警告を表示してeagerモードにフォールバックします。 |
channels_last | bool | None | ネイティブPyTorch検証にchannels_last (NHWC)メモリ形式を使用します。Noneは、PyTorch 1.13以降を使用するoneDNN対応のLinuxおよびWindows x86 CPUで自動的に有効にし、Falseは無効にし、Trueは対応するx86 CPUまたはCUDAデバイスでの使用を要求します。ARM64、MPS、古いPyTorchバージョン、oneDNN非対応CPU、エクスポート形式には変更を加えません。トレーニング中の検証では、トレーニングモデルのレイアウトが維持されます。 |
nms | bool、オプション | None | デフォルトでは NMS 付きの多対1推論を実行します(None または True)。利用可能な場合に NMS フリーの1対1ヘッドを使用するには False を設定します。詳細は End-to-End Detection guide を参照してください。 |
これらの各設定は検証プロセスで重要な役割を果たし、YOLOモデルの評価をカスタマイズして効率化できます。用途やリソースに応じてこれらのパラメータを調整することで、精度と性能のバランスを最適化できます。
引数を使用した検証例#
Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More
以下の例では、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の結果を異なる形式で保存することもできます。
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())検証では、Classificationを除くすべてのタスクについて、画像ごとのPrecision、Recall、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 | 画像のPrecisionスコア(tp / (tp + fp))。 |
recall | 画像のRecallスコア(tp / (tp + fn))。 |
f1 | PrecisionとRecallの調和平均です。 |
tp | 画像の真陽性数です。 |
fp | 画像の偽陽性数です。 |
fn | 画像の偽陰性数です。 |
この機能は、検出、セグメンテーション、ポーズ、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モードの両方で、
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() # 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には、検証データへのパスを含める必要があります。Classificationでは、データセットディレクトリまたは組み込みデータセット名(例: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-95CLIを使用した例:
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モデル検証の引数をご確認ください。