使用 MindStudio进行基于 MindX SDK 辅助驾驶项目的开发

视频链接:https://www.bilibili.com/video/BV1K8411p7Cm/

1 任务介绍

ASSISTED-DRIVING的中文含义为辅助驾驶,其先采用了yolov3模型将图片中的交通标志检测出来,然后利用resnet18模型获对检测出来的交通标志进行分类;在道路线分割模型中使用u-net网络车道线分割检测。

本案例主要介绍如何利用获取的基于MindSpore框架的的ASSISTED-DRIVING辅助驾驶模型(包括数据集和模型代码),在MindStudio中进行模型的转换和MindX SDK的开发部署。参照此案例,可以实现ASSISTED-DRIVING模型在昇腾设备上的部署。

2 环境介绍

整个开发环境的搭建主要分为两部分:服务器端开发环境安装和配置、本地开发环境的安装和配置。一般来说,服务器端的环境配置工作都提前完成了(比如CANN和MindX SDK的安装),因此本文主要以Windows环境为例,介绍本地开发环境安装和配置的流程。

对于ASSISTED-DRIVING或者其他的模型,本地环境的搭建和配置应该如按如下流程:MindStudio介绍——工程环境创建——下载模型和数据集——主函数开发——任务运行。

2.1 MindStudio介绍

MindStudio是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,其功能涵盖面广,可以进行网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。就使用而言,整体界面风格和python开发常用的PyCharm相似。熟悉PyCharm工具的开发者使用MindStudio进行开发能够很快上手。

MindStudio的安装已经在其官网上的用户手册中有了详细介绍。作者使用的操作系统为window 10,点击下载上图中的exe或zip文件进行安装。注意一下MindStudio和CANN的版本对应关系:在MindStudio下载界面的最下面的版本配套中就说明了当前MindStudio版本对应的CANN版本。

笔者在安装的时候MindStudio的版本已经更新到了5.0.RC3,5.0.RC2可以在下载页面的历史版本中找到。

Python版本问题: Python需要提前下载安装,版本为3.7-3.9均可。当前已测试过的版本中,CANN支持Python3.7.x(3.7.0~3.7.11)、Python3.8.x(3.8.0~3.8.11)、Python3.9.x(3.9.0~3.9.7)。

2.2 CANN介绍

CANN(Compute Architecture for Neural Networks)是华为公司针对AI场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建基于昇腾平台的AI应用和业务,可查看CANN开发链接(https://www.hiascend.com/software/cann)。

2.3 MindX SDK介绍

MindX SDK提供昇腾AI处理器加速的各类AI软件开发套件(SDK),提供极简易用的API,加速AI应用的开发,可查看MindX SDK开发链接(https://www.hiascend.com/zh/software/mindx-sdk)。

应用开发旨在使用华为提供的SDK和应用案例快速开发并部署人工智能应用,是基于现有模型、使用pyACL提供的Python语言API库开发深度神经网络应用,用于实现目标识别、图像分类等功能。

通过MindStudio实现SDK应用开发分为基础开发与深入开发,通常情况下用户关注基础开发即可,基础开发主要包含如何通过现有的插件构建业务流并实现业务数据对接,采用模块化的设计理念,将业务流程中的各个功能单元封装成独立的插件,通过插件的串接快速构建推理业务。

3 工程创建及相关配置

3.1 工程创建

安装好软件后,打开MindStudio程序将会出现如下画面。

我们点击New Project打开一个新的项目,在Name中输入项目名称Assisted-driving,然后点击change。

然后出现如下界面,点击箭头所指的符号。

在出现的界面中,点击左上角的加号。

在出现的界面中,将会进行项目环境的Remote Connection配置,我们输入华为提供的账号和密码。

输入完毕后,在Remote CANN location中点击文件夹符号,并选取相应的CANN配置,如下图所示。

点击完成后,将会对本地和远程的环境配置进行同步。

等待同步完成后,输入Project Location,点击next。

在出现的画面中,选择MindX SDK project(python)后,环境初始化配置完成。

3.2 MindX SDK配置

和上面的CANN类似,SDK的配置指的是从服务器端将安装好的mxManufacture 或者是mxVision同步到本地(这两者的差异似乎并不是特别大,很类似)。本文中使用的是mxVision 3.0.RC2。具体的配置方法如下:

进入File->Settings-> Appearance & Behavior ->System Settings->MindX SDK页面,在右边点击Install SDK,

点击后,出现如下画面,分别对Remote CANN Location和Remote SDK Location进行配置,然后点击OK,进行下一步。

请耐心等待相关配置同步完成。

最后等待SDK同步,点击如下按钮可以验证是否已经成功配置了SDK

3.3 Python解释器

Python版本问题: Python需要提前下载安装,版本为3.7-3.9均可。当前已测试过的版本中,CANN支持Python3.7.x(3.7.0~3.7.11)、Python3.8.x(3.8.0~3.8.11)、Python3.9.x(3.9.0~3.9.7)。实际在系统中以Python3.7.5为例,如果在安装时没有指定python解释器的路径,在完成安装以后,进入某个python工程项目(project)以后,系统依然会提示“No Python interpreter configured for the module”,点击Configure Python interpreter进行解释器路径的配置。

点击Edit选择本地的python解释器路径,然后点击OK。

3.4 Deployment配置

通过对Deployment进行配置,能够将本地文件和服务器文件进行同步。

点击加号,输入项目名称。

点击加号,输入项目名称,在出现的connection中,选择SSH configuration选择服务器的地址

在出现的Mappings配置界面中,配置本地项目路径与远端运行路径的映射关系。

点击进行同步。

4 数据准备和模型转换

4.1 数据准备

下载数据集模型以及相关代码,放在项目目录下。包括pipeline文件、SDK推理主文件main_deteciton.py和main_segmentation.py,精度验证文件test_detection.py和test_segmentation.py。预训练模型在SDK推理阶段需要使用已完成训练后生成的模型文件, 将所有的模型、数据集以及相关函数下载完成后,如下所示。

4.2 模型转换

点击Ascend->Model Converter

4.2.1 交通标志分类模型

点击Next,进入到配置界面,我们全部选择默认即可。本文对上述参数进行简单介绍:CANN Machine为远程服务器的版本;Model File为需要转换的模型文件,主要格式有onnx,pb等格式;Model Name为转换后的模型名字;Targer Soc Version为运行设备选择,模型运行在310设备上;Input Nodes为输入节点名称(class_input);Shape为输入数据格式(NCHW分别为输入图像的batch,channel,length,width。既分别为1,3,224,224),type为数据类型,我们选择UINT8。

点击Next,进入到配置界面,我们需要对图像进行预处理,我们选择预处理模型Image Pre-processing为静态模式,输入图像的格式为YUV420S,Input Image Resolution输入的图像像素长宽都为224,Model Imgae Format为RGB格式;Normalization归一化直接按照默认值

4.2.2 交通标志检测模型

上述参数进行简单介绍:CANN Machine为远程服务器的版本;Model File为需要转换的模型文件,主要格式有onnx,pb等格式;Model Name为转换后的模型名字;Targer Soc Version为运行设备选择;Input Nodes为输入节点名称(detect_input);Shape为输入数据格式(NCHW),type为数据类型。点击Next,进入到配置界面,我们全部选择默认即可。

点击Finish 则系统进入到模型转换当中,右下角显示模型转换中

4.2.3 道路线分割模型

上述参数进行简单介绍:CANN Machine为远程服务器的版本;Model File为需要转换的模型文件,主要格式有onnx,pb等格式;Model Name为转换后的模型名字;Targer Soc Version为运行设备选择;Input Nodes为输入节点名称(data);Shape为输入数据格式(NCHW),type为数据类型。点击Next,进入到配置界面,我们全部选择默认即可。

点击Next,进入到配置界面,我们全部选择默认即可。

点击Finish 则系统进入到模型转换当中,右下角显示模型转换中

等待一段时间则在对话框中显示模型转换已成功。默认om模型存储的路径和onnx模型的路径一致。需要注意的是,如果output path不选择默认,则需要指定本地存储路径,MindStudio直接将模型转换到本地。

4.3 Pipeline编排

Pipeline编写可以采用直接编写代码方式或者界面配置方式。调用发送数据插件appsrc、推理插件mxpi_tensorinfer、输出插件appsink进行编排即可,代码见pipeline文件夹中的class.pipeline、detection.pipeline、road.pipeline。界面配置方式,也可以直接使用MindX SDK的可视化操作界面拖拽各种插件进行组合。在成功连接远端服务器的前提下,首先点击Ascend->MindX SDK Pipeline。

MindStudio打开一个pipeline编排窗口,并且在pipeline窗口的左边出现Input、Other、Output三个菜单,选择需要的组件拖拽到右边图形界面框中进行组合。

4.3.1 Detection 模型pipeline编排

发送数据插件appsrc在Input选项中、推理插件mxpi_tensorinfer在Other选项中、输出插件appsink在Output选项中。

Detection 模型pipeline编排

组件选择好了以后,拖拽箭头将其连接起来,点击mxpi_tensorinfer组件可以对其参数进行设置,这里主要是填入我们的om模型路径。编辑好了以后,点击保存并重新命名即可。

4.3.2 Class模型pipeline编排

在pipeline窗口的左边出现Input、Other、Output三个菜单,选择需要的组件拖拽到右边图形界面框中进行组合。发送数据插件appsrc在Input选项中、推理插件mxpi_tensorinfer和解码插件mxpi_imagedecoder以及图像Resize插件mxpi_imageresize(图像在输入过程需要同一处理长宽为224像素的图像)在Other选项中、输出插件appsink在Output选项中。拖拽箭头将其连接起来,点击mxpi_tensorinfer组件可以对其参数进行设置,这里主要是填入我们的om模型路径。编辑好了以后,点击保存并重新命名即可,如下图所示。

Class 模型pipeline编排

4.3.3 Road segmentaion模型pipeline编排

在pipeline窗口的左边出现Input、Other、Output三个菜单,选择需要的组件拖拽到右边图形界面框中进行组合。发送数据插件appsrc在Input选项中、推理插件mxpi_tensorinfer和mxpi_imagedecoder以及图像Resize插件mxpi_imageresize(图像在输入过程需要同一处理长宽为448像素的图像)在Other选项中、输出插件appsink在Output选项中。拖拽箭头将其连接起来,点击mxpi_tensorinfer组件可以对其参数进行设置,这里主要是填入我们的om模型路径。编辑好了以后,点击保存并重新命名即可,如下图所示。

Road segmentaion 模型pipeline编排

5 主函数开发

5.1 代码介绍

本章节主要对模型的主要功能函数进行介绍,本项目的功函数主要有main_detection.py和main_segmention.py两个函数。在main_detection.py中,主要实现交通标志的检测和分类功能。如下图所示代码为通过编排好的pipeline创建stream。

下图所示代码为对检测结果进行后处理:

下图所示代码为对检测结果进行分类识别:

。在main_segmention.py中,主要道路线的分割识别。如下图所示代码为通过编排好的pipeline创建stream。如下图所示代码为通过编排好的pipeline创建stream。

下图所示代码为对道路线分割的结果进行处理:

6 任务运行

6.1 交通标识推理和精度验证

6.1.1 交通标识推理

通过上述介绍,我们了解到了函数的相关功能实现,我们接下来对函数的功能实现进行展示。如图所示点击Edit Configurations。

弹出Run/Debug Configurations配置对话框,设置可执行文件路径Executable,根据实际需要,配置Deployment(如果没有配置,请参考3.2章节)、Executable(运行程序函数)、Command Arguments(主函数参数)、Environment Variables(环境变量),填完后点击OK。

返回主页面点击 run 图标即可运行,注意这时需要将所有的代码、数据集重新同步到远端服务器(不管之前有没有同步过,会覆盖服务器端原来的文件夹),因此将耗费相当多的时间,如果涉及到代码调试,笔者推荐还是以命令行的方式进行推理验证。

运行后,会出现如下界面,等待程序运行完毕和同步结束。

结果展示:

Json文件展示,该结果保存了不同交通信号标志的位置以及分类结果。其中”16813”代表了该图片的名称,“category”表示交通标志的类别,“score”代表置信度,“bbox”表检测标志在图片的位置。

6.1.2 交通标识推理精度验证

如图所示,点击Edit Configurations,弹出Run/Debug Configurations配置对话框,设置可执行文件径Executable,填完后点击OK。

得到精度结果如下所示:

accuracy : 0.8641904761904762, reca11:0.9242208189049538

6.2 道路分割线推理和精度验证

6.2.1 道路分割线推理

按照相同的设置,我们设置运行main_segmention.py函数,弹出Run/Debug Configurations配置对话框,设置可执行文件路径Executable,根据实际需要,配置Deployment(项目名称)、Executable(运行程序函数)、Command Arguments(主函数参数)、Environment Variables(环境变量),并增加文字介绍,填完后点击OK,配置如下图所示,返回主页面点击 run 图标即可运行。

等待运行结束后,在项目目录中出现tmp_segmention.png图像,我们对其进行展示,如下图所示。

6.2.2 道路分割线推理精度验证

如图所示,点击Edit Configurations,弹出Run/Debug Configurations配置对话框,设置可执行文件径Executable,填完后点击OK。

获得如下结果:

mIou is : 0.3598664687463788

7 FAQ

7.1 CANN版本和MindX SDK版本需要单独下载么?

如果需要在远端服务器上进行安装,则需要,如果是只需要配置本地端,则不需要。通过MindStudio可以自动同步到本地。

7.2 开发过程中遇到难题如何求助

可以登录MindStudio官方论坛,发帖提问,同时论坛里也有很多开发者分享的案例,可能对大家有所帮助。另外,在CSDN、B站、gitee华为云上也有很多资源可以检索查找。当然更直接的办法是百度各种关键词。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值