• [问题求助] 好望云媒体播放管理 需要配合哪个SDK使用在哪里引入
    SDK是要下载本地jar包还是maven直接引入的SDK,哪里可以找到 #java
  • [教程] obs_SDK_C windows 编译教程
    基于Windows编译OBS C SDK指南背景在Windows下使用OBS C SDK(v3.22.7及之后,v3.22.7之前的版本跳转到后半部分),希望编译成DLL动态链接库文件供工程使用。编译C SDK基于visual studio进行编译;此处基于visual studio2017进行编译作为示例;1、打开编译工程进行编译打开visual studio 2017,选择File->Open->Project/Solution打开源代码目录下的编译工程(目录:"your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++\sln\vc100\obs.sln"),然后直接编译。常见问题:1、esdklogapi.h(194): error C3872: “0xe58b”: 此字符不允许在标识符中使用   error C2143: 语法错误: 缺少“;”(在“*”的前面)“in”: 未声明的标识符“0x2033”: 此字符不允许在标识符中使用解决方法:报错的对应文件转换下换行符为CRLF即可解决改问题2、无法打开输入文件“libeay32.lib”解决方法:于链接器中删除 libeay32.lib ssleay32.lib增加 对应包含目录下的库,例如(libssl.lib、libcrypto.lib)编译C SDK Demo1、打开测试工程打开visual studio,选择File->Open->Project/Solution打开源代码目录下的测试工程(测试工程目录:"your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++_Demo\sln\obs_demo.sln");选择对应的发布版本及平台如果出现与编译时类似的提示是否升级项目的编译器时,点击确定,如果不小心点击取消则需要点击项目->重定向项目->确定。2、编译测试工程之前建议先完成下方常见问题a、b选择Build->Rebuild编译测试工程;常见问题:a. 如果出现如下错误,表明未在当前工程路径下找到对应的lib文件,请将上一步中编译得到的libeSDKOBS.lib、libeSDKOBS.dll及huaweisecurec.lib、huaweisecurec.dll复制到测试工程目录下("your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++_Demo\sln\")再重新执行编译;b.编译成功,运行时提示找不到xxx.dll除了问题a中提到的dll外,还需要:your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++\bin\win64_x64_msvc\release(32位是your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++\bin\win32_x86_msvc\release)下的所有dllplatform\eSDK_LogAPI_V2.1.10\C\release_x64(32位是platform\eSDK_LogAPI_V2.1.10\C\release)下所有dllc.执行了a、b问题中的步骤,为啥还是有运行的异常弹窗?这种情况下请确认a、b步骤中使用的所有dll是否对应相同的架构(win32_x86或win64_x64)v3.22.7前参考下面的编译指南背景在Windows下使用OBS C SDK,希望编译成DLL动态链接库文件供工程使用。原帖OBS C SDK基于Windows进行编译_对象存储服务_存储服务_华为云论坛 (huaweicloud.com) ,存在些许纰漏,基于该贴修复了一些不明确的步骤。编译C SDK基于visual studio进行编译;此处基于visual studio2017进行编译作为示例;1、打开编译工程打开visual studio 2017,选择File->Open->Project/Solution打开源代码目录下的编译工程(目录:"your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++\sln\vc100\obs.sln"),打开工程时如果出现如下提示是否升级项目的编译器及依赖库时,选择Cancel(表示依赖VS2010编译工具进行编译,如果本地未安装过VS2010,请参考常见问题中的解决方案,然后编译);2、编译工程选择Build->Rebuild重新编译工程;出现如下提示代表工程编译成功;编译产物见目录:"your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++\build\vc100\Release"常见问题:a. 提示缺少VS2010 VC100工具集出现该问题的原因是该工程默认采用VS2010工具集进行编译,如果本地环境中未安装过VS2010时将会提示该问题;以visual studio2017版本为例展示该问题解决方案:1、在工程上右键选择重定向项目(不仅是图中的项目,huaweisecurec项目也需要此操作)2、重定向项目至指定平台工具集及SDK版本(以VS2017为例,平台工具集版本为V141)3、替换“your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++\lib\win64_x64_msvc\release”目录下的libxml2.lib文件为附件(可到原帖中下载)中的libxml2.lib及libxml2.dll文件,否则在高版本VS中编译会提示该依赖库为低版本VS中编译,导致工程编译失败;4、选择右边的发布版本及平台,然后右键obs工程->属性->链接器->输入->附加依赖项-><编辑>在列表中最后一行添加cjson.lib后点击确定完成这些步骤后重新编译工程即可;测试C SDK方式一:直接使用提供的测试工程1、打开测试工程打开visual studio,选择File->Open->Project/Solution打开源代码目录下的测试工程(测试工程目录:"your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++\build\obs\demo\sln\obs_demo.sln");选择对应的发布版本及平台如果出现与编译时类似的提示是否升级项目的编译器及依赖库且没有安装vs2010时,点击确定,如果不小心点击取消则需要点击项目->重定向项目->确定。2、编译测试工程之前建议先完成下方常见问题a、b选择Build->Rebuild编译测试工程;常见问题:a. 如果出现如下错误,表明未在当前工程路径下找到对应的lib文件,请将上一步中编译得到的libeSDKOBS.lib、libeSDKOBS.dll及huaweisecurec.lib、huaweisecurec.dll复制到测试工程目录下("your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++\build\obs\demo\sln")再重新执行编译;b. 编译过程中出现如下错误时需修改工程配置选项;右键单击工程Properties->Linker->Command Line Additional Options,添加/SAFESEH:NO ;输出如下结果时代表编译测试工程成功,但是仍缺失部分dll,拷贝 “your-sdk-path\\source\eSDK_OBS_API\eSDK_OBS_API_C++\bin\win64_x64_msvc\release”文件夹和“your-sdk-path\platform\eSDK_LogAPI_V2.1.10\C\release_x64”文件夹下的所有dll文件以及原帖附件中提供的libxml2.dll到测试工程目录下("your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++\build\obs\demo\sln"),之后可以根据实际需要配置测试工程中的ACCESS_KEY_ID(对应AK)、SECRET_ACCESS_KEY(对应SK)、HOST_NAME(对应EndPoint)等信息来调用相关接口进行测试;c. 在高版本VS中运行时出现提示“无法从const char* 转换为char*”;出现该问题时,可以通过设置Properties->C/C++->Language->Conformance mode(符合模式)为否来解决;注意:如果在编译SDK工程时采用了高版本VS进行编译,同时用附件中的libxml2替换了原路径下的libxml2.lib文件,则还需要将libxml2.dll文件添加到工程源文件目录下;libxml2.dll->"your-sdk-path\source\eSDK_OBS_API\eSDK_OBS_API_C++\bin\win64_x64_msvc\release\libxml2.dll"添加完依赖库目录后编译运行即可执行测试工程;常见问题a. 提示缺少MSVCR100.dll文件;原因是当前系统上缺少低版本运行库文件MSVCR100.dll,下载到该文件并放于系统C:\Windows\System32或C:\Windows\SysWOW64目录下即可;对于高版本Visual studio,新建测试工程并引入SDK动态链接库的方法与VS2015基本一致。附件libxml2可到原帖中下载
  • [其他活动] 【有奖体验】使用Notebook和算法开发套件SDK完成COCO目标检测任务
    使用Notebook和算法开发套件SDK完成COCO目标检测任务通过导入数据集、选择模型、训练并可视化推理,快速完成COCO数据集目标检测任务。直播视频回顾:cid:link_1活动时间:9月26日-11月30日参与方式:点击报名:cid:link_2根据【案例指导】,学习并完成案例;cid:link_0运行完所有命令后,截图发布到本贴评论区,活动结束后随机抽奖。活动抽奖:1、超过88人体验,随机抽20个幸运观众,送自拍杆2、超过288人体验,随机抽60个幸运观众,送自拍杆 / 体脂秤。(总共30个自拍杆、30个体脂秤)活动已结束,参与人数未达到活动抽奖要求,不给予抽奖 活动规则  1)请务必使用个人账号参与活动(IAM、企业账号等账号参与无效); 2)所有获得华为奖项的获奖用户,请于获奖后3日内完成实名认证,否则视为放弃奖励; 3)本次活动如一个实名认证对应多个账号,只有一个账号可领取奖励;一个实名认证账号只能对应一个收件人,如同一账号填写多个不同收件人或不同账号填写同一收件人,均不予发放奖励; 4)为保证您顺利领取活动奖品,请您提前填写奖品收货信息,如您没有填写,视为放弃奖励【点击此处填写信息】。活动获奖信息填写时间截止2022年12月15日,如未填写视为弃奖,请知; 5)本次活动,实物奖品预计于2022年12月30日前完成发放,发放时间根据实际情况动态调整,如有延期敬请见谅; 6)本次活动幸运奖将采用巨公摇号平台(https://www.jugong.wang/random-portal/)进行抽取,如您对评奖方式有异议,请勿参加本次活动; 7)其他事宜请参考【华为云社区常规活动规则】,本活动最终解释权归华为云所有。https://bbs.huaweicloud.com/forum/thread-5766-1-1.html 
  • [问题求助] API响应参数
    请问appcube响应参数中resCode和其他常见接口中的状态码是一回事吗?为什么它的描述是“返回码,如果返回“0”代表请求成功”,而附录的状态码中,200才是响应成功的状态码
  • [MindX SDK] SOLOV2实例分割
    SOLOV2实例分割1. 介绍项目链接:cid:link_3SOLOV2实例分割后处理插件基于 MindX SDK 开发,对图片中的不同类目标进行检测,将检测得到的不同类的目标用不同色彩的轮廓图标记。输入一幅图像,可以检测得到图像中大部分类别目标的位置。本方案使用在 COCO2017 数据集上训练得到的 SOLOV2模型进行目标检测,数据集中共包含 80 个目标类,包括行人、自行车、公共汽车、手机、沙发、猫、狗等,可以对不同类别、不同角度、不同密集程度的目标进行检测并分割。1.1 支持的产品本项目以昇腾Atlas310卡为主要的硬件平台。1.2 支持的版本支持的SDK版本为 2.0.4, CANN 版本为 5.0.4。1.3 软件方案介绍本项目设计两种流程,一种为用python代码实现对图像的预处理过程,然后将处理好的图片通过 appsrc 插件输入到业务流程中;另一种是直接将原图片通过 appsrc 输入到业务流程中。1.3.1 业务流程加图像预处理方案整体业务流程为:待检测图片通过 appsrc 插件输入,然后使用图像解码插件 mxpi_imagedecoder 对图片进行解码,再通过图像缩放插件 mxpi_imageresize 将图像缩放至满足检测模型要求的输入图像大小要求,缩放后的图像输入模型推理插件 mxpi_tensorinfer 得到推理结果,推理结果输入 mxpi_objectpostprocessor 插件进行后处理,得到输入图片中所有的目标mask和对应的置信度。最后通过输出插件 appsink 获取检测结果,并在外部进行可视化,将检测结果标记到原图上,本系统的各模块及功能描述如表1所示:表1 系统方案各模块功能描述:序号子系统功能描述1图片输入获取 jpg 格式输入图片2图片解码解码图片3图片缩放将输入图片放缩到模型指定输入的尺寸大小4模型推理对输入张量进行推理5目标检测后处理从模型推理结果得到实力目标的mask和置信度,并保留置信度大于指定阈值的实例目标检测结果6结果输出获取检测结果7结果可视化将检测结果标注在输入图片上1.4 代码目录结构与说明本工程名称为 SOLOV2,工程目录如下所示:. ├── SOLOV2实例分割.md ├── build.sh ├── images │   ├── eval_result.png │   └── pipeline.png ├── postprocess │   ├── CMakeLists.txt │   ├── Solov2PostProcess.cpp │   ├── Solov2PostProcess.h │   └── build.sh └── python ├── Main │   ├── SOLOV2 // 下载的昇腾modelzoo模型 │   │   └── SOLO // 下载的SOLOV2源代码 │   ├── main_eval.py │   └── main_visualize.py ├── coco // 下面存放数据集以及标注文件 ├── models │   ├── SOLOv2_sim.onnx // 从下载的模型文件中迁移到这里 │   ├── aipp_config │   │   └── aipp_opencv.cfg │   ├── coco.names // 下载的coco.names │   └── solov2.cfg └── pipeline └── solov2.pipeline注:coco.names文件源于链接。1.5 技术实现流程图SOLOV2 的后处理插件接收模型推理插件输出的特征图。 ()1.6 适用场景经过测试,该项目适用于各类格式图像,但仍有所缺陷:本次测试选用了多种不同的图片进行测试。测试结果表明,模型在大部分情形下可以检测准确。但是在目标数量很多时往往会漏掉几个,对于图片中特征不明显的实例有时难以检测出来。此外,实例的mask有时会失准,存在无法覆盖实例或者超出实例的情况。2 环境依赖推荐系统为ubuntu 18.04,环境依赖软件和版本如下表:软件名称版本cmake3.5+mxVision2.0.4python3.9.2opencv-python4.5.5.64确保环境中正确安装mxVision SDK。在编译运行项目前,需要设置环境变量:MindX SDK 环境变量:. ${SDK-path}/set_env.shCANN 环境变量:. ${ascend-toolkit-path}/set_env.sh环境变量介绍SDK-path: SDK mxVision 安装路径 ascend-toolkit-path: CANN 安装路径需要安装的mmdet库与mmcv库:// mmcv 安装方式 git clone https://github.com/open-mmlab/mmcv -b v0.2.16 cd mmcv python setup.py build_ext python setup.py develop// mmdet安装方式(需要先从github上下载源代码库并下载昇腾modelzoo模型) 下载模型地址:cid:link_1 将下载好后的SOLOV2文件夹放在SOLOV2/python/Main路径下。 在SOLOV2/python/Main/SOLOV2 路径下执行git clone cid:link_6.git cd SOLO // 源代码仓(cid:link_6) patch -p1 < ../MMDET.diff // 下载的昇腾模型中包含 patch -p1 < ../SOLOV2.diff // 下载的昇腾模型中包含 pip install -r requirements/build.txt apt-get install libjpeg-dev pip install -v -e .3. 模型转换本项目中采用的模型是SOLOV2 模型,参考实现代码:cid:link_6 ,模型下载链接:cid:link_1 。下载地址中包含onnx文件,同时也有对应的om文件,可以直接使用。也可以用ATC模型转换工具将onnx转换为om文件。模型转换工具相关介绍参考链接:cid:link_2 。3.1 模型转换方法从上述项目链接中下载 onnx 模型 solov2_sim.onnx 至 python/models 文件夹下。将该模型转换为om模型,具体操作为: python/models 文件夹下,执行atc指令:atc --framework=5 --model=SOLOv2_sim.onnx --output=solov2_opencv --input_format=NCHW --input_shape="input:1,3,800,1216" --insert_op_conf=aipp_config/aipp_opencv.cfg --log=error --soc_version=Ascend310若终端输出:ATC start working now, please wait for a moment. ATC run success, welcome to the next use.表示命令执行成功。4. 编译与运行4.1 业务流程步骤1 在项目后处理目录执行命令:bash build.sh 步骤2 放入待测图片。将一张图片放在路径python/Main下,命名为 test.jpg。修改python/models下的文件 solov2.cfg 的参数 SCORE_THRESH=0.3。步骤3 图片检测。在项目路径python/Main下运行命令:python3 main_visualize.py命令执行成功后在目录python/Main下生成检测结果文件 result.jpg,查看结果文件验证检测结果。步骤4 精度测试。下载COCO VAL 2017验证数据集和标注文件,并保存在项目目录python/coco下,此文件夹下的组织形式应如下图所示:. ├── annotations │ └── instances_val2017.json └── val2017 其中:val2017文件夹下应存放有5000张待测图片。确定配置文件路径,若在上文提到的路径下下载SOLOV2源代码,则配置文件路径为:SOLOV2/python/Main/SOLO/configs/solov2/solov2_r50_fpn_8gpu_1x.py。该配置文件用于评测精度时配置标准数据集。修改python/models下的文件 solov2.cfg 的参数 SCORE_THRESH=0.0进入python/Main路径,运行命令(main_eval.py文件中给出了默认参数,若参数对应文件位置有出入,可选择性传参):python3 main_eval.py --dataset_path [COCO数据集位置] --anno_path [COCO标注文件位置] --model_config [配置文件位置]()​4.3 目标精度目标精度为:0.339
  • [应用推荐] 【应用推荐】华为云打造农业农村大数据解决方案
    数据、算力强支撑,佳格天地联合华为云打造农业农村大数据解决方案日前,华为云“828 B2B企业节”盛大开启。农业农村大数据应用企业佳格天地联合华为云推出“测亩宝”、“高绘”、“耘境知天农业大数据平台”、“农业金融风险监管平台”等多款产品。通过佳格天地以卫星遥感为核心的多源海量数据,结合华为云强大算力支持,为农业生产经营、农业金融风险管理等业务场景提供全产业链大数据解决方案。以农业金融风险管理为例,源源不断的金融活水是激活乡村振兴发展的重要动力。佳格天地瞄准农业农村金融业务开展过程中数据缺失、信用体系不健全、资产情况不透明等问题,以“合规增效”为切入点,建设“农业金融风险监管平台”。(华为云商城链接:cid:link_0),并将亮相华为云“828 B2B企业节”。▼佳格天地“农业金融风险监管平台”平台结合佳格天地卫星遥感数据处理分析能力,及华为云ModelArts强大的图片分类、物体识别和面向结构化数据的分析研判能力,打造了天空地一体化的农贷风控新模式,能够助力银行等相关机构建立多维度的还款能力评估体系和风控模型,实现贷中、贷前、贷后全流程风控,以及人、地、物、时、事“五位一体”的全方位风控,提升普惠金融服务能力,切实发挥金融在乡村振兴发展过程中的“助推器”作用。面向广大农户,“农业金融风险监管平台”将农户种植的土地与作物转化为可衡量的数字化资产,从而助力解决农户因缺乏资产数据而难以申请贷款的问题。同时,平台配套手机端应用,农户通过手机即可完成贷款地块勾画、填写基本信息,实现线上申请贷款。▼通过手机APP实现在线勾画地块面向金融机构,“农业金融风险监管平台”支持追溯历史卫星遥感和气象数据,帮助金融机构了解农户的种植生产稳定性、真实历史种植规模、历史产量以及生产风险信息,将相关结果输出给金融机构,为授信额度提供数据支撑。贷后,平台会持续对贷款地块的作物长势、气象情况进行监测,形成种植风险地图,通过抵押物价值的变化进一步评估还款能力。▼基于数据对贷前准入与授信额度进行测定面向政府部门,“农业金融风险监管平台”能够充分盘活政府已有的各项涉农数据,将数据切实应用于金融业务之中。同时加强政府对金融支农业务开展情况的监管力度,助力政府推动落实各项金融支农政策。当前,佳格天地“农业金融风险监管平台”已为多家大型国有银行提供服务,将大数据与金融工具结合,为农业信贷业务中的各方主体、各个环节提供有力数据支撑。未来,佳格天地将进一步与华为云紧密合作,推动数据、算法、算力与应用深度融合,持续推动大数据在农业农村发展建设中的落地应用,赋能各业务场景,为农业农村发展注入强劲数字动力。*本文来源网易号: 科技云未来,原文链接:https://www.163.com/dy/article/HFPPPCC30553L7BH.html
  • [经验分享] 基于 MindStudio 的图像去噪 MindX SDK 后处理开发(ADNet模型)
    ADNet图像降噪(bilibili视频链接: https://www.bilibili.com/video/BV1te411g72h)1  任务介绍基于ADNet模型的图像降噪MindX SDK后处理开发,是在华为昇腾芯片的性能下对模型降噪后的图像进行保存,与原图像进行对比后计算出PSNR(峰值信噪比,是一种最普遍,最广泛使用的评鉴画质的客观量测法)。ADNet是一种包含注意力模块的卷积神经网络,主要包括用于图像去噪的稀疏块(SB)、特征增强块(FEB)、注意力块(AB)和重建块(RB)。具体来说,SB模块通过使用扩张卷积和公共卷积来去除噪声,在性能和效率之间进行权衡。FEB模块通过长路径整合全局和局部特征信息,以增强去噪模型的表达能力。 AB模块用于精细提取隐藏在复杂背景中的噪声信息,对于复杂噪声图像,尤其是真实噪声图像非常有效。 此外,FEB模块与AB模块集成以提高效率并降低训练去噪模型的复杂度。最后,RB模块通过获得的噪声映射和给定的噪声图像来构造去噪的图像。本方案采用ADNet模型实现图像去噪功能,整体流程与开发流程如图1所示。我们将待检测的图像输入到整体框架中,通过图像解码、图像解码、图像缩放后输入到图像去噪模型中进行推理,推理得到一个去噪后的图像矩阵。然后,我们将该图像与原始图像之间计算出PSNR值,同时完成图像的可视化结果。图1  图像去噪流程图本次实验在Mindstudio与服务器上进行,请先按照教程配置服务器与本地的环境,并安装MindStudio。MindStudio是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,该IDE上功能很多,涵盖面广,可以进行包括网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。MindStudio 除了具有工程管理、编译、调试、运行等一般普通功能外,还能进行性能分析,算子比对,可以有效提高工作人员的开发效率。除此之外,MIndStudio 具有远端环境,运行任务在远端实现,对于近端的个人设备的要求不高,用户交互体验很好,可以让我们随时随地进行使用。2  环境搭载和配置2.1 服务器端推理环境准备1. 通过表1中所给的链接获取ADNet论文介绍与模型代码。表1  ADNET模型模型地址https://gitee.com/ascend/ModelZoo-PyTorch/tree/master/ACL_PyTorch/contrib/cv/quality_enhancement/ADNet论文地址cid:link_2模型概述https://www.hiascend.com/zh/software/modelzoo/detail/1/d360c03430f04185a4fe1aa74250bfea2. 打开表1中的模型概述链接,点击推理环境准备,在服务器上安装模型所需的依赖包,如图2所示。图2  推理环境依赖3. 配置服务器环境变量表2  环境变量MX_SDK_HOME=/home/tanwenjun0/MindX_SDK/mxVision-2.0.4LD_LIBRARY_PATH=${MX_SDK_HOME}/python:${MX_SDK_HOME}/lib:${MX_SDK_HOME}/opensource/lib:${MX_SDK_HOME}/opensource/lib64:/usr/local/Ascend/ascend-toolkit/5.0.4/acllib/lib64:/usr/local/Ascend/driver/lib64:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64PYTHONPATH=/usr/local/Ascend/ascend-toolkit/latest/pyACL/python/site-packages/acl:${MX_SDK_HOME}/python:/usr/local/Ascend/ascend-toolkit/latest/pyACL/python/site-packages/acl:${MX_SDK_HOME}/python/usr/local/Ascend/ascend-toolkit/latest/pyACL/python/site-packages/aclGST_PLUGIN_SCANNER=${MX_SDK_HOME}/opensource/libexec/gstreamer-1.0/gst-plugin-scannerGST_PLUGIN_PATH=${MX_SDK_HOME}/opensource/lib/gstreamer-1.0:${MX_SDK_HOME}/lib/plugins2.2 MindStudio 简介及安装 MindStudio 提供了 AI 开发所需的一站式开发环境,提供图形化开发界面,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。同时还支持网络移植、优化和分析等功能。依靠模型可视化、算力测试、IDE 本地仿真调试等功能,MindStudio 能够帮助用户在一个工具上就能高效便捷地完成 AI 应用发。同时,MindStudio 采用了插件化扩展机制,开发者可以通过开发插件来扩展已有功能。本图文教程,将基于 Windows 平台上的 MindStudio,具体安装流程,可以参考官网如下图 3 与 4 所示。 MindStudio 软件包下载地址: https://www.hiascend.com/software/mindstudio/download Windows 平台下载安装流程:https://support.huaweicloud.com/devg-mindstudio304/atlasms_02_0008.html图3  MindStudio软件包下载图4  Windows平台安装2.3 CANN简介及安装流程CANN(Compute Architecture for Neural Networks)是华为公司针对 AI 场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建基于昇腾平台的 AI 应用和业务。用户根据实际使用需要,下载对应的 CANN 软件包,具体安装流程可以参考官网的用户手册如下图 5 与 6 所示。 CANN 软件包下载地址:https://www.hiascend.com/software/cann/commercial CANN 安装流程:cid:link_0图5  CANN软件包下载图6 CANN安装流程2.4 本地Python安装和配置本地配置远端服务器python3.9.12为编译器,并检查编译环境。也可以手动添加本地编译环境,通过conda命令完成创建。                                                                            图7  选择python编译环境3 创建项目工程,完成结构配置1. 创建项目,点击菜单栏的“File->New->Project”按钮,如下图 8 所示。                                                                       图8  创建项目2. 选择 Ascend App 项目,输入项目名,其中 CANN 版本应与远端服务器转 一致,点击 change,如下图 9 与 10 所示。                                                                      图9  配置CANN图图10  连接远端服务器CANN图3. 添加远程服务器,填写远端服务器信息,测试连接,如下图11所示。图11  测试连接图4. 连接成功后,选择 CANN 目录,等待本地同步远端服务器 CANN 文件,如下图12所示。图12  同步服务器图5. 同步成功后,选择Ascend App下的 MindX SDK Project(python)项目,完成新建项目,如下图13所示。图13  选择项目类型图6.选择菜单栏“File -> Settings -> Tools -> Deployment -> Mappings”,配置服务器地址与本地地址映射,如下图 14 所示。图14  配置服务器映射地址7.右键点击项目工程文件,选择“Deployment -> Download from -> 服务器”,将服务器文件下载到本地地址目录下,如图15所示。服务器地址与刚才设置的mappings有直接联系,我们也可以选择Upload to将本地文件上传到服务器。图15  导入服务器文件4 ATC模型转换1. 菜单栏选择“Ascend -> Model Converter”,打开模型转换功能。图16  选择模型转换功能2. 配置好模型路径,填写模型相关信息,如图17所示。图17  配置模型参数ADNet模型的常规参数设置如表3所示,请根据实际情况完成正确配置,填写完毕后点击Next按钮。表3  模型常规参数设置Model File选择要转换的ONNX模型所在地址Model Name填写输出模型的名称Target SoC VersionAscend310Input FormatADNet模型的输入格式要求 NCHWImage ShapeADNet模型的输入尺寸要求 [1 1 321 481]Image TypeADNet模型的输入数据类型要求 UINT83.选择aipp配置文件,完成了图像padding、色域转换、数据标准化等设置,如图18所示。图18  配置模型aipp文件ADNet模型的高级参数设置如表4所示,请根据实际情况完成正确配置,填写完毕后点击Next按钮。我们可以选择提前将配置信息写入config文件后点击Load Aipp Configuration直接导入,也可以在下列参数中完成手动配置。表4  模型高级参数设置Load Aipp Configuration打开此按钮,导入模型配置文件Aipp Configuration File选择模型config文件Input Image FormatYUV420 sp / BT.601(Video Range)Input Image ResolutionH  320    W 480Model Image FormatRGBPaddingL 1     R 0     B 0     T 1NormalizationR 0.00392    G 0.00392    B 0.00392Crop关闭此按钮,不需要进行裁剪4. 点击按钮,配置ATC转换所需的环境变量,设置完成后点击Finish开始转换模型,转换成功后如图20所示。图19  配置模型转换环境变量图20  模型转换成功5 编写Pipeline文件1. 菜单栏选择“Ascend -> Model SDK Pipeline”,进入pipeline编写模块。图21  选择编写pipeline功能2. pipeline模块分为Input,other,Output三部分,我们根据模型处理需求选择模块拖拽到右侧空白处,如图22所示。(也可以直接编写文本文件)图22  选择pipeline模块3.我们编写完成的pipeline如图23所示,包括以下六个插件:appsrc   输入mxpi_imagedecoder   图像解码mxpi_imageresize    图像缩放mxpi_tensorinfer    模型推理mxpi_dataserialize  appsink 输出图23  完成模型的pipeline6 运行项目工程文件1.后处理技术实现原理ADNET图像去噪模型的后处理的输入是 pipeline 中 mxpi_tensorinfer0 推理结束后通过 appsink0 输出的 tensor 数据,尺寸为[1*1*321*481],将张量数据通过 pred 取出推测的结果值,将像素点组成的图片保存成result.jpg,同时通过提供的 BSD68 数据集完成模型 PSNR 的精度计算。PSNR(Peak signal-to-noise ratio)峰值信噪比,是一个表示信号最大可能功率和影响它的表示精度的破坏性噪声功率的比值的工程术语。由于许多信号都有非常宽的动态范围,峰值信噪比常用对数分贝单位来表示。它的计算公式定义如下:其中MSE为两个m×n单色图像I和K残差值的平方,计算公式如下:2.后处理实现流程(1)将转换得到的模型om文件,保存在my_work/model文件夹路径下。(2)将任意一张jpg格式的图片存到当前目录下(/my_work),命名为test.jpg。如果 pipeline 文件(或测试图片)不在当前目录下(/my_work),需要修改 main.py 的pipeline(或测试图片)路径指向到所在目录。(3)设置好表2中MX_SDK_HOME,LD_LIBRARY_PATH,PYTHONPATH,GST_PLUGIN_SCANNER,GST_PLUGIN_PATH五个环境变量。(4)运行main.py,在当前目录下输出result.jpg。图24为用于测试的原始图像,图25为经过模型处理去噪后的图像。                                                                    图24  测试图像                                          图25  去噪后的图像(5)安装数据集以测试精度。数据集BSD68需要下载到/my_work下,我们运行 python transform.py 对数据集进行格式与尺寸转换得到 dataset 文件。(6) 修改 evaluate.py 中的 pipeline 路径与数据集路径与目录结构保持一致。修改完毕后运行 python evaluate.py 完成精度测试,输出模型平均 PSNR 值,如图26所示。图26  后处理输出PSNR结果7 项目工程文件详解1. 主函数 main.py函数功能:实现端到端的推理,输入一张待去噪的图像,输出去噪后的图像。2. 新建一个数据流,实例化一个StreamManagerApi对象。若初始化失败,则报错并推出程序。​      这一部分是导入外部的pipeline文件。我们将pipeline_path指向项目的pipeline文件地址,并将文件内容通过StreamManagerApi传入流中。​       这一部分是传入待去噪的图像数据。我们将image_path指向目标图像地址,实例化一个MxDataInput对象,并将图像数据通过MxDataInput.data传入数据流中,同时将原始图像的height、width保存下来,方便我们后期对图像进行resize。​        这一部分是根据流名将数据通过SendData函数传入流中,并设置想要获取的插件输出放置到变量keys中(可以放置多个插件),我们将 mxpi_tensorinfer通过 StringVector.push_back 函数完成插入。这一部分从流中取出对应插件的输出数据,与上一部分的插件选择直接相关。        我们通过appsink输出插件拿到上面的mxpi_tensorinfer插件的结果。若取出的结果为空,则报错后退出程序。        我们将得到的result存储在MxpiTensorPackageList中,并通过numpy的frombuffer函数将pred以流的形式读入转化成array对象,并设置数据类型为float32。​        这一部分为数据后处理阶段。我们将 pred 的尺寸resize为(320,480),变成与模型输出相对应的矩阵维度。同时,我们设置了一个类似于torch.clamp的函数:将 pred 每个元素的范围限制到区间 [0,1],若 pred 值小于0,则赋值为0;若 pred 值大于1,则赋值为1;其他的值保持不变。最后,我们需要去除归一化,将数据还原到正常像素范围(0,255)上。​        这一部分为图像保存。我们将矩阵向量通过cv2.resize函数转为与输入一致的尺寸,并选择了合适的缩放方式,并通过cv2.imwrite函数将图像保存到指定目录下。最后通过 DestroyAllSreams 完成流的销毁与内存释放。​3. 精度测试函数 evaluate.py函数功能:导入指定的BSD68数据集,完成我们的精度测试。由于整体部分与main.py相近,因此我们只介绍精度计算部分。我们通过双层for循环控制原始图像与去噪后图像的像素访问,根据PSNR的计算方法完成每一张图像的PSNR计算并输出保存。最后完成所有68张图像的计算后,输出平均PSNR值作为最终的精度测试结果。4. 格式转换函数 transform.py函数功能:对测试图像进行格式转换以及精度测试前的尺寸调整。执行evaluate.py前,由于模型的输出维度为 320 * 480,我们需要将原始图像的大小resize为320 * 480才能进行PSNR值的计算。执行main.py前,由于需要将图像的原始尺寸信息记录,因此不需要将原始图像的大小进行resize,只进行格式转换即可。我们pipeline中的图像缩放插件会针对模型输入需要完成缩放功能。8  遇到的问题1.在执行样例时报错“No module named 'StreamManagerApi'”如下图27 所示。图27  未找到StreamManagerApi模块图解决方法:正确导入如表2中的环境变量。2.模型转换过程中无法选择我们需要的模型输入大小(321 * 481),如下图28所示。图28  未得到模型所需的tensor尺寸解决方法:模型的输入分辨率值(W与H)不能为奇数。转换模型时未导入aipp_config文件,需要配置resize之后在图像左侧和上侧设置padding值为1,从而满足模型的输入。
  • [经验分享] ResNet18 :使用MindStudio进行MindX SDK应用开发
    目录写在最前面ResNet18简介工具简介MindX SDK简介MindStudio环境搭建与配置MindStudio安装(Windows版本)SSH连接MindX SDK安装推理开发运行流程业务开发Python版本开发新建一个目录代码目录结构模型转换pipeline文件编排main.py文件编写代码运行C++版本开发新建一个项目代码目录结构模型转换(或者不转换)业务代码书写(修改)项目编译代码运行可参考的代码FAQ模型运行报错?如果想换个数据集怎么办?Python找不到模型路径?C++找不到模型路径?No Python interpreter configured for the module?SDK版本获取失败?结语1. 写在最前面这是一篇基于昇腾众智“ResNet18 for pytorch”代码的MindX SDK应用开发经验帖。原始项目代码可以从Ascend/ModelZoo-PyTorch - Gitee.com仓库中找到,根据原始项目代码,我们可以在MindStudio上快速实现一个ImageNet2012数据集1000分类应用的开发。整个过程中,MindStudio昇腾论坛上的教程基于MindStudio的MindX SDK应用开发全流程MindStudio昇腾_华为云论坛 (huaweicloud.com)也提供了很大的帮助。2. ResNet18简介ResNet是ImageNet竞赛中分类问题效果较好的网络,它引入了残差学习的概念,通过增加直连通道来保护信息的完整性,解决信息丢失、梯度消失、梯度爆炸等问题,让很深的网络也得以训练。ResNet有不同的网络层数,常用的有18-layer、34-layer、50-layer、101-layer、152-layer。ResNet18的含义是指网络中有18-layer。参考论文:He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.3. 工具简介3.1. MindX SDK介绍MindX SDK是华为昇腾AI处理器加速的AI软件开发套件(SDK), 提供了大量丰富的API,可以快速完成AI应用的开发3.2. MindStudioMindStudio提供了一个AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够帮助开发者在一个工具上就能高效便捷地完成AI应用开发MindStudio采用了插件化扩展机制,开发者可以通过开发插件来扩展已有功能官网地址:MindStudio-昇腾社区 (hiascend.com)4. 环境搭建与配置因为我使用的Windows系统环境,所以这里提供Windows环境下MindStdio环境搭建和配置的全流程,其它系统可以查看安装方案-安装指南-MindStudio-文档首页-昇腾社区 (hiascend.com)4.1. MindStudio 安装(Windows版本)安装前的说明MindStudio可以单独安装在Windows上。在安装MindStudio前需要在Linux服务器上安装部署好Ascend-cann-toolkit开发套件包,之后在Windows上安装MindStudio,安装完成后通过配置远程连接的方式建立MindStudio所在的Windows服务器与Ascend-cann-toolkit开发套件包所在的Linux服务器的连接,实现全流程开发功能。我所采用的是windows共部署的方法​​2. 下载安装MindStudio前往MindStudio下载-昇腾社区 (hiascend.com)页面进行MindStudio软件包的下载,并且参照安装MindStudio-安装操作(Windows)完成MindStudio的安装。4.2. SSH连接在进行共部署之前,先确认SSH服务器连接成功按照上面图中所示,依次配置之后,点击Test Connection,显示下图就表示连接成功。4.3. MindX SDK安装远端环境MindX SDK安装Windows 场景下基于 MindStuido 的 SDK 应用开发,请先确保远端环境上 MindX SDK 软件包已安装完成,安装方式请参见《mxManufacture 用户指南》和 《mxVision 用户指南》的“使用命令行方式开发”>“安装 MindX SDK 开发套件” 章节。本地 CANN 安装①:在 Windows 本地打开 MindStudio,点击 Customize > Allsettings…,如下图所示:②:进入设置页面,点击 Appearance & Behavior > System Settings > CANN 进入 CANN 管理界面。完成后的状态如下图所示:3. 本地 MindX SDK安装与步骤 2 开始一致,进入设置页面,点击 Appearance & Behavior > System Settings > MindX SDK 进入 MindX SDK 管理界面。界面中 MindX SDK Location 为软件包的默认安装路径,默认安装路径为“C:\Users\用户名\Ascend\mindx_sdk”。 单击 Install SDK 进入 Installation settings 界面。参数说明Remote Connection远程连接的用户及 IPRemote CANN Location远端环境上 CANN 开发套件包的路 径,请配置到版本号一级Remote SDK Location远端环境上 SDK 的路径,请配置到 版本号一级。IDE 将同步该层级下的 include、opensource、python、 samples 文件夹到本地 Windows 环境Local SDK Location同步远端环境上 SDK 文件夹到本地 的路径。默认安装路径为“C:\Users\ 用户名\Ascend\mindx_sdk”5. 推理开发运行流程使用 MindStudio 开发和运行推理业务步骤如下:(1) 确定业务流程:根据业务功能如目标检测、图像分类、属性识别等,将 业务流程进行模块化。(2) 寻找合适插件:根据已有 SDK 插件的功能描述和规格限制来匹配业务功 能,当 SDK 提供的插件无法满足功能需求时,用户可以开发自定义插件。(3) 准备推理模型文件与数据:准备输入图片和下载模型,使用 Model Convertor 模型转换工具将模型转换为 om 格式。(4) 流程编排:以可视化的方式,开发数据流图,生成 pipeline 文件供应用框 架使用,配置文件以 json 格式编写,必须指定业务流名称、元件名称和 插件名称,并根据需要,补充元件属性和下游元件名称信息。(5) 业务集成:编写 C++程序或 Python 程序,调用业务流管理的 API ( MxStreamManager ), 先 进 行 初 始 化 , 再 加 载 业 务 流 配 置 文 件 (*.pipeline),然后根据 stream 配置文件中的 StreamName 往指定 Stream 获取输出数据,最后销毁 Stream。(6) 编译与运行应用:若新建的工程为 Python 版本的应用工程,不需要执行 编译应用工程,配置 Python 环境后,即可在远端服务器运行;若新建工 程为 C++版本的应用工程,则需要进行远端编译,远端编译时,会对工 程文件夹进行目录拷贝到远端连接的环境,编译成功后即可运行。6. 业务开发业务开发将按照python版和C++版分别进行介绍6.1.Python版本开发6.1.1 新建一个项目首先创建一个项目,选择一个自己喜欢的位置,比如图中所示,将在D:\Codes\python\Ascend\MyApp位置下创建自己的项目。选择好了后,点击下一步选择MindX SDK Project(Python)如图所示,被圈出来的4个项目,上面两个是空模板,在这里面创建我们自己的工程项目,因为我们要创建Python版的应用,所以选箭头指的这个;下面两个是官方给出的样例项目,如果对目录结构和应该写哪些代码不太熟悉的话,也可以创建一个样例项目先学习一下。选择完成后,点击Finish完成项目的创建6.1.2 代码目录结构Python版本的SDK项目大概有哪些文件呢?我们其实可以先打开一个官方样例项目先看看左边是我们自己创建的项目,右边是官方样例项目,对比之下我们可以发现,右边的样例项目主要有models(用于存储模型文件)、pipeline(流程编排文件)、python(项目python代码)和streamserver(实际开发中没用上)。PS: 其实也不一定要按照这个目录结构存放代码,只是这样结构更加清晰一些。我的工程目录文件是这样其中data用来存放数据图片6.1.3 模型转换下载模型首先我们先在ModelZoo-昇腾社区 (hiascend.com)中下载ResNet18模型和代码选Pytorch版分别下载模型脚本和模型其中模型脚本在“pipeline文件编排”和“main.py文件编写”章节得到应用解压后,我们只要这个onnx模型,同时,我们将names标签数据也一起放进models文件夹模型转换点击这个工具,进入模型转换界面选择待转换的模型路径选好后点一下任意一个位置,MindStudio会进入模型解析状态等待模型解析完成后,可以修改输出的模型名字,或者点击下一步点击Finish,开始转换转换完成稍等片刻,出现这个就表明转换完成如上图所示,在显示的路径中可以找到转化好的文件我们将om文件移动到models文件夹中,就可以进行接下去的步骤了6.1.4 pipeline文件编排pipeline文件编排是python版SDK最主要的推理开发步骤作为一个图片分类任务,主要包括以下几个步骤:初始化 → 图片数据传送 → 图片预处理 → 图片分类 → 序列化 → 结果传回由于ResNet18模型采用的是PIL库进行图片预处理,而非opencv,因此我们不在pipeline中进行图片预处理步骤(包括图片解码、缩放、裁剪),而是通过在main.py文件中进行图片预处理,再将结果传给推理业务因此pipeline流程编排为以下几个步骤初始化 → 获取图片数据 → 图片分类 → 序列化 → 结果传回可视化结果如下图所示:实际上,我们可以通过对之前下载好的代码文件中已有的pipeline进行简单修改,就可以完成我们自己的pipeline文件编排在下载好的ResNet18_for_PyTorch_{$version}__code中,路径./infer/sdk/data/config下可以找到resnet18.cfg和resnet8.pipeline两个文件,将这两个文件分别移动到models目录和pipeline目录下,如下图所示:对resnet18.pipeline进行参数修改我个人比较喜欢文本编辑的方式修改,如下图所示修改完成后,就可以进行main.py文件的编写了,离成功运行越来越近了!6.1.5 main.py文件编写根据pipeline文件编排中的说明,我们在main.py中需要完成3件事——对图片进行预处理+将预处理好的结果传给推理业务+获取推理结果实际上,我们依旧可以参考下载的代码文件中./infer/sdk/main.py文件中的做法,稍作修改就可以(1) 图片预处理主要用到resize、center_crop、preprocess和gen_protobuf(图片编码为推理业务需要的字节流)四个函数参照下载代码中的main.py文件,很容易就能得到这四个函数# resize and cropdef resize(img, size, interpolation=Image.BILINEAR): return img.resize(size[::-1], interpolation)def center_crop(img, out_height, out_width): height, width, _ = img.shape left = int((width - out_width) / 2) right = int((width + out_width) / 2) top = int((height - out_height) / 2) bottom = int((height + out_height) / 2) img = img[top:bottom, left:right] return img# preprocessor调用上面的两个函数进行图片缩放裁剪处理def preprocess(in_file): mean = [0.485, 0.456, 0.406] std = [0.229, 0.224, 0.225] img = Image.open(in_file).convert('RGB') w = img.size[0] h = img.size[1] if w > h: input_size = np.array([256, 256 * w / h]) else: input_size = np.array([256 * h / w, 256]) input_size = input_size.astype(int) print(input_size) img = resize(img, input_size) # transforms.Resize(256) img = np.array(img, dtype=np.float32) img = center_crop(img, 224, 224) # transforms.CenterCrop(224) img = img / 255. # transforms.ToTensor() img[..., 0] = (img[..., 0] - mean[0]) / std[0] img[..., 1] = (img[..., 1] - mean[1]) / std[1] img[..., 2] = (img[..., 2] - mean[2]) / std[2] img = img.transpose(2, 0, 1) # HWC -> CHW return img#generate protobuf调用preprocess生成传给推理业务的流数据def gen_protobuf(in_file): img_np = preprocess(in_file) vision_list = MxpiDataType.MxpiVisionList() vision_vec = vision_list.visionVec.add() vision_vec.visionInfo.format = 0 vision_vec.visionInfo.width = 224 vision_vec.visionInfo.height = 224 vision_vec.visionInfo.widthAligned = 224 vision_vec.visionInfo.heightAligned = 224 vision_vec.visionData.memType = 0 vision_vec.visionData.dataStr = img_np.tobytes() vision_vec.visionData.dataSize = len(img_np) protobuf = MxProtobufIn() protobuf.key = b"appsrc0" protobuf.type = b'MxTools.MxpiVisionList' protobuf.protobuf = vision_list.SerializeToString() protobuf_vec = InProtobufVector() protobuf_vec.push_back(protobuf) return protobuf_vec(2) main方法编写main方法的编写,可以基于官方样例代码中的main方法,在那个基础上,调用我们自己的预处理函数再传值给推理业务即可streamName: 业务流的名字,需要和pipeline文件中写的保持一致6.1.6 代码运行前面的步骤完成之后,我们就可以进行代码的运行了。(1) 选择一张测试用图片我们在data目录中放入自己想要的测试图片,比如我放的这张然后在main.py中设置好图片位置全部完成后应该为这样(2) 设置运行脚本接着,我们点击上图中箭头指的地方,设置运行脚本为main.py(3) 获取运行结果点击运行获得推理结果我们可以看到,推理结果为golden retriver 金毛寻回犬上网搜搜看,发现和我们测试的狗狗图片是一样的品种6.2 C++版本开发6.2.1 新建一个项目可以参见“Python版本开发-新建一个项目”章节,这次我们选择的是C++开发空项目应该为这样6.2.2 代码目录结构根据上图的说明,我们还需要建立一个models文件用于存放模型文件,完整的目录结构应该长这样值得注意的是,这里多了一个preprocess.py文件,是用于预处理图片的,在下面“代码运行”章节会详细说明6.2.3 模型转换(或者不转换)和Python版本开发一样,可以对下载到的onnx模型进行转换,也因为转换好的模型其实就是下载的模型中的om模型,所以也可以直接拿来用。6.2.4 业务代码书写(修改)(1) 将下载到的代码中,./infer/mxbase中的src代码和CMakeLists.txt文件全部移动到src目录下(2) 修改src代码①修改路径首先修改main.cpp中的文件路径再修改编译文件中的代码路径②修改业务代码因为我们下载到的代码中,推理结果只保留了推理的类别编号,并且需要传入测试图片所在的父目录。而我们想要让它测试一张图片,并且将推理结果输出类别名称,所以需要对main.cpp和Resnet18Classify.cpp中部分代码进行修改main.cpp主要修改传入图片的方法,像上图中一样,改为传单张图片Resnet18Classify.cpp主要修改一处,将结果储存到文本文件中的方法,修改为打印输出ShowResult函数(记得在.h头文件中也添上这个方法)APP_ERROR Resnet18Classify::ShowResult(const std::string &imgPath, std::vector> \ &BatchClsInfos) { uint32_t batchIndex = 0; std::string fileName = imgPath.substr(imgPath.find_last_of("/") + 1); for (const auto &clsInfos : BatchClsInfos) { std::string resultStr; for (const auto &clsInfo : clsInfos) { resultStr += std::to_string(clsInfo.classId) + "," + clsInfo.className + "," + "confidence: " + std::to_string(clsInfo.confidence) + ";"; } LogInfo << fileName << "->Result: " << resultStr; batchIndex++; } return APP_ERR_OK;}同时,在Process函数中,将SaveResult替换成ShowResult方法调用Process函数APP_ERROR Resnet18Classify::Process(const std::string &imgPath) { std::vector inputs = {}; std::string inputIdsFile = imgPath; APP_ERROR ret = ReadInputTensor(inputIdsFile, &inputs); if (ret != APP_ERR_OK) { LogError << "Read input ids failed, ret=" << ret << "."; return ret; } std::vector outputs = {}; ret = Inference(inputs, outputs); if (ret != APP_ERR_OK) { LogError << "Inference failed, ret=" << ret << "."; return ret; } std::vector> BatchClsInfos = {}; ret = PostProcess(outputs, BatchClsInfos); if (ret != APP_ERR_OK) { LogError << "PostProcess failed, ret=" << ret << "."; return ret; } ret = ShowResult(imgPath, BatchClsInfos); if (ret != APP_ERR_OK) { LogError << "Show result failed, ret=" << ret << "."; return ret; } return APP_ERR_OK;}Init函数中,注释掉生成txt文本的代码全部完成后,就可以进行下一步了!6.2.5 项目编译业务代码写好之后,我们需要编译整个文件点击编译后,等待下方提示编译成功后,就可以运行代码了!编译好的文件在out目录下6.2.6 代码运行由于Resnet18用的预处理方法是PIL,C++中没有相应的图片处理方法,为了精度更高一些,我们需要稍微麻烦一下,使用python编写一个预处理方法prepreocess.py,将处理后的图片再传给C++代码运行preprocess.py文件可以在下载好的代码中 ./infer/util中找到,根据实际需求稍作修改就可以使用。因此我们先准备一张测试图片,比如下面这张,命名为test.jpg①:先通过preprocess.py预处理生成test.bin②:运行项目先配置运行命令点击运行7 可参考的代码我已经将自己写好的项目上传到了GitHub上,有需要可以参考Python版SDK应用开发:cid:link_12C++版SDK应用开发:cid:link_118 FAQ模型运行报错?在模型转换的时候,是否注意了选择FP32? 默认状态下是FP16的方式进行转换。或者也可以直接将下载到的模型中的om模型文件直接拿来用如果想换个数据集怎么办?可以参考modelzoo中,下载ResNet18模型的地方的说明。可以通过ModelArts训练快速进行迁移学习。Python找不到模型路径?注意在pipeline流程编排中,模型路径若使用的是相对路径,则是相对main.py文件的位置的相对路径,而不是相对于pipeline文件的相对路径。因此注意根据自己的main.py文件位置修改模型的路径C++找不到模型路径?检查自己此时代码中的模型路径是否和已经编译好的代码路径一致,C++已经编译完成后再修改代码,则需要重新编译才能运行修改后结果。No Python interpreter configured for the module?SDK版本获取失败?注意这两个地方要选子路径,选择父路径会找不到版本号9 结语MindStudio官方文档非常详细,不一而足。所以在一开始查看的时候难免会有种觉得东西太多,不知道从哪里下手的感觉。但随着开发过程的推进,逐渐发现官方文档才是开发者最应该参考的内容。此外,遇到问题时,也可以在MindStudio 昇腾社区论坛中得到许多启发,相信大家在自己动手的过程中也能体会到这一点。Now, it's time to get your hands dirty!
  • [经验分享] 使用MindStudio进行MindX SDK ESRGAN应用开发
    一、MindStudio介绍与安装相关课程:昇腾全流程开发工具链(MindStudio)本课程主要介绍MindStudio在昇腾AI开发中的使用,作为昇腾AI全栈中的全流程开发工具链,提供覆盖训练模型、推理应用和自定义算子开发三个场景下端到端工具,极大提高开发效率。建议开发前,学习该课程的第1章和第3章,可以少走很多弯路!!!MindStudio介绍MindStudio提供您在AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够帮助您在一个工具上就能高效便捷地完成AI应用开发。MindStudio采用了插件化扩展机制,开发者可以通过开发插件来扩展已有功能。          (1)功能简介针对安装与部署,MindStudio提供多种部署方式,支持多种主流操作系统,为开发者提供最大便利。针对网络模型的开发,MindStudio支持TensorFlow、Pytorch、MindSpore框架的模型训练,支持多种主流框架的模型转换。集成了训练可视化、脚本转换、模型转换、精度比对等工具,提升了网络模型移植、分析和优化的效率。针对算子开发,MindStudio提供包含UT测试、ST测试、TIK算子调试等的全套算子开发流程。支持TensorFlow、PyTorch、MindSpore等多种主流框架的TBE和AI CPU自定义算子开发。针对应用开发,MindStudio集成了Profiling性能调优、编译器、MindX SDK的应用开发、可视化pipeline业务流编排等工具,为开发者提供了图形化的集成开发环境,通过MindStudio能够进行工程管理、编译、调试、性能分析等全流程开发,能够很大程度提高开发效率。(2)功能框架MindStudio功能框架如图1-1所示,目前含有的工具链包括:模型转换工具、模型训练工具、自定义算子开发工具、应用开发工具、工程管理工具、编译工具、流程编排工具、精度比对工具、日志管理工具、性能分析工具、设备管理工具等多种工具。图1-1 工具链功能架构     (3)工具功能MindStudio工具中的主要几个功能特性如下:工程管理:为开发人员提供创建工程、打开工程、关闭工程、删除工程、新增工程文件目录和属性设置等功能。SSH管理:为开发人员提供新增SSH连接、删除SSH连接、修改SSH连接、加密SSH密码和修改SSH密码保存方式等功能。应用开发:针对业务流程开发人员,MindStudio工具提供基于AscendCL(Ascend Computing Language)和集成MindX SDK的应用开发编程方式,编程后的编译、运行、结果显示等一站式服务让流程开发更加智能化,可以让开发者快速上手。自定义算子开发:提供了基于TBE和AI CPU的算子编程开发的集成开发环境,让不同平台下的算子移植更加便捷,适配昇腾AI处理器的速度更快。离线模型转换:训练好的第三方网络模型可以直接通过离线模型工具导入并转换成离线模型,并可一键式自动生成模型接口,方便开发者基于模型接口进行编程,同时也提供了离线模型的可视化功能。日志管理:MindStudio为昇腾AI处理器提供了覆盖全系统的日志收集与日志分析解决方案,提升运行时算法问题的定位效率。提供了统一形式的跨平台日志可视化分析能力及运行时诊断能力,提升日志分析系统的易用性。性能分析:MindStudio以图形界面呈现方式,实现针对主机和设备上多节点、多模块异构体系的高效、易用、可灵活扩展的系统化性能分析,以及针对昇腾AI处理器的性能和功耗的同步分析,满足算法优化对系统性能分析的需求。设备管理:MindStudio提供设备管理工具,实现对连接到主机上的设备的管理功能。精度比对:可以用来比对自有模型算子的运算结果与Caffe、TensorFlow、ONNX标准算子的运算结果,以便用来确认神经网络运算误差发生的原因。开发工具包的安装与管理:为开发者提供基于昇腾AI处理器的相关算法开发套件包Ascend-cann-toolkit,旨在帮助开发者进行快速、高效的人工智能算法开发。开发者可以将开发套件包安装到MindStudio上,使用MindStudio进行快速开发。Ascend-cann-toolkit包含了基于昇腾AI处理器开发依赖的头文件和库文件、编译工具链、调优工具等。2. MindStudio安装具体安装操作请参考:MindStudio安装指南 MindStudio环境搭建指导视频        (1)场景介绍纯开发场景(分部署形态):在非昇腾AI设备上安装MindStudio和Ascend-cann-toolkit开发套件包。可作为开发环境仅能用于代码开发、编译等不依赖于昇腾设备的开发活动(例如ATC模型转换、算子和推理应用程序的纯代码开发)。如果想运行应用程序或进行模型训练等,需要通过MindStudio远程连接功能连接已部署好运行环境所需软件包的昇腾AI设备。开发运行场景(共部署形态):在昇腾AI设备上安装MindStudio、Ascend-cann-toolkit开发套件包、npu-firmware安装包、npu-driver安装包和AI框架(进行模型训练时需要安装)。作为开发环境,开发人员可以进行普通的工程管理、代码编写、编译、模型转换等功能。同时可以作为运行环境,运行应用程序或进行模型训练。(2)软件包介绍MindStudio:提供图形化开发界面,支持应用开发、调试和模型转换功能,同时还支持网络移植、优化和分析等功能。Ascend-cann-toolkit:开发套件包。为开发者提供基于昇腾AI处理器的相关算法开发工具包,旨在帮助开发者进行快速、高效的模型、算子和应用的开发。开发套件包只能安装在Linux服务器上,开发者可以在安装开发套件包后,使用MindStudio开发工具进行快速开发。二、MindX SDK介绍与安装MindX SDK介绍MindX SDK提供昇腾AI处理器加速的各类AI软件开发套件(SDK),提供极简易用的API,加速AI应用的开发。应用开发旨在使用华为提供的SDK和应用案例快速开发并部署人工智能应用,是基于现有模型、使用pyACL提供的Python语言API库开发深度神经网络应用,用于实现目标识别、图像分类等功能。图2-1 MindX SDK总体结构通过MindStudio实现SDK应用开发分为基础开发与深入开发,通常情况下用户关注基础开发即可,基础开发主要包含如何通过现有的插件构建业务流并实现业务数据对接,采用模块化的设计理念,将业务流程中的各个功能单元封装成独立的插件,通过插件的串接快速构建推理业务。mxManufacture & mxVision关键特性:配置文件快速构建AI推理业务。插件化开发模式,将整个推理流程“插件化”,每个插件提供一种功能,通过组装不同的插件,灵活适配推理业务流程。提供丰富的插件库,用户可根据业务需求组合Jpeg解码、抠图、缩放、模型推理、数据序列化等插件。基于Ascend Computing Language(ACL),提供常用功能的高级API,如模型推理、解码、预处理等,简化Ascend芯片应用开发。支持自定义插件开发,用户可快速地将自己的业务逻辑封装成插件,打造自己的应用插件。2. MindX SDK安装步骤1 Windows场景下基于MindStuido的SDK应用开发,请先确保远端环境上MindX SDK软件包已安装完成,安装方式请参见《mxManufacture 用户指南》 和《mxVision 用户指南》 的“使用命令行方式开发”>“安装MindX SDK开发套件”章节。步骤2 在Windows本地进入工程创建页面,工具栏点击File > Settings > Appearance & Behavior > System Settings > MindX SDK进入MindX SDK管理界面。界面中MindX SDK Location为软件包的默认安装路径,默认安装路径为“C:\Users\用户名\Ascend\mindx_sdk”。单击Install SDK进入Installation settings界面,如图2-2。图2-2 MindX SDK管理界面如图2-3所示,为MindX SDK的安装界面,各参数选择如下:Remote Connection:远程连接的用户及IP。Remote CANN Location:远端环境上CANN开发套件包的路径,请配置到版本号一级。Remote SDK Location:远端环境上SDK的路径,请配置到版本号一级。IDE将同步该层级下的include、opensource、python、samples文件夹到本地Windows环境,层级选择错误将导致安装失败。Local SDK Location:同步远端环境上SDK文件夹到本地的路径。默认安装路径为“C:\Users\用户名\Ascend\mindx_sdk”。图2-3 MindX SDK安装界面图2-4 安装完成后的MindX SDK管理界面步骤3 单击OK结束,返回SDK管理界面,可查看安装后的SDK的信息,如图2-4所示,可单击OK结束安装流程。三、可视化流程编排介绍SDK基础概念通过stream(业务流)配置文件,Stream manager(业务流管理模块)可识别需要构建的element(功能元件)以及element之间的连接关系,并启动业务流程。Stream manager对外提供接口,用于向stream发送数据和获取结果,帮助用户实现业务对接。Plugin(功能插件)表示业务流程中的基础模块,通过element的串接构建成一个stream。Buffer(插件缓存)用于内部挂载解码前后的视频、图像数据,是element之间传递的数据结构,同时也允许用户挂载Metadata(插件元数据),用于存放结构化数据(如目标检测结果)或过程数据(如缩放后的图像)。图4-1 SDK业务流程相关基础单元   2. 可视化流程编排MindX SDK实现功能的最小粒度是插件,每一个插件实现特定的功能,如图片解码、图片缩放等。流程编排是将这些插件按照合理的顺序编排,实现负责的功能。可视化流程编排是以可视化的方式,开发数据流图,生成pipeline文件供应用框架使用。图 4-2 为推理业务流Stream配置文件pipeline样例。配置文件以json格式编写,用户必须指定业务流名称、元件名称和插件名称,并根据需要,补充元件属性和下游元件名称信息。步骤1 进入工程创建页面,用户可通过以下方式开始流程编排。在顶部菜单栏中选择Ascend>MindX SDK Pipeline,打开空白的pipeline绘制界面绘制,也可打开用户自行绘制好的pipeline文件,如图4-3。绘制界面分为左侧插件库、中间编辑区、右侧插件属性展示区,具体参考pipeline绘制 。步骤2 在左侧编辑框选择插件,拖动至中间编辑框,按照用户的业务流程进行连接。如果拖动错误插件或者错误连线,选中错误插件或者错误连线单击键盘Del键删除。用户自定义的流水线绘制完成后,选中流水线中的所有插件,右键选择Set Stream Name设置Stream名称,如果有多条流水线则需要对每一条流水线设置Stream名称。绘制完成单击Save保存。图4-2 Detection and Classification配置pipeline样例图4-3 pipeline绘制界面四、ESRGAN介绍超分辨率生成对抗网络(SRGAN)是一项能够在单幅超分辨率图像中生成逼真纹理的开创性工作。 然而,产生幻觉的细节往往伴随着令人不快的伪影。 为了进一步提高视觉质量,我们深入研究了SRGAN的三个关键组成部分——网络结构、对抗损失和感知损失,并对它们进行改进,得到了一个增强的SRGAN (ESRGAN)。 特别地,ESRGAN引入了没有批处理规格化的残差-残差密集块(RRDB)作为基本网络构建单元。 此外,ESRGAN借鉴了GAN的思想,让鉴别器预测相对真实而不是绝对值。最后,ESRGAN利用激活前的特征来改善知觉损失,为亮度一致性和纹理恢复提供更强的监督。得益于这些改进,ESRGAN实现了比SRGAN更好的视觉质量和更真实和自然的纹理,并赢得了PIRM2018-SR挑战赛的第一名。如图所示,ESRGAN网络结构,如图4-1所示:图4-1 ESRGAN网络结构代码地址:cid:link_7SDK相关工程目录结构,如图4-2所示:图4-2 SDK相关工程目录结构五、代码文件、推理数据集及模型下载代码文件下载代码地址:cid:link_7下载代码存放到本地,在本项目中只使用MindX SDK功能,所以只用到infer/sdk中的代码。    2.推理数据集下载数据集使用的是Set5,在infer/sdk/目录下先创建两个文件夹“./Set5/HR/”, “./Set5/LR/”,将以“…HR.png”命名的图片保存到“./Set5/HR/”文件夹中, 以“…LR.png”命名的图片保存到“./Set5/LR/”文件夹中。      3.模型文件(*.ckpt)下载cid:link_0先在910上导出air模型文件,保存到infer/sdk目录下。六、创建工程步骤1在顶部菜单栏中选择File > open,选择如图所示,sdk这一级的目录,步骤2 在顶部菜单栏中选择Ascend > Convert To Ascend Projec,进入如图6-1所示页面,各参数选择如图所示,点击OK,将该项目转换为Ascend MindX SDK App。图6-1 转换为Ascend MindX SDK App七、模型转换功能介绍及操作步骤讲解用户使用Caffe/TensorFlow等框架训练好的第三方模型,可通过ATC工具将其转换为昇腾AI处理器支持的离线模型(*.om文件),模型转换过程中可以实现算子调度的优化、权重数据重排、内存使用优化等,可以脱离设备完成模型的预处理,详细架构如图7-1所示。图7-1 ATC工具功能架构在本项目中,要将mindspore框架下训练好的模型(*.air文件),转换为昇腾AI处理器支持的离线模型(*.om文件),具体步骤如下:步骤1 点击Ascend > Model Converter,进入模型转换界面,参数配置如图7-2所示,若没有CANN Machine,请参见第八章第一节CANN安装。图7-2 模型转换界面1各参数解释如下表所示:CANN MachineCANN的远程服务器Model File*.air文件的路径(可以在本地,也可以在服务器上)Model Name生成的om模型名字Output Path生成的om模型保存在本地的路径图7-3 模型转换界面2图7-4 模型转换界面3步骤2 点击Next进入图7-3界面,该项目数据不需要预处理,直接点击Next,进入图7-4界面,再点击Finish开始模型转换。步骤3 等待出现如图7-5所示的提示,模型转换成功图7-5 模型转换成功步骤4 双击转换成功的om模型文件,可以查看网络结构。如图7-6所示图7-6 查看模型网络结构八、运行工程操作步骤讲解步骤1 修改“sdk/config/esrgan.pipeline”中的参数,具体操作如图8-1所示;图8-1 修改pipeline中*.om文件路径步骤2  在MindStudio工程界面,依次选择“Run > Edit Configurations...”,进入运行配置页面。选择“Ascend App > 工程名”配置应用工程运行参数,图8-2为配置示例。配置完成后,单击“Apply”保存运行配置,单击“OK”,关闭运行配置窗口。图8-2 工程推理工程运行参数配置Deployment远程服务器Executable运行文件Command Arguments运行参数在本工程中,推理时运行文件选择main.py,运行参数为--img_path [LR_path] --pipeline_path [pipeline_path] --infer_result_dir [result_path]参数解释如下表:参数解释我的设置img_path推理图片路径./Set5/LR/pipeline_pathPipeline文件路径./config/esrgan.pipelineinfer_result_dir推理结果保存路径./infer_result/步骤3 点击运行,出现如图8-3所示提示,即为运行成功,infer_result文件夹中即为推理结果,保存为二进制形式。图8-3 推理操作过程步骤4 配置后处理运行程序,在MindStudio工程界面,依次选择“Run > Edit Configurations...”,进入运行配置页面,如图8-4所示,点击“+”,后选择Python(后处理可以直接在本地运行),如图8-5所示。图8-4 运行配置界面图8-5 选择本地Python解释器图8-6 运行后处理相关配置Script path运行文件路径Parameters运行时的参数如图8-6所示,运行文件为postprocess.py,运行参数为:--HR_path [HR_image_path] --predict_result [infer_result] --result_path [save_image_path]相关参数解释及设置参数解释我的设置HR_path数据集中高分辨率图片./Set5/HR/predict_result步骤3中的推理结果./infer_result/result_path最终结果保存的目录./sdk_result_img/步骤5 点击运行,出现如图8-7所示提示,即为运行成功,sdk_result_img文件夹中即为最终结果,PSNR为推理生成的图片与原图片对比的指标。图8-7 运行后处理程序 步骤6 结果分析,如图8-8所示,为ESRGAN生成的高分辨率图像与原图像对比,可以看到,在一些细节上生成的图像在细节和纹理上已经很清晰。图8-8 ESRGAN生成的高分辨率图像与原图像对比​九、遇见的问题在使用MindStudio时,遇到问题,可以登陆MindStudio昇腾论坛进行互动,提出问题,会有专家老师为你解答。模型转换时,没有CANN Machine图9-1 CANN管理界面解决方案:按以下步骤,重新安装CANN Machine步骤1 点击File>Settings>Appearance & Behavior > System Settings > CANN,进入CANN管理界面,如图9-1所示:步骤2 点击Change CANN,进入Remote CANN Setting界面,如图9-2所示重新安装CANN,点击Finish,安装CANN。9-2 Remote CANN Setting界面图9-3 安装CANN完成参数解释如下表:Remote Connection远程服务器IPRemote CANN location远程服务器中CANN路径步骤3 完成CANN安装,点击OK,重启MindStudio,如图9-3所示。MindStudio导入应用工程后,提示“No Python interpreter configured for the module”解决方案:步骤1 在顶部菜单栏中选择File > Project Structure,在Project Structure窗口中,点击Platform Settings > SDKs,点击上方的“+”添加Python SDK,从本地环境中导入Python,如图9-4所示。图9-4 导入Python SDK步骤2 点击Project Settings > Project,选择上一步添加的Python SDK,如图9-5所示。图9-5 设置Project SDK步骤3 点击Project Settings > Modules,选中“MyApp”,点击“+”后选择Python,为Python Interpreter选择上述添加的Python SDK。点击OK完成应用工程Python SDK配置,如图9-6所示。图9-6 选择Python SDK
  • [经验分享] 使用MindStudio进行SE-ResNext101-Pytorch模型的开发
    基于MindStudio完成SE-ResNext101-Pytorch模型的开发视频链接可参见:cid:link_3一、PyTorch环境搭建和配置1.PyTorch简介​PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch。它是一个基于Python的可续计算包,提供两个高级功能:1、具有强大的GPU加速的张量计算(如NumPy)。2、包含自动求导系统的深度神经网络。PyTorch是专门针对 GPU 加速的深度神经网络(DNN)编程。Torch 是一个经典的对多维矩阵数据进行操作的张量(tensor )库,在机器学习和其他数学密集型应用有广泛应用。​ PyTorch具有如下优点:​ 1.简洁:代码易于理解,PyTorch的源码只有TensorFlow的十分之一左右,更少的抽象、更直观的设计使得PyTorch的源码十分易于阅读。​ 2.速度:PyTorch 的灵活性不以速度为代价,在许多评测中,PyTorch 的速度表现胜过 TensorFlow和Keras 等框架。​ 3.易用:PyTorch 是所有的框架中面向对象设计的最优雅的一个。PyTorch的面向对象的接口设计来源于Torch,而Torch的接口设计以灵活易用而著称,Keras作者最初就是受Torch的启发才开发了Keras。PyTorch继承了Torch的衣钵,尤其是API的设计和模块的接口都与Torch高度一致。PyTorch的设计最符合人们的思维,它让用户尽可能地专注于实现自己的想法,即所思即所得,不需要考虑太多关于框架本身的束缚。​ 4.活跃的社区:PyTorch 提供了完整的文档,循序渐进的指南,作者亲自维护的论坛供用户交流和求教问题。Facebook 人工智能研究院对 PyTorch 提供了强力支持。​ PyTorch(Caffe2) 通过混合前端,分布式训练以及工具和库生态系统实现快速,灵活的实验和高效生产。PyTorch 和 TensorFlow 具有不同计算图实现形式,TensorFlow 采用静态图机制(预定义后再使用),PyTorch采用动态图机制(运行时动态定义)。PyTorch 具有以下高级特征:混合前端:新的混合前端在急切模式下提供易用性和灵活性,同时无缝转换到图形模式,以便在C ++运行时环境中实现速度,优化和功能。分布式训练:通过利用本地支持集合操作的异步执行和可从Python和C ++访问的对等通信,优化了性能。   Python优先: PyTorch为了深入集成到Python中而构建的,因此它可以与流行的库和Cython和Numba等软件包一起使用。  丰富的工具和库:活跃的研究人员和开发人员社区建立了丰富的工具和库生态系统,用于扩展PyTorch并支持从计算机视觉到强化学习等领域的开发。本机ONNX支持:以标准ONNX(开放式神经网络交换)格式导出模型,以便直接访问与ONNX兼容的平台,运行时,可视化工具等。   C++前端:C++前端是PyTorch的纯C++接口,它遵循已建立的Python前端的设计和体系结构。它旨在实现高性能,低延迟和裸机C++应用程序的研究。 使用GPU和CPU优化的深度学习张量库。2.Ascend PyTorch基于PyTorch框架的动态图概念,参考对于友商CUDNN、CPU、CUDA、MKL、MKLDNN等算子的实现和库的支持的方式,通过调用单一Ascend TBE算子或调用多个Ascend TBE算子组合的方式,实现PyTorch框架对Ascend NPU的支持。方案中,Ascend NPU被当做是和GPU同一类别的设备,包括内存管理,设备管理,以及算子调用实现。因此在适配修改方案中,会仿照PyTorch结构中原有的CUDA形式,做一个NPU的扩展。3.AscendPyTorch环境安装配置选择合适的AscendPytorch版本安装Pytorch依赖环境如果使用非root用户安装,用户需要在本步骤的每句命令后加**--user**,示例如:pip3 install pyyaml --user。pip install pyyaml pip install wheel编译安装PyTorch和昇腾插件首先安装官方torch包,然后编译安装插件。#x86_64 pip3 install torch==1.8.1 #若使用pip命令安装cpu版本PyTorch报错,请手动下载whl包安装,下载地址:(https://download.pytorch.org/whl/torch) #aarch64 git clone -b v1.8.1 https://github.com/pytorch/pytorch.git --depth=1 pytorch_v1.8.1 #进入源码安装包获取被动依赖代码。 cd pytorch_v1.8.1 git submodule sync git submodule update --init --recursive #执行编译安装。 python3 setup.py install编译生成pytorch插件的二进制安装包。git clone -b master cid:link_7.git cd pytorch # 下载master分支代码,进入插件根目录 # 指定python版本编包方式: bash ci/build.sh --python=3.7 # 或 bash ci/build.sh --python=3.8 # 或 bash ci/build.sh --python=3.9然后安装pytorch/dist下生成的插件torch_npu包,{arch}为架构名称。可以进入目录下查看pip install --upgrade dist/torch_npu-1.8.1rc1-cp37-cp37m-linux_{arch}.whl最后运行环境变量在pytorch目录下执行设置环境变量source env.sh具体安装链接参考cid:link_7二、MindStudio工具简介和安装1.MindStudio工具简介​ MindStudio是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,包括网络模型移植、应用开发、推理运行及自定义算子开发等功能。通过MindStudio能够进行工程管理、编译、调试、运行、性能分析等全流程开发,提高开发效率。同时,MindStudio是一套基于IntelliJ框架的开发工具链平台,提供了应用开发、调试、模型转换功能,同时还提供了网络移植、优化和分析功能,为用户开发应用程序带来了极大的便利。MindStudio提供以下4项服务功能。​ 针对安装与部署,MindStudio提供多种部署方式,支持多种主流操作系统,为开发者提供最大便利。​ 针对算子开发,MindStudio提供包含UT测试、ST测试、TIK算子调试等的全套算子开发流程。支持TensorFlow、PyTorch、MindSpore等多种主流框架的TBE和AI CPU自定义算子开发。​ 针对网络模型的开发,MindStudio支持TensorFlow、PyTorch、MindSpore框架的模型训练,支持多种主流框架的模型转换。集成了训练可视化、脚本转换、模型转换、精度比对等工具,提升了网络模型移植、分析和优化的效率。​ 针对应用开发,MindStudio集成了Profiling性能调优、编译器、MindX SDK的应用开发、可视化pipeline业务流编排等工具,为开发者提供了图形化的集成开发环境,通过MindStudio能够进行工程管理、编译、调试、性能分析等全流程开发,能够很大程度提高开发效率。​ MindStudio功能框架如下图所示,目前含有的工具链包括:模型转换工具、模型训练工具、自定义算子开发工具、应用开发工具、工程管理工具、编译工具、流程编排工具、精度比对工具、日志管理工具、性能分析工具、设备管理工具等多种工具。MindStudio具有如下功能:​ 1.TBE算子开发​ 支持自定义TBE(Tensor Boost Engine)算子开发,利用TBE的性能优化和代码生成能力,实现充分发挥昇腾AI处理器极致性能的自定义算子。​ ① TBE算子工程创建、代码开发​ ② TBE算子编译、运行、验证和部署​ ③ TBE算子仿真运行与性能调优,辅助识别算子性能瓶颈​ 2.模型转换​ 将开源框架的网络模型(如Caffe、TensorFlow等)转换成昇腾AI处理器支持的离线模型,模型转换过程中可以实现算子调度的优化、权值数据重排、内存使用优化等。​ ① 模型转换​ ② 模型可视化,查看模型结构和算子属性​ ③ 支持AIPP硬件图像预处理​ 3.AI应用开发​ 支持AI应用开发,通过使用开放的模型/算子加载与执行、媒体数据处理等C++ API,支撑用户开发深度神经网络应用,用于实现目标识别、图像分类等功能。​ ① 应用工程创建、代码开发(C++)​ ② 工程编译、上板运行、结果输出​ ③ 工程的单步调试​ ④ 应用性能分析,辅助应用性能瓶颈定位​ 4.性能调优​ 提供高效、易用、可灵活扩展的系统化性能分析工具,便于快速识别产品的关键性能瓶颈并提出针对性能优化的建议,实现产品的极致性能。​ ① 性能数据自动采集与Profiling​ ② 性能Timeline视图,查看运行的Stream和Task​ ③ 性能统计视图分析,识别最耗时的算子​ 5.算子比对​ 为了定位/解决模型的精度问题,算子比对工具提供了将华为自有模型算子的运算结果与Caffe标准算子的运算结果进行比对的功能,以便快速确认误差发生的原因。​ ① 整网或者指定网络层输出数据​ ② 整网算子比对和分析​ ③ Lower Bound比对算法,Vector比对算法(余弦相似度、最大绝对误差、累积相对误差、欧式相对距离等)​ 6.智能代码编辑​ 支持C/C++、Python语言语法高亮、定义跳转、自动完成、参数提示。2.MindStudio安装​ MindStudio支持Ubuntu,Euler和Cent OS多种操作系统。MindStudio可以在Ubuntu服务器上使用原生桌面自带的终端gnome-terminal进行安装,也可以在Windows服务器上通过SSH登录到Ubuntu服务器进行安装,因为MindStudio是一款GUI程序,所以在Windows服务器上通过SSH登录到Ubuntu服务器进行安装时,需要使用集成了Xserver的SSH终端(比如mobaxterm)。2.1 安装流程step1:环境要求step2:准备软件包step3:安装依赖step4:安装MindStudio2.2 环境要求将MindStudio安装在Windows服务器上时,Windows服务器为本地环境,Linux服务器为远端环境。本地环境要求:Windows 10 x86_64操作系统本地环境依赖:Python(版本要求:3.7~3.9)MinGWCMakeACLib(可选,Windows工控机场景开发Windows应用)2.3 准备软件包1.软件安装前,请获取所需软件包和对应的数字签名文件。(1)MindStudio_5.0.RC1_win.exe,MindStudio安装包,需要安装后使用(2)MindStudio_5.0.RC1_win.zip,MindStudio免安装压缩包,解压后可直接运行获取链接:cid:link_52.为了防止软件包在传递过程或存储期间被恶意篡改,下载软件包时需下载对应的数字签名文件用于完整性验证。3.安装MindStudio的两种方式(1)以免安装压缩包.zip文件形式,直接解压到相应文件目录即可(2)下载exe文件以及对应的数字签名文件,2.4 安装依赖安装python依赖1.在Python官网下载Python安装包到Windows本地系统。MindStudio目前支持Python版本为3.7~3.9,下面以安装Python3.7.5依赖包为例。选择Windows x86-64 executable installer。其他安装细节请参考链接:cid:link_42.打开系统命令行,输入python -V命令确认python版本是否为3.7.5。安装Python3相关依赖。pip install xlrd==1.2.0 pip install absl-py pip install numpy如若返回如下信息,则表示安装成功。Successfully installed xlrd-1.2.0 Successfully installed absl-py-0.12.0 six-1.15.0 Successfully installed numpy-1.20.1安装MinGW依赖1.下载最新的MinGW安装包,根据系统选择对应版本,例如windows64位选择x86_64-posix-seh。2.解压MinGW安装包到自定义路径。3.将MinGW安装路径添加到系统变量中。安装细节参见链接:cid:link_44.打开系统命令行,输入gcc -v命令。 当界面提示“gcc version x.x.x (x86_64-posix-sjlj-rev0, Built by MinGW-W64 project)”信息时,表示安装成功。安装CMakeCMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个库。可以登录CMake官网下载CMake。以msi格式软件包为例,安装步骤如下:单击快捷键“win+R”,输入cmd,单击快捷键“Ctrl+Shift+Enter”,进入管理员权限命令提示符。若弹出“用户帐户控制”提示窗口,单击“是”。执行以下命令,安装软件包:msiexec /package *{path}*{name}.msi例如:msiexec /package D:\cmake-3.16.5-win64-x64.msi安装。推荐安装版本3.16.5-win64-x64安装细节参见链接: cid:link_4安装ACLlib包如果用户需要开发Windows应用,并在本地编译或运行(已安装Atlas加速卡的Windows服务器才能运行),请安装此包和对应的依赖。详细操作请参见《CANN Windows版用户指南》的“ACLlib安装与卸载”章节和“配置开发环境”章节。安装MindStudio安装参考链接:cid:link_1启动MindStudio,如果没有报错信息且能正常进入欢迎界面如图,则表示MindStudio安装成功三、训练工程创建,工程功能以及相关菜单介绍1.启动MindStudio。2.本文以SE-ResNeXt101模型为例,介绍使用MindStudio进行PyTorch模型训练开发。下载SE-ResNeXt101项目代码,项目地址为:cid:link_03.新建Ascend Training工程。工程信息由用户自行根据实际配置。单击“Next”,进入训练工程选择界面。4.选择PyTorch Project5.项目结构如图所示。该项目结构目录是将下载的SE-ResNext101项目拷贝到新建的工程目录下生成。6.代码目录结构如图所示├─ SE-ResNext-101-32x4d │─ demo.py #(可选)用于运行单p在线推理 │─ main.py #主文件 │─ models.py #网络模型文件 │─ README.md #SE-ResNext101模型介绍相关文件 │─ requirements.txt #Python依赖库信息 └─test │─ env_npu.sh #标准的npu环境变量 │─ train_eval_8p.sh #(可选)运行8p的eval脚本 │─ train_finetune_1p.sh #1p 模型迁移脚本,运行一定step,主要为功能实现,能够支持加载预训练模型修改class_num进行运行,一般将class_num设置为默认数据集class_num+1即可 │─ train_full_1p.sh #(可选)1p 完整训练脚本,要求能够复现精度性能,若使用8P脚本对齐精度则1P脚本非必须 │─ train_full_8p.sh #8p 完整训练脚本,要求能够复现精度性能 │─ train_performance_1p.sh #1p 性能脚本,运行一定step,得到性能数据,运行时长应该控制在30min内或1000step以内 │─ train_performance_8p.sh #8p 性能脚本,运行一定step,得到性能数据,运行时长应该控制在30min内或1000step以内7.点击File->Projects Structure->Add Python SDK->SSH Interpreter->Deploy8.点击File->settings->tools->deployment,配置映射。点击左上角加号,输入连接名称。Local Path要求的是填入本地的项目名称路径,Deployment Path的是部署到服务器上的项目名称,这两个可以保持一致,也可以不保持一致。excluded paths(非必需)为配置忽略路径,表示忽略的项目文件不会上传到远程服务器。9.选择所需要的python解释器。Name的值可以随意取。完成配置。等待进度条结束,将会自动上传项目到远程服务器。 Tools->Deployment-> 勾选Automatic Upload,可以在每次本地文件保存后,自动同步项目到服务器。至此,本地项目连接到远程服务器的步骤完成。四、使用MindStudio训练SE-ResNext101模型1.模型介绍及数据集论文名称:Squeeze-and-Excitation Networks项目地址:cid:link_0模型架构:SE-ResNeXt101-32x4d是在Resenext101-32x4d模型基础上增加了SE模块。数据集:ImageNet数据集ImageNet是一个计算机视觉系统识别项目,是目前世界上图像识别最大的数据库。是美国斯坦福的计算机科学家,模拟人类的识别系统建立的。ImageNet数据集包含1000个类别,里面包含120多万的自然图像,大概有150G。且评价指标是固定的top1、top5等。ImageNet数据集下载链接:cid:link_82.代码介绍运用mmclassification,mmclassification是一款基于 PyTorch 的开源图像分类工具箱, 集成了常用的图像分类网络,将数据加载,模型骨架,训练调参,流程等封装为模块调用。Github链接如下: cid:link_2seresnext101_32x4d.py 配置文件如下:将模型的结构参数以字典的形式保存 # model settings model = dict( type='ImageClassifier', backbone=dict( type='SEResNeXt', depth=101, num_stages=4, out_indices=(3, ), groups=32, width_per_group=4, se_ratio=16, style='pytorch'), neck=dict(type='GlobalAveragePooling'), head=dict( type='LinearClsHead', num_classes=1000, in_channels=2048, loss=dict(type='CrossEntropyLoss', loss_weight=1.0), topk=(1, 5), )) model.py详细模型文件,SE-ResNext101模型架构如下def forward(self, x): x = self.conv1(x) x = self.bn1(x) x = self.relu(x) x = self.maxpool(x) x = self.layer1(x) x = self.layer2(x) x = self.layer3(x) x = self.layer4(x) x = self.avgpool(x) x = x.view(x.size(0), -1) x = self.fc(x) return xmain.py主文件的参数设置def main(): parser = argparse.ArgumentParser(description='PyTorch Se-ResNeXt101 ImageNet Training') # dataset setting parser.add_argument('--data_path', metavar='DIR', default='/opt/npu/imagenet', help='path to dataset') parser.add_argument('--workers', default=192, type=int, metavar='N', help='number of data loading workers (default: 4)') # training setting parser.add_argument('--epochs', default=100, type=int, metavar='N', help='number of total epochs to run') parser.add_argument('--batch-size', default=128, type=int, metavar='N', help='mini-batch size (default: 256), this is the total ' 'batch size of all GPUs on the current node when ' 'using Data Parallel or Distributed Data Parallel') parser.add_argument('--lr', default=0.6, type=float, metavar='LR', help='initial learning rate', dest='lr') parser.add_argument('--momentum', default=0.9, type=float, metavar='M', help='momentum') parser.add_argument('--weight-decay', default=1e-4, type=float, metavar='W', help='weight decay (default: 1e-4)', dest='weight_decay') # apex setting parser.add_argument('--amp', default=True, action='store_true', help='use amp to train the model') parser.add_argument('--opt-level', default="O2", type=str, help='apex optimize level') parser.add_argument('--loss-scale-value', default=None, type=float, help='static loss scale value') parser.add_argument('--combine-grad', default=True, action='store_true', help='use amp to train the model') # basic distribution setting parser.add_argument('--ddp', dest='ddp', action='store_true', help='use distribution training') parser.add_argument('--nodes', default=1, type=int, help='number of data loading workers (default: 4)') parser.add_argument('--node_rank', default=0, type=int, help='ranking within the nodes') parser.add_argument('--device_list', default='0,1,2,3,4,5,6,7', type=str, help='device id list') parser.add_argument('--seed', default=None, type=int, help='seed for initializing training. ') parser.add_argument('--print-freq', default=10, type=int, metavar='N', help='print frequency (default: 10)')模型训练过程:def train(train_loader, model, criterion, optimizer, epoch, deviceid, args): # switch to train mode batch_time = AverageMeter('Time', ':6.3f') data_time = AverageMeter('Data', ':6.3f') losses = AverageMeter('Loss', ':.4e') top1 = AverageMeter('Acc@1', ':6.2f') top5 = AverageMeter('Acc@5', ':6.2f') progress = ProgressMeter( len(train_loader), [batch_time, data_time, losses, top1, top5], prefix="Epoch: [{}]".format(epoch)) # switch to train mode model.train() optimizer.zero_grad() end = time.time() for i, (images, target) in enumerate(train_loader): images = images.npu(non_blocking=True) target = target.long().npu(non_blocking=True) if args.mainprocess: # measure data loading timetime data_time.update(time.time() - end) output = model(images) loss = criterion(output, target.long()) with amp.scale_loss(loss, optimizer) as scaled_loss: scaled_loss.backward() optimizer.step() optimizer.zero_grad() if args.mainprocess: acc1, acc5 = accuracy(output, target, topk=(1, 5)) losses.update(loss.item(), images.size(0)) top1.update(acc1[0], images.size(0)) top5.update(acc5[0], images.size(0)) # measure elapsed time batch_time.update(time.time() - end) end = time.time() if i % args.print_freq == 0 and args.mainprocess: progress.display(i) if args.stop_step_num is not None and i >= args.stop_step_num: break if args.mainprocess and batch_time.avg: print("[npu id:", deviceid, "]", "batch_size:", args.world_size * args.batch_size, 'Time: {:.3f}'.format(batch_time.avg), '* FPS@all {:.3f}'.format( args.batch_size * args.world_size / batch_time.avg))模型验证过程:def validate(val_loader, model, criterion, deviceid, args): # switch to validate mode batch_time = AverageMeter('Time', ':6.3f') losses = AverageMeter('Loss', ':.4e') top1 = AverageMeter('Acc@1', ':6.2f') top5 = AverageMeter('Acc@5', ':6.2f') progress = ProgressMeter( len(val_loader), [batch_time, losses, top1, top5], prefix='Test: ') # switch to evaluate mode model.eval() with torch.no_grad(): end = time.time() for i, (images, target) in enumerate(val_loader): images = images.npu(non_blocking=True) target = target.to(torch.int32).npu(non_blocking=True) # compute output output = model(images) loss = criterion(output, target.long()) # measure accuracy and record loss acc1, acc5 = accuracy(output, target, topk=(1, 5)) if args.mainprocess: losses.update(loss.item(), images.size(0)) top1.update(acc1[0], images.size(0)) top5.update(acc5[0], images.size(0)) # measure elapsed time batch_time.update(time.time() - end) end = time.time() if i % args.print_freq == 0 and args.mainprocess: progress.display(i) if args.mainprocess: print("[gpu id:", deviceid, "]", '[AVG-ACC] * Acc@1 {top1.avg:.3f} Acc@5 {top5.avg:.3f}' .format(top1=top1, top5=top5)) return top1.avg数据集加载函数:def dataloader(args): """ Create training & validation dataloader """ traindir = os.path.join(args.data_path, 'train') valdir = os.path.join(args.data_path, 'val') normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) # Create Dataset train_dataset = datasets.ImageFolder( traindir, transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), normalize, ])) val_dataset = datasets.ImageFolder(valdir, transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), normalize, ])) # Create Sampler if args.distributed: train_sampler = torch.utils.data.distributed.DistributedSampler(train_dataset, num_replicas=args.world_size, rank=args.rank) else: train_sampler = None # Create Loader train_loader = torch.utils.data.DataLoader(dataset = train_dataset, batch_size=args.batch_size, shuffle=(train_sampler is None), num_workers=args.loader_workers, drop_last=True, pin_memory=False, sampler=train_sampler) val_loader = torch.utils.data.DataLoader(dataset = val_dataset, batch_size=args.batch_size, shuffle=False, drop_last=True, num_workers=args.loader_workers, pin_memory=False, sampler=None) return train_loader, val_loader, train_sampler最后是精度定义函数,本项目的评价指标def accuracy(output, target, topk=(1,)): """Computes the accuracy over the k top predictions for the specified values of k""" with torch.no_grad(): maxk = max(topk) batch_size = target.size(0) _, pred = output.topk(maxk, 1, True, True) pred = pred.t() correct = pred.eq(target.view(1, -1).expand_as(pred)) res = [] for k in topk: temp = correct[:k] correct_k = temp.reshape(-1).float().sum(0, keepdim=True) res.append(correct_k.mul_(100.0 / batch_size)) return res3.模型训练1.在每次训练完成后,请将服务器中output目录下的文件同步到本地,否则再次运行时这些文件将会被删除,导致不能评估。2.首先运行env.sh环境搭建脚本。点击Run->Edit Configurations,在弹出的配置页面中,点击左上角“+”按钮,选择Ascend Training,如下图。Name为该运行配置名称,不能重复。Executable填入本地被执行文件位置,选择./test/env_npu.sh。然后运行。3.执行1p 完整训练脚本。同上,点击Run->Edit Configurations,在弹出的配置页面中,点击左上角“+”按钮,选择Ascend Training,如下图。Name:train_full_1p。Executable选择./test/train_full_1p.sh。Command Arguments选择--data_path=/data/imagenet参数配置如下:参数说明Run Mode选择remote run(远程运行) 或者 local run(本地运行)Deployment需要部署的远程服务器环境Executable需要执行的脚本文件路径Command Arguments脚本执行所需要的参数Environment Variables配置环境变量,一般不需要配置训练过程如下图所示(部分):(训练过程重定向到了910A_1p.log)4.执行8p完整训练脚本点击Run->Edit Configurations,在弹出的配置页面中,点击左上角“+”按钮,选择Ascend Training,如下图。Name:train_full_8p。Executable选择./test/train_full_8p.sh。Command Arguments选择--data_path=/data/imagenet训练过程如下图所示(部分):(训练过程重定向到了910A_8p.log)五、FAQpip安装pytorch后在import torch时报错ImportError: llibpython3.7m.so: cannot open shared object file: No such file or directory。解决方法:如果环境上没有/usr/lib64,则复制/usr/lib目录:sudo cp /usr/local/python3.7.5/lib/libpython3.7m.so /usr/liblinux系统下如何查看CANN版本。解决方法步骤如下:以软件包的安装用户登录软件包的安装环境。进入软件包安装信息文件目录。(以下以Ascend-cann-toolkit软件包为例)cd /usr/local/Ascend/ascend-toolkit/latest/{arch}-linux其中/usr/local/Ascend为root用户默认安装路径,请用户根据实际情况替换。*{arch}*表示CPU架构(arm64或x86_64)。在命令行执行以下命令获取版本信息。cat ascend_toolkit_install.info查看服务器的架构信息uname -msyntax error near unexpected token ”报错问题,运行mindstudio时,控制台报错解决方法1:使用dos2unix工具进行处理。在linux上安装dos2unix工具:sudo apt-get install dos2unix(根据系统使用不同命令安装)安装成功后可以定义一个shell脚本,或者手动执行一下命令dos2unix *.sh就会看到:dos2unix: converting file *.sh to Unix format ...就将这个文件转换为了linux下的执行文件了。解决方法2:根据报错行代码重新手动换行。AscendPytorch1.5.0和AscendPytorch1.8.1两者差别很大。a.下载安装方面:# AscendPytorch1.5.0没有torch_npu包,只需要下载下面两者包即可 pip install apex-0.1+ascend-cp37-cp37m-linux_aarch64.whl pip install torch-1.5.0+ascend.post5.20220505-cp37-cp37m-linux_aarch64.whl # AscendPytorch1.8.1导入了torch_npu库 apex-0.1+ascend.20220505-cp37-cp37m-linux_aarch64.whl torch_npu-1.8.1rc2.20220505-cp37-cp37m-linux_aarch64.whl torch-1.8.1+ascend.rc2.20220505-cp37-cp37m-linux_aarch64.whlb.代码编写方面# AscendPytorch1.5.0没有torch_npu包,只需要下载下面两者包即可 >>import torch >>torch.npu.set_device(0) # AscendPytorch1.8.1导入了torch_npu库 >>import torch_npu >>torch_npu.npu.set_device(0)六、从昇腾官方体验更多内容和支持欢迎大家在昇腾论坛进行讨论和交流:cid:link_6在这可以进行问题的求助,也可以分享自己在使用昇腾过程中积累的经验。
  • [问题求助] 在添加 python sdk 时,不出现添加 SSH Interpreter 的选项
    左侧选项栏中缺少ssh Interpreter选项,导致无法连接远程调试,请问如何修复?
  • [问题求助] [SDC Restful] 订阅元数据上报
    结构化数据中deviceID字段为空GET /SDCAPI/V1.0/Rest/DeviceID 可获取到deviceID 
  • [使用说明] CodeArts IDE华为云API第二章-华为云API实战演练
    在上一篇中,给大家介绍了CodeArts中华为云API的功能和用法。本文将通过实战演练的形式,带着大家一块体验下整个API开发过程。那么话不多说,Let's go!这里以一个大家经常遇到的应用场景举例:文字识别。面对日常生活中涉及到的各种票证--身份证、驾驶证、银行卡、火车票、发票等等,甚至是核酸检测记录—各种票据凭证识别工作耗费大量人力物力,尤其现在大多数都是电子版,这里我们通过华为云文字识别OCR服务提供的API快速实现一个发票识别应用,来体验下CodeArts以及华为云API的强大能力。一、打开华为云插件,搜索想要实现的功能:发票识别,查看搜索出的API,可以看到华为云为发票识别提供了丰富的API,点击打开API详情,挑选出符合需求的API这里我们挑选增值税发票识别,通过查看API的详细文档,可以了解到此API可以直接将图片的base64编码作为参数直接传入,也可以支持传入远程服务器中图片的url路径,方便对接自己公司的票务系统,这些参数都将作为http post请求中的body体发送给华为云OCR服务。注:图片转base64的方法可以直接用JDK提供的Base64.getEncodeer().encodeToString(data)实现。点击在线体验API,此时跳转到了API调测平台API Explorer,在这里可以将图片的base64编码填入Body体重的image参数,点击调试,右下的响应结果会将接口的返回体打印出来。二、体验完了API,就要开始写代码了先来学习下一个API调用的完整流程,点击文档右侧的SDK示例代码,可以看到一个API完整调用流程:通过BasicCredentials鉴权,然后开始组装HttpClient模型,之后将参数封装到request模型中,并作为参数传入到client发送的API请求中。注意调用API的几个必填参数:ak/sk:access key和secret access key,用于鉴权。region:云服务资源所在的区域projectId:你要操作的region中的项目ID。如果projectId不填,SDK会自动获取region下第一个projectId将刚刚的base64编码拷贝到参数中,这时右侧示例代码同步生成对应的参数模型。可以将SDK代码拷贝到自己的工程中,进行调试。注1:通过CodeArts新建初始化工程可以参考CodeArts使用说明文章,这里就不再赘述,本教程工程模板附在本文末尾注2:由于image字符串较长,这里没有直接拷贝到方法中,而是抽取了一个参数image传入注3:如果是内网用户通过代理访问API,则需要配置代理,如没有Certificate证书,则可以http代理类关闭SSL校验。三、如果仅仅是copy代码是不是还太初阶了?CodeArts华为云API还提供华为云SDK代码补全功能,通过右键菜单或者命令行打开开关(默认关闭),在用户输入代码时会提供API联想提示,并插入SDK代码,API代码一键生成!SDK代码补全支持以下场景:识别上下文中的鉴权、client信息,如果用户已实现鉴权、client封装等,则会直接获取对应的引用调用API如果SDK代码中的声明变量名称重复,则会自动加上后缀识别用户已经声明的日志类,并替换到SDK代码中自动安装SDK的依赖包到pom中,并刷新maven dependency样例工程中已经将鉴权、client封装好,这时在方法中插入代码,选中recognizeVatInvoice,将直接复用上面声明的myClient变量,将剩余代码插入到方法中。此时再将image封装到请求的body体中,就完成了整个API调用代码。启动调试,查看结果。注:当前还不支持参数模型代码自动生成,该功能将在下个版本上线。大家是否也跃跃欲试了呢,欢迎大家申请试用CodeArts,抢鲜体验华为云API!
  • [使用说明] CodeArts IDE华为云API第一章-玩转华为云API
    华为云当前有120+云服务提供4000+API供广大开发者调用,本篇文章主要为您讲解CodeArts上如何使用华为云API,包括华为云API检索、API文档查看、API调试,提供SDK示例代码供开发者学习如何使用API。同时,在开发者实际编程过程中,提供SDK代码自动补全功能助你快速集成开发。华为云API介绍打开CodeArts后,点击左侧侧边栏中的华为云API图标,则可打开华为云API插件主面板,如果是第一次进入,右侧会弹出华为云服务API全景图,为您介绍此插件丰富的能力。你也可以通过点击右上角的API全景图按钮打开全景图。API检索打开的华为云API,可以在搜索框中搜索华为云发布的所有云服务、API、SDK、错误码等。同时下面的热门推荐会为你展示最近有哪些热门的API。查看API文档根据搜索结果选择满足诉求的API,右侧panel将会打开API文档,可以查看此API的详细信息包括接口说明、URL、参数说明及示例、返回结果说明及示例等,方便你全方位的了解此API功能。API调试在API文档上方,点击“在线体验API”按钮,会跳转到API调测工具APIExplorer的页面,你可以在此调试该APISDK示例代码在API文档右侧,点击切换到“SDK示例代码”页签,这里的示例代码会指导你如何通过华为云SDK代码来调用API,并且在左侧编辑此API参数时,右侧面板会同步将参数模型的封装插入到示例代码中。SDK代码自动补全华为云API插件还提供代码补全功能,辅助开发者在编程过程中,通过识别用户上下文,将SDK代码片段补全,使调用华为云API更方便。SDK代码补全功能默认关闭,开发者可以通过鼠标右键中的菜单栏或者命令行-启用华为云SDK代码补全助手来打开开关。这时在编辑器中输入代码时,插件会联想出匹配的华为云API。开发者选中后,会对此时代码插入位置的上下文进行分析,将SDK代码插入到该位置。Talk is cheap,show you the code!实际编码过程中更加详细的玩法,请见CodeArts华为云API第二章-华为云API实战演练。
  • [经验分享] 【MindStudio体验官第一期活动】李小达教你使用MindStudio 5.0完成MMNet人像分割
    李小达教你使用MindStudio 5.0完成MMNet人像分割1、把华为云的用户名改一下,改成自己喜欢的就可以啦,不能是默认的hw_xxxx_xxx哦(默认账号ID可能无法获得体验代金券~)2、将修改好的ID发给老师,等候ing....华为云里面看看优惠卷是否到账,到账了就可以申请服务器啦优惠券 (huaweicloud.com)3、把对应节点(以华北-北京四为例。)的项目id发给老师,这样老师就可以把镜像发过来啦4、到华为云的镜像服务里面,点共享镜像,然后把节点切换成需要的节点(仍然以华北-北京四为例。),就可以开始申请服务器了5、申请服务器我这里计费模式选择按需计费,包年/包月的话我也用不到那么多。另外,规格也要根据需求选择哦,我这里选了x86-ai加速型-ai1S.large.46、进行网络配置安全组得选FullAccess,没有的话新建安全组就有了。7、进行高级配置8、进行购买9、选择好自己想要复现的案例(这里选到了一个带有pipeline文件的案例呢。),将其工程文件git clone到本地10、获取模型pb文件,并将其复制到model文件夹下11、使用mindstudio打开该项目(这里使用的mindstudio版本为5.0.RC1。)(打开时仅打开MMNET即可,如果打开整个仓的话后续将本地文件上传到远端会很慢。)mindstudio的安装请参考guide/mindstudio/cases/tutorials/Windows安装MindStudio.md · Ascend/docs-openmind - Gitee.com12、将项目转换成昇腾项目13、在本地mindstudio的项目结构里面配置sdk和远端python解释器14、设置文件夹映射15、配置CANN(不然Model Converter的时候CANN是灰的。)16、将本地文件上传到服务器17、转出om文件(这里需要根据要求配置参数。)18、将测试图片复制到MMNET目录下,并将本地文件同步到服务器19、参考官方文档和我需要复现的案例中对环境变量的要求,修改bashrc然后source~​20、调整运行配置,运行。(运行的是main.py,不是run.sh,因为这个复现案例中的run.sh里面只是一些临时环境变量,而我们已经写入到bashrc中了。)21、配置本地SDK,因为我们想在Windows本地看看MindX SDK的pipeline!22、查看pipeline文件有了pipeline,那么流程中用到了哪些插件,这些插件之间的关系是怎样的,就很清楚啦。如上图所示,紫色为输入插件,粉色为输出插件,蓝色为输入输出插件之间的插件,灰色为当前插件库中未定义的插件。可以通过将鼠标悬停在插件上,来查看该插件的功能描述信息。如上图所示,appsrc0是一个用于和应用交互的插件。如上图所示,test_mxpi_imagedecoder的输入格式为jpg,输出格式为BGR。如上图所示,test_mxpi_imageresize为resize插件。如上图所示,该插件在根据om模型进行推理。如上图所示,test_appsink为输出插件。关于pipeline文件的功能和可视化编排的详细说明,大家也可以参考可视化流程编排-基于MindX SDK开发应用-应用开发-用户指南-5.0.RC1-MindStudio-文档首页-昇腾社区 (hiascend.com),我也正在学习~FAQ:1、查看pipeline文件时,明明mindx sdk已经成功import,打开pipeline文件却不是图形化的。解决方案:如下图所示点击“Pipeline Stream Editor”。(官方文档即可视化流程编排-基于MindX SDK开发应用-应用开发-用户指南-5.0.RC1-MindStudio-文档首页-昇腾社区 (hiascend.com)中提到了这一点来着,不过不太容易发现。)TIPS:1、提供的镜像里面是可以直接跑的 不需要安装Python和相关的运行库 大赞活动筹备人员,帮我们省去了繁琐的部署过程!2、不需要在服务器端重装mindstudio,服务端也提供了Linux版的MindStudio,但是图形化界面回传回来会有些卡顿,推荐使用Windows端的MindStudio~3、用mindstudio打开工程的时候,仅打开MMNET就可以了,我们从Gitee下克隆回来的是整仓,里面的样例工程太多啦!不然上传的时候文件量太大了,这样的话既浪费时间又浪费金钱,不推荐~4、ECS不用的时候,记得关机,不然钱会一直跑掉!!!