• CV12_ONNX转RKNN模型(谛听盒子)


    暂时简单整理一下:

    1.在边缘设备上配置相关环境。

    2.配置完成后,获取模型中间的输入输出结果,保存为npy格式。

    3.将onnx格式的模型,以及中间输入输出文件传送到边缘设备上。

    4.编写一个python文件用于转换模型格式,dataset作为测试可以是随便的数据。

    5.将python传送到边缘设备上并运行。

    注意:所有文件要在同一目录下。

    参考代码一:

    1. # Author:SiZhen
    2. # Create: 2024/7/15
    3. # Description: ONNX转RKNN
    4. import os
    5. import numpy as np
    6. from rknn.api import RKNN
    7. def convert_onnx_to_rknn(onnx_path,rknn_path,input_data,output_data):
    8. #创建RKNN对象
    9. rknn = RKNN()
    10. rknn.config(
    11. target_platforms='rk3588',
    12. quantized_algorithm='mmse',
    13. optimization_level = 2
    14. )
    15. #加载ONNX模型
    16. print('loading ONNX model...')
    17. ret = rknn.load_onnx(model=onnx_path)
    18. if ret !=0:
    19. print("load failed!")
    20. return
    21. #构建模型,进行RKNN模型转换
    22. print('building rknn model...')
    23. ret = rknn.build(do_quantization=False,dataset='/home/DiTing/sizhen/dataset.txt')
    24. if ret !=0:
    25. print('Build RKNN model failed!')
    26. #导出RKNN模型
    27. print('Exporting RKNN model...')
    28. ret = rknn.export_rknn(rknn_path)
    29. if ret != 0:
    30. print('Export RKNN failed!')
    31. return
    32. print('RKNN model is successfully exported to ',rknn_path)
    33. rknn.init_runtime()
    34. outputs=rknn.inference(inputs=[input_data],data_format='nchw')
    35. try:
    36. if np.test.assert_almost_equal(outputs[0],output_data,decimal=1)is None:
    37. print('模型输出与预期一致。')
    38. except AssertionError as e :
    39. print("不一致,详细信息:",e)
    40. #转换模型
    41. i = 0
    42. onnx_path = r'/home/DiTing/sizhen/resNet34.onnx'
    43. rknn_path = onnx_path.replace('.onnx','.rknn')
    44. input_data = np.load('/home/DiTing/sizhen/input_data.npy')
    45. output_data = np.load('/home/DiTing/sizhen/output_data.npy')
    46. convert_onnx_to_rknn(onnx_path,rknn_path,input_data,output_data)

    问题及解决方法

    问题一

    安装失败。

    解决方法:这个地方,谛听盒子应该是arm的版本而不是x86:(Lite版本)

    问题二

    安装成功找不到属性

    解决方法:用如下包替代

    问题三

    lite版本缺少属性

    初步讨论结果:lite版本应该是只包含运行环境的,最好不要在盒子上进行模型转换,会又慢又卡,可能利特版本就是没有模型转换的功能的。

    解决方法:在其他环境转换。(待更新)可能的解决办法:https://bbs.eeworld.com.cn/thread-1283146-1-1.html

    问题四

    在上面链接的指导进行windows环境下安装toolkit时,出现如下错误:

    原因是没有安装Cmake。在安装Cmake后,又出现如下错误:

    NMake Makefiles does not support platform specification, but platform x64 was specifced

    CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage


    CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage


    -- Configuring incomplete, errors occurred!

    解决方法:https://blog.csdn.net/qq_42276781/article/details/88594870

    1.打开 Visual Studio Installer -> 修改 -> 单个组件 -> 勾选 用于 CMake 的 Visual C++ 工具 -> 修改

       2.Visual Studio Installer -> 修改->工作负荷 -> 使用C++的桌面开发 -> 修改】

    3.配置一下path 环境变量  计算机 -> 属性 -> 高级系统设置 -> 环境变量 -> Path -> 编辑 -> 加入

    自己的路径\Microsoft Visual Studio\2017\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin  

    后确定

    重启电脑之后,再次安装即可。

    问题五

    rknn-toolkit在windows系统没有2代版本(1代版本不兼容rk3588),2代版本目前只有linux系统。

    解决方法:搭一个虚拟环境然后用虚拟机安装rknn-toolkit2

  • 相关阅读:
    Blender入门——快捷键
    SpringBoot添加过滤器详解
    将树的某个叶子节点向上提一个level
    SpringCloud源码分析 (Eureka-Client-服务下架与服务下线) (四)
    嵌入式Linux--进程间通信--共享内存
    react18-webchat网页聊天实例|React Hooks+Arco Design仿微信桌面端
    Java8 Stream源码精讲(四):一文说透四种终止操作
    Spring boot集成log4j及日志配置详解,实战,ELK使用教程。
    数据结构—— AVL树
    【C++入门基础】命名空间 | 缺省参数 | 函数重载 | 引用 | 内联函数
  • 原文地址:https://blog.csdn.net/qq_51605551/article/details/140444690