一、模型介绍
二、MindStudio 环境搭建
2.1、MindStudio 软件下载
2.2、MindStudio 软件安装
2.3、MindStudio 环境搭建
三、模型获取
3.1、模型介绍
3.2、获取源码
3.3、安装依赖
四、数据预处理
4.1、添加数据预处理脚本
4.2、设置可执行命令
五、模型转换
5.1、转 onnx 模型
5.2、转 om 模型
六、模型推理
6.1、获取推理工具
6.2、进行模型推理
七、模型精度验证
7.1、数据后处理
7.2、进行在线推理
7.3、精度验证比对
八、性能测试
九、总结
十、FAQ
ch_ppocr_server_v2.0_rec是一种通用的中文的识别模型,它的识别模块是基于文本识别算法SVTR优化。SVTR不再采用RNN结构,而是采用的是CRNN,通过引入Tranformers结构更加有效地挖掘文本行图像的上下文信息,从而提升文本识别能力。虽然CRNN的识别方法是2016年提出来的,但是对于中文识别,是使用最普遍也最有效的文本识别方法。CRNN主要是融合了卷积特征和序列特征,用以解决预测标签和真值签不一致的问题。为了进一步提高文本识别的效果和效率,该模型采用了余弦学习率、增大特征图分辨率、正则化参数、预热学习率等策略。开发流程示意图如下图所示:
通过 MindStudio 官网介绍可以学习了解 MindStudio 的功能,以及按照
MindStudio 用户手册进行安装和使用。官网链接: 昇腾社区-官网丨昇腾万里 让智能无所不及
用 户 手 册 : https://www.hiascend.com/document/detail/zh/mindstudio/50RC2/prog ressiveknowledge/index.html
在官网首页中点击“立即下载”,如下图。
然后我们进入版本选择界面,可以根据自己的操作系统、安装方式选择不同的软件包,我们这里选择的是 MindStudio_5.0.RC2_win.exe,进行下载安装。
点击对应的“软件包下载”,弹出软件下载需知对话框,勾选“我已阅读并已同意 MindStudio 软件许可协议 的条款和条件”,然后点击“立即下载”进入下载流程。
双击打开下载好的 MindStudio_5.0.RC2_win.exe 软件包,进入安装流程:
欢迎界面,选择“next”
选择安装路径,我们使用的是默认安装路径,然后点击“Next”。
安装配置,我们只勾选了创建桌面快捷方式,和以工程方式打开文件夹添加到右键菜单中。然后点击“Next”。
启动菜单文件夹我们使用默认配置,点击“Install”,程序进入自动安装步骤。
安装完成后点击“Finsh”完成安装。
通过桌面快捷方式启动 MindStudio。
选择不导入配置,点击“OK”
Projects 标签用于工程打开、创建等。
Customize 标签用于 IDE 配置,包括界面、字体大小等。
Plugins 标签用于管理插件的安装、删除等。
Learn MindStudio 标签可以通过点击“Help”进入官方社区获取帮助。在 Projects 标签下点击“New Project”创建一个新的工程。
选择 Ascend App,输入工程名、和工程目录,点击“Change”选择或者添加CANN 版本。
点击 Remote CANN Setting 对话框中的加号,弹出 SSH Configurations 对话框,然后点击其中的加号,填写红框中的服务器信息,点击“Test Connection” 弹出连接成功对话框。
依次点击“OK”完成 Remote Connection 配置。
点击文件夹图标,在弹出的对话框中选择 CANN 安装路径,点击“OK”。
点击“Finish”。
开始同步远程 CANN 版本资源。
同步完成,点击“next”
选择 ACL Project,点击“Finish”
此时成功创建了一个空的工程。
点击“Tools”->“Start SSH session”。
选择远程环境,启动远程终端窗口。
点击“Tools”->“Deployment”->“Configuration”。
按下图所示,配置远端映射路径。依次点击“OK”完成配置。
按照下图,配置项目 SDK。
点击“SDKs”,点击加号,点击“Add Python SDK...”
点击“SSH Interpreter”,自动识别远程 Python 环境信息,点击“OK”。
点击“Project”,选择创建的 SDK,点击“OK”。
点击“Modules”->“Dependence”,选择创建的 SDK,点击“OK”。
点击“Tools”-> “Deployment”->“Automatic Upload”。
选择远程服务器,可自动上传修改并保存的文件。至此 MindStudio 开发环境搭建完成。
本文开发的模型为基于 PaddlePaddle 的模型库 PaddleOCR 中的 ch_ppocr_server_v2.0_rec模型,该模型是基于PP-OCRv3结构
(https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/doc/doc_ ch/PP-OCRv3_introduction.md)的中文识别模型,PP-OCRv3 的识别模块是基于文本识别算法 SVTR 优化。SVTR 不再采用 RNN 结构,通过引入 Transformers 结构更加有效地挖掘文本行图像的上下文信息,从而提升文本识别能力。
在本地终端中通过 git 命令获取源码,参考命令如下。
git clone -b release/2.6 https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
git reset --hard 7f6c9a7b99ea66077950238186137ec54f2b8cfd
cd ..
修改模型配置文件,配置不使用 gpu 和中文汉字字典路径,如下图。
修改完成后将 PaddleOCR 同步到远程服务器,如下图。
3.3.1添加依赖文件“requirements.txt”
3.3.2在远程终端窗口通过 pip 命令安装依赖
执行命令如下,[--user]为可选参数,普通用户需要添加使用: pip3 install -r requirements.txt [--user] 通过以上步骤,成功获取 ch_ppocr_server_v2.0_rec 模型的源代码框架,以及配置成完全运行依赖环境。
在工程中添加数据预处理脚本,该脚本主要对图片进行归一化操作并转成二进制文件保存如下图所示。
3.2.1如下图所示,点击下拉按钮,选择“Edit Configurations...”。
3.2.2如下图所示,点击加号,选择“Ascend App”。
3.2.3如下图所示,输入命令名称,选择可执行脚本,点击“OK”。
3.2.4如下图所示,添加命令参数,点击“OK”。
-c:模型配置文件。
-o:可选参数列表: Global.infer_img表示图片路径。
3.2.5点击执行按钮,进行数据预处理。
通过以上步骤,完成了数据预处理的工作, 生成的预处理数据保存在 image_bin 目录下。
5.1.1获取推理权重文件,权重链接为:https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_train.tar 下载之后,解压到本地 PaddleOCR 目录下,并上传到远程服务器,如下图所示。
5.1.2运行tools目录下的export_model脚本,配置参数如下图所示:
-c: 模型配置文件
-o: 训练模型
Global.save_inference_dir: 推理模型存储位置
5.2.1在远程终端执行转 onnx 命令,并将生成的 onnx 模型拉取到本地,如下图所示,参考命令如下:
export PATH=/usr/local/python3.7.5/bin:$PATH
paddle2onnx \
--model_dir ch_server_v2.0_rec_infer \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file ch_ppocr_server_v2.0_rec.onnx \
--opset_version 12 \
--input_shape_dict="{'x':[-1,3,32,-1]}" \
--enable_onnx_checker True
--model_dir:配置包含Paddle模型的路径
--model_filename:配置存储网络结构的文件名称
--params_filename:配置存储模型参数的文件名称
--save_file:指定转换后的模型保存目录路径
--opset_version:配置转换为ONNX的OpSet版本
--input_shape_dict:模型输入的shape
--enable_onnx_checker:配置是否检查导出为ONNX模型的正确性
通过以上步骤,成功生成并获取 onnx 模型:ch_ppocr_server_v2.0_rec.onnx。
下面使用 MindStudio 的模型转换功能将 onnx 模型转成 om 模型。
5.3.1如下图所示,点击“Model Converter”按钮。
5.3.2在弹出的 Model Converter 窗口中选择 Model File,点击“OK”。模型转换参数如下:
--model:为ONNX模型文件。
--framework:5代表ONNX模型。
--output:输出的OM模型。
--input\_format:输入数据的格式。
--input\_shape:输入数据的shape。
--log:日志级别。
--soc\_version:处理器型号。
--dynamic_image_size:设置输入图片的动态分辨率参数。
5.3.3自动解析模型中,如下图。
5.3.4 解析完成后,设置模型名称、soc 版本、om 模型生成目录、通讯模型的Input Format、Shape、Type 信息,点击“Next”。
模型的shape设置为{1,3,-1,-1},第一维的1是banchsize,第三维和第四维为-1,-1是因为要设置动态shape,以适应不同shape的预处理文件。Dynamic Image Size:32,320;32,413是根据预处理图片所设置的动态shape。
5.3.5检查完成后点击“Next”。
5.3.6检视生成的 atc 命令,确认无误后点击“Finish”
5.3.7模型转换成功后,如下图所示。
通过以上步骤,使用 MindStudio 的模型转换功能成功将 onnx 模型转成 om模型:ch_ppocr_server_v2.0_rec_bs1.om。
我们使用 ais-infer 工具进行推理,ais-infer 工具获取及使用方式请查看ais_infer 推理工具使用文档,链接:tools: Ascend tools - Gitee.com
6.1.1在本地终端命令中通过 git 获取推理工具代码,命令如下:
git clone tools: Ascend tools
6.1.2 ch_ppocr_server_v2.0_rec\tools\ais_bench_workload\tool\ais_infer 目录下的 ais_infer.py 文件和 frontend 文件夹复制到当前ch_ppocr_server_v2.0_rec 目录下, 并将进行改动的文件夹同步到远程服务器,如下图所示。
6.1.3 编译并安装 aclruntime 包,如下图所示,命令如下:
cd tools/ais-bench_workload/tool/ais_infer/backend/
pip3 wheel ./
pip3 install aclruntime-0.0.1-cp37-cp37m-linux_x86_64.whl
通过以上步骤,成功获取 ais_infer 工具,并安装了 aclruntime。
6.2.1 添加 ch_server_rec_ais_infer.py 的可执行命令,点击“OK”,如下图所示。
--model:om模型路径。
--input:npy文件路径。
6.2.2 执行ch_server_rec_ais_infer.py命令,完成后在远程服务器上生成推理结果。
6.2.3 须将远程生成的结果 load 到本地,否则在执行其他命令进行同步的时候会删除。
通过以上步骤成功获取了推理结果。
7.1.1添加数据后处理脚本,对 results 文件夹中的预测结果进行精度测试。
7.1.2添加后处理命令。点击“OK”。
-c:模型配置文件。
-o:可选参数:Global.infer_results表示om推理结果路径。
7.1.3 后处理执行完成后,打印的推理结果如下图,具体为:Infer Results:
Word_1.jpg:[(‘韩国小馆’,0.998046875)]
Word_2.jpg:[(‘汉阳鹦鹉家居建材市场E区25-26号’,0.9932725429534912)]
Word_3.jpg:[(‘电话:159*****928’,0.998046875)]
Word_4.jpg:[(‘实力活力’,0.998046875)]
Word_5.jpg:[(‘西湾监管’,0.99609375)]
1、由于精度验证使用的是源码提供的样例图片,需要使用 ais_infer 工具的纯推理功能进行性能测试。
2、 执行性能测试命令,如下图所示。
3 、性能测试结果如下图所示,为 298.084fps。
本文主要介绍使用 MindStudio 全流程开发工具链,将 PaddlePaddle 模型转成 om 模型,并在昇腾环境上进行推理的端到端流程。在使用 MindStudio 过程中也遇到过很多问题和不懂的地方,除了参考官方指导文档外,帮助更多的还是开发者社区,如下图所示,推荐大家多看些经验分享,写的很详细也很有帮助。
MindStudio 社区链接为: 华为云论坛_云计算论坛_开发者论坛_技术论坛-华为云
在使用 MindStudio 过程中,发现执行完远程命令后,会出现如下图所示的错误,该错误指同步远程文件到本地时出现了错误,经过定位发现项目中包含带有中文的文件名,因此需要将带有中文的文件名称改为英文文件名即可解决该问题。