由于最近在做有关开发板的相关工作,苦于网络上关于RV1126型号的相关资料太少,且之前从来没有接触过嵌入式等相关内容,故在踩了无数坑之后总结如下,希望能够帮助到有需要的新手朋友们(高手大可不必!!!)。
首先,对于RV1126型号开发板来说,最首先的任务是能够进入到开发板内部的系统之内,才能更好的方便之后的算法部署等开发工作。
基于上述原因,具体步骤如下:
# 下载安装adb相关文件,并将开发板与PC主机通过USB相连
# 进入cmd命令
# 进入adb所在目录,执行下述命令
cd adb
adb shell
通过上述,即可顺利进入RV1126开发板系统内部(也可通过linux终端进入),之后可根据需求利用linux命令在开发板内部快乐的遨游!!!
其他版本的ubuntu系统应该也可以,由于相关文档推荐,故采用了ubuntu16.04系统,大家也可以尝试其他更新的系统进行测试。
关于SDK的获取这里不再介绍,大家可以从官方渠道获取。当获取到SDK包后,可打开ubuntu的终端,按步骤进行如下操作。
# 解压RV1126开发板SDK源码
mkdir rv_1126_rv1109
tar xjf rv1126_rv1109_linux_sdk_v1.0.0_20200616.tar.bz2 -C rv1126_rv1109
cd rv1126_rv1109
.repo/repo/repo sync -l
.repo/repo/repo sync -c
在解压完成后,需要进行编译环境的搭建,并进行相关依赖库的安装。
sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools
device-tree-compiler gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev
python-linaro-image-tools linaro-image-tools autoconf autotools-dev libsigsegv2 m4
intltool libdrm-dev curl sed make binutils build-essential gcc g++ bash patch gzip gawk
bzip2 perl tar cpio python unzip rsync file bc wget libncurses5 libqt4-dev libglib2.0-dev
libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client subversion asciidoc
w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev expect fakeroot cmake
方式1:进行全自动编译(包括U-BOOT、Kernal、Buildroot、Recovery编译)
sudo ./build.sh all
注:第一次编译会花费很多时间,尽可能保持网络畅通
方式2:分别进行编译
sudo ./build.sh uboot # U-BOOT编译
sudo ./build.sh kernel # Kernal编译
sudo ./build.sh buildroot # Buildroot编译
sudo ./build.sh recovery # Recovery编译
注:在编译完成后可进行板子的固件烧录,由于我拿到的开发板是已经烧录好的,故没有进行具体的烧录工作。
由于这块板子后续需要进行相关算法的部署,在查阅了相关资料以及开发文档后,选择安装RKNN-Toolkit安装包,为后续的算法部署打好基础。
# 通过anaconda3创建rk_env环境,方便管理该python版本下的环境
conda create -n rk_env python=3.6.6
source activate rk_env
# 由于在创建环境时anaconda默认安装了pip,直接使用也可以
sudo apt-get install python3-pip
# 进入SDK包内external/rknn-toolkit/packages
cd packages/
# 安装python相关依赖
pip3 install tensorflow-gpu==1.11.0 # tensorflow GPU版本
pip3 install tensorflow==1.11.0 # tensorflow CPU版本
pip3 install mxnet==1.5.0
pip3 install torch==1.2.0 torchvision==0.4.0
pip3 install opencv-python
pip3 install gluoncv
# 安装RKNN-Toolkit
pip install rknn_toolkit-1.4.0-cp36-cp36m-linux_x86_64.whl
# 检查RKNN-Toolkit是否安装成功
python3
from rknn.api import RKNN
# 如果导入模块没有失败,说明安装成功
在安装完rknn工具包后,可通过SDK中的相关demo进行测试,此部分主要是利用PC的CPU 以及rknn环境进行测试。
# 进入examples/tflite/mobilenet_v1目录
cd ..
cd /examples/tflite/mobilenet_v1
# 执行test.py脚本
python3 test.py
此部分将RV1126开发板连接至PC端,利用PC平台进行开发板的模型算法测试,此处利用的是开发板上的NPU。
# 查询RV1126开发板的设备编号
# 将RV1126通过USB连接到PC上,查看设备编号
adb devices
# 进入examples/tflite/mobilenet_v1目录
cd examples/tflite/mobilenet_v1
# 修改test.py脚本里的config参数和init_runtime参数
vim test.py
# 找到脚本里调用模型配置接口 config 的地方,如下:
rknn.config(channel_mean_value='128 128 128 128', reorder_channel='0 1 2')
# 注意,channel_mean_value的值默认初始值,不需要修改
# 修改该接口的参数
rknn.config(channel_mean_value='128 128 128 128', reorder_channel='0 1 2', target_platform=['rv1126'])
# 找到脚本里初始化环境变量的方法 init_runtime,如下:
ret = rknn.init_runtime()
# 修改该方法的参数
ret = rknn.init_runtime(target='rv1126', device_id='xxx') # 这里的xxx填之前找到的设备编号
# 保存修改并退出
# 执行test.py脚本
python3 test.py
此处是将写好的模型算法push到开发板上,通过adb调试进入板子系统内部进行算法的运行,与上述两种测试有本质上的不同。
# 下载gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf
# 移动安装包至/home/xxx
# 解压安装包至/home/xxx/gcc目录中(此处xxx指用户名,请根据自身情况修改)
sudo tar -xvf /home/xxx/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz -C /home/xxx/gcc
# 解压完成后,执行下述命令,添加环境变量
vim ~/.bashrc
# 在最后添加路径
export PATH="/home/xxx/gcc/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH"
# 使用source命令重新加载生效该配置文件
source ~/.bashrc
# 查看安装是否成功
arm-linux-gnueabihf-gcc -v
回到rv1126_rv1109/external/rknpu/rknn/rknn_api/examples/rknn_mobilenet_demo目录下,打开并修改build.sh文件,操作如下:
注释 # for rk1808 aarch64 下面的GCC_COMPILER=~/opts/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu
在# for rv1109/rv1126 armhf下面路径修改如下
在rv1126_rv1109/external/rknpu/rknn/rknn_api/examples/rknn_mobilenet_demo目录下,执行如下命令:
./build.sh
adb shell
cd userdata
mkdir -p examples/rknn_mobilenet_demo
adb push install/rknn_mobilenet_demo /userdata/examples/rknn_mobilenet_demo/
adb shell
cd userdata/examples/rknn_mobilenet_demo
./rknn_mobilenet_demo model/mobilenet_v1_rv1109_rv1126.rknn model/dog_224x224.jpg
# 激活环境
source activate rk_env
# 打开yolov3根目录
cd rv1126_rv1109/external/rknn-toolkit/examples/darknet/yolov3/
# 安装matplotlib库(已有则忽略)
pip install matplotlib
# 运行yolo3测试文件
python3 test.py
# 激活环境
source activate rk_env
# 打开yolov3根目录
cd rv1126_rv1109/external/rknn-toolkit/examples/darknet/yolov3/
# 修改test.py文件参数
# 找到脚本里调用模型配置接口 config 的地方,如下:
rknn.config(channel_mean_value='128 128 128 128', reorder_channel='0 1 2')
# 修改该接口的参数
rknn.config(channel_mean_value='128 128 128 128', reorder_channel='0 1 2', target_platform=['rv1126'])
# 找到脚本里初始化环境变量的方法 init_runtime,如下:
ret = rknn.init_runtime()
# 修改该方法的参数
ret = rknn.init_runtime(target='rv1126', device_id='xxx') # xxx为设备编号
# 保存修改并退出
# 运行yolo3测试文件
python3 test.py