如何在Ubuntu系统(PC)上搭建RK3562 Buildroot Linux的NPU开发环境?即电脑端运行Ubuntu系统,而RK3562板卡运行Buildroot Linux系统的情况下,搭建RK3562 NPU开发环境。
下面是相应的步骤(对应的命令):
1、下载RKNN相关仓库
在Ubuntu电脑端执行如下命令:
mkdir -p ~/bigger_disk/rknpu
cd ~/bigger_disk/rknpu
git clone https://github.com/airockchip/rknn-toolkit2.git --depth 1
git clone https://github.com/airockchip/rknn_model_zoo.git --depth 1
2、安装RKNN-Toolkit2环境
在Ubuntu电脑端执行如下命令:
wget -c https://mirrors.bfsu.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod 777 Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
source ~/miniconda3/bin/activate
conda create -n toolkit2 python=3.8
conda activate toolkit2
cd ~/bigger_disk/rknpu/rknn-toolkit2/rknn-toolkit2
pip install -r packages/requirements_cp38-2.0.0b0.txt
pip install packages/rknn_toolkit2-2.0.0b0+9bab5682-cp38-cp38-linux_x86_64.whl
3、安装编译工具
在Ubuntu电脑端执行如下命令:
sudo apt update
sudo apt install cmake
cd ~/bigger_disk/rknpu
wget -c https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
tar xvf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
4、确认板端RKNPU2环境
在RK3562板端执行如下命令:
dmesg | grep -i rknpu
执行完命令,会打印如下:
可以看到RK3562板上RKNPU驱动的版本为0.9.3,KRK建议RKNPU2驱动版本 >= 0.9.2,能满足要求。
接下来再在RK3562板端执行如下命令,确认应用层面的服务和库的版本:
strings /usr/bin/rknn_server | grep -i "rknn_server version"
strings /usr/lib/librknnrt.so | grep -i "librknnrt version"
打印如下:
rknn_server和librknnrt.so的版本都为1.6.0,能满足目前的需求。如果版本太旧,可以将电脑与RK3562的OTG口相连,通过ADB更新板端的文件,命令如下:
cd ~/bigger_disk/rknpu/rknn-toolkit2/rknpu2
adb push runtime/Linux/rknn_server/aarch64/usr/bin/* /usr/bin
adb push runtime/Linux/librknn_api/aarch64/librknnrt.so /usr/lib
adb shell
export RKNN_SERVER_LOGLEVEL=5
chmod +x /usr/bin/rknn_server
chmod +x /usr/bin/start_rknn.sh
chmod +x /usr/bin/restart_rknn.sh
restart_rknn.sh
5、运行示例
1)Python Demo
下述命令是在电脑端执行,通过与板卡间OTG ADB通信来连板运行:
1.1)准备模型
cd ~/bigger_disk/rknpu/rknn_model_zoo/examples/yolov5/model
bash download_model.sh
1.2)模型转换
cd ~/bigger_disk/rknpu/rknn_model_zoo/examples/yolov5/python
python convert.py ../model/yolov5s_relu.onnx rk3562 i8 ../model/yolov5s_relu.rknn
1.3)运行Demo
cd ~/bigger_disk/rknpu/rknn_model_zoo/examples/yolov5/python
python yolov5.py --model_path ../model/yolov5s_relu.rknn --target rk3562 --img_show
运行时有如下提示:
按 rknn-toolkit2/doc/rknn_server_proxy.md at master · airockchip/rknn-toolkit2 · GitHub一文提及的如下内容:
按上面要求,在开发板上执行netstat -n -t -u -a命令,没有5037端口,故按上述要求,更新板端ADBD工具,重启开发板后,每次连板远程跑模型前,需要板端先执行restart_rknn.sh重启RKNN服务。相应的更新adbd工具命令如下:
wget -O adbd.zip https://ftzr.zbox.filez.com/v2/delivery/data/7f0ac30dfa474892841fcb2cd29ad924/adbd.zip
unzip adbd.zip
adb push adbd/linux-aarch64/adbd /usr/bin/adbd
adb shell "chmod 755 /usr/bin/adbd"
更新adbd后,再次运行python demo,成功运行时,会有如下打印输出:
并弹出如下图片显示出来:
2)C Demo
准备模型和模型转换,与Python Demo一致。接下来主要是编译C例子:
cd ~/bigger_disk/rknpu/rknn_model_zoo
修改build-linux.sh文件,在开头处添加如下内容(交叉编译链工具的路径对应的环境变量):
GCC_COMPILER=~/bigger_disk/rknpu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
接下来就使用如下命令编译:
bash -e build-linux.sh -t rk356x -a aarch64 -d yolov5
会提示如下:
CMake 3.15 or higher is required. You are running version 3.10.2
需更新下cmake工具,版本较低,如下:
wget -c https://github.com/Kitware/CMake/archive/refs/tags/v3.16.0.tar.gz
tar xvf v3.16.0.tar.gz -C CMake-3.16.0
rm -rf v3.16.0.tar.gz
cd CMake-3.16.0/
./configure
make
sudo make install
更新CMake版本后,重新编译下C Demo,会在当前目录下生成install文件夹,接下来推到板端执行:
adb push install/rk356x_linux_aarch64/rknn_yolov5_demo /data/
adb shell
cd /data/rknn_yolov5_demo/
export LD_LIBRARY_PATH=./lib
./rknn_yolov5_demo model/yolov5s_relu.rknn model/bus.jpg
执行后有如下打印:
将生成的out.png文件拉到电脑上查看:
adb pull /data/rknn_yolov5_demo/out.png .
板端拉到电脑的文件打开后显示如下:
上述操作,看到Python与C的Demo的运行状态,RKNPU的开发环境也告一段落。