视频案例链接:【【经验分享】使用MindStudio进行火灾识别开发】
火灾识别项目是基于MindX SDK,实现对图像中是否为火灾场景进行识别的功能。在Atlas200 DK上对火灾场景测试集进行推理,项目整体精度达到94.15%。
本案例主要介绍如何利用获取的基于PyTorch框架的densenet模型(包括数据集和模型代码),在MindStudio中进行模型的转换和MindX SDK的开发部署。参照此案例,可以实现火灾识别在昇腾设备上的部署。
整个开发环境的搭建主要分为两部分:服务器端开发环境安装和配置、本地开发环境的安装和配置。一般来说,服务器端的环境配置工作都提前完成了(比如CANN和MindX SDK的安装),因此本文主要以Windows环境为例,介绍本地开发环境安装和配置的流程。
需要注意的是,关于CANN和MindX SDK的安装,网上的教程比较多,对于第一次接触的开发者来说,容易搞混的是服务器端和本地的安装教程。服务器端都是Linux操作系统,MindX SDK可以通过图形界面方式在线或离线安装,也可以通过命令行方式进行离线安装,CANN只能通过命令行方式安装;本地端我们使用的是Windows,一般都是通过MindStudio的图形界面将服务器端的CANN和MindX SDK同步到本地。
对于火灾识别项目,本地环境的搭建和配置应该按如下流程:MindStudio软件安装—>SSH远程连接—>CANN配置—>推理源码和数据准备—>昇腾工程转换—>MindX SDK配置。
MindStudio是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,其功能涵盖面广,可以进行网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。就使用而言,整体界面风格和python开发常用的PyCharm相似。熟悉PyCharm工具的开发者使用MindStudio进行开发能够很快上手。
MindStudio的安装已经在其官网上的用户手册中有了详细介绍。作者使用的操作系统为window 10,点击下载上图中的exe或zip文件进行安装。注意一下MindStudio和CANN的版本对应关系:在MindStudio下载界面的最下面的版本配套中就说明了当前MindStudio版本对应的CANN版本。
在历史版本下找到并安装5.0.RC1:
Python版本问题:Python版本建议为3.9与MindX SDK相适配。如果在安装时没有指定python解释器的路径,在完成安装以后,进入某个python工程项目(project)以后,系统依然会提示“No Python interpreter configured for the module”,点击Configure Python interpreter进行python解释器的配置,这里选择本地python解释器。
安装了MindStudio以后就要进行SSH连接,目的是将本地的软件与服务器进行连接。点击 File->Settings->SSH Configurations,选择+号添加新的SSH配置,取一个用户名 root。
将服务器IP地址、端口、密码获密钥文件填入,点击Test Connection,提示连接成功即可。
这里需要注意的是授权类型有两种,一种是密码,一种是密钥文件,本文选择使用.pem格式密钥文件。服务器地址、密码或密钥文件可通过华为云申请试用或购买获得。
配置好了SSH以后,点击Tools-->Start SSH Session,即可连接服务器端。
选择需要连接的服务器。
连接成功,点击MindStudio在界面正下方Remote Terminal,就可以输入各种命令操作远端服务器了。
CANN(Compute Architecture for Neural Networks)是华为公司针对AI场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。
进行CANN配置前,服务器环境应存在CANN套件包,本项目中CANN使用的是5.1.RC1版本,关于CANN套件包的说明与安装可以查看CANN社区版本文档,CANN软件包可以从CANN>CANN社区版下载中获取。
选择历史版本下载5.1.RC1版本(建议下载5.1.RC1.alpha005)。
本项目中使用的是华为云的ECS已安装好的CANN、MindX SDK等套件包,直接从服务器拉取即可。
在Windows上配置CANN,实际上是使用MindStudio把服务器端的安装包同步到本地。进入File->Settings-> Appearance & Behavior ->System Settings->CANN页面,点击右边的change CANN,在弹出的对话框中填写服务器端的CANN的地址,然后就等待软件将服务器端的CANN同步到本地。
重启MindStudio 激活CANN。
需要注意的是,在MindStudio中,如果没有安装CANN,是不能够将下载的源码转换为Ascend Project的。点击Ascend->Convert to Ascend Project,会提示没有安装CANN,无法转换。
这一步是安装MindX SDK的前提,否则在Settings中左边的菜单栏就不会有MindX SDK选项。在完成了CANN安装以后,可以点击Ascend->Convert to Ascend Project,进行工程转换的操作了。
上面我们介绍了如何正确安装和运行 MindStudio 工具。接下来准备模型转换和 SDK 开发所需要用到的数据。主要包括:项目源码、预训练模型、数据集。
使用 git 命令下载项目代码:
git clone ascend_community_projects: MindX边缘开发套件社区代码仓库
下载后的项目代码在ascend_community_projects/fire_detection目录下,项目代码结构如下。其中data文件夹下还存在other与test文件夹,分别用来当做测试用例和测试集;models文件夹下存放项目模型。
将ascend_community_projects/fire_detection/figures文件夹中下的 火灾检测SDK流程图.png 更名为 pipeline.png 确保工程项目下无中文路径。
点击链接,下载火灾识别所需的densenet模型:
https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/ascend_community_projects/Fire_identification/models.zip
将其中的densenet.onnx,densenet.om放置在models文件夹下,densenet.onnx用于模型转换和densenet.om用于最后的推理。
点击链接,下载火灾识别所用的测试图片和测试集:
百度网盘 请输入提取码
other和test文件夹放置于data文件夹下,其中other用于test.py的测试,test用于main.py的测试。
首先点击Tools-->Deployment-->configuration,查看Deployment基本配置。
查看Connection是否能正常连接到服务器。
查看Mapping本地到服务器的映射路径。
检查之后点击OK,并点击Tools-->Deployment-->Automatic Upload后选择服务器。
此时已经可以将本地项目文件传送至远程服务器。右键点击左侧项目(Project)栏的项目文件fire_detection,选择Deployment-->upload to...
选择需要上传的服务器。
此过程需要花费比较长的时间,需要耐心等待,传输完成界面如下。
如果因网络问题传输失败,重新upload即可覆盖原来的文件。这里需要注意的是,如果upload单个文件反复提示失败,可能需要检查一下服务器的硬盘空间是否已满,如果已满,需要整理一下服务器的存储空间,尽可能多空出一些空间来。
相比于PyCharm,MindStudio增加了对华为昇腾系列芯片相关的开发支持,所以在MindStudio中创建的工程可以简单分为昇腾工程和非昇腾工程,其中昇腾工程特指需要昇腾芯片的相关工程,包括训练,推理,算子开发等等。特别的,MindStudio还支持非昇腾项目到昇腾项目的一键转换,方便其他IDE项目的转移。本项目是在昇腾310推理服务器上实现基于MindSpore框架编写的densenet模型的部署推理,因此需要将代码转换为为昇腾工程。
在源码和数据集都下载好的前提下,直接在MindStudio中点击左上角的file->open打开之前下载下来的模型代码文件夹。工程界面和目录如下:
如果目前工程不是昇腾工程,单击菜单栏“Ascend > Convert To Ascend Project”,如下图所示。
Project Type选择Ascend App,Sub Type选择Ascend MindX SDK App。如下图。
完成工程转换后,可以看到在菜单栏多出了一栏蓝色的图标,是MindStudio为昇腾系列所特别支持的开发功能,项目中会出现.project文件。
我们也可以通过Ascend下拉菜单查看这些功能,下面列出了我们用到的一些功能模块。
MindX SDK提供昇腾AI处理器加速的各类AI软件开发套件(SDK),提供极简易用的API,加速AI应用的开发。
应用开发旨在使用华为提供的SDK和应用案例快速开发并部署人工智能应用,是基于现有模型、使用pyACL提供的Python语言API库开发深度神经网络应用,用于实现目标识别、图像分类等功能。
通过MindStudio实现SDK应用开发分为基础开发与深入开发,通常情况下用户关注基础开发即可,基础开发主要包含如何通过现有的插件构建业务流并实现业务数据对接,采用模块化的设计理念,将业务流程中的各个功能单元封装成独立的插件,通过插件的串接快速构建推理业务。
和上面的CANN类似,SDK的配置指的是从服务器端将安装好的mxManufacture或者是mxVision同步到本地(这两者的差异似乎并不是特别大,很类似)。本文中使用的是mxVision 3.0.RC1。具体的配置方法如下:
进入File->Settings->Appearance & Behavior ->System Settings->MindX SDK页面,在右边点击Install SDK。
填写远端CANN位置,同上一步;填写远端SDK的位置:
需要注意mxVision的位置要选到更下一级的linux-x86_64这个文件夹的mxVision-3.0.RC1:/usr/local/Ascend/mindx_sdk/mxVision_3.0.RC1/linux-x86_64/mxVision-3.0.RC1,很多开发者看到了第一个 mxVision_3.0.RC1就选了,这样就会报错。
最后等待 SDK 同步,点击如下按钮可以验证是否已经成功配置了SDK:
本章的工作是介绍如何使用MindStudio成功运行推理任务,有了上面的准备工作,下面的任务就变得比较直观了。MindStudio中的MindX SDK提供了多种可视化的操作,让一些需要代码编辑的工作通过可视化配置界面完成。本部分工作主要包括:模型转换—>Pipeline编写—>推理验证。
2.4.3节提到我们已经下载了一个*.onnx文件,这是训练完成以后的模型,可用于模型推理。在昇腾硬件平台实际部署时,需要使用工具将此文件转换为昇腾硬件平台支持的、后缀为*.om的文件。模型转换可以通过两种方式:一是代码的方式进行,在远端服务器运行infer/convert中的convert_om.sh文件即可;二是通过MindStudio的可视化操作界面进行转换。本文重点介绍可视化界面配置转换的方法。
点击Ascend->Model Converter:
进入到配置界面,其中Model file可以选择本地的模型文件也可以选择服务器端的模型文件,如果选择了本地的呢,需要耐心等待本地端的模型文件上传至服务器。Target SoC Version 选择默认的 Ascend310即可。 Output Path 选择一个文件夹作为.om文件的输出路径。
在模型转换时使用了aipp配置,因此选择Type选择UNIT8后选择Next。
打开aipp选项开关,选择aipp文件所在的路径,由于数据预处理信息已经由fire.cfg包含,因此不在需要Normalization等手动输入参数。
点击Finish则系统进入到模型转换当中,右下角显示模型转换中。
转换成功界面如下:
默认om模型存储的路径和原模型的路径一致。需要注意的是,如果output path不选择默认,则需要指定本地存储路径,MindStudio直接将模型转换到本地。
点击MindStudio右侧工程栏,查找转换生成的densenet.om文件。
右键点击Deployment->Uploda to ...将生成的.om文件上传至服务器(如果前面选择了Deployment-->Automatic Upload生成的.om会自动同步到服务器)。
Pipeline编写可以采用直接编写代码方式或者界面配置方式。
Pipeline 内容如下:调用发送数据插件appsrc、图像解码插件mxpi_imagedecoder、图像裁剪插件mxpi_imageresize、推理插件mxpi_tensorinfer、输出插件appsink进行编排即可,代码见fire_detection/pipeline/fire.pipeline:
也可以直接使用MindX SDK的可视化操作界面拖拽各种插件进行组合。在成功连接远端服务器的前提下,首先点击Ascend->MindX SDK Pipeline。
打开pipeline可视化流程编排窗口,此时在pipeline可视化流程编排窗口的左边有Input、Other、Output三个选项。我们可以点击三个选项,选择需要的组件拖拽到右边图形界面框中进行组合。
发送数据插件appsrc在Input选项中;图像解码插件mxpi_imagedecoder、图像放缩插件mxpi_imageresize和推理插件mxpi_tensorinfer在Other选项中;输出插件appsink在Output选项中。
组件选择好了以后,拖拽箭头将其连接起来,其中发送数据插件appsrc是pipeline头部,流从这里输入,点击该插件可以查看其参数信息。
图像解码插件mxpi_imagedecoder对进入流的图像进行解码,点击该插件可以查看其参数信息。
图像放缩插件mxpi_imageresize将图像放缩至特定尺寸,点击该插件,将Width和Height参数设置为224。
推理插件mxpi_tensorinfer主要对流中的图像进行推理,点击该插件,填入.om模型路径。
编辑好了以后,点击pipeline界面右下方的Save或者Save As进行保存并命名为fire.pipeline。
推理验证是用./data/test中的测试图片进行测试,验证所用模型是否满足精度与FPS要求。
根据pipeline文件编排中的说明,我们在main.py中需要完成3件事——将图片传送至流+获取推理结果+输出相关精度与推理时间信息。main.py脚本文件在./fire_detection 工程目录下。
步骤一:点击 MindStudio 上方 Tools->Start SSH session连接到服务器。
步骤二:连接到服务器后,点击下方的 Remote Terminal,进入到命令行模式开发。
步骤三:cd到项目文件夹所在的路径。
步骤四:使用命令 python3 main.py 运行脚本文件,查看输出结果。
运行成功,满足项目性能要求。
步骤一:点击MindStudio上方的项目fire_detection后点击Edit Configuration。
选择要运行的main.py所在位置。
步骤二:设置完成后点击OK,完成后点击Run运行图标运行程序。
此时会在MindStudio下方的Run界面输出运行结果。
运行成功,满足项目性能要求。
测试用例是用于测试异常与其他图片。
test.py 脚本用于对 ./data/other 中的图片进行预测并作为异常测试。
重复3.3中步骤,连接至服务器命令行界面,并且 cd 到项目所在文件夹下。
输入命令测试图片 python3 test.py。
运行成功。
步骤一:点击MindStudio上方的项目fire_detection后点击Edit Configuration。
选择要运行的test.py所在位置。
步骤二:设置完成后点击OK,完成后点击Run运行图标运行程序。
同main.py运行操作一样,此时会在MindStudio下方的Run界面输出运行结果。
运行成功。
如果需要在远端服务器上进行安装,则需要,如果是只需要配置本地端,则不需要。通过MindStudio可以同步到本地。
在选择服务器上的 SDK 时要选到 linux-x86_64 文件夹下的 SDK。
在使用MindStudio运行项目时,运行结果如果出现同步失败的提示,其原因可能是项目中存在的中文路径或者存在中文命名的文件。由于中文名称在上传到服务器时会出现乱码,因此解决方案是点击MindStudio上方的Tools->Start SSH session,连接到服务器删除乱码文件。在本地修改原文件名称后,重新右键点击该文件选择Deployment->Upload to... 将修改后的文件重新上传至服务器。
完成上述操作后,重新运行项目即可同步成功。
可以登录MindStudio官方论坛,发帖提问,同时论坛里也有很多开发者分享的案例,可能对大家有所帮助。另外,在CSDN、B站、gitee、华为云上也有很多资源可以检索查找。当然更直接的办法是百度各种关键词。