使用 Ultralytics YOLO 进行模型基准测试#
基准测试可视化#
简介#
模型经过训练和验证后,接下来的逻辑步骤是在各种真实场景中评估其性能。Ultralytics YOLO26 中的基准测试模式通过提供一个强大的框架来满足这一需求,用于评估模型在一系列导出格式上的速度和精度。
查看unreleased YOLO27 preview以获取初步的速度基准测试。
Watch: Benchmark Ultralytics YOLO26 Models | How to Compare Model Performance on Different Hardware?
为什么基准测试至关重要?#
- **明智决策:**深入了解速度与精度之间的权衡。
- **资源分配:**了解不同导出格式在不同硬件上的性能表现。
- **优化:**了解哪种导出格式能为你的特定用例提供最佳性能。
- **成本效率:**根据基准测试结果更高效地利用硬件资源。
基准测试模式中的关键指标#
支持的导出格式#
- **ONNX:**用于实现最佳 CPU 性能
- **TensorRT:**用于实现最大的 GPU 效率
- **OpenVINO:**用于 Intel 硬件优化
- **CoreML、TensorFlow SavedModel 及更多:**满足多样化的部署需求。
- 导出为 ONNX 或 OpenVINO 可获得高达 3 倍的 CPU 速度提升。
- 导出为 TensorRT 可获得高达 5 倍的 GPU 速度提升。
使用示例#
在进行基准测试之前,请安装带有导出依赖项的 Ultralytics,以避免缺少软件包。
pip install ultralytics[export]在所有支持的导出格式(ONNX、TensorRT 等)上运行 YOLO26n 基准测试。有关导出选项的完整列表,请参阅下面的参数部分。
from ultralytics.utils.benchmarks import benchmark
# Benchmark on GPU
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)
# Benchmark specific export format
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, format="onnx")参数#
诸如 model、data、imgsz、quantize、device、verbose 和 format 等参数使用户能够灵活地根据其特定需求微调基准测试,并轻松比较不同导出格式的性能。
| 键 | 默认值 | 描述 |
|---|---|---|
model | None | 指定模型文件的路径。接受 .pt 和 .yaml 格式,例如用于预训练模型或配置文件时使用 "yolo26n.pt"。 |
data | None | 用于基准测试的数据集 YAML 路径,通常包含验证数据的路径和设置。示例:"coco8.yaml"。分类任务则改为接受数据集目录或内置数据集名称(例如 imagenet10)。 |
imgsz | 640 | 模型的输入图像尺寸。对于正方形图像,必须是单个整数(例如 640);benchmark() 仅支持正方形图像尺寸。 |
quantize | None | 请求的精度:16(FP16)或 8(INT8;PTQ 方案需要校准 data/fraction,仅权重方案则不需要);32/未设置时,在格式支持的情况下为 FP32 — 无法导出 FP32 的格式会拒绝显式的 32 或回退到其所需的精度。原生 PyTorch 行不会导出:只有 16 会影响它并选择 FP16 推理,而 8、32 和未设置状态则运行 FP32。然后,每种格式在其自身的运行时精度下运行推理。替换了已弃用的 half/int8 标志。 |
device | 'cpu' | 定义用于基准测试的计算设备,例如 "cpu" 或 "cuda:0"。 |
verbose | False | 控制日志输出的详细程度。设置为 verbose=True 以获取详细日志。 |
eps | 0.001 | 在将每张图像的推理时间转换为 FPS 之前,添加到该时间中的极小 epsilon(毫秒),以防止除以零。极少需要更改。 |
format | '' | 仅对指定的导出格式进行基准测试(例如 format=onnx)。留空则自动测试所有支持的格式。 |
独立的 benchmark() 函数(from ultralytics.utils.benchmarks import benchmark)使用其自身的签名默认值,而不是上面的表格值,特别是 model="yolo26n.pt" 和 imgsz=160;显式传递 imgsz 以匹配 yolo benchmark 命令行界面(CLI)。
导出格式#
基准测试将尝试在下面列出的所有可能导出格式上自动运行。或者,你也可以使用 format 参数运行特定格式的基准测试,该参数接受下面提到的任何格式。
| 格式 | format 参数 | 模型 | 元数据 | 参数 |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz、quantize、dynamic、nms、batch、device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz、quantize、dynamic、simplify、opset、nms、batch、data、fraction、device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz、quantize、dynamic、nms、batch、data、fraction、device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz、quantize、dynamic、simplify、opset、workspace、nms、batch、data、fraction、device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz、dynamic、quantize、nms、batch、device |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz、keras、quantize、opset、nms、batch、data、fraction、device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz、opset、batch、device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz、quantize、opset、data、fraction、device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz、batch、device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz、batch、dynamic、quantize、simplify、opset、nms、device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz、quantize、batch、device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz、quantize、data、fraction、nms、device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz、batch、name、quantize、simplify、opset、data、fraction、device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz、batch、device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz、batch、quantize、data、fraction、device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz、quantize、simplify、opset、data、optimize、device |
| Qualcomm QNN | qnn | yolo26n_qnn.onnx | ✅ | imgsz、batch、name、quantize、simplify、opset、data、fraction、device |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz、quantize、batch、data、fraction、device |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz、name、quantize、data、fraction、simplify、conf、iou |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz、batch、name、quantize、opset、simplify、nms |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz、batch、quantize |
nms=None 默认对外部 NMS 使用原始输出。设置 nms=False 以选择可用的无 NMS 检测头;不支持的格式将回退到其本机输出路径。上面的 nms 条目标识了可以通过 nms=True 嵌入 NMS 的格式。
请在导出页面查看完整的 export 详情。
常见问题#
Ultralytics YOLO26 提供了一个基准测试模式,用于评估你的模型在不同导出格式下的性能。此模式提供了对关键指标的深入了解,例如平均准确率均值(mAP50-95)、准确率和以毫秒为单位的推理时间。要运行基准测试,你可以使用 Python 或 CLI 命令。例如,要在 GPU 上进行基准测试:
示例from ultralytics.utils.benchmarks import benchmark # Benchmark on GPU benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)有关基准测试参数的更多详细信息,请访问参数部分。
对 YOLO26 模型进行基准测试至关重要,原因如下:
- **明智决策:**了解速度与精度之间的权衡。
- **资源分配:**评估不同硬件选项下的性能。
- **优化:**确定哪种导出格式为特定用例提供最佳性能。
- **成本效率:**根据基准测试结果优化硬件使用。
mAP50-95、Top-1 准确率和推理时间等关键指标有助于进行这些评估。有关更多信息,请参考关键指标部分。
YOLO26 支持多种导出格式,每种格式都专为特定的硬件和用例而量身定制:
- **ONNX:**最适合 CPU 性能。
- **TensorRT:**非常适合 GPU 效率。
- **OpenVINO:**针对 Intel 硬件进行了优化。
- **CoreML 与 TensorFlow:**适用于 iOS 和通用机器学习应用。
有关支持的格式及其各自优势的完整列表,请查看支持的导出格式部分。
在运行基准测试时,可以自定义几个参数以满足特定需求:
- **model:**模型文件的路径(例如“yolo26n.pt”)。
- **data:**数据集 YAML 的路径(例如
"coco8.yaml");分类任务则改为接受数据集目录或内置数据集名称(例如imagenet10)。 - **imgsz:**作为单个整数的正方形输入图像尺寸,例如
640。为了公平比较,基准测试模式在 PyTorch 和导出的格式中使用相同的正方形图像尺寸。 - **quantize:**请求的精度:
16表示 FP16,8表示 INT8(对边缘设备有用);32/未设置时,在格式支持的情况下为 FP32 — 无法导出 FP32 的格式会拒绝显式的32或回退到其所需的精度。原生 PyTorch 行不会导出:只有16会影响它并选择 FP16 推理,而8、32和未设置状态则运行 FP32。然后,每种格式在其自身的运行时精度下运行推理。 - **device:**指定计算设备(例如“cpu”、“cuda:0”)。
- **verbose:**控制日志记录的详细程度。
有关参数的完整列表,请参考参数部分。