使用NPU进行resnet50识别分为两部分,第一部分为板上demo演示,第二部分为PC端部署模型后放入板上进行运行测试。
一、demo演示
首先在板上安装python3.8(版本不能错)及virtual env
sudo pip3 install virtualenv
sudo vitualenv aipu
source aipu/bin/activate //激活virtualenv
deactivate //退出virtualenv
安装完成后测试
下载demo包,并安装依赖
mkdir ~/tmp && cd ~/tmp
git clone https://github.com/zifeng-radxa/siriders1_NPU_example.git
cd siriders1_NPU_example
pip3 install -r requirements.txt
目录结构如下
生成推理文件,使用如下images.jpg图片
生成输入文件
python3 input_gen.py --img_path ./images.jpg
添加动态库路径,执行demo
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/libs
./aipu_test aipu_mlperf_resnet50.bin input_3_224_224.bin
结果如下
fval最大值参考https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a#file-imagenet1000\\\\\_clsidx\\\\\_to\\\\\_labels-txt-L637,对应idx: 282: 'tabby, tabby cat'
二、PC部署模型
使用WSL Ubuntu22.04部署,首先安装conda
mkdir /usr/temp && cd /usr/temp
wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
bash Anaconda3-2024.06-1-Linux-x86_64.sh
export PATH="~/anaconda3/bin:$PATH"
source ~/.bashrc
配置完成如下
创建conda环境
conda create -n aipu python=3.8
关闭shell并重新打开
开启conda环境
conda activate aipu
tar -xvf Zhouyi_Z2.tar.gz
cd Zhouyi_Z2 && bash +x SETUP.SH
进入安装目录安装依赖
cd AI610-SDK-r1p3-AIoT/AI610-SDK-r1p3-00eac0/Out-Of-Box/out-of-box-nn-compiler
pip3 install -r lib_dependency.txt
source env_setup.sh
模型转换
cd siengine/nn-compiler-user-case-example/onnx
python3 generate_calibration_data.py
python3 generate_input_binary.py
cd resnet50/
export PATH=$PATH:/root/.local/bin
aipubuild build.cfg
安装gcc-linaro-7.5.0-2019.12-x86\\\\\_64\\\\\_aarch64-linux-gnu
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar
cp -r gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu /opt
修改路径变量
cd siengine/nn-runtime-user-case-example
nano CMakelists.txt
#set(UMDSRC "${CMAKE_SOURCE_DIR}/../AI610-SDK-${AIPU_VERSION}-00eac0/AI610-SDK-1012-${AIPU_VERSION}-eac0/Linux-driver/driver/umd")
set(UMDSRC "${CMAKE_SOURCE_DIR}/../../AI610-SDK-${AIPU_VERSION}-AIoT/AI610-SDK-r1p3-00eac0/AI610-SDK-1012-${AIPU_VERSION}-eac0/Linux-driver/driver/umd")
进行编译
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ../
make
得到以下文件,libs文件夹中生成libaipudrv.so文件为0KB,进行删除,其余文件拷贝至SiRider中
\Zhouyi_Z2\zy\siengine\nn-compiler-user-case-example\onnx\resnet50\aipu_mlperf_resnet50.bin //模型文件
\Zhouyi_Z2\zy\siengine\nn-compiler-user-case-example\onnx\resnet50\input_3_224_224.bin //照片文件
\Zhouyi_Z2\zy\siengine\nn-runtime-user-case-example\out\linux\aipu_test //执行文件
\Zhouyi_Z2\zy\siengine\nn-runtime-user-case-example\out\linux\libs //动态库文件夹
进入SiRider拷贝文件夹后进行推理
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/libs
chmod +x aipu_test
./aipu_test aipu_mlperf_resnet50.bin input_3_224_224.bin
输入图片如下
SiRider执行结果如下
fval最大值参考https://gist.github.com/yrevar/942d3a0ac09ec9e5eb3a#file-imagenet1000\\\\\_clsidx\\\\\_to\\\\\_labels-txt-L637,对应idx: 397: 'lionfish'