使用 Ultralytics YOLO 进行模型基准测试#
基准测试可视化#
由于潜在的 cookie 问题,你可能需要刷新页面才能正确查看图表。
简介#
当你的模型训练和验证完成后,合乎逻辑的下一步就是在各种现实场景中评估其性能。Ultralytics YOLO26 中的 Benchmark 模式为此提供了一个强大的框架,用于评估你的模型在各种导出格式下的速度和准确率。
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]运行 YOLO26n 在所有支持的导出格式(ONNX、TensorRT 等)上的基准测试。请查看下方的参数部分以获取完整的导出选项列表。
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。替换了已废弃的 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 |
查看完整的 export 详情,请访问 Export 页面。
常见问题解答#
Ultralytics YOLO26 提供了一个 Benchmark 模式,用于评估你的模型在不同导出格式下的性能。此模式可深入了解关键指标,例如平均精度均值(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 和通用 ML 应用。
有关支持的格式及其各自优势的完整列表,请查看支持的导出格式部分。
在运行基准测试时,可以自定义多个参数以满足特定需求:
- model: 模型文件的路径(例如 "yolo26n.pt")。
- **data:**数据集 YAML 的路径(例如
"coco8.yaml");分类任务则改为接收数据集目录或内置数据集名称(例如imagenet10)。 - **imgsz:**作为单个整数的正方形输入图像大小,例如
640。Benchmark 模式在 PyTorch 和导出的格式之间使用相同的正方形图像大小,以进行公平比较。 - **quantize:**量化精度:
16表示 FP16,8表示 INT8(对边缘设备有用);32/未设置表示 FP32。 - device: 指定计算设备(例如 "cpu", "cuda:0")。
- verbose: 控制日志记录的详细程度。
有关参数的完整列表,请参考参数部分。