libreyolo val
1つのモデルを1つのデータセット分割で評価し、指標を出力します。指標の組み合わせはモデルのタスクによって決まり、これらの数値はベンチマークの1行を組み立てる元になります。
- コマンド
libreyolo val- 必須
model, data- 出力
- 指標はstdoutに出力。指定すればruns/val/exp配下にプロットとCOCO JSONを保存
構文
libreyolo val model=<name|path> data=<dataset.yaml> [key=value ...]引数はkey=valueのペアで、POSIX形式も使えるため、batch=8と--batch 8は同じ
引数です。
引数
| 引数 | デフォルト | 説明 |
|---|---|---|
model | モデルの重みのパスまたはCLI名。必須 | |
data | データセットYAMLのパス(YOLO形式、例:coco8.yaml)。必須 | |
data_dir | データセットディレクトリの直接指定。YAML内のパスを無視 | |
split | val | データセットの分割:val、test、train |
batch | 16 | バッチサイズ |
imgsz | 画像サイズ:640(正方形)または480x640(HxW)。未指定ならモデル自身の入力サイズ | |
conf | 0.001 | 信頼度のしきい値 |
iou | 0.6 | NMSのIoUしきい値 |
max_det | 300 | NMS後の画像1枚あたりの最大予測数 |
eval_max_det | COCO評価器の上限。未指定ならpycocotoolsのAP@100の慣例 | |
faster_coco_eval | true | インストール済みならCOCO指標にfaster-coco-evalのC++バックエンドを使用。なければpycocotoolsにフォールバック |
half | false | FP16推論 |
amp_dtype | float16 | half=trueのときのCUDA autocastのdtype:float16またはbfloat16 |
save_json | false | COCO形式のJSON結果を保存 |
save_plots | false | 検証プロットを保存:指標、クラスごとのAP、混同行列、サンプル |
workers | 4 | データローダーのワーカー数 |
device | auto | デバイス |
project | runs/val | 出力ディレクトリのルート |
name | exp | 実験名 |
exist_ok | false | 出力ディレクトリを再利用 |
allow_download_scripts | false | データセットYAMLのdownloadブロックに埋め込まれたPythonを許可 |
json | false | stdoutへのJSON出力 |
quiet | false | stderrを抑制 |
verbose | true | 詳細出力 |
help_json | false | コマンドスキーマをJSONで出力して終了 |
使用例
libreyolo val model=LibreYOLO9s.pt data=coco8.yamllibreyolo val model=LibreYOLO9s.pt data=coco8.yaml \ imgsz=640 batch=8 save_json=true save_plots=true \ project=runs/val name=yolo9s-coco8 exist_ok=truelibreyolo val model=LibreYOLO9s.pt data=coco8.yaml json=true quiet=true補足
指標の内容
出力される指標のセットはモデルのタスクに従い、JSON出力も同じキーを使います。
物体検出、セグメンテーション、回転バウンディングボックスはmAP50、mAP50_95、
precision、recallを報告します。モデルが複数種類の出力を予測する場合は、種類
ごとのグループがbox_metrics、mask_metrics、obb_metricsとして併せて出力され、
それぞれが同じ4つのキーを持ちます。
分類はaccuracy_top1とaccuracy_top5を報告します。ポイント検出はprecision、
recall、f1、MLE、MAE、RMSE、mAP_sweepを報告します。深度推定は
abs_rel、rmse、delta1、delta2、delta3を報告します。セマンティック
セグメンテーションはmIoUとpixel_accuracyを報告します。復元はPSNRとSSIM
を報告します。
JSON結果にはeval_backendも含まれ、その数値を出したCOCO評価ライブラリと
バージョンが示されるため、2回の実行を比較するときに同じバックエンドで採点された
かどうかを確認できます。
しきい値
ここでのデフォルト値は推論用ではなく評価用です:confは0.001、iouは0.6で、
libreyolo predictでは0.25と0.45を使います。confを
表示用のしきい値まで上げると再現率が下がり、それに伴ってmAPも下がるため、その
ようにして得た数値は公開されている数値と比較できません。
imgszはデフォルトでは未指定で、モデル自身の入力サイズを意味します。値を設定
するとそのサイズで評価され、これがチェックポイントをネイティブ解像度から離れた
条件で測る方法です。
ダウンロードを伴うデータセット
downloadフィールドがURLのデータセットYAMLは、追加の許可なしに初回使用時に取得
されます。Pythonのダウンロードスクリプトが埋め込まれている場合は
allow_download_scripts=trueが必要で、ローカルコードの実行が有効になったことが
stderrに警告として出ます。同梱のcoco8.yamlとcoco128.yamlはURL方式なので、何も
必要ありません。
出力と終了コード
指標はstdoutに、進捗はstderrに出力されます。json=trueはschema_versionを含む
1つのオブジェクトを出力し、quiet=trueはstderrを止めます。
終了コードは、成功時が0、使い方や設定の誤りが2、データセットが見つからない
場合が3、モデルを読み込めない場合が4、その他の実行時エラーが1です。
関連:libreyolo trainは、eval_intervalによって独自の
スケジュールで同じ評価を実行します。