Развёртывание YOLO26 на мобильных и периферийных устройствах с ExecuTorch#
Развёртывание моделей компьютерного зрения на периферийных устройствах, таких как смартфоны, планшеты и встраиваемые системы, требует оптимизированной среды выполнения, которая обеспечивает баланс между производительностью и ограниченными ресурсами. ExecuTorch, решение PyTorch для периферийных вычислений, обеспечивает эффективный вывод моделей Ultralytics YOLO непосредственно на устройстве.
В этом руководстве описывается экспорт моделей Ultralytics YOLO в формат ExecuTorch, который позволяет развёртывать модели на мобильных и периферийных устройствах с оптимизированной производительностью.
Зачем экспортировать в ExecuTorch?#
ExecuTorch — комплексное решение PyTorch для реализации возможностей вывода непосредственно на устройстве на мобильных и периферийных устройствах. ExecuTorch создан с учётом портативности и эффективности и позволяет запускать программы PyTorch на широком спектре вычислительных платформ.
Ключевые возможности ExecuTorch#
ExecuTorch предоставляет несколько мощных возможностей для развёртывания моделей Ultralytics YOLO на периферийных устройствах:
-
Портативный формат модели: ExecuTorch использует формат
.pte(PyTorch ExecuTorch), оптимизированный по размеру и скорости загрузки для устройств с ограниченными ресурсами. -
Бэкенд XNNPACK: интеграция с XNNPACK по умолчанию обеспечивает высокооптимизированный вывод на мобильных CPU и высокую производительность без специализированного оборудования.
-
Готовность к квантованию: экосистема ExecuTorch поддерживает методы квантования для уменьшения размера модели и повышения скорости вывода; в настоящее время Ultralytics экспортирует модели FP32 через бэкенд XNNPACK.
-
Эффективное использование памяти: оптимизированное управление памятью уменьшает объём памяти, используемый во время выполнения, что делает решение подходящим для устройств с ограниченным объёмом RAM.
-
Метаданные модели: экспортированные модели содержат метаданные (размер изображения, названия классов и т. д.) в отдельном YAML-файле для удобной интеграции.
Варианты развёртывания с ExecuTorch#
Модели ExecuTorch можно развёртывать на различных периферийных и мобильных платформах:
-
Мобильные приложения: развёртывание в приложениях для iOS и Android с нативной производительностью, обеспечивающее обнаружение объектов в реальном времени в мобильных приложениях.
-
Встраиваемые системы: запуск на устройствах со встраиваемым Linux, таких как Raspberry Pi, NVIDIA Jetson и другие системы на базе ARM, с оптимизированной производительностью.
-
Периферийные устройства AI: развёртывание на специализированном оборудовании для периферийного AI с пользовательскими делегатами для ускоренного вывода.
-
Устройства IoT: интеграция в устройства IoT для выполнения вывода непосредственно на устройстве без необходимости подключения к облаку.
Поддерживаемые задачи#
Экспорт ExecuTorch поддерживает все семь задач Ultralytics. Семантическая сегментация и оценка глубины доступны только в YOLO26 — единственном семействе, поставляемом с этими головами.
| Задача | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Детекция | ✅ | ✅ | ✅ |
| Сегментация | ✅ | ✅ | ✅ |
| Семантическая сегментация | ❌ | ❌ | ✅ |
| Оценка глубины | ❌ | ❌ | ✅ |
| Классификация | ✅ | ✅ | ✅ |
| Поза | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Экспорт моделей Ultralytics YOLO26 в ExecuTorch#
Преобразование моделей Ultralytics YOLO26 в формат ExecuTorch обеспечивает эффективное развёртывание на мобильных и периферийных устройствах.
Установка#
Для экспорта в ExecuTorch требуются Python 3.10-3.13 и PyTorch >= 2.9.0. Ultralytics устанавливает совместимый пакет executorch при экспорте или загрузке модели ExecuTorch с жесткой привязкой к executorch<1.5 на версиях PyTorch старше 2.13, поэтому не обновляй его вручную.
# Install Ultralytics package
pip install ultralyticsПодробные инструкции и рекомендации по процессу установки см. в нашем руководстве по установке YOLO26. Если при установке необходимых пакетов для YOLO26 возникнут трудности, обратитесь к нашему руководству по распространённым проблемам, где приведены решения и советы.
Использование#
Экспорт моделей YOLO26 в ExecuTorch выполняется просто:
Формат ExecuTorch поддерживает режимы Export, Predict и Validate. Экспортируй модель, затем загрузи экспортированную модель, чтобы выполнить вывод или проверить её точность.
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to ExecuTorch format
model.export(format="executorch") # creates 'yolo26n_executorch_model'from ultralytics import YOLO
# Load the exported ExecuTorch model
model = YOLO("yolo26n_executorch_model")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported ExecuTorch model
model = YOLO("yolo26n_executorch_model")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")При экспорте в ExecuTorch создаётся каталог, содержащий файл .pte и метаданные. Используй среду выполнения ExecuTorch в мобильном или встраиваемом приложении, чтобы загрузить модель .pte и выполнить вывод.
Аргументы экспорта#
При экспорте в формат ExecuTorch можно указать следующие аргументы:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
format | str | 'executorch' | Целевой формат экспортированной модели, определяющий совместимость с различными средами развёртывания. |
imgsz | int или tuple | 640 | Требуемый размер изображения для входных данных модели. Может быть целым числом для квадратных изображений или кортежем (height, width) для указания конкретных размеров. |
quantize | int или str | None | Фиксированный экспорт FP32. Экспорт ExecuTorch не поддерживает преобразование точности FP16, INT8 или W8A16 во время экспорта. |
batch | int | 1 | Задаёт размер пакета при инференсе экспортированной модели или максимальное количество изображений, которые экспортированная модель будет обрабатывать одновременно в режиме predict. |
device | str | None | Указывает устройство для экспорта: GPU (device=0), CPU (device=cpu), MPS для Apple silicon (device=mps). |
Структура выходных данных#
При экспорте в ExecuTorch создаётся каталог, содержащий модель и метаданные:
yolo26n_executorch_model/
├── model.pte # ExecuTorch model file
└── metadata.yaml # Model metadata (classes, image size, etc.)Использование экспортированных моделей ExecuTorch#
После экспорта модели тебе потребуется интегрировать её в целевое приложение с помощью среды выполнения ExecuTorch.
Мобильная интеграция#
Для мобильных приложений (iOS/Android) тебе потребуется:
- Добавить среду выполнения ExecuTorch: подключить библиотеку среды выполнения ExecuTorch к мобильному проекту
- Загрузить модель: загрузить файл
.pteв приложение - Выполнить вывод: обработать изображения и получить предсказания
iOS#
Пример интеграции с iOS (Objective-C/C++):
// iOS uses C++ APIs for model loading and inference
// See https://pytorch.org/executorch/stable/using-executorch-ios.html for complete examples
#include <executorch/extension/module/module.h>
using namespace ::executorch::extension;
// Load the model
Module module("/path/to/model.pte");
// Create input tensor
float input[1 * 3 * 640 * 640];
auto tensor = from_blob(input, {1, 3, 640, 640});
// Run inference
const auto result = module.forward(tensor);Android#
Добавь ExecuTorch Android AAR из Maven Central:
dependencies {
implementation("org.pytorch:executorch-android:<version>")
}Пример интеграции с Android (Kotlin):
import org.pytorch.executorch.EValue
import org.pytorch.executorch.Module
import org.pytorch.executorch.Tensor
// Load the model
val module = Module.load("/path/to/model.pte")
// Prepare input tensor
val inputTensor = Tensor.fromBlob(floatData, longArrayOf(1, 3, 640, 640))
val inputEValue = EValue.from(inputTensor)
// Run inference
val outputs = module.forward(inputEValue)
val scores = outputs[0].toTensor().dataAsFloatArrayВстраиваемый Linux#
Для систем со встраиваемым Linux используй C++ API ExecuTorch:
#include <executorch/extension/module/module.h>
#include <executorch/extension/tensor/tensor.h>
using namespace ::executorch::extension;
// Load model
Module module("model.pte");
// Prepare input
std::vector<float> input_data = preprocessImage(image);
auto input_tensor = from_blob(input_data.data(), {1, 3, 640, 640});
// Run inference
const auto outputs = module.forward(input_tensor);Подробнее об интеграции ExecuTorch в приложения см. в документации ExecuTorch.
Оптимизация производительности#
Оптимизация размера модели#
Чтобы уменьшить размер модели для развёртывания:
- Используй модели меньшего размера: начни с YOLO26n (nano), чтобы минимизировать занимаемое пространство
- Уменьши разрешение входных данных: используй изображения меньшего размера (например,
imgsz=320илиimgsz=416) - Квантование: применяй методы квантования (поддержка появится в будущих версиях ExecuTorch)
Оптимизация скорости вывода#
Для ускорения вывода:
- Бэкенд XNNPACK: бэкенд XNNPACK по умолчанию обеспечивает оптимизированный вывод на CPU
- Аппаратное ускорение: используй платформенные делегаты (например, CoreML для iOS)
- Пакетная обработка: обрабатывай несколько изображений, когда это возможно
Бенчмарки#
Команда Ultralytics протестировала модели YOLO26, сравнив скорость и точность в PyTorch и ExecuTorch.
| Модель | Формат | Статус | Размер (МБ) | metrics/mAP50-95(B) | Время инференции (мс/изображение) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.4790 | 314.80 |
| YOLO26n | ExecuTorch | ✅ | 9.4 | 0.4800 | 142 |
| YOLO26s | PyTorch | ✅ | 19.5 | 0.5730 | 930.90 |
| YOLO26s | ExecuTorch | ✅ | 36.5 | 0.5780 | 376.1 |
Время инференции не включает предварительную и последующую обработку.
Устранение неполадок#
Распространённые проблемы#
Проблема: Python version error
Решение: ExecuTorch требует Python с версии 3.10 по 3.13. Создай окружение с поддерживаемой версией:
# Using conda
conda create -n executorch python=3.10
conda activate executorchДополнительную помощь в устранении неполадок см. в разделе проблем Ultralytics на GitHub или в документации ExecuTorch.
Итоги#
Экспорт моделей YOLO26 в формат ExecuTorch обеспечивает эффективное развёртывание на мобильных и периферийных устройствах. Благодаря нативной интеграции с PyTorch, кроссплатформенной поддержке и оптимизированной производительности ExecuTorch отлично подходит для периферийных AI-приложений.
Основные выводы:
- ExecuTorch обеспечивает развёртывание на периферийных устройствах с нативной поддержкой PyTorch и отличной производительностью
- Экспорт выполняется просто с параметром
format='executorch' - Модели оптимизированы для мобильных CPU с помощью бэкенда XNNPACK
- Поддерживаются платформы iOS, Android и встраиваемый Linux
- Требуются Python 3.10–3.13 и PyTorch >= 2.9.0
Часто задаваемые вопросы#
Экспортируй модель YOLO26 в ExecuTorch с помощью Python или CLI:
from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="executorch")или
yolo export model=yolo26n.pt format=executorchДля экспорта в ExecuTorch требуются:
- Python с версии 3.10 по 3.13
- Пакет
executorch, устанавливаемый автоматически (executorch<1.5на версиях PyTorch старше 2.13, которые не поддерживаются более новыми средами выполнения ExecuTorch) - PyTorch (устанавливается автоматически вместе с ultralytics)
Примечание: пакет
executorchпоставляется с предварительно собранными колёсами (с бэкендом XNNPACK), поэтому во время экспорта дополнительная компиляция не требуется.Модели ExecuTorch можно напрямую загружать с помощью
YOLO()для вывода и валидации в Python (см. приведённые выше примеры Predict/Validate), а также развёртывать на мобильных и периферийных устройствах с использованием библиотек среды выполнения ExecuTorch.ExecuTorch поддерживает:
- Мобильные устройства: iOS и Android
- Встраиваемый Linux: Raspberry Pi, NVIDIA Jetson и другие устройства ARM
- Настольные системы: Linux, macOS и Windows (для разработки)
И ExecuTorch, и LiteRT отлично подходят для мобильного развёртывания:
- ExecuTorch: лучшая интеграция с PyTorch, нативный рабочий процесс PyTorch, развивающаяся экосистема
- LiteRT: более зрелое решение, более широкая поддержка оборудования, больше примеров развёртывания и запуск одной и той же модели на Android, iOS и в браузере
Выбирай ExecuTorch, если уже используешь PyTorch и хочешь нативный путь развёртывания. Выбирай LiteRT для максимальной совместимости и зрелых инструментов.
Да! ExecuTorch поддерживает аппаратное ускорение через различные бэкенды:
- Мобильный GPU: через делегаты Vulkan, Metal или OpenCL
- NPU/DSP: через платформенные делегаты
- По умолчанию: XNNPACK для оптимизированного вывода на CPU
Настройки для конкретных бэкендов см. в документации ExecuTorch.