赞
踩
近期,在研究瑞芯微的RKNN模型推理时,遇到一些坑,现记录下来,以备忘,亦供同道者参考。
目录
本文主要内容包括两块,一是在宿主机进行onnx-->rknn的模型转换,二是在SOC上利用转换好的rknn模型进行推理。
这一步需要在x86宿主机上进行,并配置相关环境。
主要就是在python环境中安装RKNN-Toolkit2。
构造环境这一步,建议在docker里面进行,这样可以避免和宿主机环境产生冲突,或者因为宿主机环境和需要的环境不匹配而导致的模型转换出现问题。
PS:之前博主在宿主机的python环境中直接pip安装的rknn-toolkit2,然而用一样的代码进行模型转换,最后推理结果总是出现错乱或者直接所有结果置信度特别低(接近0),最后放弃挣扎,转用docker才没有问题。
这里使用的版本是1.6.0,下载地址:
.
├── CHANGELOG.md
├── doc
├── LICENSE
├── README.md
├── res
├── rknn-toolkit2
├── rknn_toolkit_lite2
└── rknpu2
进到“rknn-toolkit2/docker/docker_file/ubuntu_20_04_cp38”目录下,并利用提供的Dockerfile构建一个docker镜像:
docker build -t rknn_toolkit2_1.6.0 . -f Dockerfile_ubuntu_20_04_for_cp38
等待镜像构建完毕,就会在里面自动安装模型转换所需的所有软件环境。然后,就可以启动一个容器,进到docker系统中:
- # 注意:我们上一步构造的镜像命名为rknn_toolkit2_1.6.0,需要改为你的镜像名字;
- # 同时,这里作了一个主机和容器之间的路径映射,以便于文件共享,需要将“ /data/projects/other/rknn_test/share_dir”改为你自己的路径
- docker run -v /data/projects/other/rknn_test/share_dir:/workspace/ -it rknn_toolkit2_1.6.0
至此,就构建好了所需的环境。
这一步是为了从我们训练的torch模型转为onnx中间格式的模型。这里不能直接使用ultralytics官方的库,需要作一定的改动,使其最后的detect部分改为rknn支持的方式:
可以参考rknn修改后的ultralytics版本:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。