使用 ExecuTorch 在移动和边缘设备上部署 YOLO11
在智能手机、平板电脑和嵌入式系统等边缘设备上部署计算机视觉模型需要一个优化的运行时,以平衡性能和资源限制。ExecuTorch,PyTorch 的边缘计算解决方案,为 Ultralytics YOLO 模型提供高效的设备上推理。
本指南概述了如何将Ultralytics YOLO模型导出为ExecuTorch格式,使您能够在移动和边缘设备上部署模型,并获得优化的性能。
为什么导出到ExecuTorch?

ExecuTorch 是 PyTorch 的端到端解决方案,用于在移动和边缘设备上实现设备上的推理能力。ExecuTorch 以可移植性和高效性为目标构建,可用于在各种计算平台上运行 PyTorch 程序。
ExecuTorch 的主要特性
ExecuTorch 提供多项强大功能,用于在边缘设备上部署 Ultralytics YOLO 模型:
可移植模型格式:ExecuTorch 使用
.pte(PyTorch ExecuTorch)格式,该格式针对资源受限设备上的大小和加载速度进行了优化。XNNPACK后端:默认集成XNNPACK可在移动CPU上提供高度优化的推理,无需专用硬件即可提供卓越性能。
量化支持:内置对量化技术的支持,以在保持精度的同时减小模型大小并提高推理速度。
内存效率:优化的内存管理减少了运行时内存占用,使其适用于 RAM 有限的设备。
模型元数据:导出的模型在一个单独的 yaml 文件中包含元数据(图像大小、类别名称等),便于集成。
使用ExecuTorch的部署选项
ExecuTorch 模型可以部署到各种边缘和移动平台:
移动应用: 在 iOS 和 Android 应用上部署,具有原生性能,从而在移动应用中实现实时目标 detect。
嵌入式系统: 运行在树莓派、NVIDIA Jetson及其他基于ARM的嵌入式Linux设备上,并具有优化性能。
边缘AI设备:部署在专用边缘AI硬件上,借助自定义委托以加速推理。
物联网设备:集成到物联网设备中,用于设备端推理,无需云连接。
将 Ultralytics YOLO11 模型导出到 ExecuTorch
将 Ultralytics YOLO11 模型转换为 ExecuTorch 格式,可实现在移动和边缘设备上的高效部署。
安装
ExecuTorch 导出需要 Python 3.10 或更高版本以及特定的依赖项:
安装
# Install Ultralytics package
pip install ultralytics
有关安装过程的详细说明和最佳实践,请查看我们的YOLO11安装指南。在为YOLO11安装所需软件包时,如果遇到任何困难,请查阅我们的常见问题指南,获取解决方案和技巧。
用法
将 YOLO11 模型导出到 ExecuTorch 非常简单:
用法
from ultralytics import YOLO
# Load the YOLO11 model
model = YOLO("yolo11n.pt")
# Export the model to ExecuTorch format
model.export(format="executorch") # creates 'yolo11n_executorch_model' directory
executorch_model = YOLO("yolo11n_executorch_model")
results = executorch_model.predict("https://ultralytics.com/images/bus.jpg")
# Export a YOLO11n PyTorch model to ExecuTorch format
yolo export model=yolo11n.pt format=executorch # creates 'yolo11n_executorch_model' directory
# Run inference with the exported model
yolo predict model=yolo11n_executorch_model source=https://ultralytics.com/images/bus.jpg
ExecuTorch 导出会生成一个目录,其中包含一个 .pte 文件和元数据。在您的移动或嵌入式应用程序中使用ExecuTorch运行时加载 .pte 模型并执行推理。
导出参数
导出为 ExecuTorch 格式时,您可以指定以下参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
imgsz | int 或 list | 640 | 模型输入的图像尺寸(高,宽) |
device | str | 'cpu' | 用于导出的设备 ('cpu') |
输出结构
ExecuTorch 导出会创建一个包含模型和元数据的目录:
yolo11n_executorch_model/
├── yolo11n.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/yolo11n.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/yolo11n.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 系统,请使用 ExecuTorch C++ API:
#include <executorch/extension/module/module.h>
// Load model
auto module = torch::executor::Module("yolo11n.pte");
// Prepare input
std::vector<float> input_data = preprocessImage(image);
auto input_tensor = torch::executor::Tensor(input_data, {1, 3, 640, 640});
// Run inference
auto outputs = module.forward({input_tensor});
有关将 ExecuTorch 集成到您的应用程序中的更多详细信息,请访问 ExecuTorch 文档。
性能优化
模型大小优化
为了减小模型部署的尺寸:
- 使用更小的模型: 从YOLO11n (nano) 开始,以获得最小的占用空间
- 降低输入分辨率:使用较小的图像尺寸(例如,
imgsz=320或imgsz=416) - 量化:应用量化技术(未来ExecuTorch版本将支持)
推理速度优化
为了更快的推理:
- XNNPACK后端:默认的XNNPACK后端提供优化的CPU推理。
- 硬件加速:使用平台特定的委托(例如,iOS 上的 CoreML)
- 批处理:尽可能处理多张图像
基准测试
Ultralytics 团队对 YOLO11 模型进行了基准测试,比较了 PyTorch 和 ExecuTorch 之间的速度和准确性。
性能
| 模型 | 格式 | 状态 | 大小 (MB) | 指标/mAP50-95(B) | 推理时间 (ms/im) |
|---|---|---|---|---|---|
| YOLO11n | PyTorch | ✅ | 5.4 | 0.5060 | 337.67 |
| YOLO11n | ExecuTorch | ✅ | 11 | 0.5080 | 167.28 |
| YOLO11s | PyTorch | ✅ | 19 | 0.5770 | 928.80 |
| YOLO11s | ExecuTorch | ✅ | 37 | 0.5780 | 388.31 |
注意
推理时间不包括预处理/后处理。
故障排除
常见问题
问题: 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
解决方案:ExecuTorch 在首次使用时可能需要下载和编译组件。请确保您已具备:
pip install --upgrade executorch
问题: Import errors for ExecuTorch modules
解决方案:确保 ExecuTorch 已正确安装:
pip install executorch --force-reinstall
如需更多故障排除帮助,请访问 Ultralytics GitHub 问题 或 ExecuTorch 文档。
总结
将 YOLO11 模型导出到 ExecuTorch 格式,可以在移动和边缘设备上实现高效部署。凭借 PyTorch 原生集成、跨平台支持和优化的性能,ExecuTorch 是边缘 AI 应用的绝佳选择。
主要收获:
- ExecuTorch 提供 PyTorch 原生边缘部署,具有出色的性能
- 导出操作简单,通过
format='executorch'参数 - 模型通过 XNNPACK 后端针对移动 CPU 进行了优化
- 支持 iOS、Android 和嵌入式 Linux 平台
- 需要Python 3.10+和FlatBuffers编译器
常见问题
如何将 YOLO11 模型导出为 ExecuTorch 格式?
使用 Python 或 CLI 将 YOLO11 模型导出到 ExecuTorch:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.export(format="executorch")
或
yolo export model=yolo11n.pt format=executorch
ExecuTorch导出的系统要求是什么?
ExecuTorch 导出需要:
- Python 3.10 或更高版本
executorch包(通过pip install executorch)- PyTorch(随 Ultralytics 自动安装)
注意:在首次导出期间,ExecuTorch 将自动下载并编译必要的组件,包括 FlatBuffers 编译器。
我可以直接在 Python 中使用 ExecuTorch 模型运行推理吗?
ExecuTorch 模型(.pte 文件)旨在利用 ExecuTorch 运行时部署到移动和边缘设备上。它们无法直接通过...加载 YOLO() 用于 python 中的推理。您需要使用 ExecuTorch 运行时库将它们集成到您的目标应用程序中。
ExecuTorch支持哪些平台?
ExecuTorch 支持:
- 移动:iOS 和 Android
- 嵌入式Linux: 树莓派、NVIDIA Jetson及其他ARM设备
- 桌面:Linux、macOS 和 Windows(用于开发)
ExecuTorch与TFLite在移动部署方面有何不同?
ExecuTorch 和 TFLite 都非常适合移动部署:
- ExecuTorch:更好的PyTorch集成,原生PyTorch工作流,不断发展的生态系统
- TFLite:更成熟,硬件支持更广泛,部署示例更多
如果您已经在使用PyTorch并希望获得原生部署路径,请选择ExecuTorch。选择TFLite以获得最大的兼容性和成熟的工具链。
我可以使用ExecuTorch模型进行GPU加速吗?
是的!ExecuTorch 通过各种后端支持硬件加速:
- 移动 GPU:通过 Vulkan、Metal 或 OpenCL 代理
- NPU/DSP:通过平台特定代理
- 默认: XNNPACK 用于优化的 CPU 推理
请参阅 ExecuTorch 文档 以获取后端特定的设置。