目录
一、模型介绍
二、MindStudio介绍
三、MindStudio工程创建
3.1、创建模板工程
3.2、工程配置
四、获取代码
4.1、添加工程代码
4.2、添加模型代码
4.3、添加推理工具代码
4.4、远程同步代码
五、模型转换
5.1、获取权重
5.2、安装依赖
5.3、转onnx
5.4、转om
六、离线推理
6.1、数据预处理
6.2、模型推理
6.3、推理结果展示
七、总结
本文主要介绍使用MindStudio开发工具进行英语检测模型 en_PP-OCRv3_det离线推理的开发过程,主要内容包括环境安装配置、模型获取转换以及离线推理三个总分。
en_PP-OCRv3_det是基于PP-OCRv3的英文文本检测模型,PP-OCRv3检测模型对PP-OCRv2中的CML协同互学习文本检测蒸馏策略进行了升级,分别针对教师模型和学生模型进行进一步效果优化。其中,在对教师模型优化时,提出了大感受野的PAN结构LK-PAN和引入了DML蒸馏策略;在对学生模型优化时,提出了残差注意力机制的FPN结构RSE-FPN。关于PP-OCRv3的详细介绍参考以下链接:
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/doc/doc_ch/PP-OCRv3_introduction.md
MindStudio是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,集成了工程管理、编译器、仿真器以及命令行开发工具包,提供网络模型移植、应用开发、推理运行及自定义算子开发等功能。通过MindStudio能够进行工程管理、编译、调试、运行、性能分析等全流程开发,支持仿真环境及真实芯片运行,提高开发效率。MindStudio功能架构如下图所示,通过官网链接可以获取更多关于MindStudio的功能介绍:
https://www.hiascend.com/software/mindstudio
进入MindStudio官网,可以获取下载方式如下图,本文下载的是MindStudio_5.0.RC3_win.exe,安装过程可以参考下图中的用户手册。
3.1、创建模板工程
如下图所示,首次打开MindStudio提示是否导入配置,默认不导入,点击OK。
如下图所示,通过Customize选项设置颜色主题,可以将颜色设置成白色。
如下图所示,通过Projects选择创建工程,点击New Project。
如下图所示,选择Ascend App工程,点击Change。
如下图,点击+号图标。
如下图,点击+号图标添加配置,输入远程服务器信息,点击OK。
如下图,点击文件夹图标,选择CANN安装路径,点击OK,然后点击Finish。
如下图所示,正在同步CANN环境。
如下图所示,同步完成后选择ACL Project(Python),点击Next。
如下图所示,输入工程名和路径,点击Finish,完成工程创建。
3.2、工程配置
如下图所示,进入工程后会有提示信息,点击Close关闭即可。
如下图所示,点击File->Project Structure。
如下图所示,点击SDKs->+号->Add Python SDK。
如下图所示,点击SSH Interpreter,选择Deploy系统会自动识别Python环境,然后点击OK。
如下图所示,点击Project->Remote Python 3.7.5,选择Python环境,点击OK。
如下图所示,点击Tools->Deployment->Configuration。
如下图所示,在Deployment选项下,选中远程服务器,点击Mappings,选择远程映射目录,点击OK。
如下图所示,点击Tools->Start SSH session。
如下图所示,点击服务器,启动远程终端Remote Terminal窗口。
通过以上步骤,工程创建配置完成。
如下图所示,工程所需要开发的代码包括:
en_PP-OCRv3_det_ais_infer.py:推理脚本
en_PP-OCRv3_det_postprocess.py:数据后处理脚本
en_PP-OCRv3_det_preprocess.py:数据前处理脚本
requirements.txt:依赖文件
在本地终端窗口中可以通过git命令添加模型代码,相关命令为:
git clone -b release/2.6 https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
git reset --hard 274c216c6771a94807a34fb94377a1d7d674a69f
rm .\applications\
rm .\doc\imgs_en\img_12.jpg
rm .\doc\imgs_en\wandb_ models.png
rm .\doc\imgs_en\model_prod_flow_en.png
cd ..
如下图为模型代码结构。
如下图所示,将模型配置文件ch_PP-OCRv3_det_cml.yml中的use_gpu设置成false。
如下图所示,将目标检测推理文件 infer_det.py中的第53行代码注释掉。
推理工具使用的是ais_infer,该工具的获取、编译、安装说明链接为:
https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_infer
下载后将ais_infer工具代码放到本地工程路径下。
如下图为工程代码结构,选择工程名,点击Tools->Deployment->Upload to
如下图所示,选中服务器,开始远程同步代码。
如下图,代码远程同步完成。
模型权重链接如下:
https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_infer.tar
下载后解压至en_PP-OCRv3_det\ inference目录下,并同步到远程目录,如下图。
在远程终端中使用命令远程安装Python依赖,命令如下:
pip3 install -r requirements.txt --user
然后进入到ais_infer目录下,编译并安装aclruntime,命令如下:
cd ais_infer/backend/
pip3 wheel ./
pip3 install aclruntime-0.0.1-cp37-cp37m-linux_x86_64.whl
cd ../../
在远程终端中使用命令转onnx模型,命令如下:
paddle2onnx \
--model_dir ./inference/en_PP-OCRv3_det_infer \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file ../en_PP-OCRv3_det.onnx \
--opset_version 11 \
--enable_onnx_checker True \
--input_shape_dict="{'x':[-1,3,-1,-1]}"
其中--model_dir表示模型路径,--model_filename表示模型文件名称,--params_filename表示参数文件名称,--save_file表示onnx保存路径,--opset_version表示onnx算子版本,--enable_onnx_checker表示是否校验onnx模型,--input_shape_dict表示模型输入shape信息列表。
如下图所示,onnx模型转换成功。
如下图所示,点击Model Converter按钮。
如下图所示,点击Model File文件夹图标,选择转出的onnx模型,点击ok。
如下图所示,模型转换工具开始解析onnx模型。
如下图所示,模型解析完成后,填入相关模型转换信息,点击Next。
模型转换信息说明:
1.Model Name:保存om模型的名称
2.Target SoC Version:目标芯片型号,本文使用的是Ascend310P3
3.Output Path:om模型保存路径
4.Input Format:输入数据格式,本文模型使用是NCHW,表示图像数据。
5.Input Nodes:模型输入节点:本文模型包括一个x,其Shape为1,3,-1,-1,Type为FP32。由于输入为动态shape,Dynamic Image Size表示指定模型输入图像的大小。
6.Output Nodes:模型输出节点,本文没有配置,使用默认输出节点。
如下图所示,模型转换工具开始校验参数。
参数校验完成后如下图做数据预处理,因为本文模型不需要数据预处理因此关闭Data Preprocessing,点击Next继续。
如下图确认命令无误后点击Finish开始进行模型转换。
模型转换成功如下图所示,在本地生成om模型:
创建可执行命令,如下图所示,点击Add Configuration。
如下图所示,点击+号,选择Python。
如下图所示,输入命令名称、执行文件、参数、Python解释器,点击OK。
如下图所示,点击命令执行按钮,开始执行数据预处理命令。
如下图所示,数据预处理保存在pre_data目录下。
创建推理执行命令如下图所示。创建完成后执行该命令。命令参数如下:
--ais_infer=./ais-infer/ais_infer.py --model=./en_PP-OCRv3_det.om --inputs=/home/pre_data/ --batchsize=1
参数说明:
--ais_infer:ais_infer.py脚本
--model:om模型
--inputs:输入数据
--batchsize:om模型batchsize
如下图所示,推理完成后,推理结果保存在results_bs1目录下。
如下图所示,创建数据后处理命令。并执行该命令,命令参数如下:
-c PaddleOCR/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_cml.yml -o Global.infer_img="./PaddleOCR/doc/imgs_en/" Global.infer_results=/home/results_bs1/
参数说明:
-c:模型配置文件
-o:可选参数:Global.infer_img表示图片路径,Global.infer_results表示推理结果路径
下图所示,图像检测结果保存在det_results目录下。
如下图所示,通过远程终端使用命令将det_results复制到远程映射目录,并同步到本地。
如下图所示,可以在本地看到推理结果图片。
本地打开图片,可以看出en_PP-OCRv3_det通过离线推理,基本上可以检测出文本单据或者自然场景中的文本位置。检测效果如下:
本文通过使用MindStudio工具,完成了en_PP-OCRv3_det模型离线推理以及英文文本检测,最后给大家推荐一些比较有用的资料,大家可以先通过官网了解MindStudio的一些功能,然后按照用户手册进行安装、和基本使用方法,最后可以在开发者社区参考一些案例,或者遇到问题进行求助,可以帮助自己快速使用MindStudio进行项目开发。
1.MindStudio官网
https://www.hiascend.com/zh/software/mindstudio
2.MindStudio开发者社区
https://bbs.huaweicloud.com/forum/forum-945-1.html
3.MindStudio用户手册
https://www.hiascend.com/document/detail/zh/mindstudio/50RC2/progressiveknowledge/index.html