使用 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 上提供高度优化的推理,无需专用硬件即可实现卓越性能。
-
量化支持:内置支持量化技术,以缩小模型大小,提高推理速度,同时保持准确性。
-
内存效率:优化的内存管理减少了运行时的内存占用,使其适用于内存有限的设备。
-
模型元数据:导出的模型在单独的 YAML 文件中包含元数据(图像大小、类名等),便于集成。
使用 ExecuTorch 的部署选项
ExecuTorch 模型可在各种边缘和移动平台上部署:
-
移动应用:在具有本地性能的iOS 和Android 应用程序上部署,实现移动应用程序中的实时对象检测。
-
嵌入式系统:在嵌入式 Linux 设备(如 Raspberry Pi、NVIDIA Jetson 和其他基于 ARM 的系统)上运行,并优化性能。
-
边缘人工智能设备:在专门的边缘人工智能硬件上部署,使用定制的委托器进行加速推理。
-
物联网设备:集成到物联网设备中,无需云连接即可进行设备推理。
将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 格式时,可以指定以下参数:
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
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 运行时将其集成到目标应用程序中。
移动集成
对于移动应用程序iOSAndroid),您需要
- 添加 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(纳米)开始
- 较低的输入分辨率:使用较小的图像尺寸(例如:、
imgsz=320
或imgsz=416
) - 量化:应用量化技术(未来的 ExecuTorch 版本将支持该技术)
推理速度优化
为了加快推理速度:
- XNNPACK 后端默认的 XNNPACK 后端提供优化的CPU 推理功能
- 硬件加速:使用特定平台的委托(如iOS 的CoreML
- 批量处理:尽可能处理多个图像
基准测试
Ultralytics 团队对YOLO11 模型进行了基准测试,比较了PyTorch 和 ExecuTorch 的速度和准确性。
性能
模型 | 格式 | 状态 | 大小 (MB) | metrics/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 安装:
```bash
# Using conda
conda create -n executorch python=3.10
conda activate executorch
```
问题: Export fails during first run
解决方案:第一次使用 ExecuTorch 时,可能需要下载和编译组件。确保您有
```bash
pip install --upgrade executorch
```
问题: Import errors for ExecuTorch modules
解决方案:确保 ExecuTorch 安装正确:
```bash
pip install executorch --force-reinstall
```
如需更多故障排除帮助,请访问Ultralytics GitHub Issues或ExecuTorch 文档。
总结
将YOLO11 模型导出为 ExecuTorch 格式,可以在移动设备和边缘设备上高效部署。凭借与PyTorch集成、跨平台支持和优化的性能,ExecuTorch 是边缘人工智能应用的绝佳选择。
主要启示
- ExecuTorch 提供性能卓越PyTorch边缘部署功能
- 导出简单
format='executorch'
规范 - 通过 XNNPACK 后端为移动 CPU 优化模型
- 支持iOS、Android 和嵌入式 Linux 平台
- 需要Python 3.10+ 和 FlatBuffers 编译器
常见问题
如何将YOLO11 模型导出为 ExecuTorch 格式?
使用Python 或CLI 将YOLO11 模型导出到 ExecuTorch:
```python
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.export(format="executorch")
```
或
```bash
yolo export model=yolo11n.pt format=executorch
```
ExecuTorch export 的系统要求是什么?
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 并希望使用本地部署路径,请选择PyTorch 。选择 TFLite,以获得最大的兼容性和成熟的工具。
我可以使用带有GPU 加速功能的 ExecuTorch 模型吗?
是的!ExecuTorch 通过各种后端支持硬件加速:
- 移动GPU:通过 Vulkan、Metal 或 OpenCL 代表
- NPU/DSP: 通过特定平台代表
- 默认值:XNNPACK 用于优化CPU 推理
有关后端具体设置,请参阅ExecuTorch 文档。