yolo export model=yolov8n.pt format=tflite int8=True imgsz=320# (Repeated identically for yolov11n.pt and yolov5nu.pt)
./neutron-converter --input yolov8n_full_integer_quant.tflite --target imx95 --output yolov8n_full_integer_quant_neutron.tflite你好@vijayranaACL ,
感谢您联系恩智浦技术支持。
请参考本指南。
由于您使用的是 i.MX91 A1 芯片版本,因此某些特性或功能可能无法正常工作,因为 A1 是一个早期芯片版本,主要用于评估和开发目的。
因此,我们建议您在测试和验证活动中使用 i.MX91 B0 芯片版本。该指南是使用 B0 硅版本开发和验证的,因此记录的行为和结果均基于该版本。
如果可以,请确认您使用的是哪个版本的芯片,以及您是否可以获取 B0 设备进行比较。
此致,
亚历杭德罗·加西亚
你好@vijayranaACL ,
我已在采用 B0 芯片的 i.MX95 EVK 上测试了您的代码,在我们这边运行正常,没有任何问题。
使用 person_detect.py 应用程序,模型加载成功,Neutron 委托初始化正确,应用程序按预期执行推理。在测试过程中,我观察到稳定的目标检测和持续约 13-14 FPS 的性能。日志还证实 Neutron 代理处于活动状态,并且模型在 NPU 加速下正在正常执行。
根据这些结果,我建议升级到 B0 硅片版本。A0 和 A1 硅版本主要是为了评估和 beta 测试目的而发布的,它们没有与 B0 相同级别的软件支持和验证。早期版本之后引入了一些功能和修复,这或许可以解释您看到的情况。
以下是我的测试日志的相关部分:
root@imx95evk:~# python3 person_detect.py
Opening camera /dev/video52 ...
Trying camera backend: V4L2 /dev/video52
Camera opened via V4L2 /dev/video52
Loading model and NPU delegate ...
Loaded Neutron delegate: /usr/lib/libneutron_delegate.so
/usr/lib/python3.13/site-packages/tflite_runtime/interpreter.py:457: UserWarning: Warning: tf.lite.Interpreter is deprecated and is scheduled for deletion in
TF 2.20. Please use the LiteRT interpreter from the ai_edge_litert package.
See the [migration guide](https://ai.google.dev/edge/litert/migration)
for details.
warnings.warn(_INTERPRETER_DELETION_WARNING)
INFO: NeutronDelegate delegate: 1 nodes delegated out of 33 nodes with 1 partitions.
INFO: Neutron delegate version: v1.0.0-d98743a7, zerocp enabled.
INFO: Created TensorFlow Lite XNNPACK delegate for CPU.
Model input: shape=[ 1 640 640 3] dtype= quant=(0.003921568859368563, -128)
Model output[0]: shape=[ 1 84 8400] dtype= quant=(0.003906319383531809, -128)
Using model input size: 640x640
Re-opening camera after model load ...
Trying camera backend: V4L2 /dev/video52
Camera opened via V4L2 /dev/video52
Person detection running. Press Ctrl+C to stop.
First frame: 640x480
Output tensor shape: (1, 84, 8400)
frame=22 person conf=0.61 box=[143,8,496,476] fps=10.7
--- fps=11.5 detections=0 ---
frame=39 person conf=0.58 box=[138,16,496,473] fps=12.1
frame=50 person conf=0.50 box=[138,12,496,472] fps=12.5
frame=60 person conf=0.58 box=[138,13,496,476] fps=12.8
--- fps=12.8 detections=1 ---
frame=84 person conf=0.61 box=[143,10,496,475] fps=13.3
frame=85 person conf=0.54 box=[138,10,496,475] fps=13.3
frame=86 person conf=0.61 box=[138,13,496,476] fps=13.3
frame=88 person conf=0.54 box=[138,12,496,472] fps=13.3
--- fps=13.3 detections=0 ---
--- fps=13.6 detections=0 ---
frame=136 person conf=0.65 box=[138,13,496,476] fps=13.7
frame=139 person conf=0.58 box=[138,12,496,472] fps=13.7
frame=140 person conf=0.61 box=[136,10,498,475] fps=13.8
frame=141 person conf=0.61 box=[138,13,496,476] fps=13.8
frame=145 person conf=0.50 box=[138,13,496,476] fps=13.8
frame=146 person conf=0.65 box=[138,13,496,476] fps=13.8
frame=148 person conf=0.54 box=[138,16,496,473] fps=13.8
frame=150 person conf=0.50 box=[131,12,498,472] fps=13.8
--- fps=13.8 detections=1 ---
frame=155 person conf=0.50 box=[152,32,497,472] fps=13.8
frame=156 person conf=0.71 box=[180,37,495,422] fps=13.8
frame=157 person conf=0.54 box=[182,38,497,411] fps=13.8
frame=158 person conf=0.65 box=[156,37,493,472] fps=13.8
frame=159 person conf=0.68 box=[158,42,496,472] fps=13.8
frame=160 person conf=0.61 box=[155,46,495,468] fps=13.8
frame=162 person conf=0.54 box=[156,46,493,463] fps=13.8
frame=163 person conf=0.71 box=[171,43,493,466] fps=13.8
frame=164 person conf=0.54 box=[186,41,363,353] fps=13.8
frame=165 person conf=0.61 box=[187,42,492,452] fps=13.8
frame=166 person conf=0.58 box=[190,41,495,393] fps=13.8
frame=167 person conf=0.61 box=[190,42,495,432] fps=13.8
frame=168 person conf=0.61 box=[195,38,495,426] fps=13.8
frame=169 person conf=0.50 box=[190,36,495,423] fps=13.8
frame=170 person conf=0.58 box=[198,37,496,397] fps=13.8
--- fps=13.9 detections=0 ---
frame=202 person conf=0.50 box=[145,28,495,456] fps=13.9
--- fps=14.0 detections=0 ---
^CStopped.
root@imx95evk:~#
由于相同的应用程序和模型在 B0 芯片上运行正常,我的建议是在继续进行进一步调试之前,使用 B0 设备重复测试,因为问题可能与芯片版本有关,而不是与应用程序本身有关。
此致,
查维拉
嗨,亚历杭德罗,
感谢您澄清是 i.MX 95(而非 i.MX 91)的问题,并推荐使用 --优化级别 OOpt。
我们尝试在现有配置上执行您建议的命令,但是 --优化级别 不可用 在与我们的板级 BSP 配套的中子变流器中。
电路板 | IMX95LPD5EVK-19 |
BSP | LF6.12.34_2.1.0 (Linux 6.12.34-lts-next ) |
中子号代表已登船 | v1.0.0-be8bf399 |
主机变流器 | eIQ 工具包 1.17 → 中子变流器 2.1.3+0Xaf140cf5 |
变流器 电路板支持包 标签 | MCU_SDK_25.09.00+Linux_6.12.34_2.1.0 |
在这个变流器上, 中子转换器 --help 做 不是 列表 --优化级别。
为了进行调试,我们还使用:
关键选项 - 帮助:
--优化级别 不存在 在这个版本上。
YOLOv8n 中子(我们的转换) | 调用没问题,但是 0 次检测 |
YOLOv8n 无头骨干网 | NPU 输出 常数(~1.13) |
无头CPU主干网+CPU头部 | 检测结果正常 ——管道逻辑正确 |
嗨@vijayranaACL ,
抱歉,这是我的笔误。
我指的是 i.MX95,因为 i.MX91 不包含 NPU。
我建议尝试使用以下命令转换模型:
.\neutron-converter.exe `
--input ".tflite" `
--target imx95 `
--output ".tflite" `
--optimization-level OOpt
根据 Neutron SDK 文档,需要注意的是,对于 Neutron-S 靶(例如 i.MX95),变流器不是确定性的。转换过程依赖于多线程约束编程求解器,这意味着对同一模型执行变流器的不同操作可能会产生略有不同的结果,尤其是在 TCM 内存分配和生成的微代码方面。
由于可能存在多个最优解,因此在每次转换过程中,不同的求解器线程可能会收敛到不同的有效解。尽管这些解决方案内部可能有所不同,但变流器认为它们都是正确且经过优化的。在大多数情况下,这些差异不应显著影响功能或性能。
如果您观察到行为、性能或准确性方面的变化,我建议您多次转换模型并比较结果。虽然有一些方法可以强制执行确定性行为,但通常会大大增加转换时间,因此除非绝对必要,否则一般不建议使用。
请告知我您的测试结果。
此致,
亚历杭德罗·加西亚
使用bsp 6.12.49_2.2.0