本文主要介绍通过mindStudio全流程开发工具链,将PaddlePaddle模型转为om模型,并在昇腾环境上推理的流程,目录如下:
目录
一、 模型介绍
二、 MindStiduo环境搭建
三、 模型获取
四、 数据预处理
五、 模型转换
六、 模型推理
七、 模型精度验证
八、 性能验证
九、 总结
十、 FAQ
PP-OCR是PaddleOCR团队自研的超轻量OCR系统,面向OCR产业应用,权衡精度与速度。近期,PaddleOCR团队针对PP-OCRv2的检测模块和识别模块,进行共计9个方面的升级,打造出一款全新的、效果更优的超轻量OCR系统:PP-OCRv3。全新升级的PP-OCRv3的整体的框架图检测模块仍基于DB算法优化,而识别模块不再采用CRNN,更新为IJCAI 2022最新收录的文本识别算法SVTR,尤其是在ch_PP-OCRv3_det模型相比ch_PP-OCRv3_det模型的精度和性能提升了超过5%
通过 MindStudio 官网介绍可以学习了解 MindStudio 的功能,以及照
MindStudio 用户手册进行安装和使用。
官网链接:https://www.hiascend.com/zh/software/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资源。找到对应位置的CANN版本,然后点击“OK”。
等待同步完成点击“finish”
同步完成,点击“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_PP-OCRv3_det模型, 的整体的框架图检测模块仍基于DB算法优化,而识别模块不再采用CRNN,更新为IJCAI 2022最新收录的文本识别算法SVTR。
在本地终端中通过 git 命令获取源码,参考命令如下:
git clone -b release/2.6 https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
git reset --hard 7f6c9a7b99ea66077950238186137ec54f2b8cfd
cd ..
修改模型配置文件
配置不使用 gpu ,如下图。
修改完成后将 PaddleOCR 同步到远程服务器,如下图。
3.3、安装依赖
添加依赖文件“requirements.txt”
在远程终端窗口通过 pip 命令安装依赖 。
执行命令如下,[--user]为可选参数,普通用户需要添加使用: pip3 install -r requirements.txt [--user]
通过以上步骤,成功获取 ch_PP-OCRv3_det 模型的源代码框架,以及配置成完全运行依赖环境。
在工程中添加数据预处理脚本,该脚本主要对图片进行归一化操作并转成二进制文件保存如下图所示。
如下图所示,点击下拉按钮,选择“Edit Configurations...”。
如下图所示,点击加号,选择“Ascend App”。
如下图所示,输入命令名称,选择可执行脚本,点击“OK”。
如下图所示,添加命令参数,点击“OK”。
-c: 模型配置文件路径
-o:推理的数据集的路径
点击执行按钮,进行数据预处理。
执行后在ch_PP-OCRv3_det目录下生成保存有预处理结果的pre_data文件夹,执行结果如下图所示:
获取推理权重文件,权重链接为:https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_distill_train.tar 下载之后,解压到本地ch_PP-OCRv3_det目录下,并上传到远程服务器,如下图所示。
选择tools目录下的export_model.py,进行参数配置。
参数配置如下图所示:
-c:模型配置文件。
-o: 模型入参信息。
Global.pretrained_model:权重文件保存路径。
Global.save_inference_dir:paddleocr推理模型保存路径。
运行后在当前目录下生成ch_PP-OCRv3_det_infer文件夹,如下图所示:
在远程终端执行转 onnx 命令,并将生成的 onnx 模型拉取到本地,如下图所示,参考命令如下:
export PATH=/usr/local/python3.7.5/bin:$PATH
paddle2onnx \
--model_dir ch_PP-OCRv3_det_infer \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file ch_PP-OCRv3_det.onnx \
--opset_version 11 \
--input_shape_dict="{'x':[-1,3,-1,-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_PP-OCRv3_det.onnx。
修改onnx模型的domin用于删除上述生成的onnx模型的多个分支,只留下一个正确的分支,运行domin.py脚本配置以及运行结果如下图:
下面使用 MindStudio 的模型转换功能将 onnx 模型转成 om 模型。
如下图所示,点击“Model Converter”按钮。
在弹出的 Model Converter 窗口中选择 Model File,点击“OK”。模型转换参数如下:
--model:为ONNX模型文件。
--framework:5代表ONNX模型。
--output:输出的OM模型。
--input\_format:输入数据的格式。
--input\_shape:输入数据的shape。
--log:日志级别。
--soc\_version:处理器型号。
--dynamic_image_size:设置输入图片的动态分辨率参数。
自动解析模型中,如下图。
解析完成后,设置模型名称、soc版本、om模型生成目录、通讯模型的Input Format、Shape、Type 信息,点击“Next”。
然后等待检查。
模型输出路径设为当前ch_PP-OCRv3_det目录下,模型shape适配预处理之后的图片的shape,要设置为动态shape为{1,3,-1,-1},Type设置为FP32。
Dynamic Image Size: 736,736;736,800;736,960;736,992;736,1184;736,1248;736,1280;768,928;832,1536;992,736;1088,736;1184,736
检查完成后点击“Next”。
检察生成的 atc 命令,确认无误后点击“Finish”
通过以上步骤,使用 MindStudio 的模型转换功能成功将 onnx 模型转成 om模型,在ch_PP-OCRv3_det目录下生成ch_PP-OCRv3_det_bs1.om。
我们使用 ais-infer 工具进行推理,ais-infer 工具获取及使用方式请查看ais_infer 推理工具使用文档,链接:https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_infer 。
在本地终端命令中通过 git 获取推理工具代码,命令如下:
git clone https://gitee.com/ascend/tools.git
ch_PP-OCRv3_det\tools\ais_bench_workload\tool目录下的 ais_infer文件夹复制到当前ch_PP-OCRv3_det 目录下, 并将进行改动的文件夹同步到远程服务器,如下图所示。
编译并安装 aclruntime 包,如下图所示,命令如下:
cd ais_infer/backend/
pip3 wheel ./
pip3 install aclruntime-0.0.1-cp37-cp37m-linux_x86_64.whl
通过以上步骤,成功获取ais_infer工具,并安装了aclruntime。
添加 ais_infer 的可执行命令,点击“OK”,如下图所示。
- 参数说明:
--model:om模型路径。
--input:bin文件路径。
--output:推理结果保存路径。
--batchsize:om模型的batch。
执行ais_infer命令,完成后在远程服务器上ch_PP-OCRv3_det目录下生成result_bs1文件夹,并同步到本地,否则在执行其他命令进行同步的时候会删除。
通过以上步骤成功获取了推理结果。
添加数据后处理脚本,对 result_bs1 文件夹中的预测结果进行精度测试。
添加后处理命令。点击“OK”。
参数说明:
-c:模型配置文件。
Global.infer_img:推理图片数据所在路径。
res_dir:推理结果所在路径。
save_dir:后处理结果存放路径。
info_path:预处理后的其他信息存放路径。
后处理完成之后,在ch_PP-OCRv3_det目录下result_acc文件夹中生成了每个推理结果对应的检测图片,如下图所示:
添加在线推理命令,参数说明如下,点击“OK”。
-c:配置文件。
Global.infer_img:推理数据集所在路径。
Global.pretrained_model:训练模型。
执行在线推理命令后,被检测的图片存放在ch_PP-OCRv3_det目录下的/checkpoints/det_db/det_results_Student中。如下图所示:
由于精度验证使用的是源码提供的样例图片,需要使用 ais_infer 工具的纯推理功能进行性能测试。
添加纯推理命令,如下图所示:
参数说明:
--model:om模型路径。
--loop:推理次数。
--batchsize:om模型的batch。
执行性能验证命令,推理结果如下图所示:
性能测试结果为220.88122664442486。
本文主要介绍使用 MindStudio 全流程开发工具链,将 PaddlePaddle 模型转成 om 模型,并在昇腾环境上进行推理的端到端流程。在使用 MindStudio 过程中也遇到过很多问题和不懂的地方,除了参考官方指导文档外,帮助更多的还是开发者社区,如下图所示,推荐大家多看些经验分享,写的很详细也很有帮助。
MindStudio 社区链接为:
https://bbs.huaweicloud.com/forum/forum-945-1.html?filterCondition=1。
在使用 MindStudio 过程中,发现执行完远程命令后,会出现如下图所示的错误,该错误指同步远程文件到本地时出现了错误,经过定位发现项目中包含带有中文的文件名,因此需要将带有中文的文件名称改为英文文件名即可解决该问题。