SiamMask-图文案例
1介绍
本次实验需要MindStudio环境,我们先根据教程配置环境来安装MindStudio。
MindStudio支持Python,Java和C语言的开发,提供了一站式AI开发环境,并提供了许多性能调优工具,应用开发中提供了插件化扩展机制,是一个高效、便捷的全流程开发工具链。
2 安装教程
MindStudio支持Windows和Linux两大平台。如图1所示,根据需要进行安装包的下载,具体安装流程参考官网。本图文教程,将基于Windows系统进行使用介绍。
MindStudio软件包下载地址:https://www.hiascend.com/software/mindstudio/download
Windows平台下载安装流程:
https://support.huaweicloud.com/devg-mindstudio304/atlasms_02_0008.html
Linux平台下载流程:
https://www.hiascend.com/document/detail/zh/mindstudio/304/instg/atlasms_02_0018.html
|图1|
3推理实践
3.1 ONNX简介
ONNX 是一种根据机器学习所设计的开放式的文件格式,来存储已经训练好的模型。它使得不同的深度学习框架(如 Pytorch, MXNet)可以采用相同格式存储模型数据并进行交互。
3.2 ONNX推理分析
这里我们要明确推理模型的输入输出,如表1所示:
输入数据:
输入数据 | 大小 | 数据类型 | 数据排布格式 |
---|---|---|---|
template | batchsize x 3 x 127x 127 | RGB_FP32 | NCHW |
search | batchsize x 3 x 255x 255 | RGB_FP32 | NCHW |
refine | |||
p0 | batchsize x 64 x 61 x 61 | RGB_FP32 | NCHW |
P1 | batchsize x 256 x 31 x31 | RGB_FP32 | NCHW |
P2 | batchsize x 512x 15 x 15 | RGB_FP32 | NCHW |
P3 | batchsize x 256 x 1 x 1 | RGB_FP32 | NCHW |
输出数据:
mask | |||
---|---|---|---|
score | 1 x 10 x 25 x 25 | FLOAT32 | NCHW |
delta | 1 x 20 x 25 x 25 | FLOAT32 | NCHW |
mask | 1 x 3969 x 25 x 25 | FLOAT32 | NCHW |
f0 | 1 x 64 x 125 x 125 | FLOAT32 | NCHW |
f1 | 1 x 256 x 63 x 63 | FLOAT32 | NCHW |
f2 | 1 x 512 x 31 x 31 | FLOAT32 | NCHW |
corr_feature | 1 x 256 x 25 x 25 | FLOAT32 | NCHW |
refine | |||
mask | 1 x 16129 | FLOAT32 | NCHW |
表1
3.3 ONNX推理工程创建
一、SSH连接配置
打开MindStudio,在菜单栏依次选择File > Settings… > Tools > SSH Configurations进入SSH连接配置,如图2所示。
图2
参数及图标说明见表2。
参数及图标 | 说明 |
---|---|
Host | 连接目标地址(IP或域名)。 |
Port | 连接目标地址的端口号。 |
User name | 登录目标地址的用户名。 |
Authentication type | 身份验证方式。有两种方式可选:PASSWORD:通过密码验证身份。KEY_PAIR:通过密钥验证身份,可以自行参考通用方式申请SSH密钥。说明:对于Euler2.8、2.10 aarch架构、银河麒麟 V10 SP1 aarch架构、OpenEuler、Ubuntu20.04和CentOS8.2,使用KEY_PAIR方式来通过密钥验证身份时,需要使用ssh-keygen -m PEM或者ssh-keygen -t rsa -m PEM命令来申请SSH密钥。申请SSH密钥时,建议设置Passphrase不为空,且符合以下口令复杂度:口令长度至少8个字符。口令必须包含如下至少两种字符的组合:至少一个小写字母;至少一个大写字母;至少一个数字;至少一个特殊字符:`~!@#$%^&*()-_=+|[{}];:'",<.>/? 和空格。当选择KEY_PAIR方式时,默认保存配置过的私钥文件。 |
Password | Authentication type选择验证方式为Password时显示,需要填写对应用户名的密码,勾选Save password复选框可以保存密码。说明:如果没勾选save password。那么密码自动会在24小时后清除,届时再次使用到ssh会弹出密码输入框,需要再次输入密码方能执行ssh任务。 |
Private key file | Authentication type选择验证方式为KEY_PAIR时显示,选择本地私钥文件。 |
Passphrase | Authentication type选择验证方式为KEY_PAIR时显示,需要填写对应密语。勾选Save password复选框可以保存密语。 |
Test Connection | 单击该按钮测试连接是否成功。 |
+ | 新增SSH连接配置。 |
- | 删除SSH连接配置,选中需要删除的SSH连接配置,单击该按钮删除。 |
OK | 保存SSH配置,单击OK按钮保存、应用SSH连接当前配置,并关闭配置界面。 |
Cancel | 取消当前配置,单击Cancel按钮不保存当前配置,并关闭配置界面。 |
Apply | 应用SSH配置,单击Apply按钮保存并应用SSH连接当前配置。 |
Lock the current connection | 选项置灰,用户不可操作。如果SSH连接被添加到集群管理中,则该选项会自动勾选,SSH连接被锁定,不可修改和删除。 |
表2
图3
根据参数及图标说明配置参数后,单击“OK”或“Apply”,如图3所示。
二、添加远程服务器
通过Deployment功能可以将指定的文件、文件夹同步到远程指定机器的指定目录。
在菜单栏选择File > Settings…。
在左边的导航栏选择“Tools > Deployment”,如图4所示。
图4
配置映射路径关系。参数说明见表3。
参数 | 说明 |
---|---|
Local Path | 本地项目文件夹路径。单击对应文本框,将自动识别已打开的项目文件夹路径,也可通过在文本框中手动输入或单击文本框右侧文件夹图标进行配置。 |
Deployment Path | 本地项目文件夹路径映射到远端服务器中的路径。可通过在文本框中手动输入或单击文本框右侧文件夹图标进行配置。 |
表3
图5
配置好Deployment,如上图5所示。单击“Apply”,Deployment配置生效。
当在使用run/debug项目时,会触发Deployment同步功能。
如果需要自动触发Deployment功能,可进行如下操作实现:
1.在菜单栏选择File > Settings… 。
在左边的导航栏选择“Tools > Deployment”进入Deployment界面,将指定远程服务器信息为默认远程服务器。
2.在菜单栏选择“Tools > Deployment > Automatic Upload”。
三、导入工程文件
首次登录MindStudio:单击“New Project”。
非首次登录MindStudio:在顶部菜单栏中选择“File > New > Project…”。在“New Project”窗口中,选择“Python”,选择Python SDK所需版本软件包。如图6所示。
图6
将要用到的包导入Mindstudio,操作过程如图7和图8所示:
图7
图8
成功导入工程后,工程目录以树状呈现,以实际创建结果为准。
四、工程转换
单击菜单栏 “Ascend > Convert To Ascend Project”。如图9所示:
图9
弹出如图10所示窗口,转换昇腾工程配置:
图10
Project Type选择Ascend App,Framework选择Ascend Python ACL App。
单击“OK”,工程目录以树状呈现。此时成功创建带有.project文件的昇腾工程。
五、配置CANN
CANN Manager为用户提供了在不重装MindStudio的前提下,切换以及更新Ascend-cann-toolkit开发套件包版本的功能。使用该功能之前,请确保已经完成MindStudio以及Ascend-cann-toolkit开发套件包的安装。
CANN管理入口:
在MindStudio工程界面菜单栏依次选择“File > Settings > Appearance&Behavior > System Settings > CANN”,弹出CANN Manager界面。
或在MindStudio工程界面菜单栏依次选择“Ascend > CANN Manager”,弹出CANN Manager界面。
图11
界面参数以及图标解释如表4所示。
参数以及图标 | 说明 |
---|---|
Remote Connection | Ascend-cann-toolkit开发套件包所在远程环境IP地址。 |
Remote CANN location | Ascend-cann-toolkit开发套件包的安装路径,默认为$HOME/Ascend/ascend-toolkit/{sotftware version}。 |
Change CANN | 可以进行多版本Ascend-cann-toolkit开发套件包切换。 |
Package | CANN包名称。 |
Component | 组件名称。 |
Version | CANN版本号以及各软件包版本号。 |
Host OS Arch | Host侧操作系统以及架构。 |
Activation | 安装的Ascend-cann-toolkit开发套件包以及软件包是否激活,若显示为Activated,则表示当前安装的CANN版本已经激活,CANN功能可用。 |
Status | Ascend-cann-toolkit开发套件包以及软件包的安装状态:Installed:Ascend-cann-toolkit开发套件包或软件包已经安装。Not Installed:Ascend-cann-toolkit开发套件包或软件包未安装。只有安装且已经激活的CANN才可用。 |
表4
配置好CANN,如上图11所示。单击“OK”,配置生效。
3.4模型转换
使用PyTorch 将模型权重文件.pth 转换为.onnx 文件。
获取权重文件,使用ModelZoo的源码包中获取权重权重文件。执行如下代码进行pth文件到ONNX的转换。
命令:python3.7 $workdir/SiamMask_pth2onnx.py -type 0 --resume $workdir/SiamMask_VOT.pth --output_dir $workdir
patch -p1 < $workdir/SiamMask.patch
python3.7 $workdir/SiamMask_pth2onnx.py -type 1 --output_dir $workdir
得到静态ONNX模型后,使用 ATC 工具将.onnx 文件转换为.om 文件,导出.onnx模型文件时需设置算子版本为 11。
昇腾张量编译器(Ascend Tensor Compiler,简称 ATC)是昇腾 CANN 架构体系下的模型转换工具,它可以将开源框架的网络模型或Ascend IR定义的单算子描述文件(json格式)转换为昇腾AI处理器支持的.om 格式离线模型。模型转换过程中,ATC会进行算子调度优化、权重数据重排、内存使用优化等具体操作,对原始的深度学习模型进行进一步的调优,从而满足部署场景下的高性能需求,使其能够高效执行在昇腾AI处理器上。
由于 Mindstudio 已经嵌入 ATC 工具,所以我将在 Mindstudio 上进行模型转换。
在进行模型转换前,使用MindStudio安装用户,将所转换模型的模型文件以及权重文件上传到 Ascend-cann-toolkit 开发套件包所在的开发环境。
选择run->Edit Configurations,如图12所示。
图12
输入可执行的命令,如图13所示,所运行文件将会自动上传到服务器并运行命令。
图13
然后使用“Ascend->Model Converter”将模型进行转换,如图14所示。
图14
Model Information 界面参数配置如表 5 所示:
参数 | 说明 |
---|---|
CANN Machine(仅Windows系统支持此参数) | 自动填充。远程连接ADK 所在环境的 SSH地址,表现格式为@localhost:端口号。 |
Model File | 模型文件。必填。该模型文件需要取消其他用户写的权限。 有两种选择方式:1.单击右侧的文件夹图标,在后台服务器路径选择需要转化的模型文件并上传。2.在参数后面的输入框中自行输入模型文件在后台服务器的路径,包括模型文件名称。 |
Weight File | 权重文件。当原始框架是Caffe时,该参数存在且必填:1. 如果模型文件和权重文件存在于后台服务器同一目录下,且名称和模型文件名称相同,则选择模型文件后,权重文件会自动填充。 2. 如果模型文件和权重文件存在于后台服务器不同目录下,或者在同一目录下,但名称和模型文件名称不相同。 |
Model Name | 模型文件名称,必填。选择模型文件后,该参数会自动填充,用户可以根据需要自行修改名称,要求如下: 1. 只支持 a-z、A-Z、0-9、下划线以及短划线的组合,最多支持 64 个字符。 2. 如果模型转换的输出路径已经存在相同名称模型文件,单击“Next”后会提示覆盖原有文件或重命名当前 Model Name 的信息,用户根据实际情况选择。 |
Target SoC Version | 模型转换时指定芯片型号。请根据板端环境具体芯片形态进行选择。 |
Input Format | 输入数据格式。 1. 当原始框架是Caffe时,取值为 NCHW、ND(表示支持任意格式,N<=4),默认为 NCHW。 2. 当原始框架是 MindSpore、ONNX 时,取值为 NCHW。 3. 当原始框架是 TensorFlow 时,取值为 NCHW、NHWC、ND、NCDHW、NDHWC,默认为 NHWC。 |
Input Nodes | 模型输入节点信息。 1. 如果选择模型文件并且解析成功,则该参数下方会展示模型输入节点的 shape 信息以及 Type 信息。 2. 如果选择模型文件后,无法解析“Input Nodes”,该场景下,需要用户根据模型文件中的相关信息手动输入:单击该参数右侧的,在弹出界面中输入模型输入节点的 Name、Shape 信息(只支持英文逗号,数字(-1或大于0的整数),不能以英文逗号开头,只能以数字结尾)和输入节点的数据类型 Type。单击删除节点信息。 3. 如果模型有多个输入,解析成功后,“Input Nodes”参数下方会展示每一个输入节点的 Shape 信息和 Type 信息。 |
Shape | 模型输入的 shape 信息,例如图 20 中的数值分别代表输入数据的 N(模型一次处理的图片个数),C(Channel,例如彩色 RGB 图像的 Channel数为 3),H(Height),W(Width)。若开启 AIPP 功能,则此处的 H,W取值即为 AIPP 输出数据的高和宽。 |
Type | Type:指定输入节点的数据类型。 1. 若原始框架类型为 Caffe、ONNX,支持的数据类型为 FP32、FP16、UINT8。 2. 若原始框架类型为 MindSpore,支持的数据类型为 FP32、UINT8。 3. 若原始框架类型为 TensorFlow,支持的输入数据类型为 FP32、FP16、UINT8、Int32、Int64、Bool。 |
Output Nodes | 指定输出节点信息。 单击“Select”在弹出的网络拓扑结构中,选中某层节点,右击选择“Select”,该层变成蓝色,单击“OK”后,在“Output Nodes”参数下面会看到标记层的算子,右击选择“Deselect”取消选中。 1. Op Name:标记层的算子名称。 2. Data Type:算子输出的数据类型,包括 FP32、UINT8、FP16,通过该参数用户可以设置单个算子的输出数据类型。 “Output Nodes”参数下方“Select”层的算子,默认为全部选中,用户可以自行选择将不需要输出的算子去勾选,只有选中的算子才会作为模型的输出。本章节以选中所有算子为例进行说明。某些情况下,用户想要查看某层算子参数是否合适,则需要将该层算子的参数输出,即可以通过单击“Select”按钮,在弹出网络拓扑结构中将所需层的算子标记为“Select”,然后在“Output Nodes”参数下方选中想要输出的算子,模型转换后,在相应.om 模型文件可以看到该算子的输出直接作为模型的输出。 |
Load Configuration | 导入上次模型转换的配置文件。如果用户之前转换过模型,无论成功与否,在¥HOME/modelzoo/ M o d e l N a m e / d e v i c e / 路 径 都 会 生 成 {ModelName}/device/路径都会生成 ModelName/device/路径都会生成{Model Name}_config.json 配置文件,该文件记录用户模型转换时所选择的配置信息,包括所用模型路径、模型名称、输入输出配置,数据预处理配置等,下次重新转换模型时,通过单击“Load Configuration”选择相应路径下的配置文件,则相应的配置信息会自动填充,用户自行决定是否沿用上次配置还是修改配置后重新进行模型转换。 |
表5
图15
如图15所示,模型转换成功。
3.5数据处理
了解了数据处理的代码,接下来我们执行代码选择Run->Debug,进入图16的界面。
图16
我们在Command Arguments输入我们需要的运行参数,第一个为配置推理文件,第二个为开启mask,第三个为选择需要测试的数据集,第四个为msame的路径,第五个为中间文件暂存路径,第六个为om路径选择,第七个为推理设备选择。如果在命令行执行,则命令如下:
命令:python3.7 $workdir/SiamMask_test.py --config config_vot.json --mask --refine --dataset VOT2016 --msame_path $workdir/tools --save_path $workdir/om_io_files --om_path $workdir --device 0
执行“SiamMask_test.py” 脚本会自动将VOT2016数据中的数据进行处理,并将测试结果保存在“SiamMask/experiments/siammask_sharp/test
/VOT2016”文件夹中。执行结果如图17所示,该数据处理需要耗时1day。
图17
3.6 Benchmark 模型推理
由于 CANN 5.1.RC1 和 MindStudio 5.0.RC1 版本不发布 Benchmark 工具,若需要在MindStudio 环境下使用该工具,请安装 CANN 5.0.3 版本下的Benchmark 工具以及 3.0.3 版本的 MindStudio。具体说明请见 https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/msug/msug_000335.html。
图18
所以我们采用 Mindstudio 客户端的远程终端 Remote Terminal 进行 Benchmark 工具的使用。在菜单栏选择“Tools> Start SSH Session”,选择我们配置好的远程连接,如图18所示。
然后我们需要获取 Benchmark 工具软件包,并进行解压。在解压后的文件夹下,获取 Benchmark 工具 Benchmark.{arch}。{arch}为 CPU 架构,取值为 aarch64 或 x86_64。 这里我们选用的是Benchmark.x86_64。
将 Benchmark.x86_64和准备好的的模型 OM 文件上传到服务器的任意路径下。
设置环境变量。
CANN 软件提供进程级环境变量设置脚本,供用户在进程中引用,以自动完成环境变量设置。用户进程结束后自动失效。设置方法如下:
. /usr/local/Ascend/ascend-toolkit/set_env.sh
. ${HOME}/Ascend/ascend-toolkit/set_env.sh
进入 Benchmark 工具所在路径,执行如下命令增加对工具的可执行权限:
chmod +x benchmark.{arch}
Benchmark工具支持的运行参数及其说明请参见表6。
参数 | 说明 | 是否必填 |
---|---|---|
[-batch_size, -bs] | 执行一次模型推理所处理的数据量 | 是 |
[-device_id, -di] | 运行的Device编号,请根据实际使用的Device修改.缺省值为0。 | 否 |
[-om_path, -op] | 经过ATC转换后的模型OM文件所在的路径。请参见准备相关数据文件获取。 | 是 |
[-round, -r] | 执行模型推理的次数,取值范围为1~1024。 | 是 |
表6
命令:
./benchmark.x86_64 -round=10 -om_path=mask.om -device_id=0 -batch_size=1 > perf_mask.txt
./benchmark.x86_64 -round=10 -om_path=refine.om -device_id=0 -batch_size=1 > perf_mask.txt
echo “performance data”
python3.7 test/parse.py perf_mask.txt perf_refine.txt
执行命令运行 Benchmark 工具,命令及其运行结果如图19所示:
图19
运行结果参数说明见表7。
参数 | 说明 |
---|---|
ave_throughputRate | 模型的平均吞吐率。单位为samples/s。 |
ave_latency | 模型执行的平均时间。单位为ms。 |
表7
ThroughoutRate | 310(FPS) | 310P (FPS) | T4(FPS) | 310P/310 | 310/T4 |
---|---|---|---|---|---|
bs1 | 312 | 1712 | 37 | 1712/312 | 312/37 |
表8
性能在310P上的性能达到310的5.49倍>1.2倍;310性能达到T4性能的8.43倍>1.6倍;故性能达标。
3.7 精度验证
调用SiamMask_eval.py 脚本与数据集标/home/dyl1/SiamMask/SiamMask
/experiments/siammask_sharp/test/VOT2016里的txt文件比对,可以获得数据,结果保存在 log_test.txt中。
命令: python3.7 SiamMask_eval.py --dataset VOT2016 --tracker_prefix C --result_dir $expdir/test/VOT2016
执行命令运行精度验证的命令,其运行结果如图20所示。
图20
输出结果如表9所示:
原始精度 | 310精度 | 310P精度 | |
---|---|---|---|
bs1 | 0.427 | 0.427 | 0.427 |
表9
得到的310P上的 om 离线模型推理精度与310上的 om 离线模型推理精度的精度对比,精度下降在 1%范围之内,故精度达标。
4 FAQ
Q:当使用 Benchmark 时,碰到图 21 的 bug:
图21
A:这是由于我们环境配置错误,运行如下命令即可:
source /usr/local/Ascend/ascend-toolkit/set_env.sh
Q:当数据处理时,碰到图 22 的 bug:
图22
A:这是由于我们环境配置错误,导致不识别KaTeX parse error: Undefined control sequence: \ at position 40: … workdir=`pwd` \̲ ̲export modeldir…workdir/SiamMask
export expdir=KaTeX parse error: Undefined control sequence: \ at position 37: …siammask_sharp \̲ ̲export PYTHONPA…PYTHONPATH: m o d e l d i r : modeldir: modeldir:expdir
Q:当模型转换时候时,碰到图 23 的 bug:
图23
A:这是由于我们的项目出了问题,点击 File-New,新建一个项目即可。
5 从昇腾社区获得更多帮助
在使用 MindStudio 的过程中遇到了问题,开发者可以来昇腾社区获得更多的帮助。
昇腾官网:https://www.hiascend.com/
昇腾社区:https://bbs.huaweicloud.com/
昇腾论坛:https://bbs.huaweicloud.com/forum/forum-726-1.html