导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    [V851s] YOLOv5 v7.0 转 Acuity 6.6.1 深度解析:从 ONNX 崩溃到依赖地狱,以及三条出路的分析

    编译和烧写问题专区
    3
    3
    25
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • lcsing0
      lcsing0 LV 3 最后由 编辑

      【环境配置】

      开发主机: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 支持?如果没有,推荐我走哪条路?
      

      卡在这一步很久了,万分感谢!!!!

      doniyor_khalilov99 1 条回复 最后回复 回复 引用 分享 0
      • A
        awwwwa LV 8 最后由 编辑

        Acuity-Toolkit-Binary-6.6.1 版本已经非常老了,建议更新下版本,社区目前有 Radxa 提供的 NPU 开发环境:https://docs.radxa.com/en/cubie/a5e/app-dev/npu-dev/cubie-acuity-sdk

        1 条回复 最后回复 回复 引用 分享 1
        • doniyor_khalilov99
          doniyor_khalilov LV 5 @lcsing0 最后由 编辑

          此回复已被删除!
          1 条回复 最后回复 回复 引用 分享 1
          • 1 / 1
          • First post
            Last post

          Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

          行为准则 | 用户协议 | 隐私权政策