Сравнение производительности моделей с Ultralytics YOLO#
Визуализация результатов сравнения#
Введение#
После обучения и валидации модели следующий логичный шаг — оценить её производительность в различных реальных сценариях. Режим Benchmark в Ultralytics YOLO26 помогает в этом, предоставляя надёжную основу для оценки скорости и точности модели в различных форматах экспорта.
Предварительные результаты измерения скорости смотри в превью YOLO27, ещё не выпущенном официально.
Смотри: Сравнение моделей Ultralytics YOLO26: как оценить производительность моделей на разном оборудовании?
Зачем нужно сравнивать производительность?#
- Обоснованные решения: понимай компромисс между скоростью и точностью.
- Распределение ресурсов: выясни, как различные форматы экспорта работают на разном оборудовании.
- Оптимизация: узнай, какой формат экспорта обеспечивает лучшую производительность для твоего конкретного сценария использования.
- Экономия средств: эффективнее используй аппаратные ресурсы на основе результатов сравнительного тестирования.
Ключевые метрики в режиме Benchmark#
- mAP50-95: для обнаружения объектов, сегментации экземпляров, оценки позы и OBB.
- mIoU: для семантической сегментации.
- delta1: для оценки глубины.
- 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
# Сравнительный тест на GPU
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)
# Сравнительный тест для определённого формата экспорта
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 | None | Задаёт устройство для вычислений во время сравнительного тестирования, например "cpu" или "cuda:0"; если значение не указано, используется первый доступный GPU, а при его отсутствии — CPU. |
verbose | False | Если значение равно True или является числом с плавающей точкой, ошибки сравнительного тестирования (кроме ошибок утверждений) вызывают исключение, а не записываются в журнал; число с плавающей точкой, например 0.25, также проверяет, что метрика каждого успешно протестированного формата выше этого порога. |
eps | 0.001 | Небольшое значение эпсилон (в миллисекундах), добавляемое ко времени инференса для каждого изображения перед преобразованием в FPS, чтобы избежать деления на ноль. Меняется редко. |
format | '' | Выполняет сравнительное тестирование только для указанного формата экспорта (например, format=onnx). Оставь поле пустым, чтобы автоматически проверить все поддерживаемые форматы. |
Автономная функция benchmark() (from ultralytics.utils.benchmarks import benchmark) использует собственные значения параметров по умолчанию, а не значения из таблицы выше; в частности, это касается model="yolo26n.pt", imgsz=160 и device="cpu". Явно передай imgsz и device, чтобы использовать те же значения, что и в CLI 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 |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, 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 |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz, quantize, batch, 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 |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None по умолчанию возвращает исходные выходные данные для внешней NMS. Укажи nms=False, чтобы выбрать доступную голову без NMS; неподдерживаемые форматы используют собственный путь вывода. Элементы nms выше обозначают форматы, в которые можно встроить NMS с помощью nms=True.
Полное описание export смотри на странице экспорта.
Часто задаваемые вопросы#
Ultralytics YOLO26 предлагает режим Benchmark для оценки производительности модели в различных форматах экспорта. В этом режиме можно анализировать ключевые метрики, например среднюю точность (mAP50-95), точность и время инференса в миллисекундах. Для запуска сравнительных тестов можно использовать команды Python или CLI. Например, чтобы выполнить тест на GPU:
Примерfrom ultralytics.utils.benchmarks import benchmark # Сравнительный тест на 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. В режиме Benchmark для объективного сравнения используется одинаковый размер квадратного изображения в PyTorch и экспортированных форматах. - quantize: запрашиваемая точность:
16для FP16,8для INT8 (подходит для периферийных устройств);32/отсутствие значения означает FP32, если формат его поддерживает. Если формат не позволяет экспортировать FP32, явное значение32вызовет ошибку либо будет заменено требуемой форматом точностью. Строка для нативного PyTorch не экспортируется: на неё влияет только16, включая инференс в FP16; значения8,32и отсутствие параметра означают запуск в FP32. Затем каждый формат выполняет инференс с собственной точностью среды выполнения. - device: укажи устройство для вычислений (например, «cpu», «cuda:0»).
- verbose: вызывать исключение при ошибках сравнительного тестирования вместо записи в журнал; если передать число с плавающей точкой, также потребуется, чтобы метрика каждого формата превышала это значение.
Полный список аргументов смотри в разделе «Аргументы».