Ultralytics YOLO27: 加入候补名单。
开始使用

使用 Neutron 导出到 NXP i.MX95

使用 format="nxp" 导出 Ultralytics YOLO,生成为 NXP i.MX95 Neutron NPU 编译的 INT8 .tflite 模型。导出器会复用 LiteRT 转换和校准流程,然后运行 NXP 的 Neutron SDK 3.3.0 编译器,以便进行边缘 AI 部署。

此目标与 Sony IMX500(format="imx")不同。NXP i.MX8M Plus、i.MX93 和其他 NXP 处理器使用不同的加速器技术栈;i.MX95 生成的产物无法与这些目标互换。

导出#

请在 Linux x86_64 上使用 Python 3.10 或更高版本进行导出。已使用 Python 3.13 和 3.14 验证编译。Ultralytics 会按需安装转换依赖项。Neutron SDK 可从 NXP 软件包仓库获取。

pip install -U ultralytics
pip install eiq-neutron-sdk==3.3.0 --extra-index-url https://eiq.nxp.com/repository
导出到 NXP i.MX95
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
path = model.export(format="nxp", imgsz=640, data="coco128.yaml")
# 创建 yolo26n_nxp.tflite

使用能代表实际部署场景的校准图像,包括相机、光照和物体尺寸等因素。INT8 量化可能会降低精度,因此请在主机上将中间产物 yolo26n_int8.tflite 与 PyTorch 模型进行比较。coco128.yaml 是一个便于参考的示例,不能替代针对具体应用的校准和独立验证数据集。

参数说明
imgsz固定输入图像尺寸,例如 640 或 (480, 640)。
quantizeINT8(8);自动启用。不支持其他精度。
data校准数据集 YAML,或分类数据集。
fraction校准图像的比例或数量。
device导出和校准期间使用的设备。编译目标仍为 i.MX95。

批量大小固定为 1。检测模型导出时会使用原始预测结果进行外部 NMS;Ultralytics 会在预测和验证期间应用此后处理。不支持嵌入式 NMS 和 YOLO26 的无 NMS top-k 输出。

Platform#

在 Ultralytics Platform 中,打开模型的 Export 选项卡并选择 NXP。选择图像尺寸,导出完成后下载编译好的 _nxp.tflite 产物。Platform 会在其 CPU 工作节点上运行编译器;只有在部署和测量性能时才需要 NXP 开发板。有关通用工作流程,请参阅 Platform 模型导出指南。

Platform 将 INT8 显示为固定设置,并使用适用于模型任务的导出器默认校准数据集。目前,Platform 不提供校准 data 或 fraction 控件。请使用上文的 Python 或 CLI 导出示例,通过你自己的代表性图像进行校准。

在 i.MX95 上部署#

请为兼容 Neutron SDK 3.3.0 的 BSP 安装 NXP 提供的 TensorFlow Lite 运行时、libneutron_delegate.so、Neutron 驱动程序和固件。按照 NXP 部署指南设置开发板并确保运行时兼容。

Ultralytics 运行时会加载开发板上的 tflite_runtime 和 Neutron 委托。保留 _nxp.tflite 后缀,以便 Ultralytics 选择 NXP 运行时。在开发板上运行以下预测和验证示例:

使用 NXP 模型进行预测
from ultralytics import YOLO

model = YOLO("yolo26n_nxp.tflite")
results = model.predict("https://ultralytics.com/images/bus.jpg", imgsz=640)
验证 NXP 模型
from ultralytics import YOLO

model = YOLO("yolo26n_nxp.tflite")
metrics = model.val(data="coco128.yaml", imgsz=640, batch=1)

如需直接使用 TensorFlow Lite 进行基准测试,请使用开发板上的基准测试可执行文件:

benchmark_model --graph=yolo26n_nxp.tflite --external_delegate_path=/usr/lib/libneutron_delegate.so

算子覆盖情况与性能#

编译会将受支持的子图替换为 NeutronGraph 运算。不支持的算子会保留在 CPU 上。导出成功并不意味着所有运算都在 NPU 上运行,也不意味着 CPU/NPU 切换开销已消除。注意力机制、张量布局变换和后处理仍可能需要在 CPU 上执行。

导出日志包含 NXP 编译器统计信息:转换的算子、NPU 分区、内存估算值和估算的 NPU 周期数。这些估算不包括 CPU 运算、预处理、后处理和运行时开销。请在目标开发板上测量完整的帧延迟、峰值 RAM 和部署所需存储空间;理论 TOPS 和编译后文件大小无法确定这些数值。

将经过校准的中间产物与 PyTorch 模型进行验证,然后在开发板上使用相同的数据集和图像尺寸验证编译后的模型。在主机上完成编译和中间产物精度检查,并不能证明模型在 NPU 上具有数值一致性或相同的延迟。有关应用级验证规划,请参阅模型部署最佳实践。

常见问题#

  • 在 Linux x86_64 上,使用 Python 中的 model.export(format="nxp", data="your_dataset.yaml") 或 CLI 中的 yolo export model=best.pt format=nxp data=your_dataset.yaml。导出器会将模型校准为 INT8,并使用 Neutron SDK 3.3.0 进行编译,生成 best_nxp.tflite。请参阅导出示例,了解如何导出预训练的 YOLO26n 模型。

  • 可以。加载 YOLO("best_nxp.tflite"),并调用 predict() 或 val();也可以使用 yolo predict 和 yolo val。这两种方式都会使用开发板的 TensorFlow Lite 运行时和 Neutron 委托。请保留 _nxp.tflite 文件名后缀,并安装在 i.MX95 上部署中介绍的兼容 NXP 运行时。

  • 此导出目标仅限 i.MX95。其他 NXP 处理器使用不同的加速器和部署工具链,因此 i.MX95 Neutron 产物无法在 i.MX8M Plus 或 i.MX93 上复用。单独的 format="imx" 选项面向 Sony IMX500,而非 NXP i.MX 处理器。

  • Neutron 会为 NPU 编译受支持的子图,并将不支持的算子保留在 TensorFlow Lite 中,以便在 CPU 上执行。注意力机制、布局变换和后处理可能会产生多个分区和传输开销。请检查编译器转换算子的统计信息,然后在开发板上分析完整应用的性能;编译成功并不保证所有运算都在 NPU 上执行。

  • 使用具有代表性的图像进行校准,并在独立验证集上比较 PyTorch、INT8 中间产物和编译后的模型。使用验证模式评估精度,并在 i.MX95 开发板上测量帧延迟、进程峰值 RAM 和部署所需存储空间。编译器内存估算值、模型文件大小和 TOPS 评级不足以确定应用性能。

贡献者

评论

提出问题、分享结果,或帮助其他人。