-
求问ONNX模型如何转换到MindIR格式?感谢!
-
yolov5 6.0版本的模型 跑mindx sdk demo精度损失比较多,不出推理结果用的这个sdk demo,cid:link_0上面嵌套CANN 是5.0.4,用yolov5 6.0版本的模型, ATC模型转换之后, 跑5.0.4版本SDK(2.0.4)推理, 推理精度损失比较多, 推理基本不出结果, 这个模型转换之前在pytorch 推理是正常的, 并且yolov5 -5.0 这个版本模型转换之后在 mindx sdk 推理是正常的, 请问yolov5 6.0版本的模型有做适配吗? 还是需要做什么特别的处理?重现步骤转模型命令:atc --model=./smoke_sim_t.onnx --framework=5 --output=./smoke_yolo_sim_t2222 --input_format=NCHW --input_shape="images:1,3,640,640" --enable_small_channel=1 --insert_op_conf=./aipp_yolov5.cfg --soc_version=Ascend310 --log=infoaipp 配置文件:aipp_op {aipp_mode : staticrelated_input_rank : 0input_format : YUV420SP_U8src_image_size_w : 640src_image_size_h : 640crop : falsecsc_switch : truerbuv_swap_switch : falsematrix_r0c0 : 256matrix_r0c1 : 0matrix_r0c2 : 359matrix_r1c0 : 256matrix_r1c1 : -88matrix_r1c2 : -183matrix_r2c0 : 256matrix_r2c1 : 454matrix_r2c2 : 0input_bias_0 : 0input_bias_1 : 128input_bias_2 : 128var_reci_chn_0 : 0.0039216var_reci_chn_1 : 0.0039216var_reci_chn_2 : 0.0039216}yolov5-6.0 跑sdk推理打印输出如下所示(V5.0版本可以正常输出):本帖最后由 zhengchuang 于
-
Atlas300I-3000,CANN5.1RC2, Ascend310处理器您好,请问我在对多张输入图片预处理使用多线程的时候,发现各个子线程不能同时开启是什么问题呢?是因为资源不够的问题吗?开启线程: for img_name in img_list: thread_list.append(threading.Thread(target=jpg_pred,args=(img_name,))) i+=1 for t in thread_list: t.start() #time.sleep(0.02) for t in thread_list: t.join()子线程中的函数jpg_pred:def jpg_pred(img_name): print(1,time.time()) ret = acl.rt.set_context(context) #global input_data, img_src, image_filte_path print("predict: {}".format(img_name)) image_filte_path = img_path+"/{}".format(img_name) img_src = cv2.imread(image_filte_path) input_data = pre_process_ssd(img_src,height, width) for i in range(1000): if flag: scores, boxes = model_inference(input_data) break else: time.sleep(0.001) print("scores",scores) post_process_ssd(scores,boxes,img_src,image_filte_path,top_k=2) #input_data_list.append(input_data) #img_src_list.append(img_src) #image_filte_path_list.append(image_filte_path)def model_inference(input_data): global flag flag=False scores, boxes = model.execute([input_data,]) flag=True return scores, boxes我是想同时开启十几个线程,请问有线程数量上限吗?
-
硬件设备:Atlas 800 3010操作系统:Ubuntu内核版本: 4.15.0-112CPU架构:x86在测试验证openmmlab相关代码时出现以下问题:Segmentation fault
-
环境为 X86_64平台VMware虚拟机Ubuntu18.04.4桌面版, 使用ascend-deployer部署, 目标设备环境为CANN3.3.0根据教程安装方案-非昇腾设备-安装前准备-软件安装(ascend-deployer)-环境准备-3.3.0-CANN商用版-文档首页-昇腾社区 (hiascend.com)使用ascend-deployer进行开发环境安装, toolkit已经安装完, 在/usr/local/下有相关文件:也已经将set_env.sh中的环境写入~/.bashrc下执行 atc --model=$HOME/module/resnet50.prototxt --weight=$HOME/module/resnet50.caffemodel --framework=0 --output=$HOME/module/out/caffe_resnet50 --soc_version=Ascend310 命令后报错:求解如何处理
-
昇腾提供的npu-smi 命令类似NVIDIA的nvidia-smi 命令,请问也有相应的C++/python 接口用于查询相关信息吗? 还有如何查询当前程序所占用显存呢,麻烦相关技术人员帮忙解答一下谢谢!
-
Mind SDK -- 财务票据OCR识别参考设计案例1 案例概述1.1 概要描述在本系统中,目的是基于MindX SDK,在昇腾平台上,开发端到端财务票据OCR识别的参考设计,实现对财务票据中的文本信息进行OCR识别的功能,达到功能要求1.2 特性及适用场景本项目适用于票据图片完整清晰,倾斜角度较小的场景,并且建议图片分辨率不超过1280*1280,大小不超过1M。注:由于模型的限制,本项目暂只支持增值税发票、出租车发票和定额发票的识别1.3 模型介绍本项目涉及三种模型,分别是:用于分类的ResNet50模型(Mindspore)、用于文本检测的DBNet模型和用于文本识别的CRNN模型。相关模型文件在此处下载:resnet50、db、crnn1.4 实现流程1、基础环境:Ascend 310、mxVision、Ascend-CANN-toolkit、Ascend Driver 2、模型获取与训练:resnet50、db、crnn的训练 2、模型转换: mindspore模型转昇腾离线模型:resnet50.air --> resnet50.om PyTorch模型转昇腾离线模型:db.onnx --> db.om、crnn.onnx --> crnn.om 3、业务流程编排与配置 4、mxpi_textobjectpostprocessor插件的后处理库开发 5、python推理流程代码开发技术流程图如下所示:1.5 代码地址本项目的代码地址为:cid:link_122 软件方案介绍2.1 技术原理ResNet是ImageNet竞赛中分类问题效果比较好的网络,它引入了残差学习的概念,通过增加直连通道来保护信息的完整性,解决信息丢失、梯度消失、梯度爆炸等问题,让很深的网络也得以训练。参考论文DB(Differentiable Binarization)一种使用可微分二值图来实时文字检测的方法,和之前方法的不同主要是不再使用硬阈值去得到二值图,而是用软阈值得到一个近似二值图,并且这个软阈值采用sigmod函数,使阈值图和近似二值图都变得可学习。参考论文CRNN全称为Convolutional Recurrent Neural Network,是一种卷积循环神经网络结构,用于解决基于图像的序列识别问题,特别是场景文字识别问题。主要用于端到端地对不定长的文本序列进行识别,不用先对单个文字进行切割,而是将文本识别转化为时序依赖的序列学习问题,也就是基于图像的序列识别。参考论文2.2 项目方案架构介绍本系统设计了不同的功能模块。主要流程为:图片传入流中,通过分流插件分别送给分类模块和检测模块,其中分类模块将图像大小调整到224*224,然后利用resnet50分类模型对图片进行分类,将分类结果发送给串流插件;另一边检测模块接收图像传给dbnet模型进行文本检测,输出检测文本框坐标,然后通过坐标对原图像进行抠图,送入识别模块,crnn模型进行文本识别,将识别结果发送给串流插件,最后将结果组装成json输出。表2.2 系统方案中各模块功能:序号子系统功能描述1图像输入调用MindX SDK的appsrc输入图片2分流调用MindX SDK的mxpi_tee,分流给不同模块3图片分类利用resnet50的分类模型,配合后处理插件,得到分类结果4文本检测利用db的检测模型,配合后处理插件,输出检测结果5仿射变换调用MindX SDK的mxpi_warpperspective,根据检测结果进行仿射变换,得到文本框图片6文本识别利用crnn的识别模型,对文本框图片进行识别,配合后处理插件,输出识别结果7串流调用MindX SDK的mxpi_synchronize,将不同分支串流8结构化输出调用MindX SDK的mxpi_dataserialize,将分类、检测和识别结果组成json输出3 开发环境准备3.1 环境依赖说明环境依赖软件和版本如下表:软件名称版本Ubuntu18.04.1 LTSMindX SDK2.0.4Python3.9.2CANN5.0.4numpy1.22.3opencv-python4.5.5PIL8.4.03.2 环境搭建3.2.1 环境变量设置在编译运行项目前,需要设置环境变量:# Mind SDK环境变量: .${SDK-path}/set_env.sh # CANN环境变量: .${ascend-toolkit-path}/set_env.sh # 环境变量介绍 SDK-path:SDK mxVision安装路径 ascend-toolkit-path:CANN安装路径3.3 模型获取、训练与转换3.1 模型获取及训练3.1.1 resnet50训练代码参考链接3.1.2 db参考paddleocr文本检测训练3.1.3 crnn参考paddleocr文本识别训练3.2 模型转换此处提供训练后的中间模型供模型转换使用:resnet50、db、crnn在./models/resnet50目录下执行如下命令atc --model=./resnet.air --framework=1 --output=resnet50 --input_format=NCHW --input_shape="x:1,3,224,224" --enable_small_channel=1 --soc_version=Ascend310 --insert_op_conf="aipp.config"在./models/db目录下执行如下命令atc --model=./db.onnx --framework=5 --output_type=FP32 --output=db --input_format=NCHW --input_shape="x:1,3,-1,-1" --dynamic_image_size="1216,1280;1280,1216;1120,1280;1280,1120;1024,1280;1280,1024;928,1280;1280,928;832,1280;1280,832;736,1280;1280,736;704,1280;1280,704;672,1280;1280,672;640,1280;1280,640;608,1280;1280,608;576,1280;1280,576;544,1280;1280,544;512,1280;1280,512;480,1280;1280,480;448,1280;1280,448" --soc_version=Ascend310 --insert_op_conf=./det_aipp.cfg在./models/crnn目录下执行如下命令atc --model=./crnn.onnx --framework=5 --output_type=FP32 --output=crnn --input_format=NCHW --input_shape="x:1,3,48,320" --soc_version=Ascend310 --insert_op_conf="rec_aipp.cfg"执行完模型转换脚本后,会生成相应的.om模型文件。更多ATC工具细节请参考链接。4 推理流程开发实现4.1 pipeline编排appsrc # 输入 mxpi_imagedecoder # 图像解码 mxpi_tee # 分流 分流1: mxpi_imageresize # 图像缩放 mxpi_tensorinfer # 模型推理(图片分类) mxpi_classpostprocessor # 模型后处理(resnet50) 分流2: mxpi_imageresize # 图像缩放 mxpi_tensorinfer # 模型推理(文本检测) mxpi_textobjectpostprocessor # 模型后处理(db) mxpi_warpperspective # 仿射变换 mxpi_tensorinfer # 模型推理(文本识别) 串流: mxpi_textgenerationpostprocessor# 模型后处理(crnn) mxpi_synchronize # 串流 mxpi_dataserialize # 结构化输出 appsink # 输出4.2 db文本检测后处理库开发参考链接4.3 主程序开发1、初始化流管理。2、加载图像,进行推理。3、获取pipeline各插件输出结果,解析输出结果。4、根据识别结果在图上标出文本框信息和文本内容,根据分类结果创建文件名5、销毁流5 编译与运行步骤1 编译后处理插件DBPostProcess参考链接编译后处理插件,修改部分文件代码,具体如下:# 数字为行号,文件位于src/DBPostProcess/CMakeLists.txt 1 cmake_minimum_required(VERSION 3.5.2) 3 add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0 -Dgoogle=mindxsdk_private) # 数字为行号,文件位于src/DBPostProcess/DBPostProcess.h 72 bool IsValidTensors(const std::vector<TensorBase> &tensors) const;并将编译好的libDBPostProcess.so和libclipper.so放在项目目录./lib下,添加如下环境变量(其中project_path为项目路径)export LD_LIBRARY_PATH={project_path}/lib/:$LD_LIBRARY_PATH进入./lib目录,将编译完的.so文件权限修改为640。步骤2 配置pipeline文件将pipeline中相关模型路径,配置文件路径及插件路径配置正确步骤3 将要识别的票据图片放到./inputs目录下,执行如下命令python3 main.py待执行完毕可在./outputs目录下查看结果结果展示:6 指标验证6.1 精度测试本精度测试在昇腾310芯片上执行测试数据可在此处下载,将下载的数据解压到eval_data目录下,在项目目录下执行python3 eval.py可得精度结果如下所示,其中acc为db+crnn端到端精度,type_acc为resnet50精度精度结果如下表所示模型精度resnet500.99端到端OCR0.95346.2 性能测试npu性能测试采用ais-infer工具,ais-infer工具为华为自研的模型推理工具,支持多种模型的离线推理,能够迅速统计出模型在310P上的性能,支持真实数据和纯推理两种模式,配合后处理脚本,可以实现诸多模型的端到端过程,获取工具及使用方法可以参考推理工具ais-infer官方源码仓。将三个模型的om文件放到ais_infer.py同目录下,执行如下命令可得到三个模型的npu性能python3 ais_infer.py --model model/resnet50.om --batchsize 1 --loop 10python3 ais_infer.py --model model/db.om --batchsize 1 --loop 10 --dymHW 1216,1280python3 ais_infer.py --model model/crnn.om --batchsize 1 --loop 10gpu性能测试采用使用TensorRT,将三种模型的onnx文件放在装有对应gpu卡(T4)的服务器上,执行如下命令得到gpu性能trtexec --onnx=resnet50.onnx --fp16 --shapes=image:1x3x224x224trtexec --onnx=db.onnx --fp16 --shapes=x:1x3x1216x1280trtexec --onnx=crnn.onnx --fp16 --shapes=x:1x3x48x320可得性能如下表所示:模型gpu性能(T4)310性能(4卡)resnet50903.4893 fps1743.1472 fpsdb36.5123 fps45.4676 fpscrnn1159.875 fps1114.392 fps7 常见问题7.1 后处理插件路径问题问题描述:提示libclipper.so: cannot open shared object file: No such file or directory解决方案:这是由于没有将后处理插件的路径配置到环境变量中,添加如下环境变量,project_path为项目路径export LD_LIBRARY_PATH={project_path}/lib/:$LD_LIBRARY_PATH7.2 字体资源问题问题描述:提示cannot open resource解决方案:将字体文件路径正确配置到eval.py中add_text函数中,此处提供字体文件,下载后放置于项目目录下,如下fontstyle = ImageFont.truetype("SIMSUN.TTC", textSize, encoding="utf-8")
-
从分子到宇宙,从求解薛定谔方程到地球系统模拟,从“电热声光力”到“气象”、“金融”……我们的现代科学中还有很多问题,需要更优的解决方案。AI的出现,为更好地解决这些问题提供了可能性。AI+科学计算新赛道崛起,昇思MindSpore科学智能将把我们的认知拓展到什么样的边界?往期推荐:【一图读懂昇思MindSpore • 第1期】秒懂简介 | 你和昇思MindSpore只有一张图的距离!【一图读懂昇思MindSpore • 第2期】分布式并行 | 打破深度学习性能墙!【一图读懂昇思MindSpore · 第3期】图算融合 | 破而后立,晓喻新生【一图读懂昇思MindSpore · 第4期】动静统一 | 科学研究,高效部署想了解昇思MindSpore更多特性?欢迎留言讨论~
-
系统为ubuntu20.04,python版本为3.7.5, 使用的CANN版本号为3.3.0, 环境为x86开发机, 新建了一个用户HwHiAiUser进行操作.按照安装流程-命令行方式安装-软件安装(ascend-deployer)-环境准备-3.3.0-CANN商用版-文档首页-昇腾社区 (hiascend.com)中的指导已经成功执行了Ascend-cann-toolkit_3.3.0_linux-x86_64进行安装, 安装成功后输出:我根据教程尝试使用ATC进行模型转换后报错, 执行命令为:atc --model=/home/HwHiAiUser/download/resnet50.prototxt --weight=/home/HwHiAiUser/download/resnet50.caffemodel --framework=0 --output=/home/HwHiAiUser/download/caffe_resnet50 --soc_version=Ascend310报错:输入的模型均为文档中提供的链接下载
-
我需要将模型迁移到Atlas200设备上, 目前该设备的环境已经固定, 使用CANN3.3.0, 我现在需要在开发机上安装CANN3.3.0 toolkit调用atc工具进行模型转换我查阅了相关文档 安装须知-软件安装(msInstaller)-环境准备-3.3.0-CANN商用版-文档首页-昇腾社区 (hiascend.com)上面对于使用命令行进行开发环境配置的部分好像并没有强制要求使用Ubuntu18.04, 我想知道使用别的版本(比如我的是Ubuntu20)能否正常工作因为我现在安装完CANN Toolkit后进行模型转换失败了
-
请问该接口第一个参数model应该怎么获取?第二个参数model size是否是固定长度的input和output和数据长度加和?
-
使用acl接口调用自定义算子,执行算子计算返回100024,根据文档是未找到自定义算子。但该算子已经完成了编译和算子包部署。部署后:/usr/local/Ascend/ascend-toolkit/5.1.RC1.alpha005/arm64-linux/opp/op_impl/custom/ai_core/tbe/custom_impl/路径下有算子实现文件/usr/local/Ascend/ascend-toolkit/5.1.RC1.alpha005/arm64-linux/opp/op_impl/custom/ai_core/tbe/config/ascend910/aic-ascend910-ops-info.json 中包含算子的定义信息/usr/local/Ascend/ascend-toolkit/5.1.RC1.alpha005/arm64-linux/opp/op_proto/built-in/下存在libopsproto.so文件
-
目录一、介绍... 21.1模型介绍... 21.2 MindStudio介绍... 2二、安装部署... 22.1 下载安装... 22.2 用户配置... 42.3 创建工程... 42.4 部署... 8三、获取代码... 133.1 获取模型代码... 133.2 获取开发代码... 133.3 获取推理工具代码... 143.4 远程同步代码... 14四、模型转换... 154.1 获取推理权重... 154.2 转onnx模型... 164.3 转om模型... 17五、离线推理... 225.1 数据处理... 225.2 执行推理... 245.3 文字识别效果... 25六、总结... 27一、介绍本文将介绍使用MindStudio进行ch_PP-OCRv2_rec模型离线推理开发过程,并完成图片文字识别。1.1模型介绍ch_PP-OCRv2_rec是基于PP-OCRv2的中文文本识别模型,PP-OCRv2在PP-OCR的基础上,进一步在5个方面重点优化,检测模型采用CML协同互学习知识蒸馏策略和CopyPaste数据增广策略;识别模型采用LCNet轻量级骨干网络、UDML 改进知识蒸馏策略和Enhanced CTC loss损失函数改进,进一步在推理速度和预测效果上取得明显提升。PP-OCRv2论文链接为:cid:link_61.2 MindStudio介绍MindStudio是一套基于IntelliJ框架的开发工具链平台,提供了算子开发、调试、调优以及第三方算子开发的功能,同时还提供了网络移植、优化和分析功能,可以为我们开发昇腾相关项目提供极大的便利。下图为MindStudio的开发流程。二、安装部署2.1 下载安装通过MindStudio官网可以获取下载途径以及用户手册。如下图,在下载网页中可以根据自己的系统环境、安装方式等进行选择下载。 MindStudio的安装过程可以参考官方指导手册,链接为:cid:link_12.2 用户配置第一次启动MindStudio提示是否导入配置,如下图,选择不导入配置,点击OK。选择Customiz选择,配置色彩主题为IntelliJ Light,如下图。2.3 创建工程选择Projects选项,点击New Project,如下图。选择Ascend App,输入工程名称和位置,如下图,点击Change同步CANN环境。如下图点击Remote Connection后面的+号,在弹出的SSH Configuration窗口中点击+号图标,然后输入远程服务器信息,点击OK完成。如下图所示,点击文件夹图标,选择远程CANN安装路径,点击OK,然后点击Finish完成。开始同步远程CANN环境,如下图所示。同步完成后如下图,点击Next继续。选择ACL Project,如下图,点击Finish。创建完成,如下图,点击Close关闭小提示。2.4 部署点击File->Project Structure,如下图。点击SDKs->加号->Add Python SDK,如下图。点击SSH Interpreter,自动生成Python环境信息,如下图,点击OK。点击Project->SDK下拉按钮->Remote Python 3.7.5,如下图。点击Modules->Module SDK下拉按键->Remote Python 3.7.5,如下图,点击OK。点击Tools->Deployment->Configuration,如下图,点击Mappings,填入本地开发路径和远程映射路径,如下图,点击OK。点击Tools->Start SSH session,如下图。选择远程服务器,如下图,成功启动Remote Terminal。通过以上步骤,完成安装部署。三、获取代码3.1 获取模型代码在本地终端窗口通过以下命令获取模型代码:git clone -b release/2.5 https://github.com/PaddlePaddle/PaddleOCR.gitcd PaddleOCRgit reset --hard a40f64a70b8d290b74557a41d869c0f9ce4959d5rm .\applications\cd ..获取代码后,修改模型配置文件ch_PP-OCRv2_rec_distillation.yml,如下图所示,将use_gpu设置成false,修改character_dict_path。3.2 获取开发代码开发代码位于Ascend/ModelZoo-PyTorch模型仓中,链接为:cid:link_0如下图,将红框中的三个python脚本文件和一个requirements文件放到本地开发工程目录中。3.3 获取推理工具代码推理工具使用的是ais_infer,该工具的获取、编译、安装说明链接为:cid:link_2下载后将ais_infer工具代码放到本地工程路径下。3.4 远程同步代码获取模型代码、开发代码、推理工具代码后,工程目录结构如下图所示。选中工程名称ch_PP-OCRv2_rec,然后点击Tools->Deployment->Upload to...,如下图,将本地代码同步到远程服务器中。代码同步完成,如下图所示。四、模型转换4.1 获取推理权重模型推理权重的链接为:cid:link_3下载后将ch_PP-OCRv2_rec_infer.tar解压到ch_PP-OCRv2_rec\inference目录下,如下图,并同步到远程服务器。4.2 转onnx模型在远程终端中进入映射目录,安装依赖,执行命令如下图。执行转onnx命令,如下图,获取ch_PP-OCRv2_rec.onnx模型,命令为:paddle2onnx \ --model_dir ./inference/ch_PP-OCRv2_rec_infer \ --model_filename inference.pdmodel \ --params_filename inference.pdiparams \ --save_file ../ch_PP-OCRv2_rec.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:是否进行模型校验--input_shape_dict:输入shape列表4.3 转om模型点击Model Converter按钮,如下图。点击文件夹图标,选择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,-1,-1、Type为FP32。由于该模型的输入图片是动态分档的,需要设置图片档位Dynamic Image Size:32,320;32,413,表示支持这两种输入图片的推理。6.Output Nodes:可以选择模型输出节点信息。本文使用默认输出节点。进行参数检查,如下图。检查完成后,如下图,点击Next。再次校验生成的模型转换命令,如下图,确认后点击Finish开始进行模型转换。模型转换成功后如下图所示,在本地生成om模型。五、离线推理5.1 数据处理创建数据预处理执行命令,如下图,点击下拉按钮,选择Edit Confirmations。输入命令名称,选择可执行文件,填入命令参数,如下图,具体参数为:-c PaddleOCR/configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec_distillation.yml -o Global.infer_img=PaddleOCR/doc/imgs_words/ch/参数说明:-c:模型配置文件路径。-o:可选参数:Global.infer_img为图片所在路径。点击执行按钮,如下图,开始运行数据处理命令。数据处理完成后,保存在pre_data目录下,如下图。5.2 执行推理在远程终端使用以下命令编译安装ais_infer依赖。cd ais_infer/backend/pip3 wheel ./pip3 install aclruntime-0.0.1-cp37-cp37m-linux_x86_64.whl创建推理执行命令,如下图,点击加号,选择Ascend App,然后填入执行命令名称、执行脚本和参数,点击OK。具体参数为:--ais_infer=./ais_infer/ais_infer.py --model=./ch_PP-OCRv2_rec.om --inputs=./pre_data --batchsize=1参数说明:--ais_infer:ais_infer脚本--model:om模型--inputs:输入数据路径--batchsize:模型的batchsize推理完成后,推理结果保存在results_bs1目录下,如下图。5.3 文字识别效果创建后处理推理命令,如下图,填入执行命令名称、脚本、参数,点击OK,具体参数为:-c PaddleOCR/configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec_distillation.yml -o Global.infer_results=./results_bs1参数说明:-c:模型配置文件-o:用户参数:Global.infer_results表示推理结果路径执行后处理命令后,推理结果如下图:对应的样例图片如下图,可以看出预测结果与图片中的文字一致。六、总结在使用MindStudio进行模型离线推理开发的过程中,还是比较容易上手的,大家可以按照官方用户手册进行操作,另外还在通过开发者社区学习一些技术干货和经典案例,以下是相关链接。MindStudio官网入口:cid:link_5MindStudio用户手册入口:cid:link_1MindStudio开发者社区入口:cid:link_4
-
目录一、介绍... 21.1模型介绍... 21.2 MindStudio介绍... 2二、安装部署... 22.1 下载安装... 22.2 用户配置... 42.3 创建工程... 42.4 部署... 8三、获取代码... 133.1 获取模型代码... 133.2 获取开发代码... 133.3 获取推理工具代码... 143.4 远程同步代码... 14四、模型转换... 154.1 获取推理权重... 154.2 转onnx模型... 164.3 转om模型... 17五、离线推理... 225.1 数据处理... 225.2 执行推理... 245.3 文字识别效果... 25六、总结... 27一、介绍本文将介绍使用MindStudio进行ch_PP-OCRv2_rec模型离线推理开发过程,并完成图片文字识别。1.1模型介绍ch_PP-OCRv2_rec是基于PP-OCRv2的中文文本识别模型,PP-OCRv2在PP-OCR的基础上,进一步在5个方面重点优化,检测模型采用CML协同互学习知识蒸馏策略和CopyPaste数据增广策略;识别模型采用LCNet轻量级骨干网络、UDML 改进知识蒸馏策略和Enhanced CTC loss损失函数改进,进一步在推理速度和预测效果上取得明显提升。PP-OCRv2论文链接为:cid:link_51.2 MindStudio介绍MindStudio是一套基于IntelliJ框架的开发工具链平台,提供了算子开发、调试、调优以及第三方算子开发的功能,同时还提供了网络移植、优化和分析功能,可以为我们开发昇腾相关项目提供极大的便利。下图为MindStudio的开发流程。二、安装部署2.1 下载安装通过MindStudio官网可以获取下载途径以及用户手册。如下图,在下载网页中可以根据自己的系统环境、安装方式等进行选择下载。MindStudio的安装过程可以参考官方指导手册,链接为:cid:link_12.2 用户配置第一次启动MindStudio提示是否导入配置,如下图,选择不导入配置,点击OK。选择Customiz选择,配置色彩主题为IntelliJ Light,如下图。2.3 创建工程选择Projects选项,点击New Project,如下图。选择Ascend App,输入工程名称和位置,如下图,点击Change同步CANN环境。如下图点击Remote Connection后面的+号,在弹出的SSH Configuration窗口中点击+号图标,然后输入远程服务器信息,点击OK完成。如下图所示,点击文件夹图标,选择远程CANN安装路径,点击OK,然后点击Finish完成。开始同步远程CANN环境,如下图所示。同步完成后如下图,点击Next继续。选择ACL Project,如下图,点击Finish。创建完成,如下图,点击Close关闭小提示。2.4 部署点击File->Project Structure,如下图。点击SDKs->加号->Add Python SDK,如下图。点击SSH Interpreter,自动生成Python环境信息,如下图,点击OK。点击Project->SDK下拉按钮->Remote Python 3.7.5,如下图。点击Modules->Module SDK下拉按键->Remote Python 3.7.5,如下图,点击OK。点击Tools->Deployment->Configuration,如下图,点击Mappings,填入本地开发路径和远程映射路径,如下图,点击OK。点击Tools->Start SSH session,如下图。选择远程服务器,如下图,成功启动Remote Terminal。通过以上步骤,完成安装部署。三、获取代码3.1 获取模型代码在本地终端窗口通过以下命令获取模型代码:git clone -b release/2.5 https://github.com/PaddlePaddle/PaddleOCR.gitcd PaddleOCRgit reset --hard a40f64a70b8d290b74557a41d869c0f9ce4959d5rm .\applications\cd ..获取代码后,修改模型配置文件ch_PP-OCRv2_rec_distillation.yml,如下图所示,将use_gpu设置成false,修改character_dict_path。3.2 获取开发代码开发代码位于Ascend/ModelZoo-PyTorch模型仓中,链接为:cid:link_0如下图,将红框中的三个python脚本文件和一个requirements文件放到本地开发工程目录中。3.3 获取推理工具代码推理工具使用的是ais_infer,该工具的获取、编译、安装说明链接为:cid:link_2下载后将ais_infer工具代码放到本地工程路径下。3.4 远程同步代码获取模型代码、开发代码、推理工具代码后,工程目录结构如下图所示。选中工程名称ch_PP-OCRv2_rec,然后点击Tools->Deployment->Upload to...,如下图,将本地代码同步到远程服务器中。代码同步完成,如下图所示。四、模型转换4.1 获取推理权重模型推理权重的链接为:https://paddleocr.bj.bcebos.com/PP-OCRv2/chinese/ch_PP-OCRv2_rec_infer.tar下载后将ch_PP-OCRv2_rec_infer.tar解压到ch_PP-OCRv2_rec\inference目录下,如下图,并同步到远程服务器。4.2 转onnx模型在远程终端中进入映射目录,安装依赖,执行命令如下图。执行转onnx命令,如下图,获取ch_PP-OCRv2_rec.onnx模型,命令为:paddle2onnx \--model_dir ./inference/ch_PP-OCRv2_rec_infer \--model_filename inference.pdmodel \--params_filename inference.pdiparams \--save_file ../ch_PP-OCRv2_rec.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:是否进行模型校验--input_shape_dict:输入shape列表4.3 转om模型点击Model Converter按钮,如下图。点击文件夹图标,选择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,-1,-1、Type为FP32。由于该模型的输入图片是动态分档的,需要设置图片档位Dynamic Image Size:32,320;32,413,表示支持这两种输入图片的推理。6.Output Nodes:可以选择模型输出节点信息。本文使用默认输出节点。进行参数检查,如下图。检查完成后,如下图,点击Next。再次校验生成的模型转换命令,如下图,确认后点击Finish开始进行模型转换。模型转换成功后如下图所示,在本地生成om模型。五、离线推理5.1 数据处理创建数据预处理执行命令,如下图,点击下拉按钮,选择Edit Confirmations。输入命令名称,选择可执行文件,填入命令参数,如下图,具体参数为:-c PaddleOCR/configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec_distillation.yml -o Global.infer_img=PaddleOCR/doc/imgs_words/ch/参数说明:-c:模型配置文件路径。-o:可选参数:Global.infer_img为图片所在路径。点击执行按钮,如下图,开始运行数据处理命令。数据处理完成后,保存在pre_data目录下,如下图。5.2 执行推理在远程终端使用以下命令编译安装ais_infer依赖。cd ais_infer/backend/pip3 wheel ./pip3 install aclruntime-0.0.1-cp37-cp37m-linux_x86_64.whl创建推理执行命令,如下图,点击加号,选择Ascend App,然后填入执行命令名称、执行脚本和参数,点击OK。具体参数为:--ais_infer=./ais_infer/ais_infer.py --model=./ch_PP-OCRv2_rec.om --inputs=./pre_data --batchsize=1参数说明:--ais_infer:ais_infer脚本--model:om模型--inputs:输入数据路径--batchsize:模型的batchsize推理完成后,推理结果保存在results_bs1目录下,如下图。5.3 文字识别效果创建后处理推理命令,如下图,填入执行命令名称、脚本、参数,点击OK,具体参数为:-c PaddleOCR/configs/rec/ch_PP-OCRv2/ch_PP-OCRv2_rec_distillation.yml -o Global.infer_results=./results_bs1参数说明:-c:模型配置文件-o:用户参数:Global.infer_results表示推理结果路径执行后处理命令后,推理结果如下图:对应的样例图片如下图,可以看出预测结果与图片中的文字一致。六、总结在使用MindStudio进行模型离线推理开发的过程中,还是比较容易上手的,大家可以按照官方用户手册进行操作,另外还在通过开发者社区学习一些技术干货和经典案例,以下是相关链接。MindStudio官网入口:cid:link_4MindStudio用户手册入口:cid:link_1MindStudio开发者社区入口:cid:link_3
-
五、模型转换使用paddle2onnx将模型权重文件转换为.onnx文件,再使用MindStudio的Model Converter工具将onnx文件转为离线推理模型文件om文件。5.1 转onnx模型训练权重链接为:.https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_r34_vd_none_none_ctc_v2.0_train.tar下载后将rec_r34_vd_none_none_ctc_v2.0_train.tar解压到Rosetta_Resnet34_vd目录下,点击Tools->Deployment->Upload to...上传到远程服务器,如上图所示。创建export命令,如上图所示,并执行,将训练权重转为推理模型,export具体参数如下:-c ../../PaddleOCR/configs/rec/rec_r34_vd_none_none_ctc.yml-o Global.pretrained_model=../../checkpoint/rec_r34_vd_none_none_ctc_v2.0_train/best_accuracyGlobal.save_inference_dir=../../inference/rec_rosetta参数说明:-c:模型配置文件-o:用户可选参数,包括Global.pretrained_model表示训练模型,Global.save_inference_dir表示推理模型保存路径在远程终端使用paddle2onnx命令导出onnx模型,如上图所示,并点击Tools->Deployment->Download from...将onnx模型同步到本地。在远程终端使用onnxsim命令优化onnx模型,如上图所示,同时可点击Tools->Deployment->Download from...将优化后的onnx模型同步到本地。5.2 转om模型MindStudio的Model Converter工具按钮如上图所示。点击Model Converter工具按钮,首先选择onnx的Model File,如上图所示,点击“OK”后会自动进行模型解析。模型解析如上图。模型解析完成后,设置上图中的模型转换信息,点击“Next”继续。模型转换信息说明:Model Name:保存模型名称Target Soc Version:部署芯片型号,本文使用的是Ascend310P3Output Path:om模型保存路径Input Format:模型输入数据格式,本文是对图片数据进行推理,因此数据格式为NCHW。Input Nodes:输入节点信息,本文模型有1个输入,Name为x,Shape为1,3,32,100,Type为FP32Output Nodes:本文使用默认输出节点,不需要进行配置MindStudio会进行命令检查,如上图所示。检查完成后点击“Next”。检查ATC命令后,点击“Finish”开始进行模型转换。模型转换成功如上图所示,生成Rosetta_Resnet34_vd_sim.om模型。六、模型推理6.1 获取推理工具Om模型的推理工具采用ais_infer,链接为:cid:link_1。本地下载后将ais_infer文件夹放到项目中,并上传到远程服务器,如上图所示。通过远程终端编译并安装aclruntime。6.2 进行推理创建ais_infer推理命令,如上图,参数说明:--model表示om模型,--input表示输入数据路径,--output表示输出数据路径。执行ais_infer命令,开始进行推理,推理成功如上图所示,推理结果保存在output path下,这里需要记住推理结果的目录2022_10_24-19_08_41,在下一步精度验证时会用到。6.3 精度验证创建后处理脚本,如上图所示。创建后处理命令,如上图所示,Command Arguments为:--config=PaddleOCR/configs/rec/rec_r34_vd_none_none_ctc.yml --opt=results=../2022_10_24-19_08_41参数说明:--config表示模型配置文件,--opt=results表示推理结果路径。运行后处理命令,进行精度验证,命令执行完成后如上图所示,模型的精度acc为0.8064,官网给定的模型精度acc为0.7911,模型精度正常。到此使用MindStudio完成了Rosetta_Resnet34_vd模型的离线推理开发。七、问题总结在使用MindStudio的Model Converter工具转om模型的时候,如果选择paddle2onnx生成的onnx模型,则会解析失败,报错如上图所示,经过尝试使用onnxsim工具优化onnx后可以正常解析。最后通过查看用户指导手册,该报错的原因如上图所示,按照手册指导说明进行配置后,可以正常解析paddle2onnx生成的onnx模型,如下图所示。八、参考资料使用MindStudio进行Rosetta_Resnet34_vd模型离线推理开发过程中参考很资料和文档,最后给大家推荐一些比较有用的资料,大家可以先通过官网了解MindStudio的一些功能,然后按照用户手册进行安装、和基本使用方法,最后可以在开发者社区参考一些案例,或者遇到问题进行求助,可以帮助自己快速使用MindStudio进行项目开发。1.MindStudio官网cid:link_32.MindStudio开发者社区cid:link_23.MindStudio用户手册cid:link_0