代码编织梦想

一、介绍

本文主要给大家介绍使用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开发者社区,获取更多帮助以及参数案例,链接为:

华为云论坛_云计算论坛_开发者论坛_技术论坛-华为云

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mmk0511/article/details/127991782

使用tf-slim的inception_resnet_v2预训练模型进行图像分类_wayne2019的博客-爱代码爱编程

输入是jpg 代码: #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Fri Sep 29 16:25:16 2017 @author: wa

使用tensorflow的object detection api 训练ssd-爱代码爱编程

1.报错ValueError: No variables to save  config文件没有配置好,附上一个我这边能用的config文件 model { ssd { num_classes: 2 image_resizer { fixed_shape_resizer { height: 640

dlib的dlib_face_recognition_resnet_model_v1.dat人脸模型原理(残差网络原理)_qq_1410888563的博客-爱代码爱编程

残差网络原理(这篇好理解,写的很好) 来自:https://blog.csdn.net/qq_29893385/article/details/81207203 ResNets 非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。ResNets是由残差块(Residual block)构建的,首先解释一下什么是残差块。 这是一个两层神经

【dlib】使用dlib_face_recognition_resnet_model_v1.dat无法实现微调fune-tuning_郭老二的博客-爱代码爱编程

1、问题描述 dlib官方使用resnet训练人脸识别,训练了300万的数据,网络参数保存在dlib_face_recognition_resnet_model_v1.dat中。 测试中识别lfw数据时,准确率能达到99.

对se_resnet的理解_猫猫与橙子的博客-爱代码爱编程_seresnet

最近在使用InsightFace_Pytorch-master pytorch工程,然后有使用到SE_ResNet50,所以想要分析相应的网络结构(包括网络层名和读取对应层相应参数) 了解什么叫做SE模块? SE是Squeeze-and-Excitation(SE)的缩写,该模块的提出主要是考虑到模型通道之间的相互依赖性。SE网络的使用结构如下图所示:

PaddleHub人体姿态检测模型pose_resnet50_mpii-爱代码爱编程

姿态检测还是挺有意思的,在 paddlehub 上有直接可以拿来用的模型:pose_resnet50_mpii 随便网上找了张图片试了一下效果还行: 代码非常简单: import paddlehub as hub module = hub.Module(name="pose_resnet50_mpii") # set input dict input

基于Tensorflow2.2 Object detection API使用CenterNet_ResNet50_v2预训练模型训练自己的数据集实现目标检测-爱代码爱编程

基于Tensorflow2.2 Object detection API使用CenterNet_ResNet50_v2预训练模型训练自己的数据集实现目标检测 1 简介 前面一篇博客介绍了Tensorflow2.2 object detection api训练环境的搭建,如果先看到本篇博客且又需要配置训练环境的话,可以参考上一篇博客内容。本篇文章主要是讲

pytorch-resnet34残差网络理解-爱代码爱编程

工欲善其事必先利其器,在使用该网络之前要先了解该网络的具体细节,我今天也是第一次查资料,然后加上自己的理解去写这篇学习成长文章。 残差模块 class ResidualBlock(nn.Module): def __init__(self, inchannel, outchannel, stride=1, dowansample=None):