部署"桨"坛栏目聚焦AI硬件部署,分享多款厂商硬件部署方案及教程,帮助开发者们实现模型训练与推理的一体化开发和多硬件设备间的无缝切换。
本教程以搭载安谋科技“周易”(Arm China “Zhouyi”) AIPU的“全志R329”开发板为例,介绍如何使用Paddle2ONNX模型转换工具将飞桨模型(以ResNet50为例)转换为ONNX模型,然后通过“周易”的AIPU工具将ONNX模型转换成.bin格式的模型,并在R329上部署。最后我们将会使用“周易”的Demo运行查看ResNet50模型在R329上的运行效果。
一、准备开发板环境
准备好后即可开始向SD卡中烧录镜像。烧录好镜像的SD卡在插入R329开发板后,即可使用UBS—Type-C数据线连接并操作R329开发板了。详细烧制过程如下所示:
$:ls /dev/disk* #通过插拔SD卡,确认待使用SD卡设备号;本教程SD卡号为“/dev/disk4”
$:diskutil unmountDisk /dev/disk4 #取消待使用SD卡的挂载
$:sudo dd bs=1m if=Armbian_21.08.0-trunk_Maixsense_bullseye_edge_5.14.0.img of=/dev/disk4 #使用dd命令烧录镜像(dd命令的详细使用方法可以通过输入“参见dd --–help”命令查看)
$:diskutil eject /dev/disk4 #弹出SD卡
$:minicom -s # 打开串口配置菜单。如下图所示,在菜单中选择“Serial port setup”后将进入设置界面。修改“A- Serial Device”为开发板串口id:“/dev/tty.usbserial-14110”,再修改“E- Bps/Par/Bits”将波特率设置为:115200 8N1,然后按Esc键退出设置界面,最后选择“Exit”退出。
$: minicom – D /dev/tty.usbserial-14110 #登录开发板
利用nmtui命令为开发板配置网络,方便后续使用scp命令将Mac电脑上资料拷贝到开发板上。(注意:使用scp命令时,需要保证本地电脑和开发板在同一个局域网中)参考下方参考链接中“开箱测试”、“上手使用”详细描述,了解配置网络方法,熟悉开发板的使用。
二、搭建飞桨开发环境
1.安装飞桨框架
$ :pip3 install paddlepaddle --upgrade -i https://mirror.baidu.com/pypi/simple #安装CPU版本的飞桨框架
$ :pip3 install paddlepaddle-gpu --upgrade -i https://mirror.baidu.com/pypi/simple #安装GPU版本的飞桨框架
$:git clone https://github.com/PaddlePaddle/PaddleClas.git
$:cd PaddleClas
$:sudo pip3 install -r requirements.txt #用于安装必要的安装包。注意:请使用sudo权限,否则包下载完后安装没有权限。
$:vim ppcls/engine/engine.py #按照下图修改engine.py中第381行代码。(由于R329配置的屏幕尺寸是224*224,因此需要将Demo的输入图像尺寸设定成固定维度。)
安装Paddle2ONNX,用于将飞桨模型转换成ONNX格式。具体命令如下:
$:pip3 install paddle2onnx
$:pip3 install onnx
三、模型格式转换
1.飞桨模型转为ONNX格式的模型:
$:cd PaddleClas
$:wget -P ./cls_pretrain/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_vd_pretrained.pdparams #下载飞桨训练好的分类模型
$:python3.7 tools/export_model.py -c ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml -o Global.pretrained_model=./cls_pretrain/ResNet50_vd_pretrained -o Global.save_inference_dir=./deploy/models/class_ResNet50_vd_ImageNet_infer -o Global.device=cpu #导出飞桨模型,导出格式如下所示。
├── class_ResNet50_vd_ImageNet_infer
│ ├── inference.pdiparams
│ ├── inference.pdiparams.info
│ └── inference.pdmodel
$:paddle2onnx -m ./deploy/models/class_ResNet50_vd_ImageNet_infer --model_filename inference.pdmodel --params_filename inference.pdiparams -s ./deploy/models/class_ResNet50_vd_ImageNet_infer/paddle2onnx_resnet50_model.onnx --opset_version 11 #参数说明如下所示
$:sudo docker pull zepan/zhouyi
$:sudo docker run -i -t zepan/zhouyi /bin/bash
$:cd /root/demos/tflite
参考链接:https://aijishu.com/a/1060000000216857
$:python3 dataset/preprocess_dataset.py
输出dataset/dataset.npy和dataset/label.npy;
$:mkdir baidu
$:cd baidu
$:docker cp paddle2onnx_resnet50_model.onnx 298d15395846 :/root/demos/tflite/baidu/. #使用docker cp命令将上一步生成的.onnx格式的模型从Mac电脑拷贝到docker容器中。
$:vim resnet_50_build_run.cfg #配置文件完整内容见下方框格。
$:cd ..
$:aipubuild baidu/resnet_50_build_run.cfg #在根目录下生成paddle_onnx_resnet50_50Z2_1104_build.bin模型
[Common]
mode = build
[Parser]
model_type = onnx
input_data_format = NCHW
model_name = resnet_50
detection_postprocess =
model_domain = image_classification
input_model = ./baidu/paddle2onnx_resnet50_model.onnx
input = x
input_shape = [1, 3, 224, 224]
output = Softmax_0
[AutoQuantizationTool]
output_nodes =
quantize_method = SYMMETRIC
ops_per_channel = DepthwiseConv
reverse_rgb = False
label_id_offset = 0
preprocess_mode = normalize
quant_precision = int8
calibration_data = ./dataset/dataset.npy
calibration_label = ./dataset/label.npy
[GBuilder]
output = paddle_onnx_resnet50_50Z2_1104_build.bin
profile=True
target = Z1_0701
四、运行Demo
1.下载官方Demo。
官方Demo下载链接:
|
官方自带的aipu.bin模型推理效果如下图,该模型在R329上推理速度约为在20fps。
3.运行飞桨模型转换Demo
$:scp paddle_onnx_resnet50_50Z2_1104_build.bin root@*.*.*.*:/root/ zhouyi_test
$:./zhouyi_cam paddle_onnx_resnet50_50Z2_1104_builds.bin unsigned
运行效果如下:
该Demo教程主要程序在main.cpp函数中实现,通过OpenCV循环读取摄像头数据,送给推理引擎,对采集到的图像进行分类。其中推理引擎使用AIPU的相关接口
长按下方二维码立即
Star
更多信息:
飞桨官方QQ群:793866180
飞桨官网网址:
www.paddlepaddle.org.cn/
飞桨开源框架项目地址:
GitHub:
github.com/PaddlePaddle/Paddle
Gitee:
gitee.com/paddlepaddle/Paddle
欢迎在飞桨论坛讨论交流~~
http://discuss.paddlepaddle.org.cn