使用mindstudio完成rare_resnet34_vd模型开发_mmk0511的博客-爱代码爱编程
一、介绍
本文主要给大家介绍使用MindStudio开发工具进行英文识别模型RARE_Resnet34_vd离线推理的开发过程,主要内容包括环境安装创建、模型获取转换以及离线推理三个部分。
1.1 模型介绍
识别自然图像中的文字仍是一个充满挑战的任务,RARE(Robust text recognizer with Automatic REctification)是一个对于不规则的文字具有鲁棒性的识别模型。该模型包括一个空间变换网络Spatial Transformer Network (STN)和一个序列识别网络Sequence Recognition Network (SRN),两个网络同时用BP算法进行训练。
在推理过程中一张图像先通过Thin-Plate-Spline (TPS)变换成一个正规的、更易读的图像,此变换可以矫正不同类型的不规则文本,包括透射变换和弯曲的文本。TPS变换由一组基准点(fiducial points)表示,坐标通过卷积神经网络回归得到。然后再放入SRN中进行识别。SRN使用序列识别的attention-based方法,包含一个编码器和一个解码器。编码器产生一个特征表示序列,即序列的特征向量;解码器根据输入序列循环地产生一个字符序列。这个系统是一个端到端的文本识别系统,在训练过程中也不需要额外标记字符串的关键点、字符位置等。更详细的模型介绍大家可以参考原论文:
https://arxiv.org/abs/1603.03915v2
1.2 MindStudio介绍
MindStudio是一套基于华为昇腾AI处理器开发的AI全栈开发平台,包括基于芯片的算子开发、以及自定义算子开发,同时还包括网络层的网络移植、优化和分析,另外在业务引擎层提供了一套可视化的AI引擎拖拽式编程服务,极大的降低了AI引擎的开发门槛。
MindStudio功能框架如下图所示,目前含有的工具链包括:模型转换工具、模型训练工具、自定义算子开发工具、应用开发工具、工程管理工具、编译工具、流程编排工具、精度比对工具、日志管理工具、性能分析工具、设备管理工具、开发工具包(Ascend Development Kit,ADK)等多种工具。
离线推理开发主要使用的是模型转换功能,将训练好的第三方网络模型可以直接通过离线模型工具导入并转换成离线模型,并可一键式自动生成模型接口,方便开发者基于模型接口进行编程,同时也提供了离线模型的可视化功能。
1.3 MindStudio安装
MindStudio的安装包可以通过官方网站获取,链接如下:
安装方法可以参考用户指导手册中的安装部分,链接如下:
二、MindStudio工程创建
1.1 新建模板工程
首次打开软件会指示是否导入配置,下图所示,选择不导入配置,点击OK进入MindStudio欢迎界面。
欢迎界面如下图所示,点击Customize标签,可以修改相关用户设置,如将主题修改为IntelliJ Light。
在MindStudio欢迎界面点击Projects标签,如下图所示,点击New Project进入创建工程流程。
如下图所示,在工程创建选择Ascend App,点击Change。
进入远程CANN配置界面,如下图所示,点击+号。
进入下图SSH配置界面,点击+号创建新的SSH配置,输入SSH信息后点击OK返回远程CANN配置界面。
如下图所示,点击文件夹图标,选择远程CANN安装路径,点击OK和Finish。
开始同步远程CANN环境,如下图所示。
同步完成后返回新建工程界面,如下图所示,选择ACL Project(Python),点击Next。
如下图所示,选择工程名称和路径,点击Finish完成工程创建,自动进入工程界面。
下图所示,点击Close关闭提示信息,完成工程创建。
1.2 工程配置
首先配置SDK,如下图所示,点击File,选择Project Structure,进入工程结构界面。
如下图所示,选择SDKs标签,点击+号,选择Add Python SDK,入在Python解释器选择界面。
如下图所示,选择SSH Interpreter,然后选择Deploy系统会自动识别Python信息,点击OK确认,然后返回工程结构界面。
如下图所示,选择Project,在SDK按钮下选择Remote Python,点击OK完成配置。
配置Deployment,如下图所示,点击Tools->Deployment->Configuration,进入Deployment配置界面,
如下图所示,点击Mappings,选择远程映射目录,点击OK。
最后激活远程终端,如下图所示,点击Tools->Start SSH session。
如下图所示,选择远程服务器,启动Remote Terminal。
三、获取项目代码
3.1 工程代码
需要在工程目录中开发工程代码如下图所示,其中:
inv_delta_C.npy:常量数据
RARE_Resnet34_vd.patch:模型补丁文件
RARE_Resnet34_vd_infer.py:模型推理脚本
requirements.txt:工程依赖信息
3.2 模型代码获取
在本地终端窗口通过git命令获取模型代码,命令如下:
git clone -b release/2.5 https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
git reset --hard a40f64a70b8d290b74557a41d869c0f9ce4959d5
git apply ../RARE_Resnet34_vd.patch
rm .\applications\
cd ..
cp .\inv_delta_C.npy .\PaddleOCR\tools\
获取之后模型代码结构如下图所示。
3.3 推理工具获取
推理工具使用的是 ais_infer,该工具的获取、编译、安装说明链接为:
https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_infer
下载后将 ais_infer 工具代码放到本地工程路径下。
3.4 远程同步代码
工程所有代码如下图所示,点击Tools->Deployment->Upload to上传代码。
如下图所示,选择远程服务器开始远程同步。
同步完成后如下图所示。
3.5 配置远程环境
首先安装工程依赖,在远程终端窗口输入安装命令如下图所示。
然后进入到ais_infer编译目录,执行编译安装命令:
cd ais_infer/backend/
pip3 wheel ./
pip3 install aclruntime-0.0.1-cp37-cp37m-linux_x86_64.whl
cd ../../
四、模型转换
4.1 转onnx模型
首先获取模型训练权重,链接为:
https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_tps_bilstm_att_v2.0_train.tar
本地下载训练权重后,解压到RARE_Resnet34_vd\checkpoint目录下,并上传到远程服务器,如下图所示。
然后需要将训练权重转为推理权重,创建可执行命令,如下图所示,点击Add Configuration。
如下图所示,点击+号,选择Python。
如下图所示,配置可执行命令参数,包括:
Name:执行命令名称
Script path:执行命令脚本
Parameters:执行命令参数,该命令需要配置的参数为:
-c /home/ccx/MindstudioProjects/RARE_Resnet34_vd/PaddleOCR/configs/rec/rec_r34_vd_tps_bilstm_att.yml -o Global.pretrained_model=/home/ccx/MindstudioProjects/RARE_Resnet34_vd/checkpoint/rec_r34_vd_tps_bilstm_att_v2.0_train/best_accuracy Global.save_inference_dir=/home/ccx/MindstudioProjects/inference/rec_rare
其中-c表示模型配置文件,-o表示用户可选参数,包括Global.pretrained_model表示训练模型,Global.save_inference_dir表示推理模型保存路径。
Use specified interpreter:选择Python解释器。
配置完以上命令后点击OK完成。
如下图所示,点击执行按钮开始执行命令。
模型转换成功如下图所示。
最后将推理权重转为onnx模型,在远程终端窗口使用以下命令,转换成功如下图所示。
paddle2onnx \
--model_dir ../inference/rec_rare \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file ../RARE_Resnet34_vd.onnx \
--opset_version 11 \
--enable_onnx_checker True
onnxsim ../RARE_Resnet34_vd.onnx ../RARE_Resnet34_vd_sim.onnx
命令说明:
paddle2onnx为paddle模型转onnx模型工具,相关参数为:--model_dir表示模型路径,--model_filename表示模型文件名称,--params_filename表示参数文件名称,--save_file表示onnx模型保存路径,--opset_version表示选择onnx算子版本,--enable_onnx_checker表示是否进行onnx模型校验。
onnxsim为onnx模型简化工具,主要进行模型中常量折叠和shape推导。
4.2 转om模型
使用MindStudio提供的Model Converter功能进行模型转换,如下图所示,点击Model Converter图标进入模型转换配置界面,
如下图所示,点击Model File的文件夹图标,选择远程onnx模型,点击OK开始解析模型。
模型解析如下图所示。
模型解析完成后,填入相关的模型转换信息,如下图所示,点击Next开始检查模型转换参数。
模型转换信息包括如下:
1.Model Name:输出om模型的名称。
2.Target SoC Version:远程环境设备芯片型号,本文环境使用的是Ascend310P3。
3.Output Path:om模型保存路径。
4.Input Format:输入数据的格式,本文模型的输入为NCHW,表示图片格式的数据。
5.Input Nodes:模型输入节点信息,包括输入节点Name为x、Shape为1,3,32,100、Type为FP32。
6.Output Nodes:可以选择模型输出节点信息。本文使用默认输出节点。
参数校验如下图所示。
校验完成后如下图所示,本文不需要Data Proprocessing,因此将其关闭,点击Next继续。
最后如下图所示,确认转换命令后点击Finish开始进行模型转换。
图44
模型转换成功如下图所示。
五、图像文字识别测试
进行图像文字识别测试需要创建推理执行命令,下图所示,点击执行命令下拉按钮,选择Edit Configuration。
如下图所示,同样创建Python命令。
如下图所示输入可执行命令名称、可执行脚本、参数、Python解释器,点击OK完成创建。
其中具体参数为:
--image_dir="PaddleOCR/doc/imgs_words/en/word_3.png" \
--rec_model_dir="/home/ccx/MindstudioProjects/inference/rec_rare/" \
--rec_image_shape="3, 32, 100" \
--rec_char_dict_path="./PaddleOCR/ppocr/utils/ic15_dict.txt"
参数说明:
--image_dir:推理图片路径
--rec_model_dir:离线权重路径
--rec_image_shape:图片shape信息
--rec_char_dict_path:文字字典路径
创建推理执行命令完成后,如下图所示,点击运行按钮开始执行推理命令。
推理命令执行完成后如下图所示,对于word_3.png文字识别结果为“154”,打开该图片可以看出图片的内容为154,说明推理成功并且成功识别出了图片中的文字内容。
六、总结
通过使用MindStudio进行英语文字识别模型RARE_Resnet34_vd离线推理开发,完成了图像文字识别,在这次开发过程中,主要体验了MindStudio模型转换功能,相比于使用命令行进行转换,MindStudio可以自动识别到onnx模型的基本信息,非常方便。推荐大家参考MindStudio手册体验其他开发过程中用到的相关功能,链接为:
另外大家也可通过MindStudio开发者社区,获取更多帮助以及参数案例,链接为: