从零开始搭建Rock5a的MMDeploy模型转换环境

举报
张辉 发表于 2023/08/05 10:32:53 2023/08/05
【摘要】 从零开始搭建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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。