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()を実行するだけで、同じ画像サイズかつ元のデータセットでモデルを簡単に検証できます。
使用例
トレーニング済みのYOLO26nモデルの精度をCOCO8データセットで検証します。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 | データセット構成ファイル(例: coco8.yaml)へのパスを指定します。このファイルには検証データへのパスを含める必要があります。 |
imgsz | int | 640 | 入力画像のサイズを定義します。処理前にすべての画像がこの次元にリサイズされます。サイズを大きくすると小さなオブジェクトの精度が向上する可能性がありますが、計算時間が増加します。 |
batch | int | 16 | バッチあたりの画像数を設定します。値を大きくするとGPUメモリをより効率的に利用できますが、より多くのVRAMが必要になります。利用可能なハードウェアリソースに応じて調整してください。 |
save_json | bool | False | Trueの場合、さらなる分析、他のツールとの統合、またはCOCOのような評価サーバーへの提出のために、結果をJSONファイルに保存します。 |
conf | float | 0.001 | 検出の最小信頼度しきい値を設定します。値を下げると再現率は向上しますが、偽陽性が増える可能性があります。精度-再現率曲線を計算するために検証中に使用されます。 |
iou | float | 0.7 | Sets the Intersection Over Union threshold for Non-Maximum Suppression. Controls duplicate detection elimination. |
max_det | int | 300 | 1画像あたりの最大検出数を制限します。密集したシーンで過剰な検出を防ぎ、計算リソースを管理するのに役立ちます。 |
half | bool | False | 半精度(FP16)計算を有効にし、メモリ使用量を削減し、精度への影響を最小限に抑えつつ速度を向上させる可能性があります。 |
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の場合、バッチ処理に長方形推論を使用し、パディングを減らすことで、画像の元の縦横比を維持したまま処理を行い、速度と効率が向上する可能性があります。 |
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 | If True, includes confidence values in the saved text files when save_txt is enabled, providing more detailed output for analysis and filtering. |
workers | int | 8 | データ読み込みのためのワーカー数です。値を大きくするとデータ前処理が高速化される可能性がありますが、CPU使用率が増加する可能性があります。0に設定するとメインスレッドが使用され、一部の環境ではより安定します。 |
augment | bool | False | 検証中のテスト時オーグメンテーション(TTA)を有効にします。入力の変換バージョンで推論を実行することで、推論速度と引き換えに検出精度が向上する可能性があります。 |
agnostic_nms | bool | False | クラス非依存のNon-Maximum Suppressionを有効にし、予測されたクラスに関係なく重複するボックスをマージします。インスタンスに焦点を当てたアプリケーションで役立ちます。エンドツーエンドモデル(YOLO26, YOLOv10)の場合、これは同じ検出結果が複数のクラスラベルで出現するのを防ぐ(IoU=1.0の重複)のみであり、個別のボックス間でのIoUしきい値に基づいた抑制は実行しません。 |
single_cls | bool | False | 検証中にすべてのクラスを単一のクラスとして扱います。二値検出タスクのモデルパフォーマンス評価や、クラスの区別が重要でない場合に役立ちます。 |
visualize | bool | False | 各画像に対する正解、真陽性、偽陽性、偽陰性を可視化します。デバッグやモデルの解釈に役立ちます。 |
compile | bool または str | False | Enables PyTorch 2.x torch.compile graph compilation with backend='inductor'. Accepts True → "default", False → disables, or a string mode such as "default", "reduce-overhead", "max-autotune-no-cudagraphs". Falls back to eager with a warning if unsupported. |
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
Ultralyticsを使用してYOLO26モデルを検証するにはどうすればよいですか?
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モデルの検証からどのような指標を得られますか?
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を使用する利点は何ですか?
検証にUltralytics YOLOを使用することには、いくつかの利点があります:
- 精度: YOLO26は、mAP50、mAP75、mAP50-95を含む正確な性能指標を提供します。
- 利便性: モデルがトレーニング設定を記憶しているため、検証が簡単です。
- 柔軟性: 同じデータセットや画像サイズ、あるいは異なるデータセットや画像サイズに対して検証を行えます。
- ハイパーパラメータチューニング: 検証指標は、モデルの性能を向上させるための微調整に役立ちます。
これらの利点により、モデルが徹底的に評価され、優れた結果が得られるよう最適化されます。これらの利点の詳細については、なぜUltralytics YOLOで検証を行うのかのセクションで学習してください。
カスタムデータセットを使用してYOLO26モデルを検証できますか?
はい、カスタムデータセットを使用してYOLO26モデルを検証できます。データセット設定ファイルへのパスを指定して data 引数を使用してください。このファイルには検証データへのパスを含める必要があります。
検証はモデル独自のクラス名を使用して実行されます。これらは 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検証中に利用可能なよりカスタマイズ可能なオプションについては、引数を使用した検証例のセクションを参照してください。
YOLO26で検証結果をJSONファイルに保存するにはどうすればよいですか?
検証結果を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モデル検証のための引数を確認してください。