圈圈虫 · 2021年04月28日

Tengine 支持 PaddlePaddle 模型部署

原文:知乎
作者:圈圈虫

为准时参加 PaddlePaddle 5月举行的线下 “网友交流会”

Tengine 组负责模型转换工具的小伙伴愉快的开始支持 PaddlePadde 2.0 的静态图模型。

任务目标

将 PaddleClas 项目中的 mobilenetv2 模型转换成 Tengine 的 tmfile,并顺利运行。

准备工作

将 PaddleClas 项目中的预训练好的动态图存储格式的分类模型 MobileNetv2 转换成 PaddlePaddle 2.0 的静态图模型存储格式。

下载 PaddleClas 项目

$ git clone https://github.com/PaddlePaddle/PaddleClas.git

认真阅读 Readme

https://github.com/PaddlePaddle/PaddleClas/blob/release/2.1/README_cn.md

安装 paddlepaddle

$ pip3 install paddlepaddle --upgrade -i https://mirror.baidu.com/pypi/simple

安装 paddleclas 依赖库

$ pip3 install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple

预训练模型

https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_pretrained.pdparams

下载完成后复制到到 PaddleClas 根目录下的 output 文件夹中。

静态图模型

PaddleClas 的 Model Zoo 提供的预训练模型是动态图存储格式,需要通过工具脚本转换成静态图存储格式才了更方便的进行后续工作。

$ python3 tools/export_model.py --model MobileNetV2 --pretrained_model ./output/MobileNetV2_pretrained --output_path ./inference --class_dim 1000

如果执行过程中碰见报错,请安装指定版本的 gast,这里我已经提交 pull request 不知道什么时候能被合并进入主线代码。

$ pip3 install gast==0.3.3

image.png

模型转换

下载转换工具源码

$ git clone  https://github.com/OAID/Tengine-Convert-Tools.git

编译

$ mkdir build && cd build
$ cmake .. && make

执行

$ ./convert_tool -f paddle -p inference.pdmodel -m inference.pdiparams -o mobilenetv2_paddle.tmfile

---- Tengine Convert Tool ----

Version     : v1.0, 10:10:30 Apr 26 2021
Status      : float32
Create tengine model file done: mobilenetv2_paddle.tmfile

运行

下载 Tengine

$ git clone https://github.com/OAID/Tengine.git

编译

$ mkdir build && cd build
$ cmake .. && make

执行

bug1989@DESKTOP-SGN0H2A:/mnt/d/ubuntu/github/tengine-lite/build$ ./examples/tm_classification -m mobilenetv2_paddle.tmfile -i cat.jpg -g 224,224 -s 0.017,0.017,0.017 -r 10
Mean value not specified, use default   104.0, 116.7, 122.7
tengine-lite library version: 1.2-dev

model file : /mnt/d/ubuntu/github/PaddleClas/inference/mobilenetv2_paddle.tmfile
image file : examples/cat.jpg
img_h, img_w, scale[3], mean[3] : 224 224 , 0.017 0.017 0.017, 104.0 116.7 122.7
Repeat 10 times, thread 1, avg time 40.32 ms, max_time 56.47 ms, min_time 35.80 ms
--------------------------------------
0.317292, 281
0.176262, 285
0.154328, 282
0.039242, 287
0.029589, 278
--------------------------------------

后记

PaddlePaddle 作为国内最大的自研训练框架,其周边内容实在是太多,加上最近版本从 1.x 升级到 2.x,部分文档、链接存在错误指向的问题。同时静态图的模型文件,暂时没有详细的文档说明其存储结构,大多数情况下只能靠以往适配训练框架模型的专家经验和大胆猜想进行实验。

当然,负责本次技术支持的 PaddlePaddle 同学@Jason相当给力,每次都能及时将我们从庞大的 Readme 文档迷宫中救出,指引我们去该去的地方。

感谢 PaddlePaddle 的炼丹师开源了种类丰富的预训练模型,希望通过 Tengine 对 PaddlePaddle 2.0 Model Zoo 的逐步支持,让从事人工智能边缘计算的小伙伴发(bai)现(piao)更多宝藏。

传送门

OAID/Tengine​github.com

Tengine-Convert-Tools​github.com

PaddlePaddle/PaddleClas​github.com

相关文章

我是圈圈虫,一个热爱技术的中年大叔。快加入 OPEN AI LAB 开发者技术 QQ 群(829565581)来找我吧!溜了~~
入群秘令:CNN

更多Tengine相关内容请关注Tengine-边缘AI推理框架专栏。
推荐阅读
关注数
18838
内容数
1371
嵌入式端AI,包括AI算法在推理框架Tengine,MNN,NCNN,PaddlePaddle及相关芯片上的实现。欢迎加入微信交流群,微信号:aijishu20(备注:嵌入式)
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息