目标检测《三、rv1109平台部署yolov5环境 官方onnx模型转换rknn模型》

 1.yolov5环境安装

2. yolov5训练自己的数据集

3. rv1109平台部署yolov5环境,官方onnx模型转换rknn模型验证

4.rv1109平台部署自己训练的yolov5数据模型

  以上文章是从0到1,一点点记录部署全部过程,包括出现的错误以及解决过程。

5. rv1109部署yolov5训练模型汇总

   第五篇是汇总前4篇,做一个归纳总理,顺序总结出部署过程,因为是后期总结,可能会导致哪里遗落,具体可以查看对应上面对应文章。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

 

1.环境安装

  备注:后续经过验证,发现1109板卡rknn模型转换需要使能预编译,而pc环境不支持预编译。所以需要在ubuntu上安装toolkit将onxx转换成rknn。这步可以跳过直接参考第二步骤的第五小条。

  SDK中的rknn toolkit版本比较旧,如果需要最新的,https://github.com/rockchip-linux/rknn-toolkit下载。各种版本环境安装可能有一点不一样,具体查看Rockchip_Quick_Start_RKNN_Toolkit_V1.7.3_CN.pdf手册。

  在Conda下新建一个虚拟环境进行安装。需要安装python的版本是3.6

在虚拟环境下使用以下命令新建一个RKNN环境:

conda create --name=rknn python=3.6.8

执行以下命令进入虚拟环境:

conda activate rknn

进入虚拟环境后,再执行以下命令安装深度学习框架,如Tensorflow,Pytorch,Keras等。

pip install tensorflow==1.14.0
pip install torch==1.6.0+cpu torchvision==0.7.0+cpu -f https://download.pytorch.org/whl/torch_stable.html --user
pip install mxnet==1.5.0
pip install opencv-python
pip install gluoncv

  在安装opencv-python的时候报错:ERROR: Could not build wheels for opencv-python which use PEP 517 and cannot be installed directly

  需要注意:opencv和python是有版本匹配,pip install opencv-python默认是安装最新版本,有可能会与我们python版本不对应导致安装失败。

解决:

pip install --upgrade pip setuptools wheel
pip install opencv-python

  发现还是报错:Please check the install target is valid and see CMake's output for more information.(版本匹配问题)

pip install -i https://pypi.douban.com/simple/ pip install opencv-python==4.3.0.38

  这个版本是与python3.6相匹配的。

  在SDK目录rv1126_rv1109\external\rknn-toolkit\packages\required-packages-for-win-python36下有lmdb-0.95-cp36-cp36m-win_amd64.whl

pip install lmdb-0.95-cp36-cp36m-win_amd64.whl

   在SDK目录rv1126_rv1109\external\rknn-toolkit\packages下有rknn_toolkit-1.6.0-cp36-cp36m-win_amd64.whl(备注:我从github下载最新的rknn toolkit的时候,对应的whl并没有一起下过来,https://github.com/rockchip-linux/rknn-toolkit/releases需要自己再下载一下对应的安装包)该步骤的安装包要和跟文档的一致,不然后面rknn还是安装不成功的。rknn-toolkit-lite目录下也有一个package,里面也有类似的whl,注意这是不同的。不要安装错了。

pip install rknn_toolkit-1.6.0-cp36-cp36m-win_amd64.whl

  报错提示有些版本不兼容,但是还是安装成功了(暂时先不管了):

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
mxnet 1.5.0 requires requests<2.19.0,>=2.18.4, but you have requests 2.22.0 which is incompatible.
matplotlib 3.3.4 requires pillow>=6.2.0, but you have pillow 5.3.0 which is incompatible.

  然后验证是否安装成功:

python
from rknn.api import RKNN

   没有报错就是安装成功。

 

2.官方demo验证

1.官方demo onnx->rknn

  这边先用官方的准备的onnx模型转换成rknn模型,然后在rv1109平台上运行。

  通过https://github.com/rockchip-linux/rknn-toolkit下载最新的demo,因为我需要用的是yolov5,而SDK里面是yolov3。

  rknn-toolkit-master\rknn-toolkit-master\examples\onnx\yolov5目录下修改test.py

  默认的平台是rk1808,修改target_platform为rv1109和rv1126,如果只是写rv1109应该也可以。

    rknn.config(reorder_channel='0 1 2',
                mean_values=[[0, 0, 0]],
                std_values=[[255, 255, 255]],
                optimization_level=3,
                target_platform =['rv1109', 'rv1126'],
                output_optimize=1,
                quantize_input_node=QUANTIZE_ON)

  修改rknn.init_runtime函数,设置平台为rv1109,device_id可以不填,那个是PC模拟挂载多个板卡才需要指定。

    ret = rknn.init_runtime('rv1109')

 激活当创建虚拟环境:

conda activate rknn

切换到对应的目录下,然后执行:

python test.py

   可以看到RKNN model已经导出。但是后续的运行失败了,是因为我在pc上运行,但是我设置的平台是rv1109,平台不匹配导致。不用管它。

 

2. rknn在rv1109板卡运行

  在SDK下rv1126_rv1109\external\rknpu\rknn\rknn_api\examples\rknn_yolov5_demo有对应的demo

  在这个demo中已经有转换好的rknn,可以根据readme配置一下build.sh中的编译器路径就行了。

修改build.sh

GCC_COMPILER=略rv1126_rv1109/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf

  根据自己交叉编译器路径配置一下。

./build.sh

  执行成功,在当前目录生成一个install目录。

  把目录通过adb放到板卡的/userdata下,并修改执行权限chmod 777 -R  文件夹

./rknn_yolov5_demo model/rv1109_rv1126/yolov5s_relu_rv1109_rv1126_out_opt.rknn model/test1.bmp

  

  执行成功会在当前目录生成一个out.bmp。

  

   以上是执行官网自带的rknn。

3. 替换rknn运行

  把刚转换生成的yolov5s.rknn以及bus.bmp(该图片在第一步demo中有,不过是jpg的,要转成bmp格式)放到板卡的目录下,执行

./rknn_yolov5_demo yolov5s.rknn bus.bmp

  运行后报错:

This RKNN model is not a pre-compiled model, but the npu driver is mini driver.
Mini driver only support rknn models with pre-compiled mode.
Create RKNN model fail, error=-14
rknn_init error ret=-14

  该错误是板子上的库是Mini driver, 所以只能加载预编译的模型,在转换模型的时候,打开预编译开关precompile。

  打开刚才的test.py,增加一个pre_compile=True

ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET)

修改成:

ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET, pre_compile=True)

  备注:Mini driver 库大小比 full driver 小很多,以 RV1109/RV1126 1.6.0 驱动为例,full driver 大小为 87MB,mini driver 大小为 7.1MB,可以有效的节省 flash 大小。Full driver 支持 RKNN Toolkit 的联机调试功能,mini driver 不支持。

又报错:

E The pre_compile is not supproted on Windows or MacOS platform. Please use export_rknn_precompile_model() to convert rknn to precompile mode.
Build yolov5 failed!

  

 

   不支持windows系统。

4. 使用export_rknn_precompile_model模型预编译

  由于我这边第四步行不通,可能是硬件这边不支持,所以我在ubuntu下又安装了rknn toolkit,来代替第一步,使能预编译,转换官方的rknn模型。这步可以跳过不用看,这边只是做了记录,以防万一。

  首先使能NTB通信:

/etc/init.d/.usb_config,在这个文件中增加一行:usb_ntb_en,然后重启开发板。

   然后在虚拟环境中执行

python -m rknn.bin.list_devices

  正常情况会显示对应的设备,但是我的没有显示。可能是硬件没有连接好。这个方法暂时不考虑。

  如果这步骤可以正常显示设备

  将第一步转换出的rknn模型(不是预编译模型)放在rknn-toolkit-master\examples\common_function_demos\export_rknn_precompile_model目录下

   修改export_rknn_precompile_model.py为对应的平台

ret = rknn.init_runtime(target='rv1109', rknn2precompile=True)

  再执行该脚本,应该就可以了。

 

5.Ubuntu安装rknn toolkit

  参考:https://www.cnblogs.com/zhuangquan/p/17315575.html

  然后在Ubuntu下将onxx转换成rknn

修改rknn-toolkit-master/examples/onnx/yolov5下的test.py,打开预编译

ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET)

修改成:

ret = rknn.build(do_quantization=QUANTIZE_ON, dataset=DATASET, pre_compile=True)

  然后执行

python test.py

  就可以看到rknn模型导出成功。

  参考上面第三步替换一下rknn模型,就执行成功了。

 

 

 

 

 

 

   

 

 

 

 

   

 

posted @ 2023-04-12 15:44  一个不知道干嘛的小萌新  阅读(807)  评论(0编辑  收藏  举报