从零开始搭建Rock5a的MMDeploy模型转换环境
【摘要】 从零开始搭建Rock5a的MMDeploy模型转换环境
创建Ubuntu 18.04.6 LTS桌面系统虚拟机

下载Desktop Image:http://www.releases.ubuntu.com/18.04/ubuntu-18.04.6-desktop-amd64.iso

打开虚拟机软件,新建虚拟机:

下一步:

下一步:

下一步:

下一步:

下一步:

完成:

耐心等待安装完毕:


输入密码登陆:

Next直到配置完成Done。
sudo apt install net-tools

ifconfig查看网卡地址:

安装ssh:
sudo apt install openssh-server

配置MobaXterm:


输入密码,登陆:

将虚拟机设置改为 16G内存,重启虚拟机:

sudo apt-get update

sudo apt install curl

安装cmake 3.19
curl -O https://cmake.org/files/v3.19/cmake-3.19.8-Linux-x86_64.sh

sudo mkdir /usr/local/cmake-3.19.8
sudo bash cmake-3.19.8-Linux-*.sh --prefix=/usr/local/cmake-3.19.8 --exclude-subdir

在~/.bashrc增加:export PATH=/usr/local/cmake-3.19.8/bin:$PATH
并执行
source ~/.bashrc

cmake --version

查看Python版本:

安装Anaconda环境:
打开Anaconda官网:Free Download | Anaconda

获取Linux版本的下载地址,并在终端wget:
wget https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-x86_64.sh

执行安装:
bash ./Anaconda3-2023.07-1-Linux-x86_64.sh

回车:

输入yes继续:

回车继续:

输入yes继续:

检查conda base环境的Python版本:3.11.3
source ~/.bashrc
python -V

创建Python3.8的conda环境
conda create -n rock38 python=3.8

按Y继续:

进入Python 3.8环境:
conda activate rock38

安装 PyTorch 1.8 CPU版
conda install pytorch==1.8.1 torchvision==0.9.1 torchaudio==0.8.1 cpuonly -c pytorch

按Y继续:


更新pip:
pip install --upgrade pip

安装python apt包:
sudo apt-get install libopencv-dev python3-opencv


pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

安装mmcv-full
pip install -U openmim

安装mmcv
mim install "mmcv==2.0.1"

安装git
sudo apt install git

下载rock rknn-toolkit2代码仓:
git clone https://github.com/rockchip-linux/rknn-toolkit2

cd rknn-toolkit2/packages
pip install ./rknn_toolkit2-1.5.0+1fa95b5c-cp38-cp38-linux_x86_64.whl --no-deps

安装onnx和onnxruntime
pip install onnx==1.8.1 onnxruntime==1.8.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

下载MMDeploy代码仓
cd ~
git clone https://github.com/open-mmlab/mmdeploy

cd mmdeploy
git submodule update --init --recursive

cd ~
wget https://github.com/microsoft/onnxruntime/releases/download/v1.8.1/onnxruntime-linux-x64-1.8.1.tgz

tar -zxvf onnxruntime-linux-x64-1.8.1.tgz

cd onnxruntime-linux-x64-1.8.1
export ONNXRUNTIME_DIR=~/onnxruntime-linux-x64-1.8.1
export LD_LIBRARY_PATH=$ONNXRUNTIME_DIR/lib:$LD_LIBRARY_PATH
export MMDEPLOY_DIR=~/mmdeploy
cd ${MMDEPLOY_DIR}

编译ONNXRuntime自定义算子
mkdir -p build && cd build
cmake -DCMAKE_CXX_COMPILER=g++-7 -DMMDEPLOY_TARGET_BACKENDS=ort -DONNXRUNTIME_DIR=${ONNXRUNTIME_DIR} ..

make -j$(nproc) && make install

cd ${MMDEPLOY_DIR}
编辑requirements/runtime.txt 去掉onnx

mim install -e .


pip install mmpretrain

cd ~
git clone https://github.com/open-mmlab/mmpretrain

cd mmpretrain
mim install -e .

cd ~
wget https://download.openmmlab.com/mmclassification/v0/resnet/resnet50_batch256_imagenet_20200708-cfb998bf.pth --no-check-certificate

pip install numpy==1.20.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install scipy -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install onnxoptimizer -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install psutil -i https://pypi.tuna.tsinghua.edu.cn/simple

sudo apt install gawk

sudo apt install bison

ResNet50模型转换:
cd ${MMDEPLOY_DIR}
mkdir -p mmdeploy_models/mmpretrain/resnet50
编辑 rknn_resnet50.sh文件
python tools/deploy.py \ configs/mmpretrain/classification_rknn-int8_static-224x224.py \ ~/mmpretrain/configs/resnet/resnet50_8xb32_in1k.py \ ~/resnet50_batch256_imagenet_20200708-cfb998bf.pth \ ~/mmpretrain/demo/demo.JPEG \ --work-dir mmdeploy_models/mmpretrain/resnet50 \ --device cpu \ --dump-info

切换到root用户,避免出现 /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found
sudo su -
cd /usr/local
wget http://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz

tar -zxvf glibc-2.29.tar.gz

cd glibc-2.29
mkdir -p build
cd build
export LD_LIBRARY_PATH=/usr/local/glibc-2.29/lib
../configure --prefix=/usr/local --disable-sanity-checks


make -j8

make install

cp /usr/local/lib/libm-2.29.so /lib/x86_64-linux-gnu/
cd /lib/x86_64-linux-gnu/
ln -sf libm-2.29.so libm.so.6
strings /lib/x86_64-linux-gnu/libm.so.6| grep GLIBC_2.29

退回到zhanghui用户:
exit
cd ~/mmdeploy
修改rknn的配置文件避免出现 ValueError: Invalid target_platform 'rv1126'!
vi configs/_base_/backends/rknn.py 将rv1126改为rk3588

执行模型转换:
sh ./rknn_resnet50.sh

编辑 ~/mmdeploy/mmdeploy/backend/rknn/onnx2rknn.py 文件,只留下model参数,其他去掉:


重新执行:sh ./rknn_resnet50.sh


虽然报错,但是在~/mmdeploy/mmdeploy_models/mmpretrain/resnet50目录下已经生成了结果:

本篇文字在ubuntu 22.04上也全部试验成功。有以下几点不同:
1、由于ubuntu 22.04的gcc是gcc11,故cmake时的参数改为 cmake -DCMAKE_CXX_COMPILER=g++-11 -DMMDEPLOY_TARGET_BACKENDS=ort -DONNXRUNTIME_DIR=${ONNXRUNTIME_DIR} ..

2、无需执行修复GLIBC的root用户相关动作。
篇外篇:
验证rknn-toolkit的测试代码:
cd ~/rknn-toolkit2/examples/onnx/resnet50v2
修改 test.py,将rknn.config的参数增加:target_platform='rk3588'

python test.py

在 test.py中增加
import urllib.request

重新执行:
python test.py




此时可以看到rknn-toolkit2的官方版本也可以生成rknn版本:

PS:查看已安装的pip包的版本:

(未完待续)
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)