-
剩余部分链接:基于MindStudio完成Rosetta_Resnet34_vd模型开发(下)_MindStudio_昇腾_华为云论坛 (huaweicloud.com)目录一、介绍... 21.1 模型介绍... 21.2 MindStudio介绍... 21.3 MindStudio配置... 3二、MindStudio项目搭建... 52.1 项目创建... 52.2 项目配置... 9三、获取模型代码... 133.1 获取源码... 133.2 安装依赖... 14四、获取数据集... 164.1 数据集下载... 164.2 数据集预处理... 17五、模型转换... 185.1 转onnx模型... 185.2 转om模型... 21六、模型推理... 256.1 获取推理工具... 256.2 进行推理... 266.3 精度验证... 27七、问题总结... 29八、参考资料... 30一、介绍本文将介绍使用MindStudio进行Rosetta_Resnet34_vd模型离线推理开发,并在IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE数据集上进行评估,推理精度能够达到80.64%。1.1 模型介绍Rosetta是用于图像中文本检测和识别的大规模系统,文本识别是使用称为 CTC 的全卷积模型完成的(因为它在训练期间使用序列到序列的 CTC 损失),该模型输出字符序列。最后一个卷积层在输入词的每个图像位置预测最可能的字符。论文链接为:cid:link_8Rosetta_Resnet34_vd是基于是PadlePaddle框架的实现,相关信息可参考官网说明:cid:link_11.2 MindStudio介绍MindStudio提供了AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务,依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够在一个工具上就能高效便捷地完成AI应用开发。MindStudio采用了插件化扩展机制,开发者可以通过开发插件来扩展已有功能。本文主要介绍使用MindStudio进行Rosetta_Resnet34_vd模型离线推理开发过程。关于MindStudio的详细特性,可以通过官网查看:cid:link_7可以通过MindStudio社区,获得帮助以及进行经验分享和交流,另外还可以参与MindStudio官方举办的各种活动:cid:link_6本文参考了《使用MindStudio进行Mindx模型st-gcn开发(1)》这篇社区帖子来进行MindStudio的环境搭建,链接为:cid:link_5MindStudio的安装过程可以参考官方指导手册,链接为:cid:link_21.3 MindStudio配置初次打开MindStudio会提示是否导入配置,如上图,可以选择“Do not import settings”,点击“OK”。上图为MindStudio的主界面,主要包括4个标签:Projects:用于项目的创建、打开等功能。Customize:主要是用户喜好设置等功能。Plugins:主要用于插件的安装、卸载等。Learn MindStudio:提供获取帮助的途径。通过Customize标签将主题设置为“IntelliJ Light”,如上图所示。二、MindStudio项目搭建2.1 项目创建在主界面Projects标签中点击“New Project”,如上图。选择“Ascend App”标签,设置项目名称和项目路径,点击CANN Version选项的“Change”。在CANN配置对话框中点击+号。在弹出的配置对话框中点击+号,填写远程服务器信息,点击“Test Connection”测试连接是否正常,弹出“Successfully connected”说明连接正常,如上图,依次点击“OK”完成配置。点击文件夹图标,选择远程CANN包安装目录,点击“OK”。点击Finish开始同步远程CANN环境。同步完成后点击“Next”进入下一步。选择“ACL Project(Python)”,点击“Finish”。此时创建好了一个空的项目,这时会弹出提示对话框,可以点击“Next Tip”查看提示信息,点击“Close”关闭提示,如果选择“Don`t show tips”则不再显示提示信息。2.2 项目配置如上图所示,启动远程SSH终端。点击“Tools”、“Deployment”、Configuration,进行开发环境配置,如上图所示。选择“Mappings”,填入“Deployment Path”远程映射路径,点击“OK”。点击项目界面右上角设置图标,选择“Project Structure”,如上图所示。点击“SDKs”、+号图标,选择“Add Python SDK”。选择SSH Interprter,配置相应信息,点击“OK”。选择Project,配置SDK,如上图。选择Moduls,选择Module SDK,如上图,点击“OK”。三、获取模型代码3.1 获取源码在本地终端中使用如下命令获取源码:git clone -b release/2.5 https://github.com/PaddlePaddle/PaddleOCR.gitcd PaddleOCR git reset --hard a40f64a70b8d290b74557a41d869c0f9ce4959d5rm .\applications\cd ..修改配置文件,将use_gpu设置成false,如上图。同时将batch和num_workers设置为1,如上图。修改完成后将模型代码上传到远程服务器,如上图,依次点击Toos->Deployment->Upload to...。如上图所示,在弹出的对话框中选择上传的服务器。上传成功,如上图所示。3.2 安装依赖创建依赖文件requirments.txt,如上图所示,并针依赖文件上传的远程服务器。requirments.txt的内容为:paddlepaddle==2.3.2paddle2onnx==0.9.8onnxruntime==1.9.0pyyaml==6.0onnx==1.12.0lanms-nova==1.0.1opencv-contrib-python==4.4.0.46imgaug==0.4.0shapelyscikit-imagepyclipperlmdbtqdmnumpyvisualdlrapidfuzzcythonlxmlpremaileropenpyxlattrdictsympyonnxsim在远程终端中通过以上pip命令安装依赖,如上图所示。四、获取数据集4.1 数据集下载该模型在以LMDB格式(LMDBDataSet)存储的IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE数据集上进行评估,共计12067个评估数据,数据介绍参考DTRB:cid:link_0数据集下载链接: cid:link_3下载后将其中的evaluation.zip压缩包解压到Rosetta_Resnet34_vd\train_data\data_lmdb_release\validation目录下,并上传到远程服务器,如上图所示。4.2 数据集预处理创建数据预处理脚本,并上传到远程服务器,如上图。通过上图方式,创建可执行命令。在弹出的对话框中填入命令名称(Name)、可执行脚本(Excutable)、和参数(Command Arguments),如上图,点击“OK”,具体参数为:--config=PaddleOCR/configs/rec/rec_r34_vd_none_none_ctc.yml--opt=bin_data=../rosetta_bindata参数说明:--config:模型配置文件--opt=bin_data:预处理数据如上图所示,点击执行按钮,开始执行数据预处理命令。如上图所示,数据预处理命令执行完成。
-
目录一、模型介绍二、获取代码2.1、创建工程... 122.2、添加工程代码... 122.3、添加模型代码... 132.4、添加推理工具代码... 152.5、远程同步代码... 15三、模型转换... 163.1、获取权重... 163.2、安装依赖... 173.3、转onnx. 173.4、转om... 18四、离线推理... 224.1、数据预处理... 224.2、模型推理... 244.3、推理结果展示... 25五、总结... 32一、模型介绍本文主要介绍使用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的详细介绍参考以下链接:cid:link_0二、获取代码... 122.1、创建工程选择ACL Project(Python),点击Next。如下图所示,输入工程名和路径,点击Finish,完成工程创建。如下图所示,进入工程后会有提示信息,点击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窗口。通过以上步骤,工程创建配置完成。2.2、添加工程代码如下图所示,工程所需要开发的代码包括:en_PP-OCRv3_det_ais_infer.py:推理脚本en_PP-OCRv3_det_postprocess.py:数据后处理脚本en_PP-OCRv3_det_preprocess.py:数据前处理脚本requirements.txt:依赖文件2.3、添加模型代码在本地终端窗口中可以通过git命令添加模型代码,相关命令为:git clone -b release/2.6 https://github.com/PaddlePaddle/PaddleOCR.gitcd PaddleOCRgit reset --hard 274c216c6771a94807a34fb94377a1d7d674a69frm .\applications\rm .\doc\imgs_en\img_12.jpgrm .\doc\imgs_en\wandb_ models.pngrm .\doc\imgs_en\model_prod_flow_en.pngcd ..如下图为模型代码结构。如下图所示,将模型配置文件ch_PP-OCRv3_det_cml.yml中的use_gpu设置成false。如下图所示,将目标检测推理文件 infer_det.py中的第53行代码注释掉。2.4、添加推理工具代码推理工具使用的是ais_infer,该工具的获取、编译、安装说明链接为:cid:link_1下载后将ais_infer工具代码放到本地工程路径下。2.5、远程同步代码如下图为工程代码结构,选择工程名,点击Tools->Deployment->Upload to。如下图所示,选中服务器,开始远程同步代码。如下图,代码远程同步完成。三、模型转换3.1、获取权重模型权重链接如下:https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_det_infer.tar下载后解压至en_PP-OCRv3_det\ inference目录下,并同步到远程目录,如下图。3.2、安装依赖在远程终端中使用命令远程安装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.whlcd ../../3.3、转onnx在远程终端中使用命令转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模型转换成功。3.4、转om如下图所示,点击Model Converter按钮。如下图所示,点击Model File文件夹图标,选择转出的onnx模型,点击ok。如下图所示,模型转换工具开始解析onnx模型。如下图所示,同步完成后如下图所示,模型解析完成后,填入相关模型转换信息,点击Next。模型转换信息说明:1.Model Name:保存om模型的名称2.Target SoC Version:目标芯片型号,本文使用的是Ascend310P33.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模型:四、离线推理4.1、数据预处理创建可执行命令,如下图所示,点击Add Configuration。如下图所示,点击+号,选择Python。如下图所示,输入命令名称、执行文件、参数、Python解释器,点击OK。如下图所示,点击命令执行按钮,开始执行数据预处理命令。如下图所示,数据预处理保存在pre_data目录下。4.2、模型推理创建推理执行命令如下图所示。创建完成后执行该命令。命令参数如下:--ais_infer=./ais-infer/ais_infer.py --model=./en_PP-OCRv3_det.om --inputs=/home/pre_data/ --batchsize=1参数说明:如下图所示,推理完成后,推理结果保存在results_bs1目录下。4.3、推理结果展示如下图所示,创建数据后处理命令。并执行该命令,命令参数如下:-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模型离线推理以及英文文本检测,
-
如题所示,在进行TBE算子开发学习的时候,发现了DSL方法中,调度实现这块可以用dsl.auto_schedule()实现 。请问这其中原理和tvm的autoschedule有什么区别?另外,官方实验是不是有问题,编程练习貌似测试文件不全?https://www.hiascend.com/zh/college/onlineExperiment/codeLabTbe/tab
-
MindX SDK -- 基于python V2接口的VDSR图像超分辨率1 案例概述1.1 概要描述基于MindX SDK mxVision 3.0RC3 开发图像超分辨率程序。本程序采用python开发,使用MxBase V2接口。通过预处理操作对输入的图片数据解码为YUV格式图片,并将解码后的图片缩放到模型推理要求的尺寸。然后利用图像超分辨率模型VDSR获取得到图片超分辨率重建结果。最后,利用python的第三方图像处理库PIL将低分辨率的输入图像和超分辨率重建的结果一同可视化。其次,针对两个图片集91-images和General-100进行PSNR(峰值信噪比)验证。程序输入:任意jpg图片 程序输出:输出得到低分辨率图片(256 x 256px)和超分辨率重建图片(768 x 768px)组合的可视化大图案例获取地址: cid:link_31.2 模型介绍Jiwon Kim 等基于残差学习和梯度裁剪,利用 20 层的卷积网络实现针对不同放大尺度的图像超分辨模型,命名为 VDSR(Very Deep convolutional networks for Super-Resolution)。VDSR使用比 SRCNN 大 104 倍的学习率,使用跳跃连接将输入与学习到的残差融合生成高分辨率图像,每个卷积层卷积核尺寸为 3 × 3,输入与输出尺寸一致。VDSR 越深效果越好,随着深度的增加,PSNR 更早地达到稳定值;使用残差网络,仅迭代几轮,网络就能达到很好的效果V1版本地址:cid:link_4论文地址:cid:link_10模型概述:cid:link_51.3 实现流程1、基础环境:Ascend 310、MindXSDK 、Ascend-CANN-toolkit 2、模型获取:通过链接下载已经转好的om模型 3、数据集准备:获取文件相关依赖后,运行转换脚本得到标签数据及噪声数据 3、业务流程编排与配置 4、python推理流程代码开发 5、V2接口python推理流程代码开发1.4 特性及适用场景工程适用于通用场景下,任意jpg图像生成超分辨率重建结果。2 软件方案介绍2.1 项目方案架构介绍本系统设计了不同的功能模块。主要流程为:jpg文件转为image类型传入流/V2接口中,利用VDSR的图像生成模型,利用python的第三方图像处理库PIL将低分辨率的输入图像和超分辨率重建的结果一同可视化。各模块功能描述如表2.1所示:表2.1 系统方案中各模块功能:V1:序号子系统功能描述1数据输入调用MindX SDK的appsrc输入image数据2推理调用MindX SDK的mxpi_tensorinfer,对输入的张量进行推理3输出推理好得到的tensor取出来4结果保存利用python的第三方图像处理库PIL将低分辨率的输入图像和超分辨率重建的结果一同可视化V2:序号子系统功能描述1数据输入调用MindX SDK pythonV2接口的imageProcessor类输入image数据2推理调用MindX SDK pythonV2接口的model类,对输入的张量进行推理3输出推理好得到的tensor取出来4结果保存利用python的第三方图像处理库PIL将低分辨率的输入图像和超分辨率重建的结果一同可视化2.2 代码目录结构与说明本工程名称为SuperResolution,工程目录如下图所示:. | |-------- font | |---- SourceHanSansCN-Normal-2.otf // otf字体 |-------- image | |---- test.jpg // 测试图片(需自行准备) | |---- 91-images-V1.jpg // evaluate.py V1接口在91-images数据集上的运行结果 | |---- 91-images-V2.jpg // evaluate_v2.py V2接口在91-images数据集上的运行结果 | |---- General-i00-V1.jpg // evaluate.py V1接口在General-100数据集上的运行结果 | |---- General-i00-V2.jpg // evaluate_v2.py V2接口在General-100数据集上的运行结果 |-------- V2result // V2测试图片程序输出存放处 |-------- model | |---- YUV420SP_U8_GRAY.cfg // 模型转换配置文件(灰度图) | |---- VDSR_768_768.om // 转换后OM模型存放在此处(需自行上传) |-------- testSet | |---- 91-images // 91-images验证集(含bmp图片) | |---- 91-images-jpg // 91-images验证集转换后集(含jpg图片) | |---- bmp2jpg.py // bmp转jpg脚本 |-------- evaluate_v2.py // 模型精度验证V2 |-------- README.md // ReadMe |-------- main_v2.py // 图像超分辨率主程序V2 |-------- util.py // 工具方法 3 开发准备3.1 环境依赖说明推荐系统为ubuntu 18.04,环境依赖软件和版本如下表:软件版本说明获取方式mxVision3.0RC3mxVision软件包链接Ascend-CANN-toolkit5.1.RC1Ascend-cann-toolkit开发套件包链接操作系统Ubuntu 18.04操作系统Ubuntu官网获取3.2 环境搭建3.2.1 环境变量设置#在CANN以及MindX SDK的安装目录找到set_env.sh,并运行脚本: bash ${SDK安装路径}/set_env.sh bash ${CANN安装路径}/set_env.sh #查看环境变量: env3.3 前期数据和模型准备项目使用的模型为VDSR。步骤1 获取原始模型网络及权重, 权重下载 和 网络下载地址步骤2 AIPP配置文件-YUV420SP_U8_GRAY.cfgaipp_op { aipp_mode: static input_format : YUV420SP_U8 csc_switch : true rbuv_swap_switch : false matrix_r0c0 : 256 matrix_r0c1 : 0 matrix_r0c2 : 0 matrix_r1c0 : 0 matrix_r1c1 : 0 matrix_r1c2 : 0 matrix_r2c0 : 0 matrix_r2c1 : 0 matrix_r2c2 : 0 input_bias_0 : 0 input_bias_1 : 0 input_bias_2 : 0 }色域转换,用于将输入的图片格式,转换为模型需要的图片格式,这里将YUV420SP_U8转GRAY,详细色域转换配置说明请参考 这里步骤3 将下载得到模型网络及权重(VDSR.prototxt、VDSR.caffemodel)、AIPP配置文件(YUV420SP_U8_GRAY.cfg)放在 model 目录下步骤4 使用ATC模型转换工具进行模型转换在 model 目录下执行以下命令# 设置环境变量(请确认install_path路径是否正确) # Set environment PATH (Please confirm that the install_path is correct). #在CANN以及MindX SDK的安装目录找到set_env.sh,并运行脚本: bash ${SDK安装路径}/set_env.sh bash ${CANN安装路径}/set_env.sh #查看环境变量: env # 执行,转换VDSR模型成om格式 # Execute, transform VDSR model. atc --model=./VDSR.prototxt --weight=./VDSR.caffemodel --framework=0 --input_format=NCHW --input_shape="data: 1, 1, 768, 768" --output=./VDSR_768_768 --soc_version=Ascend310 --output_type=FP32 --insert_op_conf=YUV420SP_U8_GRAY.cfg执行完后,会在model目录下生成相应的VDSR_768_768.om模型文件。模型转换使用了ATC工具,如需更多信息请参考 这里4 推理流程开发实现4.1 V2接口编排 decode # 图像解码 resize # 图像缩放 infer # 模型推理(图像生成)4.2 主程序开发1、初始化V2接口。2、图像解码。3、图像缩放。4、模型推理。5、转变数据类型保存图片4.3 参数调节参数名称参数介绍修改方法默认值MODEL_PATH模型路径在python/main_v2.py文件中修改为具体的路径名称即可model/VDSR_768_768.omINPUT_IMAGE_PATH输入图片路径在python/main_v2.py文件中修改为具体的路径名称即可./image/head.jpgout_path输出可视化路径在python/main_v2.py文件中修改为具体的路径名称即可"./result/" + fileName5 编译与运行V2接口运行准备一张测试图片,置于 image 文件夹中(仅支持jpg格式)进入工程目录键入执行指令,发起推理性能测试:python3 main_v2.py ${测试图片路径} 例如: python3 main_v2.py image/head.jpg # 或者在main.py中配置 input_image_path input_image_path = 'image/${测试图片文件名}' # 仅支持jpg格式执行完毕后,sample会将程序输出的可视化结果,保存在工程目录下V2result中 (可视化结果名和输入图片一致)V2精度+性能验证PSNR(峰值信噪比)经常用作图像压缩等领域中信号重建质量的测量方法。1)准备测试集:下载91-images和General-100验证图片集,91-images下载地址,General-100下载地址,从zip文件中取出两个图片集91-images和General-100放置到testSet目录下,其中91-images包含91张t*.bmp图片,General-100包含100张im_*.bmp图片2)图片格式转换:参考testSet/bmp2jpg.py脚本,将两个图片集中bmp图片转换为jpg图片进入testSet目录,键入执行指令,图片格式转换:python3 bmp2jpg.py ${测试图片集路径} 例如: python3 bmp2jpg.py 91-images # 或者在evaluate_v2.py中配置 test_image_set_path test_image_set_path = './${测试图片集路径}'然后会在testSet目录下,生成转换后的包含jpg格式图片的文件夹,文件夹名称为${测试图片集路径}-jpg3)利用evaluate_v2.py 脚本,计算得到两个图片集的平均PSNR(峰值信噪比)键入执行指令,发起精度验证测试:python3 evaluate_v2.py ${验证图片集路径} 例如: python3 evaluate_v2.py testSet/91-images-jpg # 或者在evaluate_v2.py中配置 test_image_set_path test_image_set_path = './${验证图片集路径}'执行完毕后,会在控制台输出该验证图片集的平均峰值信噪比和推理时间4)与SuperResolution V1接口的结果进行对比下载V1接口中的evaluate.py脚本到当前运行路径,脚本所在位置如下:链接在evaluate.py的推理主函数中,加入性能测试代码,键入执行指令,对91-images数据集发起精度及性能验证测试:python3 evaluate.py ${验证图片集路径} 例如: python3 evaluate.py testSet/91-images-jpg # 或者在evaluate.py中配置 test_image_set_path test_image_set_path = './${验证图片集路径}'执行完毕后,会在控制台输出该验证图片集的平均峰值信噪比和推理时间(推理时间在一定范围内浮动)键入执行指令,对General-100数据集发起精度及性能验证测试:python3 evaluate.py ${验证图片集路径} 例如: python3 evaluate.py testSet/General-100-jpg # 或者在evaluate.py中配置 test_image_set_path test_image_set_path = './${验证图片集路径}'执行完毕后,会在控制台输出该验证图片集的平均峰值信噪比和推理时间(推理时间在一定范围内浮动)5)得出精度及性能验证结论精度:V1及V2接口运行相同数据集时,平均PSNR相同,精度达标。性能:为统计性能,对两个数据集分别运行V1接口和V2接口,各跑十次,统计平均接口运行时间:91-images: V1 平均时间为:16.42974079V2 平均时间为:16.34681652General-100: V1 平均时间为:18.52285776V2 平均时间为:18.37193444结论:在保证精度相同的同时,V2接口的性能相对于V1来说有所提高,性能达标。6 常见问题6.1 路径问题问题描述:提示 the ./image/head.jpg does not exist解决方案:输入图片或数据集不存在,检查输入路径是否正确。6.2 格式问题问题描述:提示input image only support jpg.解决方案:将输入图片更换为jpg格式图片。
-
Windows系统配置MindSpore欢迎使用MindSporeMindSpore 是由华为推出的新一代全场景AI计算框架,端-边-云统一架构,实现一次开发,按需部署、协同计算,更好的保护隐私。安装MindSporeMindSpore官网链接: MindSpore安装选择相应配置如上图,版本选择1.9.0,目前Windows系统仅支持CPU配置。安装方式:依据个人电脑安装的python3.7-3.9任一都可版本,选择相应python版本。若电脑未安装python,则具体安装如下:Python下载链接: Python进入官网后 下拉选择所需对应版本并点击下载下载完成后,进入下载的文件夹,打开选择“Add to PATH”并点击Install,完成python下载以上,所需基础配置完成。打开python.exe复制图1给出的安装命令即可
-
客户驱动固件升到1.0.9可正常运行,继续升级到5.1.RC2,串口那卡住 无法加载进入系统,截屏如下
-
1.Atlas200DK 四个灯全亮2. 终端可以检测到虚拟网卡我通过USB线连接Atlas200DK和Ubuntu-desktop,想通过脚本配置Ubuntu服务器的USB虚拟网卡的IP地址,其中“usb0”为虚拟网卡运行:bash configure_usb_ethernet.sh 报错这个No any unconfigured usb ethernet found, please check your environment.请问如何解决?
-
昇腾提供的npu-smi 命令类似NVIDIA的nvidia-smi 命令,请问也有相应的C++/python 接口用于查询相关信息吗? 还有如何查询当前程序所占用显存呢,麻烦相关技术人员帮忙解答一下谢谢!
-
MindX SDK -- TSM视频分类参考设计案例1 案例概述1.1 概要描述在本系统中,目的是基于MindX SDK,在华为云昇腾平台上,开发端到端TSM视频分类的参考设计,达到功能要求、离线精度要求和性能要求。1.2 模型介绍本项目主要用到了两个模型,分别是:用于视频分类的TSM模型和用于手势识别的jester 模型。TSM模型相关文件可以在此处下载:cid:link_10jester原始模型文件可以在此处下载:cid:link_61.3 实现流程1、基础环境:Ascend 310、mxVision、Ascend-CANN-toolkit、Ascend Driver 2、模型转换:TensorFlow模型转昇腾离线模型:TSM.onnx --> TSM.om 、 jester.onnx --> jester.om 3、视频抽帧:ffmpeg 4、python推理流程代码开发1.4 代码地址本项目的代码地址为:cid:link_72 软件方案介绍2.1 代码目录结构与说明本工程名称为TSM,工程目录如下图所示:├── TSM ├── README.md // 所有模型相关说明 ├── model ├── onnx2om.sh // 转om模型脚本 ├── onnx2om1.sh // 在线模型转om模型脚本 ├── label ├── kinetics_val.csv // label文件 ├── download_data ├── k400_extractor.sh // 解压数据集脚本 ├── offline.png // 离线推理技术实现流程 ├── online.png // 在线推理技术实现流程 ├── online_infer.py // 在线推理精度脚本 ├── offline_infer.py // 离线推理精度脚本 ├── speed.py // 离线单视频推理NPU性能脚本 ├── speed_gpu.py // 离线单视频推理GPU性能脚本3 开发准备3.1 环境依赖说明环境依赖软件和版本如下表:软件名称版本cmake3.5+mxVision5.1RC2Python3.9torch1.10.0ffmpeg4.2.13.2 环境搭建在运行项目前,需要设置环境变量:MindSDK 环境变量:. ${SDK-path}/set_env.shCANN 环境变量:. ${ascend-toolkit-path}/set_env.sh环境变量介绍SDK-path: mxVision SDK 安装路径ascend-toolkit-path: CANN 安装路径。下载ffmpeg,解压进入并执行以下命令安装:./configure --prefix=/usr/local/ffmpeg --enable-shared make -j make install安装完毕后导入环境变量export PATH=/usr/local/ffmpeg/bin:$PATH export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib:$LD_LIBRARY_PATH3.3 模型转换3.3.1 TSM模型转换下载离线模型 TSM.onnx, 将下载好的模型放在“${TSM代码根目录}/model”目录下。将模型转换为om模型,在“model”目录下,执行以下命令生成om模型bash onnx2om.sh3.3.2 jester模型转换下载在线模型 jester.onnx将下载好的模型放在参考设计代码根目录的“model”目录下。将模型转换为om模型,在“model”目录下,运行脚本生成om模型bash onnx2om1.sh模型转换使用了ATC工具,如需更多信息请参考: cid:link_54 离线精度4.1 Kinetics-400数据集下载在 cid:link_2 连接下载download.sh和val_link.list两个脚本,放入/TSM/download_data 目录下,在“/TSM/download_data/”目录下,运行数据集下载脚本,在“/TSM/”目录下新建文件夹data用于存放下载的数据集bash download.sh val_link.list bash k400_extractor.sh4.2 数据集预处理步骤1 Kinetics-400数据集下载参考Kinetics-400 数据准备中的脚本下载操作,在代码根目录的"download_data"目录下准备"download.sh"数据集下载脚本和"val_link.list"验证集链接列表文件。├── TSM ├── download_data ├── download.sh // 下载数据集脚本 ├── k400_extractor.sh // 解压数据集脚本 ├── val_link.list 进入代码根目录的"download_data"目录下,执行以下命令下载数据集压缩包val_part1.tar、val_part2.tar、val_part3.tar:bash download.sh val_link.list然后执行以下命令解压数据集到代码根目录下:bash k400_extractor.sh数据集结构如下:├── TSM ├── data ├── abseiling ├── air_drumming ├── ... ├── zumba步骤2 数据集预处理1、视频抽帧在代码根目录执行以下命令创建所需目录:mkdir tools mkdir ops下载“temporal-shift-module-master.zip”代码包并上传服务器解压,将代码包中"tools"目录下的"vid2img_kinetics.py"、"gen_label_kinetics.py"、"kinetics_label_map.txt"三个文件拷贝至参考设计代码根目录的“tools”目录下。├── TSM ├── tools ├── gen_label_kinetics.py // label生成脚本 ├── vid2img_kinetics.py // 视频抽帧脚本 ├── kinetics_label_map.txt将代码包中"ops"目录下的"basic_ops.py"、"dataset.py"、"dataset_config.py"、"models.py"、"temporal_shift.py"、"transforms.py"六个文件拷贝至参考设计代码根目录的“ops”目录下。 ├── ops ├── basic_ops.py ├── dataset.py // 数据集构建脚本 ├── dataset_config.py // 数据集配置脚本 ├── models.py // 模型搭建脚本 ├── temporal_shift.py ├── transforms.py修改“tools”目录下的 vid2img_kinetics.py 内容,将77、78行注释。77行 #class_name = 'test' 78行 #class_process(dir_path, dst_dir_path, class_name)在参考设计代码根目录下,执行以下命令对数据集视频进行抽帧并生成图片:mkdir dataset cd ./tools python3 vid2img_kinetics.py [video_path] [image_path] e.g. python3 vid2img_kinetics.py ../data ../dataset/修改“tools”目录下gen_label_kinetics.py 内容。# 11行 dataset_path = '../dataset' # 放视频抽帧后的图片路径 # 12行 label_path = '../label' # 存放label路径 # 25行 files_input = ['kinetics_val.csv'] # 26行 files_output = ['val_videofolder.txt'] # 37行 folders.append(items[1]) # 57行 output.append('%s %d %d'%(os.path.join('../dataset/',os.path.join(categories_list[i], curFolder)), len(dir_files), curIDX))在“tools”目录下,执行以下命令生成标签文件:python3 gen_label_kinetics.py4.3 精度测试修改${TSM代码根目录}/ops/dataset_config.py 脚本中参数root_data、filename_imglist_train和filename_imglist_val,若仅进行离线精度测试则可忽略filename_imglist_train设置。import os ROOT_DATASET = './labels/' # 标签文件所在路径 ... def return_kinetics(modality): filename_categories = 400 if modality == 'RGB': root_data = ROOT_DATASET # 训练集根目录 filename_imglist_train = 'train_videofolder.txt' # 训练数据集标签 filename_imglist_val = 'val_videofolder.txt' # 测试数据集标签 prefix = 'img_{:05d}.jpg' else: raise NotImplementedError('no such modality:' + modality) return filename_categories, filename_imglist_train, filename_imglist_val, root_data, prefix在参考设计代码根目录下,运行精度测试脚本python3 offline_infer.py kinetics原模型精度值为71.1%,实测精度值为71.01%,符合精度偏差范围,精度达标。5 离线性能测试将用来测试的单视频放在“/TSM/”目录下,如视频“test.mp4”,运行性能测试脚本修改参数,'./test.mp4'为测试视频def main(): cmd = 'ffmpeg -i \"{}\" -threads 1 -vf scale=-1:331 -q:v 0 \"{}/img_d.jpg\"'.format('./test.mp4', './image') subprocess.call(cmd, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) files = os.listdir(r"./image/")5.1 单视频推理性能将用来测试的单视频放在参考设计代码根目录下,如视频“test_speed.mp4”,运行性能测试脚本修改speed_gpu.py与speed.py参数,'./test_speed.mp4'为测试视频,测试视频类别需在Kinetics-400数据集的400个种类内且视频长度至少为3s。def main(): cmd = 'ffmpeg -i \"{}\" -threads 1 -vf scale=-1:331 -q:v 0 \"{}/img_d.jpg\"'.format('./test_speed.mp4', './image') subprocess.call(cmd, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) files = os.listdir(r"./image/")GPU性能(Tesla_V100S_PCIE_32GB)在参考设计代码根目录下,运行GPU性能测试脚本python3 speed_gpu.py kinetics --test_segments=8 --test_crops=1 --batch_size=1注:speed_gpu.py脚本需在GPU环境上运行,NPU环境无法运行。得到单视频纯推理性能为0.08sec/videoSDK性能在参考设计代码根目录下,运行SDK性能测试脚本python3 speed.py注:speed.py脚本需在NPU环境上运行。得到单视频纯推理性能为0.189sec/video5.2 GPU与NPU性能对比ModelBatch size310 FPS/CardT4 FPS/CardT4/310TSM16.4819.12.95TSM425.976.42.95TSM851.84153.552.96TSM16103.74310.312.99TSM32207.27627.823.02TSM32207.27627.823.02性能对比评价标准为NPU的最优bs比T4的最优bs:NPU最优性能为bs32,单卡吞吐率:103.74fps/cardGPU最优性能为bs32,单卡吞吐率:310.31fps/cardGPU/ Ascend 310=310.31/103.74=2.99倍6 在线手势识别6.1 安装视频流工具安装视频流工具6.2 生成视频流根据提示当前只支持部分视频格式,并不支持.mp4后缀的文件,但可以通过ffmpeg转换生成ffmpeg安装教程,如下所示为MP4转换为h.264命令:使用ffmpeg工具将带有手势的“jester.mp4”的mp4格式视频转换生成为“jester.264”的264格式视频:ffmpeg -i jester.mp4 -vcodec h264 -bf 0 -g 25 -r 10 -s 1280*720 -an -f h264 jester.264 //-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制 -an关闭音频, -r 指定帧率使用live555生成视频流。6.3 程序测试python3 online_infer.py修改参数,'ip:port/jester.264'为测试视频流,其中ip为起流的机器ip地址,port为起流的机器端口地址,jester.264为测试视频jester.mp4通过ffmpeg转换后的视频。def video2img(): cmd = 'ffmpeg -i \"{}\" -threads 1 -vf scale=-1:331 -q:v 0 \"{}/img_d.jpg\"'.format('rtsp://ip:port/jester.264', './image') subprocess.call(cmd, shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
-
离线部署工具ascend-deployer一个命令完成一系列操作方便用户快捷部署AI环境Linux场景videovideo
-
数据集使用自己的构建的合成数据集,代码的改动仅有数据加载和字典,字典这部分采用中文-英文-符号,但是训练的时候loss一直为0config配置相关修改:训练log情况:数据加载中CaptchaDataset函数的修改:相关的主要修改如上。
-
参考文档进行自定义算子的算子包部署时,执行 ./custom_opp_ubuntu_x86_64.run 指令返回如下:但并未将编译生成的自定义算子相关文件部署到opp对应目录下的custom路径下。
-
在跑疲劳驾驶识别的demo时,根据readme文件的步骤要求,在onnx文件转换成om文件时报如上错误,环境变量也设置了,cann版本是5.0.4,不懂出现了什么问题
-
使用mxvison推理时,可以单独拿到解码后图片,也可以单独拿到推理的结果,但是不知道怎么同时拿到这2个信息,pipeline该怎么编写呢单独输出推理结果单独输出图像信息这个帖子说这种插件去年正在开发了,现在开发好了吗https://bbs.huaweicloud.com/forum/thread-121200-1-1.html
-
310板卡imread速度较慢,请问如何解决,能否通过dvpp加速?
上滑加载中