Ultralytics YOLO27:
Get Started

使用 Ultralytics YOLO 验证模型#

Ultralytics YOLO ecosystem and integrations

简介#

验证是机器学习流程中的关键步骤,可用于评估训练模型的质量。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 多进程错误

在 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  # 包含精确率、召回率、F1、TP、FP 和 FN 的逐图像指标字典

YOLO 模型验证参数#

验证 YOLO 模型时,你可以微调多个参数来优化评估流程。这些参数控制输入图像尺寸、批处理和性能阈值等方面。下面详细介绍各个参数,帮助你有效自定义验证设置。

参数类型默认值说明
datastrNone指定数据集 YAML 文件的路径(例如 coco8.yaml),其中应包含验证数据的路径。分类任务则使用数据集目录或内置数据集名称(例如 imagenet10)。
imgszint640定义输入图像的尺寸。处理前会将所有图像调整为此尺寸。较大的尺寸可能提高小对象的检测准确率,但会增加计算时间。
batchint16设置每个批次的图像数量。较大的值能更高效地利用 GPU 内存,但需要更多 VRAM。请根据可用硬件资源进行调整。
save_jsonboolFalse如果 True,则将结果保存为 JSON 文件,以便进一步分析、与其他工具集成,或提交至 COCO 等评估服务器。对于检测数据集,还会使用 faster-coco-eval 评估预测结果,并报告小型、中型和大型对象的 mAP;训练期间会将这些指标记录为 metrics/mAP_small(B)、metrics/mAP_medium(B) 和 metrics/mAP_large(B),写入 results.csv。
conffloat0.001设置检测结果的最低置信度阈值。较低的值会提高召回率,但可能引入更多假阳性。精确率-召回率曲线、mAP 和检测混淆矩阵均使用此值;较高的 conf(例如 0.25)会使矩阵更接近预测输出,但可能降低 mAP。汇总精确率和召回率使用最大 F1 值对应的置信度,因此可能与根据 confusion_matrix.png 得出的值不同。OBB 验证的默认值为 0.01,以降低内存使用量。
ioufloat0.7设置用于非极大值抑制的交并比阈值。控制重复检测的消除。
max_detint300限制每张图像的最大检测数量。对于 detect、segment、pose 和 OBB,如果上限保持为 300,且某张图像中的标注对象数量超过该值,则会将上限提高到已验证数据划分中的最大标注对象数量,并发出警告。其他任何值都会保持不变;如果某张图像中的对象数量超过该值,则会发出召回率可能受限的警告。
quantizeint 或 strNone验证精度:16/"fp16" 和 32/"fp32"/unset 用于为 PyTorch 和 TorchScript 模型选择 FP16 或 FP32 计算(CPU 上为 FP32);其他格式使用其模型文件和运行时所选的精度。在 16 中,OpenVINO 仍会在客户端将输入舍入为 FP16,再扩展回 FP32,但不会更改运行时精度。INT8/PTQ 量化在导出期间配置,然后通过验证导出的模型来使用。此参数替代已弃用的 half 标志。
devicestrNone指定验证设备(cpu、cuda:0、npu、npu:0 等)。如果为 None,则自动选择最佳可用设备。可以用逗号分隔来指定多个 CUDA 设备。
dnnboolFalse如果 True,则使用 OpenCV DNN 模块执行 ONNX 模型推理,作为 PyTorch 推理方法的替代方案。
plotsboolTrue设为 True 时,会生成并保存预测结果与真实标注的对比图、混淆矩阵和 PR 曲线,以便直观评估模型性能。
classeslist[int]None指定要评估的类别 ID 列表。适用于在评估期间筛选并只关注某些类别。
rectboolTrue如果设置为 True,就会将宽高比相近的图像组成矩形批次。每个维度向上取整到步长的整数倍之前,会先增加半个步长(semantic 不会额外增加半个步长)。步长为 32 时,尺寸为 640×640 的图像在 imgsz=640 下会变为 672×672,并偏移 16 px;而预测使用 640×640,因此指标可能有所不同。对于正方形图像,rect=False 的结果与预测一致。depth 不适用此设置,因为它会将图像拉伸为 imgsz 正方形。
splitstr'val'决定验证时使用的数据集划分(val、test 或 train),便于灵活选择用于性能评估的数据部分。
fractionfloat、int 或 list1.0已验证数据划分的子集。使用 [train, val, test] 列表时,应用与 split 对应的条目(1 = 完整数据划分,大于 1 的整数 = 图像数量;省略的条目表示完整数据划分)。标量仅适用于 split=train;val 和 test 随后会使用完整数据划分。
projectstrNone保存验证输出的项目目录名称。便于整理不同实验或模型的结果。
namestrNone验证运行的名称。用于在项目文件夹中创建子目录,以存储验证日志和输出。
verboseboolTrue如果 True,则在验证过程中显示详细信息,包括每个类别的指标、批次进度和其他调试信息。
save_txtboolFalse如果 True,则将检测结果保存到文本文件中,每张图像对应一个文件,便于进一步分析、自定义后处理或与其他系统集成。
save_confboolFalse如果 True,且启用了 save_txt,则在保存的文本文件中包含置信度值,为分析和筛选提供更详细的输出。
workersint8用于加载数据的工作线程数。较大的值可以加快数据预处理,但可能增加 CPU 使用率。设置为 0 时使用主线程,在某些环境中会更稳定。
augmentboolFalse在验证期间启用测试时增强(TTA),通过对输入的变换版本运行推理,可能提高检测准确率,但会降低推理速度。仅适用于 Ultralytics PyTorch 模型。
agnostic_nmsboolFalse启用类别无关的非极大值抑制,无论预测类别为何,都会抑制得分较低且重叠的框。适用于以实例为中心的应用。对于无 NMS 推理(YOLO26 或 YOLOv10 上的 nms=False),此选项仅防止同一检测结果带有多个类别标签(IoU=1.0 的重复项),不会根据 IoU 阈值抑制不同的框。
single_clsboolFalse在验证期间将所有类别视为单个类别。适用于评估模型在二元检测任务上的性能,或类别区分不重要的情况。
visualizeboolFalse可视化每张图像的真实标注、真正例、假正例和假负例。适用于调试和模型解读。
show_labelsboolTrue当 visualize=True 时,在验证可视化中显示类别标签。设置为 False 可更清晰地查看匹配项和错误。
show_confboolTrue当 visualize=True 时,在验证可视化中显示置信度分数。设置为 False 可更清晰地查看匹配项和错误。
compilebool 或 strFalse使用backend='inductor'启用 PyTorch 2.x torch.compile图编译。接受True → "default"、False → 禁用,或"default"、"reduce-overhead"、"max-autotune-no-cudagraphs"等字符串模式。如果不受支持,则会发出警告并回退到即时执行模式。
channels_lastboolNone对原生 PyTorch 验证使用 channels_last(NHWC)内存格式。对于启用了 oneDNN 的 Linux 和 Windows x86 CPU,且 PyTorch 版本为 1.13 或更高版本时,None 会自动启用该格式;False 会禁用该格式;True 会在受支持的 x86 CPU 或 CUDA 设备上请求使用该格式。ARM64、MPS、较旧的 PyTorch 版本、未启用 oneDNN 的 CPU,以及导出格式均不受影响;训练期间的验证会保持训练模型的布局。
nmsbool,可选None默认使用 NMS 执行一对多推理(None 或 True)。设置 False 可在可用时使用无 NMS 的一对一检测头。详情请参阅端到端检测指南。

这些设置在验证过程中都发挥着重要作用,可让 YOLO 模型评估既灵活又高效。根据具体需求和资源调整这些参数,有助于在准确率和性能之间取得最佳平衡。

使用参数进行验证的示例#



观看: 如何将模型验证结果导出为 CSV、JSON、SQL、Polars DataFrame 等格式

Explore model validation and different export methods in Google Colab

以下示例展示了如何在 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

你也可以使用提供的代码,以不同格式保存 ConfusionMatrix 结果。

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
逐图像精确率、召回率和 F1

对于分类以外的所有任务,验证都会存储逐图像的精确率、召回率、F1、TP、FP 和 FN 指标(IoU 阈值为 0.5)。验证完成后,对于检测和 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图像的精确率得分(tp / (tp + fp))。
recall图像的召回率得分(tp / (tp + fn))。
f1精确率和召回率的调和平均值。
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(IoU 阈值从 0.5 到 0.95 时的平均精度均值)

    使用 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)  # 包含精确率、召回率、F1、TP、FP 和 FN 的逐图像指标字典

    要全面评估性能,务必查看所有这些指标。如需了解更多详情,请参阅Val 模式的主要功能。

  • 使用 Ultralytics YOLO 进行验证有以下几项优势:

    • 精确性: YOLO26 可提供准确的性能指标,包括 mAP50、mAP75 和 mAP50-95。
    • 便捷性: 模型会记住训练设置,让验证变得简单直接。
    • 灵活性: 你可以使用相同或不同的数据集和图像尺寸进行验证。
    • 超参数调优: 验证指标有助于微调模型,从而提升性能。

    这些优势可确保全面评估模型,并对模型进行优化以获得更出色的结果。要进一步了解这些优势,请参阅为什么使用 Ultralytics YOLO 进行验证部分。

  • 可以,你可以使用自定义数据集验证 YOLO26 模型。将 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-95

    CLI 示例:

    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 模型验证参数。

评论