本文主要介绍通过 MindStudio 全流程开发工具链,将 PaddlePaddle 模型转成 om 模型,并在昇腾环境上进行推理的流程。
本文开发的模型为基于 PaddlePaddle 的模型库 PaddleOCR 中的SAST_ResNet50_vd模型。静态分析安全测试(SAST)是指不运行被测程序本身,仅通过分析或者检查源程序的语法、结构、过程、接口等来检查程序的正确性。相比于动态分析或运行时测试方案,它们能在开发阶段,而不是开发完成之后,探测出源码中的安全漏洞,从而大大降低修复安全问题的成本。它们还能找到许多动态分析工具通常无法找到的漏洞。而且,得益于其自动化的特性,SAST 工具能在成百上千款应用间实现伸缩,而这是仅靠人为分析方法无法企及的。
开发流程示意图如图1.1:
图1.1
通过 MindStudio 官网介绍可以学习了解 MindStudio 的功能,以及按照MindStudio 用户手册进行安装和使用。
官网链接:https://www.hiascend.com/zh/software/mindstudio
用户手册: https://www.hiascend.com/document/detail/zh/mindstudio/50RC2/progressiveknowledge/index.html
通过官网连接步骤安装好Mindstudio后,点击桌面快捷方式启动 MindStudio,选择不导入配置,点击“OK”,如图2.1。
图2.1
在 Projects 标签下点击“New Project”创建一个新的工程。选择 Ascend App,输入工程名、和工程目录,点击“Change”选择或者添加CANN 版本,如图2.2。
图2.2
点击 Remote CANN Setting 对话框中的加号,弹出 SSH Configurations 对话框,然后点击其中的加号,填写红框中的服务器信息,点击“Test Connection” 弹出连接成功对话框,如图2.3。
图2.3
依次点击“OK”完成 Remote Connection 配置。
点击文件夹图标,在弹出的对话框中选择 CANN 安装路径,点击“OK”,如图2.4。
图2.4
点击Finish后,开始同步远程 CANN 版本资源,如图2.5。
图2.5
选择 ACL Project,点击“Finish”,如图2.7。
图2.7
点击“Tools”->“Start SSH session”,选择远程环境,启动远程终端窗口。如图2.9。
图2.9
点击“Tools”->“Deployment”->“Configuration”,按图2.10所示,配置远端映射路径。依次点击“OK”完成配置。
图2.10
快捷键Ctrl+Alt+Shift+S 打开Project Structure 页面,如图2.11所示,点击“SDKs”,点击加号,点击“Add Python SDC…”。
图2.11
点击“SSH Interpreter”,自动识别远程 Python 环境信息,点击“OK”,如图2.12所示。
图2.12
点击“Project”,选择创建的 SDK,点击“OK”,如图2.13所示。
图2.13
点击“Modules”->“Dependence”,选择创建的 SDK,点击“OK”,如图2.14所示。
图2.14
点击“Tools”-> “Deployment”->“Automatic Upload”。 选择远程服务器,可自动上传修改并保存的文件。 如图2.15所示。
图2.15
至此 MindStudio 开发环境搭建完成。
a.在本地终端中通过 git 命令获取源码,参考命令如下:
git clone -b release/2.5 https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
git reset --hard a40f64a70b8d290b74557a41d869c0f9ce4959d5
cd ..
b.获取原始数据集
CDAR 2015 数据集包含1000张训练图像和500张测试图像。参考PaddleOCR数据集数据处理方式,ICDAR 2015 数据集可以点击链接进行下载,首次下载需注册。注册完成登陆后,下载图3.1中红色框标出的部分。
图3.1
在PaddleOCR文件夹下创建如下路径:
train_data/icdar2015/text_localization 并将下载好的数据集 ch4_test_images.zip 解压后放在以上路径下,并获取标签文件test_icdar2015_label.txt 如图3.2所示。
图3.2
c.改模型配置文件
配置不使用 gpu 和以及确认Eval中数据集路径,如图3.3,图3.4。
图3.3
然后将PaddleOCR同步到远程服务器,如图3.5所示
图3.5
通过 pip 命令在环境中安装依赖。先执行cd PaddleOCR 命令将目录转到requirement.txt所在文件夹,然后执行命令如下([–user]为可选参数,普通用户需要添加使用):
pip3 install -r requirements.txt --user
如图3.6所示:
图3.6
通过以上步骤,成功获取SAST_ResNet50_vd模型的源代码框架,以及配置成完全运行依赖环境。
在工程中添加数据预处理脚本,该脚本主要对图片进行归一化操作并转成二进制文件保存如图4.1所示。
图4.1
如图4.2所示,点击下拉按钮,选择“Edit Configurations…”,
图4.2
如图4.3所示,点击加号,选择“Ascend App”。
图4.3
如图4.4所示,输入命令名称,选择可执行脚本,点击“OK”。
图4.4
如图4.5所示,添加如下命令参数,点击“OK”。
--config=PaddleOCR/configs/det/det_r50_vd_east.yml
--opt=bin_data=./icdar2015_bin
–config:模型配置文件;–opt:bin文件保存路径。
图4.5
通过以上步骤,完成了数据预处理的工作,生成的预处理数据保存在
icdar2015_bin 目录下。
获取推理权重文件,权重链接为:https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_r50_vd_sast_icdar15_v2.0_train.tar
下载之后上传到远程服务器上,并通过PaddleOCR提供的tools/export_model.py
文件转为推理模型,输入命令参数如下:
-c ../configs/det/det_r50_vd_sast_icdar15.yml
-o Global.pretrained_model=../det_r50_vd_sast_icdar15_v2.0_train/best_accuracy
Global.save_inference_dir=../inference/det_r50_sast
推理模型存到inference目录下,并上传到远程服务器,如图5.1所示。
图5.1
在远程终端执行转 onnx 命令,并将生成的 onnx 模型拉取到本地,如图5.2 所示,参考命令如下:
paddle2onnx
--model_dir PaddleOCR/inference/det_r50_sast
--model_filename inference.pdmodel
--params_filename inference.pdiparams
--save_file PaddleOCR/SAST_ResNet50_vd.onnx
--opset_version 11
--enable_onnx_checker True
--input_shape_dict="{'x':[1,3,896,1536]}"
通过以上步骤,成功生成并获取 onnx 模型:SAST_ResNet50_vd.onnx
下面使用 MindStudio 的模型转换功能将 onnx 模型转成 om 模型。如5.3图所示,点击“Model Converter”按钮。
图5.3
在弹出的 Model Converter 窗口中选择 Model File,点击“OK”,如图5.4。
图5.4
解析完成后,设置模型名称、soc 版本、om 模型生成目录、通讯模型的 Input Format、Shape、Type 信息,点击“Next”,如图5.6。
图5.6
检视生成的 atc 命令,确认无误后点击“Finish”,图5.9
图5.9
通过以上步骤,使用 MindStudio 的模型转换功能成功将 onnx 模型转成 om模型:SAST_ResNet50_vd_bs1.om。
我们使用 ais-infer 工具进行推理,ais-infer 工具获取及使用方式请查看ais_infer 推理工具使用文档,链接:https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_infer
a.在本地终端命令中通过 git 获取推理工具代码,命令如下:
git clone https://gitee.com/ascend/tools.git
b.将tools\ais-bench_workload\tool\ais_infer 目录下的文件复制到当前 SAST_ResNet50_vd 目录下, 并上传到远程服务器,如图6.1所示。
图6.1
c.编译并安装 aclruntime 包,如图6.2所示,命令如下,
cd ais_infer/backend/
pip3 wheel ./
pip3 install aclruntime-0.0.1-cp37-cp37m-linux_x86_64.whl
(如果安装提示已经安装了相同版本的whl,请执行命令请添加参数"–force-reinstall")
图6.2
通过以上步骤,成功获取 ais_infer 工具,并安装了 aclruntime。
a.创建 results 目录用来保存推理结果,并上传到远程服务器,如图6.3。
图6.3
b.添加 ais_infer 的可执行命令:
--model=../inference/SAST_ResNet50_vd_bs1.om
--input=../icdar2015_bin
--output=../results/
–model:om模型路径;–input:bin文件路径;–output:推理结果保存路径。
点击“OK”,如图6.4所示。
图6.4
c.执行 ais_infer 命令,完成后在远程服务器上生成推理结果,如图6.5。
图6.5
d.须将远程生成的结果 load 到本地,否则在执行其他命令进行同步的时候
会删除,如图6.6。
图6.6
通过以上步骤成功获取了推理结果并保存在了results 目录下。
a.添加数据后处理脚本,对results文件夹中的预测结果进行精度测试,如图7.1。
图7.1
b.添加后处理命令:
--config=configs/det/det_r50_vd_sast_icdar15.yml
--opt=results=results/2022_10_29-09_41_14
–config:模型配置文件。–opt:推理结果路径。
点击“OK”,如图7.2
图7.2
d. 后处理执行完成后,打印的推理结果如图7.4.
图7.4
通过对比om 推理的后处理推理结果与pth权重精度(开源仓精度)下降不超过1%,说明模型推理精度满足要求。
pth权重精度:
后处理推理结果:
由于精度验证使用的是源码提供的样例图片,需要使用 ais_infer 工具的纯推理功能进行性能测试。
a.创建性能测试命令:
--model=../SAST_ResNet50_vd_bs1.om
--loop=50
--batchsize=1
–model:om模型路径;–loop:推理次数;–batchsize:om模型的batch。
如图8.1所示。
图8.1
c. 性能测试结果如图8.3所示,为 19.969fps。
图8.3
本文主要介绍使用 MindStudio 全流程开发工具链,将 PaddlePaddle 模型转成 om 模型,并在昇腾环境上进行推理的端到端流程。在使用 MindStudio 过程中也遇到过很多问题和不懂的地方,除了参考官方指导文档外,帮助更多的还是开发者社区,如下图所示,推荐大家多看些经验分享,写的很详细也很有帮助。
MindStudio 社区链接为: https://bbs.huaweicloud.com/forum/forum-945-1.html?filterCondition=1
进行模型转换时,在选择Model File时,出现以下错误:
本onnx模型较大,在进行模型转换时需要扩大内存, Help > Change Memory Settings >修改内存大小 改为2048。