查看 Markdown

libreyolo val

把一个模型放到一个数据集划分上评估并打印指标。指标集合取决于模型的任务,这些数字就是基准测试里一行数据的来源。

命令
libreyolo val
必填
model, data
输出
指标打印到 stdout。需要时在 runs/val/exp 下生成图表和 COCO JSON

概要

bash
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 里写的路径
splitval数据集划分:valtesttrain
batch16批大小
imgsz图像尺寸:640(正方形)或 480x640(HxW,高 × 宽)。不设置时用模型自身的输入尺寸
conf0.001置信度阈值
iou0.6NMS 的 IoU 阈值
max_det300NMS 之后每张图像保留的最大预测数
eval_max_detCOCO 评估器的上限。不设置时采用 pycocotools 的 AP@100 惯例
faster_coco_evaltrue装了 faster-coco-eval 时用它的 C++ 后端算 COCO 指标;否则回退到 pycocotools
halffalseFP16 推理
amp_dtypefloat16half=true 时 CUDA autocast 的数据类型:float16bfloat16
save_jsonfalse保存 COCO 格式的 JSON 结果
save_plotsfalse保存验证图表:指标、各类别 AP、混淆矩阵、样本
workers4数据加载器的 worker 数
deviceauto设备
projectruns/val输出目录根路径
nameexp实验名称
exist_okfalse复用输出目录
allow_download_scriptsfalse允许数据集 YAML 的 download 块里内嵌 Python 代码
jsonfalse把 JSON 输出到 stdout
quietfalse屏蔽 stderr
verbosetrue详细输出
help_jsonfalse把命令 schema 以 JSON 打印出来并退出

示例

基础用法
libreyolo val model=LibreYOLO9s.pt data=coco8.yaml
图表与 COCO JSON
libreyolo 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=true
机器可读
libreyolo val model=LibreYOLO9s.pt data=coco8.yaml json=true quiet=true

说明

指标都有哪些

打印出来的指标集合跟着模型的任务走,JSON 输出用的是同一套键。

目标检测、分割和旋转框报告 mAP50mAP50_95precisionrecall。当一个 模型预测的输出不止一种时,按种类分组的指标会并排出现,分别是 box_metricsmask_metricsobb_metrics,每一组都带着同样这四个键。

分类报告 accuracy_top1accuracy_top5。点检测报告 precisionrecallf1MLEMAERMSEmAP_sweep。深度估计报告 abs_relrmsedelta1delta2delta3。语义分割报告 mIoUpixel_accuracy。图像 复原(restoration)报告 PSNRSSIM

JSON 结果里还带有 eval_backend,标明算出这些数字的 COCO 评估库和版本,这样比较 两次运行时就知道它们是不是由同一个后端打的分。

阈值

这里的默认值是评估的默认值,不是预测的默认值:conf0.001iou0.6, 而 libreyolo predict 用的是 0.250.45。把 conf 提高到适合显示的阈值会降低查全率,mAP 也跟着降低,这样得出的数字没法和公开发布的 数字相比。

imgsz 默认不设置,也就是用模型自身的输入尺寸。设置之后会按给定的尺寸评估,这就是 在原生分辨率之外衡量一个检查点的方式。

会自行下载的数据集

如果数据集 YAML 的 download 字段是一个 URL,首次使用时就会直接下载,不需要额外 确认。如果带的是内嵌的 Python 下载脚本,就需要 allow_download_scripts=true,命令 会在 stderr 上警告本地代码执行已被启用。自带的 coco8.yamlcoco128.yaml 走的 是 URL,所以什么都不用加。

输出与退出码

指标走 stdout,进度走 stderr。json=true 会打印一个带 schema_version 的对象, quiet=true 会让 stderr 安静下来。

退出码在成功时是 0,用法或配置错误是 2,找不到数据集是 3,模型加载不了是 4,其他运行时失败是 1

相关:libreyolo train,它会通过 eval_interval 按自己的节奏 运行同样这套评估。

已针对 LibreYOLO v1.5.0 验证。