Ultralytics YOLOによるモデルの検証#
はじめに#
検証は機械学習パイプラインにおける重要な工程であり、トレーニング済みモデルの品質を評価できます。Ultralytics YOLO26のValモードは、物体検出モデルのパフォーマンスを評価するための堅牢なツールとメトリクスを提供します。このガイドでは、モデルの精度と信頼性を確保するためにValモードを効果的に使用する方法を包括的に説明します。
予備的な検証結果については、未リリースのYOLO27プレビューを参照してください。
視聴: Ultralytics のモード解説: 検証
Ultralytics YOLOで検証する理由#
YOLO26のValモードを使用するメリットは次のとおりです。
- 高精度: mAP50、mAP75、mAP50-95などの正確な指標を取得し、モデルを包括的に評価できます。
- 利便性: 学習設定を記憶する組み込み機能により、検証プロセスを簡素化できます。
- 柔軟性: 同じデータセットまたは異なるデータセットや画像サイズでモデルを検証できます。
- ハイパーパラメーターの調整: 検証指標を使用してモデルを微調整し、性能を向上させます。
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では、検証をスクリプトとして起動すると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を含むリスト
metrics.box.image_metrics # 画像ごとのprecision、recall、F1、TP、FP、FNを含む指標辞書YOLOモデル検証の引数#
YOLOモデルを検証する際は、評価プロセスを最適化するために、いくつかの引数を微調整できます。これらの引数は、入力画像サイズ、バッチ処理、性能のしきい値などを制御します。検証設定を効果的にカスタマイズできるよう、各引数の詳細を以下に説明します。
| 引数 | 種類 | デフォルト | 説明 |
|---|---|---|---|
data | str | None | データセットYAMLへのパス(例: coco8.yaml)を指定します。YAMLには検証データへのパスを含める必要があります。分類では、代わりにデータセットディレクトリまたは組み込みデータセット名(例: imagenet10)を指定します。 |
imgsz | int | 640 | 入力画像のサイズを定義します。すべての画像は処理前にこのサイズへリサイズされます。サイズを大きくすると小さなオブジェクトの精度が向上する場合がありますが、計算時間は増加します。 |
batch | int | 16 | バッチあたりの画像数を設定します。値を大きくするとGPUメモリをより効率的に使用できますが、より多くのVRAMが必要です。利用可能なハードウェアリソースに応じて調整してください。 |
save_json | bool | False | Trueの場合、追加分析、他のツールとの連携、COCOなどの評価サーバーへの提出に使用できるよう、結果をJSONファイルに保存します。検出データセットでは、予測をfaster-coco-evalで評価し、小・中・大オブジェクトのmAPも報告します。これらはトレーニング中にresults.csvのmetrics/mAP_small(B)、metrics/mAP_medium(B)、metrics/mAP_large(B)としてログに記録されます。 |
conf | float | 0.001 | 検出の最小信頼度しきい値を設定します。値を下げると再現率が向上しますが、誤検出が増える可能性があります。Precision-Recall曲線、mAP、検出の混同行列では、いずれもこの値を使用します。confを0.25のように高くすると、行列は予測出力に近づきますが、mAPが低下する場合があります。要約の適合率と再現率には最大F1値となる信頼度が使用されるため、confusion_matrix.pngから算出した値と異なる場合があります。OBB検証では、メモリ使用量を抑えるため、デフォルトで0.01になります。 |
iou | float | 0.7 | Non-Maximum SuppressionのIntersection Over Unionしきい値を設定します。重複検出の除去を制御します。 |
max_det | int | 300 | 画像ごとの検出数の最大値を制限します。detect、segment、pose、OBBでは、値が300のままの場合、画像内の検出数がこの値を超えると、警告を出したうえで検証対象split内のラベル付きオブジェクト数の最大値まで引き上げます。それ以外の値はそのまま使用され、画像内の検出数が設定値を超えた場合、再現率が制限される可能性があることを警告します。 |
quantize | intまたはstr | None | 検証精度: 16/"fp16"および32/"fp32"/未設定では、PyTorchおよびTorchScriptモデルの演算にFP16またはFP32を選択します(CPUでは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に設定すると、モデル性能を視覚的に評価するために、予測とGround Truthのプロット、混同行列、PR曲線を生成して保存します。 |
classes | list[int] | None | 評価するクラスIDのリストを指定します。評価対象を特定のクラスに絞り込む場合に便利です。 |
rect | bool | True | True が有効な場合、アスペクト比が近い画像を矩形の形状にバッチ化します。各寸法をストライドの倍数に切り上げる前に半ストライド分を加算します(semantic の場合、追加の半ストライドはありません)。ストライドが32の場合、imgsz=640 における640×640の画像は、16 pxのオフセットを伴う672×672になります。一方、predictでは640×640が使用されるため、メトリクスが異なる場合があります。正方形画像では、rect=False はpredictと一致します。画像を imgsz の正方形に引き伸ばす depth では無視されます。 |
split | str | 'val' | 検証に使用するデータセットsplit(val、test、train)を指定します。性能評価に使用するデータの区分を柔軟に選択できます。 |
fraction | float、int、またはlist | 1.0 | 検証対象splitのサブセットです。[train, val, test]リストを指定すると、splitに一致する項目が適用されます(1はsplit全体、1を超える整数は画像数、省略された項目は全体を意味します)。スカラー値はsplit=trainの場合にのみ適用されます。この場合、valとtestはsplit全体を使用します。 |
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 | 各画像のGround Truth、真陽性、偽陽性、偽陰性を可視化します。デバッグやモデルの解釈に便利です。 |
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では、oneDNNを有効にしたLinuxおよびWindowsのx86 CPU上でPyTorch 1.13以降を使用する場合に自動的に有効になり、Falseでは無効になり、Trueでは対応するx86 CPUまたはCUDAデバイスでの使用を指定します。ARM64、MPS、古いPyTorchバージョン、oneDNN非対応CPU、エクスポート形式では変更されません。トレーニング中の検証では、トレーニングモデルのレイアウトが維持されます。 |
nms | bool、省略可 | None | デフォルトではNMSを使用したone-to-many推論(NoneまたはTrue)を実行します。利用可能な場合は、Falseを設定してNMSなしのone-to-oneヘッドを使用します。詳細はエンドツーエンド検出ガイドをご覧ください。 |
これらの設定はそれぞれ検証プロセスで重要な役割を果たし、YOLOモデルを柔軟かつ効率的に評価できます。用途や利用可能なリソースに応じてパラメーターを調整すると、精度と性能のバランスを最適化できます。
引数を指定した検証の例#
視聴: モデルの検証結果を CSV、JSON、SQL、Polars DataFrame などにエクスポートする方法
以下の例では、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の結果をさまざまな形式で保存することもできます。
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())検証では、分類を除くすべてのタスクについて、IoUしきい値0.5での画像ごとのprecision、recall、F1、TP、FP、FN指標が保存されます。検証の完了後、検出と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))。 |
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クラスのドキュメントを参照してください。
次のステップ#
指標に問題がなければ、モデルをデプロイ形式にエクスポートします。精度が不十分な場合は、戻って再学習し、ハイパーパラメーターを変更するか、学習データを追加してください。
よくある質問#
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のリスト print(metrics.box.image_metrics) # 画像ごとのprecision、recall、F1、TP、FP、FNを含む指標辞書性能を完全に評価するには、これらすべての指標を確認することが重要です。詳細については、Valモードの主な機能を参照してください。
検証にUltralytics YOLOを使用すると、次のようなメリットがあります。
- 高精度: YOLO26では、mAP50、mAP75、mAP50-95などの正確な性能指標を取得できます。
- 利便性: モデルが学習時の設定を記憶するため、簡単に検証できます。
- 柔軟性: 同じデータセットまたは異なるデータセットや画像サイズで検証できます。
- ハイパーパラメーターの調整: 検証指標を活用してモデルを微調整し、性能を向上できます。
これらのメリットにより、モデルを徹底的に評価し、より優れた結果が得られるよう最適化できます。これらのメリットの詳細については、Ultralytics YOLOで検証する理由セクションを参照してください。
はい、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-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 # モデルを読み込む 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モデル検証の引数を確認してください。