超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

来源头条作者:zhazhafei

一、 概述

MindStudio提供了基于华为自研昇腾AI处理器开发所需的一站式开发环境,能够在此工具上高效便捷地完成AI应用开发。本文使用MindStudio的模型转换工具将开源框架Pytorch下的AdvancedEAST网络模型转换成昇腾AI处理器支持的离线模型并进行离线推理。

AdvancedEAST是一种用于场景图像文本检测的算法,它主要基于EAST: An Efficient and Accurate Scene Text Detector,并进行了重大改进,使长文本预测更加准确。

1.参考论文:

Xinyu Zhou, Cong Yao, He Wen, Yuzhi Wang, Shuchang Zhou, Weiran He, Jiajun Liang. EAST: An Efficient and Accurate Scene Text Detector. (2017)

2.参考实现:

url=https://github.com/BaoWentz/AdvancedEAST-PyTorch

branch=master

commit_id=a835c8cedce4ada1bc9580754245183d9f4aaa17

3.适配昇腾 AI 处理器的实现:

url=https://gitee.com/ascend/ModelZoo-PyTorch

tag=v.0.4.0

code_path=ACL_PyTorch/contrib/cv/detection

4.输入输出数据

输入数据

大小

数据类型

数据排布格式

input

batchsize x 3 x 736 x 736

RGB_FP32

NCHW

输出数据

大小

数据类型

数据排布格式

output_1

batchsize x 7 x 184 x 184

FP32

ND

二、 推理环境安装

1.运行环境:

系统:Ubuntu 18.04.5 LTS

处理器:Ascend 710

2.开发环境:

MindStudio:5.0.RC1

Ascend-cann-toolkit:5.1.RC1

官方安装指南:

https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/instg

3. Python环境

在Anaconda下创建Python虚拟环境,激活环境并安装必要的依赖:

conda create -n zdf python=3.7

conda activate zdf

pip3 install xxx

依赖名称

版本

onnx

1.7.0

Torch

1.8.0

TorchVision

0.9.0

numpy

1.20.3

Pillow

8.2.0

opencv-python

4.5.2.54

shapely

1.7.1

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

三、 源码和数据集准备

1.获取推理源码

从以下链接获取推理所需源码,单击“立即下载”,下载源码包。https://www.hiascend.com/zh/software/modelzoo/detail/1/18c7bf3cafac447e849e53e88e2044f9。上传源码包到服务器任意目录并解压(如:/home/zdf)。解压后推理源码目录为:/home/zdf/AdvancedEAST

2.获取开源模型源码

git clone https://github.com/BaoWentz/AdvancedEAST-PyTorch -b master

cd AdvancedEAST-PyTorch

git reset a835c8cedce4ada1bc9580754245183d9f4aaa17 –hard

cd ..

把*.py文件拷贝至推理源码目录辅助推理。

3.获取原始数据集

[天池ICPR数据集](https://pan.baidu.com/s/1NSyc-cHKV3IwDo6qojIrKA ),提取码: ye9y

本模型使用天池ICPR数据集中的1000张图片作为验证集。下载ICPR_text_train_part2_20180313.zip和ICPR_text_train_part1_20180316.zip两个压缩包,在推理源码目录新建目录icpr和子目录icpr/image_10000、icpr/txt_10000,将压缩包中image_9000、image_1000中的图片文件解压至image_10000中,将压缩包中txt_9000、txt_1000中的标签文件解压至txt_10000中。

四、模型推理

1. 打开 MindStudio, 选择 File -> New -> Project,新建Ascend App项目

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

2.数据预处理

执行AdvancedEAST_preprocess.py脚本对数据集进行预处理,包括图片缩放、标签转换为npy文件和图片转换为bin文件。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

Command Arguments中:第一个参数为数据集的路径,第二个参数为生成bin文件的路径。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

3.生成数据集info文件

使用benchmark推理需要输入图片数据集的info文件,用于获取数据集。执行gen_dataset_info脚本,输入已经获得的图片文件,输出生成图片数据集的info文件。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

Command Arguments中:第一个参数为生成的数据集文件格式,第二个参数为预处理后的bin文件的路径,第三个参数为生成的数据集文件保存的路径,第四第五个参数为图片的宽和高。运行成功后,在当前目录中生成prep_bin.info。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

4.模型转换

使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。

a. 获取权重文件。

从源码包中获取权重文件3T736_best_mF1_score.pth。

或 (https://pan.baidu.com/s/1NSyc-cHKV3IwDo6qojIrKA ),提取码: ye9y。解压后使用3T736_best_mF1_score.pth,文件sha1: 9D0C603C4AA4E955FEA04925F3E01E793FEF4045

b. 导出onnx文件。

执行AdvancedEAST_pth2onnx.py脚本,获得AdvancedEAST_dybs.onnx文件。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

Command Arguments中:第一个参数为PyTorch模型的.pth权重文件的路径,第二个参数为生成.onnx文件的路径。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

c. 使用MindStudio中的ATC工具将ONNX模型转为 OM模型。如下图所示,点击菜单栏Ascend->Model Converter 调用出模型转换界面。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

在“Model Information” 页签中上传模型文件和权重文件后点击 Next 按钮,Data Processing 页面直接点击 Next,Model Converter中Command Preview 里的命令与在命令行运行atc 命令几乎相同,点击 Finish开始转换。

Model Information 界面参数配置如下表所示:

参数

说明

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 信息,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/${Model Name}/device/路径都会生成${Model Name}_config.json 配置文件,该文件

记录用户模型转换时所选择的配置信息,包括所用模型路径、模型名称、输入输出配置,数据预处理配置等,下次重新转换模型时,通过单击“Load Configuration”选择相应路径下的配置文件,则相应的配置信息会自动填充,用户自行决定是否沿用上次配置还是修改配置后重新进行模型转换。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

模型转换成功后会提示:Model converted successfully.如上图所示。

5. 开始推理

a. 获取Benchmark工具。

从源码包中获取Benchmark工具。

或(https://support.huawei.com/enterprise/zh/ascend-computing/cann-pid-251168373/software/) 将benchmark.x86_64或benchmark.aarch64放到当前目录。

b. 启动ssh session,切换python环境、当前工作目录、增加benchmark.{arch}可执行权限

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

c. 推理

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

Benchmark工具运行参数说明:

参数

说明

-model_type

模型的类型。

-batch_size

执行一次模型推理所处理的数据量。

-device_id

运行的Device编号。

-om_path

经过ATC转换后的模型OM文件所在的路径。

-input_text_path

模型对应的数据集所在的路径。

-input_width

输入模型的宽度。

-input_height

输入模型的高度。

-useDvpp

模型前处理是否使用DVPP编解码模块。

-output_binary

输出结果格式是否为二进制文件(即bin文件)。

更多参数具体说明见:https://support.huawei.com/enterprise/zh/doc/EDOC1100191895/4de572a8 推理后的输出默认在当前目录result下。

运行结果参数说明:

参数

说明

[e2e]

-throughputRate

端到端总吞吐率。公式为 sample 个数/时间。

-latency

端到端时延,即从处理第一个 sample 到最后一个sample 的完成时间。

[data read]

[preprocess]

[post]

-throughputRate

当前模块的吞吐率。

-moduleLatency

执行一次当前模块的时延。

[infer]

-throughputRate

推理模块整体吞吐率,包含线程启动、数据等待、实际推理等时间。

-moduleLatency

推理模块的平均时延。公式为执行一次推理的时间/batch size,其中执行一次推理的时间包含了内存申请、内存拷贝以及推理等时间。

-Interface throughputRate

aclmdlExecute 接口的吞吐率。公式为 sample 个数/aclmdlExecute 接口的平均执行时间。

d.精度验证

执行AdvancedEAST_postprocess.py脚本对推理结果进行后处理,获得精度数据。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

Command Arguments中:第一个参数为数据集路径,第二个参数为推理结果所在路径。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

五、推理主要目录结构:

├── benchmark.aarch64 //离线推理工具(适用ARM架构)

├── benchmark.x86_64 //离线推理工具(适用x86架构)

├── AdvancedEAST_dybs.om //batchsize=1的om模型文件

├── AdvancedEAST_dybs.onnx //onnx模型文件

├── 3T736_best_mF1_score.pth //训练后的权重文件

├── AdvancedEAST_postprocess.py // 后处理文件,用于计算精度

├── AdvancedEAST_preprocess.py // 前处理文件,用于处理数据集和生成bin文件

├── AdvancedEAST_pth2onnx.py // 用于转换pth文件到onnx文件

├── LICENSE // LICENSE文件

├── README.md // 模型离线推理说明README

├── gen_dataset_info.py // 生成数据集info文件

├── requirements.txt // 模型离线推理用到的所有且必要的依赖库

├── cfg.py //配置文件 控制参数

├── preprocess.py //预处理数据 调整图像大小

├── imgs2LMDB.py //生成LMDB数据集

├── label.py //生成标签信息

├── model_VGG.py //定义网络

├── losses.py //定义损失函数

├── train.py //执行训练

├── dataset.py //读LMDB数据集

├── predict.py //预测

├── nms.py //预测

├── utils.py //评估模型

├── icpr //数据集目录

├── prep_dataset //bin文件目录

├── result //推理结果目录

└── test

├── pth2om.sh // pth文件转换到onnx文件和om文件的脚本

├── eval_acc_perf.sh // 测评推理精度和性能的脚本

└── parse.py // 解析结果的脚本

六、FAQ

Q:执行AdvancedEAST_preprocess.py脚本对数据集进行预处理时提示找不到tqdm模块。

A:执行pip3 install tqdm,安装完成后再运行以上脚本。

Q:模型推理时出现输入数据大小和模型输入大小不一致的错误。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

A:模型转换时,在“Model Information” 页签上数据类型默认是FP16,应选择FP32。

超级机器人大战j金手指(FC快打旋风SD快打剧情介绍 人物技能出招表金手指 童年满满的回忆)

本站无法对海量内容真伪性鉴别,请勿相信本站任何号码,邮件,站外网址等信息,如有需要,请自行甄别。版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至net@163.com举报,一经查实,本站将立刻删除。
(0)
上一篇 2023年2月11日 上午11:26
下一篇 2023年2月11日 上午11:28

相关推荐

发表回复

登录后才能评论