• rk3568环境配置和推理报错: RKNN_ERR_MALLOC_FAIL


    前言
    最近在部署算法在板子侧遇到的一些问题汇总一下:

    一、版本问题

    经过测试现在将自己环境配置如下:在这里插入图片描述
    在这里插入图片描述

    本地linux安装rknn-toolkit2-1.5.0

    1. 本地Linux使用的miniconda新建的一个python虚拟环境(自行网上查找相关方法)
      在这里插入图片描述
    2. 安装好自己的虚拟环境之后:安装所需的依赖包
     sudo apt-get install libxslt1-dev zlib1g-dev libglib2.0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc 
    
    • 1
    1. 将官方的RKNN-Toolkit2库git到linux本地:(如果提示没有找到git命令,使用:sudo apt install git-all安装git工具)
     git clone https://github.com/rockchip-linux/rknn-toolkit2
    
    • 1

    在这里插入图片描述

    1. 进入 Toolkit2 工程文件夹, 根据工程的保存路径修改 cd 命令中的路径。
    cd ~/rknn-toolkit2
    
    • 1
    1. 安装必要相应版本的依赖包(这里我安装和我自己linux匹配的py3.8版本)
     pip3 install -r doc/requirements_cp38-1.5.0.txt
    
    • 1
    1. 安装 RKNN-Toolkit2(Python3.6 for x86_64)
     pip3 install package/rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl
    
    • 1
    1. 检查 RKNN-Toolkit2 是否安装成功。 出现这个界面,就说明本地linux端的安装已经成功,
      在这里插入图片描述
    2. 可以运行官方的examples案例检测:rknn-toolkit2/examples/onnx/yolov5
      在这里插入图片描述

    板子RK3568环境安装

    1. git源码到板子上
    git clone https://github.com/rockchip-linux/rknn-toolkit2
    
    • 1
    cd ./rknn_toolkit_lite2
    
    • 1

    文件结构如下:
    在这里插入图片描述

    1. 环境安装
     sudo apt update
    #安装python工具等
    sudo apt-get install python3-dev python3-pip gcc
    #安装相关依赖和软件包
    pip3 install wheel
    sudo apt-get install -y python3-opencv
    sudo apt-get install -y python3-numpy
    sudo apt -y install python3-setuptools
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. Toolkit Lite2工具安装:
    # 进入到rknn_toolkit_lite2目录下,
    cd rknn_toolkit_lite2/
    # ubuntu22 python3.7
    pip3 install packages/rknn_toolkit_lite2-1.5.0-cp310-cp310m-linux_aarch64.whl
    
    • 1
    • 2
    • 3
    • 4
    1. 检测安装成功
    python3
    >>> from rknnlite.api import RKNNLite
    >>>
    
    • 1
    • 2
    • 3
    1. 运行官方的demo
      此时运行一定是在rknn_toolkit_lite2这个文件下找到examples进行运行:

    运行我的demo:仓库地址:https://gitee.com/wangyoujie11/rk3568_-demo
    在这里插入图片描述
    Mnist_PC放在本地电脑的linux环境下,激活自己的python虚拟环境,然后python test.py就可以运行
    Mnist_rk3568放在板子的linux环境下,然后python3 rk3568_test.py就可以运行
    运行结果分别如下:
    pc端(程序里加载的1.png):
    在这里插入图片描述
    RK3568板子端(程序里加载的7.png):
    在这里插入图片描述

    ---------------------------------------------分割线(不定期更新)-----------------------------------------

    问题一

    在使用RK3568开发板的时候,在板子侧部署.rknn模型推理的时候报错:
    
    *Exception: RKNN init failed. error code: RKNN_ERR_MALLOC_FAIL*
    
    • 1
    • 2
    • 3

    请添加图片描述
    然后查看官方的手册发现报错提示:内存分配失败
    但是没有对应的解决方法,只能自己debug了(一杯茶,一包烟,一个bug找一天)…
    后面发现问题所在:我的.onnx模型输出如下:有多个输出,导致在本地linux下可以运行自己的模型,但是在板子上由于资源受限,导致板子的内存分配失败。所以解决的办法就是将自己的.onnx模型的输出给减少。https://netron.app/可以将自己的.onnx模型加载看输入输出
    在这里插入图片描述

    #原xxx.onnx文件放在onnx文件夹下,然后创建一个新的文件夹newonnx用来存放新的.onnx模型
    #版本说明这里的.onnx模型是在pytorch版本1.6.0~1.10.1直接训练的模型,并且在onnx版本在1.7.0~1.10.0之间
    import onnx
    model = onnx.load('./onnx/xxx.onnx')
    node = model.graph.output[1]
    model.graph.output.remove(node)
    onnx.save(model, './newonnx/xxx.onnx')
    
    model = onnx.load('./newonnx/xxx.onnx')
    for i in range(1,9): #根据自己要删除的节点设置范围
        node = model.graph.output[1]
        model.graph.output.remove(node)
        onnx.save(model, './newonnx/xxx.onnx')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述
    经过上面的代码裁剪.onnx模型之后
    在这里插入图片描述
    得到这个新的.onnx模型之后,就可以由本地Linux运行rknn的对应api将.onnx模型转为.rknn模型,然后将.rknn模型在板子上进行推理了。

    问题二

    在这里插入图片描述
    出现这个原因是因为,电脑端的rknn-toolkit2版本和板子端的rknn-toolkit2_lite版本的不同,必须是相同版本下,电脑端导出的rknn模型可以成功运行在板子端

  • 相关阅读:
    C++ STL详解(六) ---------- set、map、multiset、multimap的介绍
    JVM之对象的内存模型、创建过程、对象引用、生命周期
    Windows上使用client-go远程访问安装在本地WMware上的Linux虚拟机里的minikube
    fastadmin 表格内容超长自动折行,并且能下拉展开
    【正点原子I.MX6U-MINI应用篇】5、嵌入式Linux在LCD上显示BMP、JPG、PNG图片
    婴儿柳条摩西篮出口美国CPC认证ASTM F2194测试标准介绍
    【CGAL_网格处理】平滑处理
    无需重启应用,动态采集任意点位日志
    已解决:PHP用echo输出中文到文件日志乱码的问题
    刷题记录 -- 面试题
  • 原文地址:https://blog.csdn.net/weixin_44236302/article/details/133083237