用于 Ultralytics YOLO 模型的 DEEPX 导出#
在专用 NPU 硬件上部署计算机视觉模型需要兼容且经过优化的模型格式。将 Ultralytics YOLO 模型导出为 DEEPX 格式,可在 DEEPX NPU 加速器上实现高效的 INT8 量化推理。本指南将指导你将 YOLO 模型转换为 DEEPX 格式,并将其部署到由 DEEPX 驱动的硬件上。
什么是 DEEPX?#
DEEPX 是一家 AI 半导体公司,专注于开发神经处理单元(NPUs),用于在边缘设备上以高能效执行 深度学习 推理。DEEPX NPU 专为要求严苛的嵌入式和工业 AI 应用而设计,能够以极低的功耗提供高吞吐量。其硬件非常适合云连接不可靠或不受欢迎的部署场景,例如机器人、智能摄像头和工业自动化系统。
DEEPX 导出格式#
DEEPX 导出会生成一个经过编译的 .dxnn 模型二进制文件,并针对 DEEPX NPU 硬件上的执行进行了优化。编译流程使用 dx_com 工具包执行 INT8 量化和针对硬件的优化,生成可直接用于部署的自包含模型目录。
DEEPX 模型的主要特性#
DEEPX 模型为边缘部署提供了多项优势:
- INT8 量化:模型在导出过程中会量化为 INT8 精度,从而显著减小模型大小并最大化 NPU 吞吐量。详细了解 模型量化。
- NPU 优化:
.dxnn格式专门针对 DEEPX NPU 硬件进行编译,利用专用加速单元实现快速、高效的推理。 - 低功耗:通过将推理卸载到 NPU,DEEPX 模型的功耗远低于等效的 CPU 或 GPU 推理。
- 基于校准的精度:导出过程使用基于 EMA 的校准和真实数据集图像,以最大限度地减少量化过程中的精度损失。
- 自包含输出:导出的模型目录包含经过编译的二进制文件、校准配置和元数据,便于直接部署。
支持的任务#
DEEPX 导出支持 Ultralytics 的全部七项任务。语义分割和深度估计仅适用于 YOLO26,因为 YOLO26 是唯一提供这些检测头的系列。
导出到 DEEPX:转换你的 YOLO 模型#
将 Ultralytics YOLO 模型导出为 DEEPX 格式,并使用导出的模型运行推理。
DEEPX 导出仅支持在 x86-64 Linux 计算机上执行。导出步骤不支持 ARM64(aarch64)。但是,导出的 dxnn 模型完全兼容 ARM64 平台,并可在其上执行。
安装#
要安装所需的软件包,请运行:
# Install the required package for YOLO
pip install ultralyticsdx_com 编译器在首次导出时会从 DEEPX SDK 仓库中自动安装。当前的导出工作流使用 DX-COM 2.3.0,它为基于带有 glibc 2.31 或更高版本的 x86-64 Linux 的 Python 3.8–3.12 提供 wheel 安装包。
该编译器的 PyPI 版本已被撤回。若要预安装导出依赖项,请配合 --find-links 提供 SDK wheel 页面;这同时适用于 pip 和 uv pip:
pip install "ultralytics[export-deepx]" --find-links https://sdk.deepx.ai/release/dxcom/v2.3.0/index.html对于可编辑的仓库安装,请将 "ultralytics[export-deepx]" 替换为 -e ".[export-base,export-deepx]"。若要重现 Python 3.12 环境以及 CI 使用的冒烟导出,请从仓库根目录运行现有的环境构建器:
ULTRALYTICS_ISOLATED_VENVS="$PWD/.venvs" python .github/scripts/create-export-env.py --env isolated-deepx环境构建器需要 uv 和已安装的 Ultralytics 检出版本。它会从 SDK 源码安装编译器并自动应用经过测试的依赖项约束。
使用方法#
DEEPX 格式支持 导出、预测 和 验证 模式。推理和验证均在 DEEPX NPU 硬件上运行。导出模型后,加载导出的模型以运行推理或验证其精度。
from ultralytics import YOLO
# Load a YOLO26 model
model = YOLO("yolo26n.pt")
# Export the model to DEEPX format (quantize=8 is enforced automatically)
model.export(format="deepx") # creates 'yolo26n_deepx_model/'from ultralytics import YOLO
# Load the exported DEEPX model
model = YOLO("yolo26n_deepx_model")
# Run inference
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# Load the exported DEEPX model
model = YOLO("yolo26n_deepx_model")
# Validate accuracy on the COCO8 dataset
metrics = model.val(data="coco8.yaml")导出参数#
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
format | str | 'deepx' | 导出模型的目标格式,用于定义与 DEEPX NPU 硬件的兼容性。 |
imgsz | int 或 tuple | 640 | 模型输入所需的图像大小。DEEPX 导出要求输入为正方形——传入一个整数(例如 640),或传入一个高度等于宽度的元组。 |
quantize | int 或 str | 8/auto | 量化精度。DEEPX 导出要求使用 8(INT8);如果未指定,该选项会自动启用。此选项取代已弃用的 half/int8 标志。 |
simplify | bool | True | 使用 onnxslim 简化中间 ONNX 图。 |
opset | int | None | 指定中间 ONNX 图的 ONNX 算子集版本。如果未设置,则使用最新的受支持版本。 |
data | str | None | 用于 INT8 校准的数据集 YAML;对于分类任务,则需要传入数据集目录或内置数据集名称。如果与 quantize=8 一起省略此参数,Ultralytics 会为该模型任务选择默认校准数据集。 |
device | str | None | 指定导出设备:GPU(device=0)或 CPU(device=cpu)。 |
optimize | bool | False | 启用更高级别的编译器优化,从而降低推理延迟,但会增加编译时间。 |
始终在 x86-64 Linux 主机上运行 DEEPX 导出。dx_com 编译器不支持 ARM64。
如需详细了解导出流程,请访问 Ultralytics 导出文档页面。
输出结构#
导出成功后,会创建一个包含以下结构的模型目录:
yolo26n_deepx_model/
├── yolo26n.dxnn # Compiled DEEPX model binary (NPU executable)
├── config.json # Calibration and preprocessing configuration
└── metadata.yaml # Model metadata (classes, image size, task, etc.).dxnn 文件是经过编译的模型二进制文件,dx_engine 运行时会直接在 NPU 上加载该文件。metadata.yaml 包含类别名称、图像大小以及 Ultralytics 推理流程所需的其他信息。
部署导出的 YOLO DEEPX 模型#
成功将 Ultralytics YOLO 模型导出为 DEEPX 格式后,下一步就是将这些模型部署到 DEEPX NPU 硬件上。
安装运行时#
运行推理需要 DEEPX NPU 驱动、libdxrt 运行时和 dx_engine Python 软件包。
DEEPX 运行时同时支持 x86-64 Linux 和 ARM64(例如 Raspberry Pi 5)。
# Install the NPU driver and libdxrt runtime
sudo apt update
wget https://github.com/DEEPX-AI/dx_rt_npu_linux_driver/raw/main/release/2.4.1/dxrt-driver-dkms_2.4.1-2_all.deb
sudo apt install ./dxrt-driver-dkms_2.4.1-2_all.deb
wget https://github.com/DEEPX-AI/dx_rt/raw/main/release/3.3.2/libdxrt_3.3.2_all.deb
sudo apt install ./libdxrt_3.3.2_all.deb
# Create dx-engine wheel
cd /usr/share/libdxrt/python_package && sudo ./make_whl.sh
# Install the bundled dx_engine Python wheel
pip install dx_engine-*.whl使用 dxrt-cli --version 验证运行时是否正确安装。你应看到类似以下输出:
DXRT v3.3.2
Minimum Driver Versions
Device Driver: v2.4.0
PCIe Driver: v2.2.0
Firmware: v2.5.2
Minimum Compiler Versions
Compiler: v1.18.1
.dxnn File Format: v6安装运行时后,按照上方 用法 部分中的说明,在 DEEPX 设备上运行推理和验证——导出的 _deepx_model 可直接通过 YOLO(...) 加载。
使用 dxtron 进行可视化#
dxtron 是 DEEPX 的图可视化工具,用于检查经过编译的 .dxnn 模型。
在 x86-64 Linux 上安装 dxtron:从 DEEPX SDK 下载 .deb 软件包,然后通过 dpkg 安装:
wget https://sdk.deepx.ai/release/dxtron/v2.0.1/dxtron_2.0.1_amd64.deb
sudo dpkg -i dxtron_2.0.1_amd64.deb然后打开导出的模型:
dxtron yolo26n_deepx_model/yolo26n.dxnndxtron 同时适用于 x86-64 和 aarch64 平台。
基准测试#
Ultralytics 团队对 YOLO26 模型进行了基准测试,比较了 PyTorch 和 DEEPX 之间的速度与精度。
| 模型 | 格式 | 状态 | 大小(MB) | metrics/mAP50-95(B) | 推理时间(ms/图像) |
|---|---|---|---|---|---|
| YOLO26n | PyTorch | ✅ | 5.3 | 0.4760 | 315.2 |
| YOLO26n | DEEPX | ✅ | 6.6 | 0.4660 | 34.6 |
| YOLO26n-seg | PyTorch | ✅ | 6.5 | 0.4080 | 485.4 |
| YOLO26n-seg | DEEPX | ✅ | 7.9 | 0.3920 | 53.8 |
| YOLO26n-pose | PyTorch | ✅ | 7.6 | 0.4230 | 506.3 |
| YOLO26n-pose | DEEPX | ✅ | 8.8 | 0.4590 | 37.6 |
| YOLO26n-obb | PyTorch | ✅ | 5.7 | 0.817 | 1094.4 |
| YOLO26n-obb | DEEPX | ✅ | 7.3 | 0.783 | 56.4 |
| 模型 | 格式 | 状态 | 大小(MB) | acc (top1) | acc (top5) | 推理时间(ms/图像) |
|---|---|---|---|---|---|---|
| YOLO26n-cls | PyTorch | ✅ | 5.6 | 0.431 | 0.716 | 23.8 |
| YOLO26n-cls | DEEPX | ✅ | 5.9 | 0.333 | 0.686 | 2.7 |
上述基准测试的验证使用的是用于检测的 COCO128、用于分割的 COCO128-seg、用于姿态估计的 COCO8-pose、用于分类的 ImageNet100 以及用于 OBB 模型的 DOTA128。推理时间不包括预处理/后处理。
要从连接到 Raspberry Pi 5 的 DX-M1 NPU 获得最佳推理吞吐量,请打开启动配置文件并启用 PCIe Gen 3 支持。
sudo nano /boot/firmware/config.txt在文件末尾添加以下行:
dtparam=pciex1
dtparam=pciex1_gen=3保存并退出(Ctrl+X,然后按 Y,再按 Enter),随后重启:
sudo reboot检查 PCIe 代际。PCIe Gen3 的预期速度为 8GT/s。
sudo lspci -vvv | grep -iA 33 accelerators | grep -E "LnkCap|LnkSta"推荐工作流#
- 使用 Ultralytics 训练模式训练模型
- 使用
model.export(format="deepx")导出为 DEEPX 格式 - 使用
yolo val验证准确率,以确认量化损失最小 - 使用
yolo predict预测,进行定性验证 - 使用
dx_engine运行时,将导出的_deepx_model/目录部署到 DEEPX NPU 硬件
实际应用#
部署在 DEEPX NPU 硬件上的 YOLO 模型非常适合各种 边缘 AI 应用:
- 智能监控:为安防和监控系统提供实时目标检测,功耗低且不依赖云端。
- 工业自动化:在工厂环境中执行设备端质量控制、缺陷检测和流程监控。
- 机器人:在自主机器人和无人机上实现基于视觉的导航、避障和目标识别。
- 智慧农业:利用农业计算机视觉进行作物健康监测、害虫检测和产量估算。
- 零售分析:通过实时边缘推理进行客流分析、货架监控和库存跟踪。
总结#
在本指南中,你已经了解了如何将 Ultralytics YOLO 模型导出为 DEEPX 格式,并将其部署到 DEEPX NPU 硬件上。导出流程使用 INT8 校准和 dx_com 编译器,生成经过硬件优化的 .dxnn 二进制文件,而 dx_engine 运行时则负责在设备上执行推理。
Ultralytics YOLO 与 DEEPX NPU 技术相结合,为在嵌入式和边缘设备上运行高级计算机视觉工作负载提供了有效方案,能够以低功耗实现高吞吐量,满足实时应用需求。
如需了解更多用法详情,请访问 DEEPX 官方网站。
此外,如果你想进一步了解其他 Ultralytics YOLO 集成,请访问我们的集成指南页面。在那里你可以找到大量实用资源和相关见解。
常见问题#
你可以在 Python 中使用
export()方法,或通过 CLI 导出模型。导出会自动启用 INT8 量化,并使用校准数据集来最大限度地减少精度损失。如果尚未安装,dx_com编译器软件包会自动安装。示例from ultralytics import YOLO model = YOLO("yolo26n.pt") model.export(format="deepx")DEEPX NPU 专为以最高效率执行 INT8 计算而设计。
dx_com编译器会在导出过程中使用基于 EMA 的校准和真实数据集图像对模型进行量化,从而让 NPU 发挥全部性能。DEEPX 导出始终强制使用 INT8——如果你请求其他精度,系统会发出警告并将其覆盖为 INT8。DEEPX 模型导出(编译)需要 x86-64 Linux 主机。导出步骤不支持 ARM64(aarch64)和 Windows 计算机。使用导出的
.dxnn模型进行推理时,可以在dx_engine运行时支持的任意 Linux 平台(x86-64 和 ARM64)上运行。导出会创建一个目录(例如
yolo26n_deepx_model/),其中包含:yolo26n.dxnn— 经过编译的 NPU 二进制文件config.json— 校准和预处理设置metadata.yaml— 包含类别名称和图像大小等信息的模型元数据
可以。使用 Ultralytics 训练模式训练并通过
format="deepx"导出的任何模型,都可以部署到 DEEPX NPU 硬件上,前提是该模型使用受支持的层操作。导出支持 Ultralytics 的全部七项任务:目标检测、实例分割、语义分割、深度估计、分类、姿态估计和定向边界框(OBB)。DEEPX 导出流程使用校准数据集中的每一张图像,并采用 EMA 校准方法。通常,几百张图像就足以实现良好的量化精度。如果大型数据集导致编译时间过长,请将
data指向较小的数据集。DEEPX 运行时不包含在
ultralytics中,运行推理前必须单独安装。在 x86-64 Linux 和 ARM64 Linux 计算机(例如 Raspberry Pi 5)上,请从 DEEPX-AI GitHub 版本中安装 NPU 驱动(dxrt-driver-dkms)和运行时(libdxrt),然后安装随附的dx_enginePython wheel。有关逐步命令,请参阅上方的 运行时安装 部分。