[V851s] YOLOv5 v7.0 转 Acuity 6.6.1 深度解析:从 ONNX 崩溃到依赖地狱,以及三条出路的分析
-
【环境配置】
开发主机:HP OMEN 9 (暗影精灵9) 主机系统:Ubuntu 22.04 (物理机) 主机显卡: NVIDIA GeForce RTX 4060 Laptop GPU (Device 28e0) Intel Corporation Device a788 (Intel 核显) 目标板卡:V851s 工具链版本:Acuity-Toolkit-Binary-6.6.1 Python 环境:Conda yolo5_retro (Python 3.8)【项目背景】
正在部署开发板识别打火机的火的项目,基于 YOLOv5 v7.0 训练完成 best.pt,目标是在 V851s NPU 上部署。目前在将模型转换为 Acuity 可用的 .nb 格式时,遇到了新旧工具链不兼容的严重问题,陷入了“依赖地狱”。【核心冲突】
Acuity 6.6.1(2020年代工具)的底层库要求极其老旧,与现代 YOLOv5(2024年代码)及 PyTorch 生态的依赖完全互斥,导致无法构建一个同时满足“Acuity能运行”和“YOLOv5能导出”的 Python 环境。【详细排查过程与报错】
路线一:ONNX 导入(遇到死胡同)
模型导出操作: 使用 YOLOv5 v7.0 源码,执行: python export.py --weights best.pt --include onnx --opset 9 --imgsz 640 *结果*:成功生成 best.onnx,输入 [1, 3, 640, 640]。结构包含 onnx::Reshape_397, onnx::Sigmoid_440 等中间节点。 环境适配(痛苦过程): 为了兼容 Acuity 6.6.1,我进行了强制降级: 降级 numpy:pip install numpy==1.19.5 (Acuity 报错强制要求 < 1.20) 降级 onnx:pip install onnx==1.10.0 降级 protobuf:pip install protobuf==3.20.3 (解决 Descriptor 验证错误) 源码修补:由于 NumPy 1.19.5 在新 onnx 库下存在 API 废弃,手动修改了 .../site-packages/onnx/mapping.py,将 np.object 改为 object 才勉强让 import 不报错。 Acuity 导入操作: pegasus import onnx --model best.onnx --mean-values 0 0 0 0.00392156862745098 --scale 0.017 0.017 0.017 --quantized-input on 关键报错: Acuity 在解析图结构时内部崩溃: I Start importing onnx... ... File "acuitylib/app/importer/import_onnx.py", line 109, in run TypeError: object of type 'NoneType' has no len() *个人推测*:Acuity 6.6 的旧版解析器无法正确处理 YOLOv5 v7 的某些特定节点,或者因版本不匹配导致图属性读取为 None。路线二:TFLite 导入(遭遇依赖互斥)
环境冲突 A (NumPy vs Pandas): Acuity 要求 numpy < 1.20,但 YOLOv5 的 export.py 依赖 pandas,而新版本 pandas 拒绝在 numpy < 1.20.3 上运行。这导致导出脚本甚至启动不了。 环境冲突 B (TensorFlow 版本): 临时升级 numpy 并尝试 tensorflow 2.13.1,结果导出失败。 TensorFlow SavedModel: export failure ❌ 1.0s: 'anchors' TensorFlow Lite: export failure ❌ 0.0s: 'NoneType' object has no attribute 'call' AttributeError: 'NoneType' object has no attribute 'outputs' *推测*:YOLOv5 v7.0 脚本逻辑未适配 TF 2.13(正准备尝试降级 TF 2.10 验证)。【我的思考:三条可能的出路】
目前卡在 ONNX 解析崩溃上,我思考了三条路,不知哪条是正解:
方案一:寻找更新版本的 SDK / Acuity
思路:是否存在针对 V851s 的更新版 Tina SDK?其中是否内置了 Acuity 7.x 或更高版本? 顾虑:非常担心“生成端”和“运行端”不匹配。如果我用新版 Acuity 生成 .nb,放到现有的 V851S 系统(SDK 里的驱动)跑,会不会直接报错 Version mismatch?方案二:降级 YOLOv5 版本(以退为进)
思路:放弃 v7.0,改用 2020-2021 年的 YOLOv5 v6.0。那个时代的 ONNX 格式和依赖库应该完美契合 Acuity 6.6。 代价:需要重新训练模型。 问题:如果不换 SDK,这是否是唯一可行的工程方案?方案三:放弃 Acuity,换推理框架
思路:改用 NCNN 或 TFLite + CPU 运行。 顾虑:V851S 性能有限,如果失去 NPU 加速,CPU 跑 YOLO 可能帧率极低,无法满足实时检测需求。【求助】
以上是目前遇到的所有问题。恳请全志的大佬或有经验的朋友指点:我的 TypeError: object of type 'NoneType' has no len() 还有救吗? V851s 是否有更新版 SDK 支持?如果没有,推荐我走哪条路?卡在这一步很久了,万分感谢!!!!
-
Acuity-Toolkit-Binary-6.6.1 版本已经非常老了,建议更新下版本,社区目前有 Radxa 提供的 NPU 开发环境:https://docs.radxa.com/en/cubie/a5e/app-dev/npu-dev/cubie-acuity-sdk
-
@lcsing0 你好,请问你是把 Allwinner SDK 下载并安装在哪个版本的 Ubuntu 上的 (https://releases.ubuntu.com/16.04/)?
是 Ubuntu 16.04,还是通过这个链接里的 .ova 文件安装的 (https://netstorage.allwinnertech.com:5001/sharing/Wm9YiHMvf)?
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号