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)へのパスを指定します。これには検証データへのパスを含める必要があります。分類の場合は、代わりにデータセットディレクトリまたは組み込みのデータセット名(例:imagenet10)を指定します。 |
imgsz | int | 640 | 入力画像のサイズを定義します。すべての画像は処理前にこの寸法にリサイズされます。サイズを大きくすると小さな物体の精度が向上する可能性がありますが、計算時間が増加します。 |
batch | int | 16 | バッチあたりの画像数を設定します。値を大きくするとGPUメモリをより効率的に活用できますが、より多くのVRAMが必要です。利用可能なハードウェアリソースに基づいて調整してください。 |
save_json | bool | False | True の場合、さらなる分析、他のツールとの統合、またはCOCOなどの評価サーバーへの提出のために、結果をJSONファイルに保存します。 |
conf | float | 0.001 | 検出の最小信頼度しきい値を設定します。値を下げるとリコールが向上しますが、偽陽性が増える可能性があります。適合率-再現率曲線はデフォルトで 0.001 になり、検出混同行列は明示的な conf 値を使用するか、省略された場合は 0.25 を使用します。サマリーの適合率と再現率はmax-F1信頼度を使用するため、confusion_matrix.png から導出された値とは異なる場合があります。メモリ使用量を削減するためのOBB検証では、デフォルトで 0.01 に設定されます。 |
iou | float | 0.7 | 非最大値抑制のIntersection Over Unionしきい値を設定します。重複する検出結果の削除を制御します。 |
max_det | int | 300 | 画像ごとの最大検出数を制限します。高密度なシーンで過剰な検出を防ぎ、計算リソースを管理するのに役立ちます。 |
quantize | int または str | None | 検証の精度:16/"fp16" はサポートされているGPUでのFP16検証を有効にし、32/"fp32"/未設定は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 の場合、バッチ処理に矩形推論を使用し、パディングを削減して画像を元の縦横比のまま処理することで、速度と効率を向上させる可能性があります。すべての画像をパディングではなく固定の imgsz 正方形に変形する depth の検証では無視されます。 |
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を有効にします。インスタンスに焦点を当てたアプリケーションに役立ちます。エンドツーエンドモデル(YOLO26、YOLOv10)の場合、これは同じ検出が複数のクラスラベルで表示されるのを防ぐだけで(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 | False | 検証中の畳み込みに channels_last (NHWC) メモリフォーマットを使用することで、結果を変えずに CUDA Tensor Core GPU の処理を高速化します。ネイティブ PyTorch モデルにのみ適用され、CPU、MPS、および TensorRT や ONNX などのエクスポートされたフォーマットでは無視されます。 |
end2end | bool | None | NMSフリー推論をサポートするYOLOモデル(YOLO26、YOLOv10)のエンドツーエンドモードをオーバーライドします。これを False に設定すると、従来のNMSパイプラインを使用して検証を実行でき、さらに iou 引数を利用できるようになります。 |
これらの各設定は検証プロセスにおいて重要な役割を果たし、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())バリデーションでは、分類を除くすべてのタスクについて、画像ごとの適合率、再現率、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モードの両方で、
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には検証データへのパスが含まれている必要があります。分類の場合は、代わりにデータセットディレクトリまたは組み込みのデータセット名(例: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モデルバリデーションの引数を確認してください。