Тестирование производительности моделей с Ultralytics YOLO#
Визуализация результатов тестирования#
Введение#
После того как твоя модель обучена и прошла валидацию, следующим логичным шагом будет оценка её производительности в различных реальных сценариях. Режим тестирования в Ultralytics YOLO26 служит этой цели, предоставляя надёжный фреймворк для оценки скорости и точности твоей модели для различных форматов экспорта.
Смотри невыпущенный предварительный обзор YOLO27 для предварительных тестов скорости.
Watch: Benchmark Ultralytics YOLO26 Models | How to Compare Model Performance on Different Hardware?
Почему тестирование производительности имеет решающее значение?#
- Принятие обоснованных решений: Получи представление о компромиссах между скоростью и точностью.
- Распределение ресурсов: Узнай, как различные форматы экспорта работают на различном оборудовании.
- Оптимизация: Узнай, какой формат экспорта обеспечивает наилучшую производительность для твоего конкретного сценария использования.
- Экономическая эффективность: Эффективнее используй аппаратные ресурсы на основе результатов тестирования.
Ключевые метрики в режиме тестирования#
- mAP50-95: Для обнаружения объектов, сегментации и оценки поз.
- accuracy_top1: Для классификации изображений.
- Время инференса: Время, затрачиваемое на каждое изображение, в миллисекундах.
Поддерживаемые форматы экспорта#
- ONNX: Для оптимальной производительности CPU
- TensorRT: Для максимальной эффективности GPU
- OpenVINO: Для оптимизации под оборудование Intel
- CoreML, TensorFlow SavedModel и другие: Для разнообразных потребностей развертывания.
- Экспортируй в ONNX или OpenVINO для ускорения работы на CPU до 3 раз.
- Экспортируй в TensorRT для ускорения работы на GPU до 5 раз.
Примеры использования#
Установи 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, если формат его поддерживает. Формат, который не может экспортировать FP32, отклоняет явный 32 или возвращается к требуемой точности. Родная строка PyTorch не экспортируется: на нее влияет только 16, выбирающий инференс FP16, в то время как 8, 32 и значение по умолчанию выполняют инференс FP32. Каждый формат затем выполняет инференс с собственной точностью во время выполнения. Заменяет устаревшие флаги half/int8. |
device | 'cpu' | Определяет устройство (или устройства) вычислений для тестирования производительности, например "cpu" или "cuda:0". |
verbose | False | Управляет уровнем детализации вывода логов. Установи verbose=True для подробных логов. |
eps | 0.001 | Небольшое эпсилон-значение (в миллисекундах), добавляемое ко времени инференса для каждого изображения перед его конвертацией в FPS, что предотвращает деление на ноль. Изменяется редко. |
format | '' | Тестирует только указанный формат экспорта (например, format=onnx). Оставь это поле пустым для автоматического тестирования каждого поддерживаемого формата. |
Автономная функция benchmark() (from ultralytics.utils.benchmarks import benchmark) использует собственные значения по умолчанию вместо значений из таблицы выше, в частности model="yolo26n.pt" и imgsz=160; передай imgsz явно, чтобы соответствовать интерфейсу командной строки yolo benchmark.
Форматы экспорта#
Тесты попытаются запуститься автоматически для всех возможных форматов экспорта, перечисленных ниже. Альтернативно ты можешь запустить тесты для конкретного формата, используя аргумент 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 с помощью nms=True.
Полное описание export см. на странице Экспорт.
Часто задаваемые вопросы#
Ultralytics YOLO26 предлагает режим тестирования (Benchmark) для оценки производительности твоей модели в различных форматах экспорта. Этот режим дает представление о ключевых метриках, таких как средняя точность в диапазоне порогов IoU (mAP50-95), точность и время инференса в миллисекундах. Чтобы запустить тесты, ты можешь использовать команды Python или интерфейса командной строки. Например, для запуска тестов на GPU:
Примерfrom ultralytics.utils.benchmarks import benchmark # Benchmark on GPU benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)Для получения дополнительной информации об аргументах тестирования посети раздел Аргументы.
Экспорт моделей YOLO26 в различные форматы, такие как ONNX, TensorRT и OpenVINO, позволяет оптимизировать производительность в зависимости от твоей среды развертывания. Например:
- ONNX: Обеспечивает ускорение работы на CPU до 3 раз.
- TensorRT: Предлагает ускорение работы на GPU до 5 раз.
- OpenVINO: Специально оптимизирован для оборудования Intel.
Эти форматы повышают как скорость, так и точность твоих моделей, делая их более эффективными для различных реальных приложений. Посети страницу Экспорт для получения полной информации.
Тестирование производительности твоих моделей 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: Управляй уровнем детализации логов.
Полный список аргументов смотри в разделе Аргументы.