Развертывание YOLO26 на мобильных устройствах и Edge с использованием 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, с оптимизированной производительностью.
-
Edge AI устройства: Развертывай на специализированном аппаратном обеспечении Edge AI с использованием пользовательских делегатов для ускоренного вывода.
-
IoT устройства: Интегрируй в устройства IoT для вывода непосредственно на устройстве без необходимости подключения к облаку.
Поддерживаемые задачи#
Экспорт ExecuTorch поддерживает все семь задач Ultralytics. Семантическая сегментация и оценка глубины доступны только с YOLO26 — единственным семейством, в котором есть эти головы.
Экспорт моделей Ultralytics YOLO26 в ExecuTorch#
Преобразование моделей Ultralytics YOLO26 в формат ExecuTorch позволяет эффективно развертывать их на мобильных и пограничных устройствах.
Установка#
Для экспорта в ExecuTorch требуются Python 3.10-3.13 и PyTorch >= 2.9.0, а также пакет executorch:
# 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 (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 (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().dataAsFloatArrayEmbedded Linux#
Для систем на базе Embedded 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.
| Модель | Формат | Статус | Размер (МБ) | метрики/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 или выше. Обнови свою установку Python:
# Using conda
conda create -n executorch python=3.10
conda activate executorchПроблема: Export fails during first run
Решение: Убедись, что у тебя установлен последний предварительно собранный wheel-пакет executorch:
pip install --upgrade executorchПроблема: Import errors for ExecuTorch modules
Решение: Убедись, что ExecuTorch установлен правильно:
pip install executorch --force-reinstallЗа дополнительной помощью по устранению неполадок обращайся к issues на GitHub Ultralytics или в документацию ExecuTorch.
Резюме#
Экспорт моделей YOLO26 в формат ExecuTorch обеспечивает эффективное развертывание на мобильных и пограничных устройствах. Благодаря нативной интеграции с PyTorch, кроссплатформенной поддержке и оптимизированной производительности, ExecuTorch является отличным выбором для приложений Edge AI.
Основные выводы:
- ExecuTorch предоставляет нативное для PyTorch развертывание на пограничных устройствах с отличной производительностью
- Экспорт выполняется просто с параметром
format='executorch' - Модели оптимизированы для мобильных CPU через бэкенд XNNPACK
- Поддерживает платформы iOS, Android и Embedded Linux
- Требует Python 3.10-3.13 и PyTorch >= 2.9.0
FAQ#
Экспортируй модель 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 или выше
- пакет
executorch(установка черезpip install executorch) - PyTorch (устанавливается автоматически вместе с ultralytics)
Примечание: Пакет
executorchпоставляется с предварительно собранными wheel-файлами (с бэкендом XNNPACK), поэтому на этапе экспорта не требуется выполнять дополнительную компиляцию.Модели ExecuTorch можно загружать напрямую с помощью
YOLO()для инференса и валидации на Python (смотри примеры Predict/Validate выше), а также развертывать на мобильных и периферийных устройствах с использованием библиотек среды выполнения ExecuTorch.ExecuTorch поддерживает:
- Mobile: iOS и Android
- Embedded Linux: Raspberry Pi, NVIDIA Jetson и другие устройства ARM
- Desktop: Linux, macOS и Windows (для разработки)
Как ExecuTorch, так и LiteRT отлично подходят для мобильного развертывания:
- ExecuTorch: лучшая интеграция с PyTorch, нативный рабочий процесс PyTorch, растущая экосистема
- LiteRT: более зрелое решение, более широкая поддержка оборудования, больше примеров развертывания, а также возможность запуска одной и той же модели на Android, iOS и в браузере.
Выбирай ExecuTorch, если ты уже используешь PyTorch и тебе нужен путь для нативного развертывания. Выбирай LiteRT для обеспечения максимальной совместимости и использования зрелого инструментария.
Да! ExecuTorch поддерживает аппаратное ускорение через различные бэкенды:
- Mobile GPU: через делегаты Vulkan, Metal или OpenCL
- NPU/DSP: через платформозависимые делегаты
- Default: XNNPACK для оптимизированного вывода на CPU
Обратись к документации ExecuTorch для настройки конкретного бэкенда.