使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理

本文主要介绍通过 MindStudio 全流程开发工具链,将 PaddlePaddle 模型转成 om 模型,并在昇腾环境上进行推理的流程。

一、模型介绍

本文开发的模型为基于 PaddlePaddle 的模型库 PaddleOCR 中的SAST_ResNet50_vd模型。静态分析安全测试(SAST)是指不运行被测程序本身,仅通过分析或者检查源程序的语法、结构、过程、接口等来检查程序的正确性。相比于动态分析或运行时测试方案,它们能在开发阶段,而不是开发完成之后,探测出源码中的安全漏洞,从而大大降低修复安全问题的成本。它们还能找到许多动态分析工具通常无法找到的漏洞。而且,得益于其自动化的特性,SAST 工具能在成百上千款应用间实现伸缩,而这是仅靠人为分析方法无法企及的。
开发流程示意图如图1.1:
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第1张图片
图1.1

二、MindStudio环境搭建

通过 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。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第2张图片
图2.1

在 Projects 标签下点击“New Project”创建一个新的工程。选择 Ascend App,输入工程名、和工程目录,点击“Change”选择或者添加CANN 版本,如图2.2。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第3张图片
图2.2

点击 Remote CANN Setting 对话框中的加号,弹出 SSH Configurations 对话框,然后点击其中的加号,填写红框中的服务器信息,点击“Test Connection” 弹出连接成功对话框,如图2.3。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第4张图片
图2.3
依次点击“OK”完成 Remote Connection 配置。

点击文件夹图标,在弹出的对话框中选择 CANN 安装路径,点击“OK”,如图2.4。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第5张图片
图2.4

点击Finish后,开始同步远程 CANN 版本资源,如图2.5。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第6张图片
图2.5

同步完成后点击“Next”,如图2.6。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第7张图片
图2.6

选择 ACL Project,点击“Finish”,如图2.7。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第8张图片
图2.7

此时成功创建了一个空的工程,如图2.8。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第9张图片
图2.8

点击“Tools”->“Start SSH session”,选择远程环境,启动远程终端窗口。如图2.9。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第10张图片
图2.9

点击“Tools”->“Deployment”->“Configuration”,按图2.10所示,配置远端映射路径。依次点击“OK”完成配置。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第11张图片
图2.10

快捷键Ctrl+Alt+Shift+S 打开Project Structure 页面,如图2.11所示,点击“SDKs”,点击加号,点击“Add Python SDC…”。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第12张图片
图2.11

点击“SSH Interpreter”,自动识别远程 Python 环境信息,点击“OK”,如图2.12所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第13张图片
图2.12

点击“Project”,选择创建的 SDK,点击“OK”,如图2.13所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第14张图片
图2.13

点击“Modules”->“Dependence”,选择创建的 SDK,点击“OK”,如图2.14所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第15张图片
图2.14

点击“Tools”-> “Deployment”->“Automatic Upload”。 选择远程服务器,可自动上传修改并保存的文件。 如图2.15所示。使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第16张图片
图2.15

至此 MindStudio 开发环境搭建完成。

三、模型获取

3.1 获取源码及数据集

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中红色框标出的部分。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第17张图片
图3.1

在PaddleOCR文件夹下创建如下路径:
train_data/icdar2015/text_localization 并将下载好的数据集 ch4_test_images.zip 解压后放在以上路径下,并获取标签文件test_icdar2015_label.txt 如图3.2所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第18张图片
图3.2

c.改模型配置文件
配置不使用 gpu 和以及确认Eval中数据集路径,如图3.3,图3.4。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第19张图片
图3.3

使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第20张图片
图3.4

然后将PaddleOCR同步到远程服务器,如图3.5所示使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第21张图片
图3.5

3.2安装依赖

通过 pip 命令在环境中安装依赖。先执行cd PaddleOCR 命令将目录转到requirement.txt所在文件夹,然后执行命令如下([–user]为可选参数,普通用户需要添加使用):

pip3 install -r requirements.txt --user 

如图3.6所示:
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第22张图片
图3.6
通过以上步骤,成功获取SAST_ResNet50_vd模型的源代码框架,以及配置成完全运行依赖环境。

四、数据预处理

4.1添加数据预处理脚本

在工程中添加数据预处理脚本,该脚本主要对图片进行归一化操作并转成二进制文件保存如图4.1所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第23张图片
图4.1

4.2 设置可执行命令。

如图4.2所示,点击下拉按钮,选择“Edit Configurations…”,
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第24张图片
图4.2

如图4.3所示,点击加号,选择“Ascend App”。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第25张图片
图4.3

如图4.4所示,输入命令名称,选择可执行脚本,点击“OK”。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第26张图片
图4.4

如图4.5所示,添加如下命令参数,点击“OK”。

 --config=PaddleOCR/configs/det/det_r50_vd_east.yml 
 --opt=bin_data=./icdar2015_bin

–config:模型配置文件;–opt:bin文件保存路径。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第27张图片
图4.5

点击执行按钮,进行数据预处理,如图4.6。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第28张图片
图4.6

通过以上步骤,完成了数据预处理的工作,生成的预处理数据保存在
icdar2015_bin 目录下。

五、模型转换

5.1 转 onnx 模型

获取推理权重文件,权重链接为: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所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第29张图片
图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]}"

使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第30张图片
图5.2

通过以上步骤,成功生成并获取 onnx 模型:SAST_ResNet50_vd.onnx

5.2 转 om 模型

下面使用 MindStudio 的模型转换功能将 onnx 模型转成 om 模型。如5.3图所示,点击“Model Converter”按钮。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第31张图片
图5.3

在弹出的 Model Converter 窗口中选择 Model File,点击“OK”,如图5.4。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第32张图片
图5.4

自动解析模型中,如图5.5。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第33张图片
图5.5

解析完成后,设置模型名称、soc 版本、om 模型生成目录、通讯模型的 Input Format、Shape、Type 信息,点击“Next”,如图5.6。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第34张图片
图5.6

当前页签上参数的检查,图5.7。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第35张图片
图5.7

检查完成后点击“Next”,图5.8。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第36张图片
图5.8

检视生成的 atc 命令,确认无误后点击“Finish”,图5.9
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第37张图片
图5.9

模型转换成功后,如图5.10所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第38张图片
图5.10

通过以上步骤,使用 MindStudio 的模型转换功能成功将 onnx 模型转成 om模型:SAST_ResNet50_vd_bs1.om。

六、模型推理

6.1 获取推理工具

我们使用 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所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第39张图片

图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")
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第40张图片

图6.2

通过以上步骤,成功获取 ais_infer 工具,并安装了 aclruntime。

6.2 进行模型推理

a.创建 results 目录用来保存推理结果,并上传到远程服务器,如图6.3。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第41张图片
图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所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第42张图片
图6.4

c.执行 ais_infer 命令,完成后在远程服务器上生成推理结果,如图6.5。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第43张图片
图6.5

d.须将远程生成的结果 load 到本地,否则在执行其他命令进行同步的时候
会删除,如图6.6。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第44张图片
图6.6

通过以上步骤成功获取了推理结果并保存在了results 目录下。

七、模型精度验证

7.1 数据后处理

a.添加数据后处理脚本,对results文件夹中的预测结果进行精度测试,如图7.1。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第45张图片
图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
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第46张图片
图7.2

c.执行后处理命令,如7.3。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第47张图片
图7.3

d. 后处理执行完成后,打印的推理结果如图7.4.
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第48张图片
图7.4

7.2精度验证比对

通过对比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所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第49张图片
图8.1

b.执行性能测试命令,如图8.2所示。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第50张图片
图8.2

c. 性能测试结果如图8.3所示,为 19.969fps。
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第51张图片
图8.3

九、总结

本文主要介绍使用 MindStudio 全流程开发工具链,将 PaddlePaddle 模型转成 om 模型,并在昇腾环境上进行推理的端到端流程。在使用 MindStudio 过程中也遇到过很多问题和不懂的地方,除了参考官方指导文档外,帮助更多的还是开发者社区,如下图所示,推荐大家多看些经验分享,写的很详细也很有帮助。
MindStudio 社区链接为: https://bbs.huaweicloud.com/forum/forum-945-1.html?filterCondition=1
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第52张图片

十、FAQ

进行模型转换时,在选择Model File时,出现以下错误:
使用MindStudio进行SAST_ResNet50_vd 模型在昇腾环境离线推理_第53张图片

本onnx模型较大,在进行模型转换时需要扩大内存, Help > Change Memory Settings >修改内存大小 改为2048。
在这里插入图片描述

你可能感兴趣的:(服务器,网络,运维)