Ultralytics YOLO 模型的 DEEPX 导出
在专用 NPU 硬件上部署计算机视觉模型,需要使用兼容且经过优化的模型格式。将 Ultralytics YOLO 模型导出为 DEEPX 格式,即可在 DEEPX NPU 加速器上高效运行 INT8 量化推理。本指南将带你将 YOLO 模型转换为 DEEPX 格式,并部署到由 DEEPX 驱动的硬件上。
什么是 DEEPX?#
DEEPX 是一家 AI 半导体公司,也是 Ultralytics 合作伙伴,专注于开发神经处理单元 (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 编译器会在首次导出时自动从 PyPI 安装。DX-COM 2.5.0 提供适用于搭载 glibc 2.31 或更高版本的 x86-64 Linux 系统的 Python 3.8–3.14 轮子,并且至少需要 16 GB RAM。要预先安装导出依赖项:
pip install "ultralytics[export-deepx]"若要以可编辑模式安装仓库,请将 "ultralytics[export-deepx]" 替换为 -e ".[export-base,export-deepx]"。若要复现 CI 使用的 Python 3.14 环境和冒烟导出,请从仓库根目录运行现有的环境构建器:
ULTRALYTICS_ISOLATED_VENVS="$PWD/.venvs" python .github/scripts/create-export-env.py --env isolated-deepx环境构建器需要 uv 和已安装的 Ultralytics 代码库检出版本。它会自动应用经过测试的依赖项约束。
DX-COM 2.5.0 会生成 .dxnn 文件格式 v9,该格式只能在 DX-RT 3.5.0 或更高版本上加载。安装 运行时安装中所述的匹配 DEEPX 运行时,并在升级各个组件之前查看 DEEPX 版本兼容性矩阵。
用法#
DEEPX 格式支持 导出、预测和验证模式。推理和验证在 DEEPX NPU 硬件上运行。导出模型后,加载导出的模型即可运行推理或验证其准确率。
Predict 和 Validate 需要配备已安装 DEEPX 运行时的 DEEPX NPU 设备(请参阅运行时安装)。导出可在没有 NPU 的 x86-64 Linux 主机上运行;将导出的 _deepx_model/ 目录复制到 NPU 设备即可运行推理。
from ultralytics import YOLO
# 加载 YOLO26 模型
model = YOLO("yolo26n.pt")
# 将模型导出为 DEEPX 格式(自动强制启用 quantize=8)
model.export(format="deepx") # creates 'yolo26n_deepx_model/'from ultralytics import YOLO
# 加载导出的 DEEPX 模型
model = YOLO("yolo26n_deepx_model")
# 运行推理
results = model("https://ultralytics.com/images/bus.jpg")from ultralytics import YOLO
# 加载导出的 DEEPX 模型
model = YOLO("yolo26n_deepx_model")
# 在 COCO8 数据集上验证准确率
metrics = model.val(data="coco8.yaml")导出参数#
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
format | str | 'deepx' | 导出模型的目标格式,用于定义与 DEEPX NPU 硬件的兼容性。 |
imgsz | int 或 tuple | 640 | 模型输入所需的图像尺寸。DEEPX 导出要求输入为正方形——传入整数(例如 640)或高度等于宽度的元组。 |
quantize | int 或 str | 8/自动 | 量化精度。DEEPX 导出必须使用 8 (INT8),未指定时会自动启用。此设置会替代已弃用的 half/int8 标志。 |
simplify | bool | True | 使用 onnxslim 简化中间 ONNX 图。 |
opset | int | None | 指定中间 ONNX 图的 ONNX opset 版本。如果未设置,则使用 opset 18(PyTorch < 2.4 时使用较低版本),且不高于已安装的 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 驱动程序(v2.7.0 或更高版本)、DX-RT 运行时(v3.5.0 或更高版本)、NPU 固件 v2.7.6 或更高版本,以及 dx_engine Python 包。这些是运行使用 DX-COM 2.5.0 编译的模型所需的版本。
DEEPX 运行时同时支持 x86-64 Linux 和 ARM64(例如 Raspberry Pi 5)。
使用以下任一选项安装 NPU 驱动程序和 libdxrt-bin 运行时包。
选项 A:从 GitHub Release 软件包安装#
从 DEEPX-AI GitHub 仓库下载驱动程序和运行时 .deb 软件包并安装。运行时软件包按 CPU 架构提供(amd64 或 arm64):
# Install the NPU driver and DX-RT runtime
sudo apt update
wget https://github.com/DEEPX-AI/dx_rt_npu_linux_driver/raw/main/release/2.7.0/dxrt-driver-dkms_2.7.0-2_all.deb
sudo apt install ./dxrt-driver-dkms_2.7.0-2_all.deb
wget https://github.com/DEEPX-AI/dx_rt/raw/main/release/3.5.0/libdxrt-bin_3.5.0_$(dpkg --print-architecture).deb
sudo apt install ./libdxrt-bin_3.5.0_$(dpkg --print-architecture).deb选项 B:从 DEEPX apt 仓库安装#
注册一次 DEEPX apt 仓库,然后使用 apt 安装和升级驱动程序及运行时:
# Add the DEEPX apt repository
wget -O - https://apt.releases.deepx.ai/gpg | sudo gpg --dearmor -o /usr/share/keyrings/deepx-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/deepx-archive-keyring.gpg] https://apt.releases.deepx.ai $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") main" | sudo tee /etc/apt/sources.list.d/deepx.list
# Install the NPU driver and DX-RT runtime
sudo apt update
sudo apt install dxrt-driver-dkms libdxrt-bin安装驱动程序后重启主机,以便在运行 dxcli 前加载新的内核模块。
Python 包和固件#
libdxrt-bin 在 /usr/share/libdxrt-bin/python/ 中附带适用于 Python 3.8–3.14 的 dx_engine 轮子,但不会安装这些轮子。在安装了 Ultralytics 和 NumPy 的环境中,安装与你的 Python 版本匹配的轮子:
python -m pip install --upgrade --no-index --find-links /usr/share/libdxrt-bin/python dx_engineDX-RT 3.5.0 需要 NPU 固件 v2.7.6 或更高版本。使用 dxcli -s 检查固件版本和设备 ID;如果固件版本较旧,请使用适用于你模块的固件映像进行更新。DX-M1 和 DX-M1M M.2 模块使用不同的固件映像,因此只能下载与你的模块匹配的映像;dxcli -s 会在设备信息中将模块报告为 M1 或 M1M:
# Download the firmware image matching your module (DX-M1 shown)
wget -O dx-m1-2.7.6.bin https://github.com/DEEPX-AI/dx_fw/raw/main/m1/2.7.6/mdot2/fw.bin
# wget -O dx-m1m-2.7.6.bin https://github.com/DEEPX-AI/dx_fw/raw/main/m1m/2.7.6/mdot2/fw.bin # DX-M1M
# Update the selected device; replace DEVICE_ID with its ID from dxcli -s
sudo systemctl stop dxrt.service
dxcli -d DEVICE_ID -u dx-m1-2.7.6.bin # for DX-M1M use dx-m1m-2.7.6.bin instead刷写后,请完全关闭主机电源并重新启动,然后再检查固件版本。如果无法断开物理电源,请按照 DEEPX 故障排除指南中的说明重启主机。
使用 dxcli -s 验证安装,该命令会报告每个设备的运行时、驱动程序和固件版本。如果 dx_engine 轮子版本与已安装的 libdxrt 运行时版本不匹配,import dx_engine 会引发 RuntimeError,因此升级运行时后,请从 /usr/share/libdxrt-bin/python/ 重新安装轮子。
安装运行时后,请按照上文用法部分中的说明,在 DEEPX 设备上运行推理和验证——导出的 _deepx_model 可直接通过 YOLO(...) 加载。
检查编译后的模型#
DX-COM 2.5.0 用交互式 HTML 编译摘要报告取代了 DX-TRON 图形可视化工具,该报告会显示编译后的模型结构以及 CPU/NPU 工作负载划分。如有需要,可在 x86-64 导出主机上使用 dxcom CLI 重新编译导出时写入的中间 ONNX 模型,以生成该报告:
dxcom -m yolo26n.onnx -c yolo26n_deepx_model/config.json -o yolo26n_deepx_report --export_html在浏览器中打开 yolo26n_deepx_report/yolo26n_summary.html,即可查看报告。
基准测试#
Ultralytics 团队对 YOLO26 模型进行了基准测试,比较 PyTorch 和 DEEPX 之间的速度与准确率。
| 模型 | 格式 | 状态 | 大小 (MB) | metrics/mAP50-95(B) | 推理时间 (ms/im) |
|---|---|---|---|---|---|
| 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) | 准确率 (top1) | 准确率 (top5) | 推理时间 (ms/im) |
|---|---|---|---|---|---|---|
| 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 进行分割、ImageNet100 进行分类、COCO8-pose 进行姿态估计,以及 DOTA128 测试 OBB 模型。推理时间不包括前处理和后处理。
要充分发挥连接到 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 官方网站。
常见问题#
你可以在 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模型运行推理时,只要 Linux 平台(x86-64 或 ARM64)受dx_engine运行时支持,就可以运行。导出会创建一个目录(例如
yolo26n_deepx_model/),其中包含:yolo26n.dxnn— 编译后的 NPU 二进制文件config.json— 校准和预处理设置metadata.yaml— 模型元数据,包括类别名称和图像尺寸
可以。任何使用 Ultralytics 训练模式训练并通过
format="deepx"导出的模型,只要使用受支持的层操作,就可以部署到 DEEPX NPU 硬件上。导出支持 Ultralytics 的全部七种任务:检测、实例分割、语义分割、深度估计、分类、姿态估计和有向边界框 (OBB)。DEEPX 导出流程会将
dx_com编译器配置为使用校准数据集中的图像进行 100 个 EMA 校准步骤。通常,几百张图像就足以获得良好的量化准确率。如果大型数据集导致编译时间过长,请将data指向较小的数据集。DEEPX 运行时未随
ultralytics一同打包,运行推理前必须单独安装。在 x86-64 Linux 和 ARM64 Linux 机器(例如 Raspberry Pi 5)上,从 DEEPX-AI GitHub release 软件包或 DEEPX apt 仓库安装 NPU 驱动程序(dxrt-driver-dkms)和运行时(libdxrt-bin);如有需要,将 NPU 固件更新至 v2.7.6 或更高版本,并将随附的dx_enginePython 轮子安装到你的环境中。使用 DX-COM 2.5.0 导出的模型需要 DX-RT 3.5.0 或更高版本。有关逐步操作命令,请参阅上文的运行时安装部分。
评论
提出问题、分享结果,或帮助其他人。
