Развёртывание 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.
-
Эффективное использование памяти: оптимизированное управление памятью уменьшает объём памяти, необходимый во время выполнения, поэтому ExecuTorch подходит для устройств с ограниченным объёмом RAM.
-
Метаданные модели: экспортированные модели содержат метаданные (размер изображения, названия классов и т. д.) в отдельном файле YAML, что упрощает интеграцию.
Варианты развёртывания с ExecuTorch#
Модели ExecuTorch можно развёртывать на различных мобильных и периферийных платформах:
-
Мобильные приложения: развёртывай модели в приложениях для iOS и Android с нативной производительностью, чтобы обнаруживать объекты в режиме реального времени.
-
Встроенные системы: запускай модели на устройствах со встроенной ОС Linux, например Raspberry Pi и NVIDIA Jetson, а также на других системах на базе ARM с оптимизированной производительностью.
-
Устройства периферийного ИИ: развёртывай модели на специализированном оборудовании для периферийного ИИ, используя пользовательские делегаты для ускорения инференса.
-
Устройства IoT: интегрируй модели в устройства IoT для выполнения инференса непосредственно на устройстве без подключения к облаку.
Поддерживаемые задачи#
Экспорт в ExecuTorch поддерживает все семь задач Ultralytics. Семантическая сегментация и оценка глубины доступны только в YOLO26 — единственном семействе, в котором предусмотрены соответствующие выходные слои.
| Задача | YOLOv8 | YOLO11 | YOLO26 |
|---|---|---|---|
| Обнаружение | ✅ | ✅ | ✅ |
| Сегментация | ✅ | ✅ | ✅ |
| Семантическая сегментация | ❌ | ❌ | ✅ |
| Глубина | ❌ | ❌ | ✅ |
| Классификация | ✅ | ✅ | ✅ |
| Оценка позы | ✅ | ✅ | ✅ |
| OBB | ✅ | ✅ | ✅ |
Экспорт моделей Ultralytics YOLO26 в ExecuTorch#
Преобразование моделей Ultralytics YOLO26 в формат ExecuTorch позволяет эффективно развёртывать их на мобильных и периферийных устройствах.
Установка#
Для экспорта ExecuTorch требуется Python 3.10–3.14 и PyTorch >= 2.9.0. При экспорте или загрузке модели ExecuTorch Ultralytics устанавливает совместимый пакет executorch; в PyTorch версий ниже 2.13 используется версия executorch<1.5, поэтому не обновляй пакет вручную.
# Install Ultralytics package
pip install ultralyticsПодробные инструкции и рекомендации по установке смотри в нашем руководстве по установке YOLO26. Если при установке необходимых пакетов для YOLO26 возникнут трудности, решения и полезные советы найдёшь в нашем руководстве по распространённым проблемам.
Использование#
Экспорт моделей YOLO26 в ExecuTorch — простая задача:
Формат ExecuTorch поддерживает режимы экспорта, предсказания и валидации. Экспортируй модель, а затем загрузи её, чтобы выполнить инференс или проверить точность.
from ultralytics import YOLO
# Загрузи модель YOLO26
model = YOLO("yolo26n.pt")
# Экспортируй модель в формат ExecuTorch
model.export(format="executorch") # creates 'yolo26n_executorch_model'from ultralytics import YOLO
# Загрузи экспортированную модель ExecuTorch
model = YOLO("yolo26n_executorch_model")
# Выполнить инференс
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Загрузи экспортированную модель ExecuTorch
model = YOLO("yolo26n_executorch_model")
# Проверить точность на наборе данных COCO8
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#
Добавь AAR ExecuTorch для Android из 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 используй API ExecuTorch для C++:
#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 вне Ultralytics (экспорт Ultralytics в ExecuTorch поддерживает только FP32)
Оптимизация скорости инференса#
Чтобы ускорить инференс:
- Бэкенд 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.14. Создай окружение с поддерживаемой версией:
# Using conda
conda create -n executorch python=3.14
conda activate executorchДополнительные советы по устранению неполадок см. в обсуждениях Ultralytics на GitHub или в документации ExecuTorch.
Итоги#
Экспорт моделей YOLO26 в формат ExecuTorch позволяет эффективно развертывать их на мобильных и периферийных устройствах. Благодаря интеграции с PyTorch, поддержке нескольких платформ и высокой производительности ExecuTorch отлично подходит для периферийных приложений ИИ.
Основные выводы:
- ExecuTorch обеспечивает развертывание на периферийных устройствах с нативной поддержкой PyTorch и высокой производительностью
- Экспорт выполняется просто с параметром
format='executorch' - Модели оптимизированы для мобильных CPU с помощью бэкенда XNNPACK
- Поддерживаются платформы iOS, Android и встраиваемый Linux
- Требуются Python 3.10–3.14 и 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.14
- пакет
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.