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

news2025/4/4 1:28:17

视频链接: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、华为云上也有很多资源可以检索查找。当然更直接的办法是百度各种关键词。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/91291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0-1规划下的数独问题

数独显然是一个0-1规划问题.虽然这个什么凸分析还是啥的分析有这个优化的方法,但是,你DFS也不是完全一点不可能的对吧.嗯,既然这样的话,我们就要去解决这样一个更细致的问题了.数独这个问题他的解的存在性,唯一性怎么样.当然,已经有结论了,一个9*9的数独至少要给出17个值才能约…

Qt扫盲-QGridLayout理论总结

QGridLayout理论总结1. 简介2. 操作布局元素3. 常用属性4. 间隔设置1. 简介 QGridLayout 占用来自其父布局或 parentWidget()获得的空间,将其划分为行列表格形式,在每个布局的表格里放置控件或者布局器就行。 一般来说,列和行的行为功能相同…

Sourcetree安装详细步骤

前言: Sourxetree 作为 免费的 Git 客户端工具,有许多优点。Sourcetree 简化了与Git存储库交互的方式,因此我们可以专注于编码。通过 Sourcetree 简单又快捷的管理我们 的存储库。 下载安装包 进入 官网 选择Windows系统的安装包 &#xff…

【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、HDFS的Shell介绍 Shell在计算机科学中俗称“壳”,是提供给使用者使用界面的进行与系统交互的软件,通过接收用户输入的命令执行相应的操作,Shell分为图形界面Shell和命令行式Shell。 文件系统…

PTC Creo Illustrate生产技术设备

PTC Creo Illustrate生产技术设备 Creo Illustrator是一款适用于生产技术设备的软件。该软件将三种功能与当前CAD设计数据、技术规范以及所需和可能使用的各种部件相结合。这些工具对供应商和客户尤其有用。供应商可以使用本文档中提供的信息熟悉机器。查看内部零件&#xff0c…

YOLO系列目标检测算法——YOLOR

YOLO系列目标检测算法目录 - 文章链接 YOLO系列目标检测算法总结对比- 文章链接 YOLOv1- 文章链接 YOLOv2- 文章链接 YOLOv3- 文章链接 YOLOv4- 文章链接 Scaled-YOLOv4- 文章链接 YOLOv5- 文章链接 YOLOv6- 文章链接 YOLOv7- 文章链接 PP-YOLO- 文章链接 …

喜讯 | 美格智能子公司美格智联成功获选2022年首批国家级“高新技术企业”认定

近日,全国高新技术企业认定管理工作领导小组办公室发布了关于对深圳市认定机构2022年认定的第一批高新技术企业进行备案公示的通知,根据《高新技术企业认定管理办法》(国科发火〔2016〕32号)和《高新技术企业认定管理工作指引》&a…

[C/C++/初学者]500以内的亲密数对(VS2012)

在开始编写程序之前,我们需要了解一个东西。 何为亲密数对? 简单来说,就是数a的正因子数(除本身外)等于数b的正因子数(除本身外)。 符合这项条件的两个数,我们称他们为亲密数对。 …

[附源码]Python计算机毕业设计高校体育馆管理信息系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

146.个性化推荐系统案例介绍

YouTube的推荐系统算法由两个神经网络组成: 一个用于候选生成一个用于排序 以用户的浏览历史为输入,候选生成网络可以显著减小可推荐的视频数量,从庞大的库中选出一组最相关的视频 这样生成的候选视频与用户的相关性最高,然后会对…

【ROS话题通信】发布者和订阅者

前言 本文记录ROS话题通信的学习过程,便于后续复习。首先明确,ROS中的话题通信,在ROS通信中非常重要,实现了分布式发布接收消息,也是实现了不同编程语言间的解耦,下面记录下自己学习过程中的相关代码和配置…

Kotlin小菜——基础语言教程

概述 Kotlin是JetBrains推出的一种编程语言,JetBrains是最智能的Java IDE的官方设计器,名为Intellij IDEA。这是在JVM上运行的强静态类型语言。2017年,谷歌宣布Kotlin是Android开发的官方语言。Kotlin是一种开源编程语言,它将面向…

会话Cookie跟踪技术

会话 用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。 从浏览器发出请求到服务端响应数据给前端之后,一次会话(在浏览器和服务器之间)就被建立了 …

产品设计:Material Design 学习笔记二

​5、图标 桌面图标 桌面图标尺寸是48dp X 48dp。 桌面图标建议模仿现实中的折纸效果,通过扁平色彩表现空间和光影。注意避免以下问题: ①不要给彩色元素加投影 ②层叠不要超过两层 ③折角不要放在左上角 ④带投影的元素要完整展现,不能…

Debug怎么用

文章目录前言一、打断点运行Debug二、页面重新运行功能三、回到代码看断点前言 提示:这里可以添加本文要记录的大概内容: 因为最近有个项目注册不好使,想看看哪的问题,所以用debug看看程序走到了哪 提示:以下是本篇文…

docker部署mysql初始化数据库

一、前言 在使用docker部署mysql服务时,往往需要在创建容器时新建database,在需要在创建实例的过程中希望初始化sql脚本。 mysql官方镜像支持在容器初次启动时自动执行指定的sql脚本或shell脚本(注意:只有初次启动时才能自动执行&…

【正点原子I.MX6U-MINI】通过tftp从Ubuntu中下载zImage 和设备树文件 | 从网络启动Linux系统

从网络启动linux系统的唯一目的就是为了调试!不管是为了调试linux系统还是linux下的驱动。每次修改linux系统文件或者linux下的某个驱动以后都要将其烧写到EMMC中去测试,这样太麻烦了。我们可以设置linux从网络启动,也就是将 linux 镜像文件和…

【OpenCV-Python】教程:5-3 光流

OpenCV Python Optical Flow (光流) 【目标】 了解光流的概念和用 Lucas-Kanade 算法估计光流我们将使用cv2.calcOpticalFlowPyrLK()这样的函数来跟踪视频中的特征点。们将使用cv2.calcOpticalFlowFarneback()方法创建一个密集的光流场,可以用于前景检测。 【理论…

[附源码]Python计算机毕业设计高校心理咨询管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

Java+SSH实验室预约系统(含源码+论文+答辩PPT等)

该项目采用技术: 后台:SpringSpringmvcHibernate 前台JqueryMy97DatePickercssjs 使用了MySQLTomcat等相关技术 项目含有源码、文档、配套开发软件、软件安装教程、项目发布教程等 本系统的用户可以分为三种:管理员、教师、学生。以下针对三种…