2D激光雷达:使用MindStudio进行MindX SDK任务开发

news2024/11/27 16:40:28

任务介绍

该项目基于DROW3和DR-SPAAM模型,实现了实时的2D激光雷达行人检测。 主要处理流程为:输入预处理后的激光雷达点云序列(帧)->行人检测模型推理->行人检测模型后处理->检测结果输出及可视化。

由于二维距离数据信息量低,使用二维激光雷达进行人员检测是一项具有挑战性的任务。为了缓解激光雷达点稀疏引起的问题,目前最先进的方法是融合以前的多次扫描,并使用联合扫描执行检测。这种向后看的融合的缺点是所有扫描都需要显式地对齐,而必要的对齐操作会使整个管道更加昂贵——通常对于现实应用程序来说太昂贵了。人检测网络,它使用一种替代策略来结合不同时间获得的扫描。我们的方法,距离鲁棒空间注意和自回归模型(DR-SPAAM),遵循了一个前瞻性的范式。它将来自骨干网的中间特征保留为模板,并在新的扫描可用时周期性地更新模板。更新后的特征模板依次用于检测当前场景中的人员。DR-SPAAM是一种基于深度学习的人检测器,可以检测从激光扫描仪获得的二维距离序列中的人。它可以基于其空间相似性模块生成简单的轨迹小波。

本案例主要介绍如何利用获取的基于MindSpore框架的2d激光雷达行人检测(包括数据集和模型代码),在MindStudio中进行模型的转换和MindX SDK的开发部署。参照此案例,可以实现模型在昇腾设备上的部署。

主要难点:由于该模型的输入为序列,输出后无法做到与真实图像进行对比,只能进行精度的验证。

环境配置

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

需要注意的是,关于CANN和MindX SDK的安装,网上的教程比较多,对于第一次接触的开发者来说,容易搞混的是服务器端和本地的安装教程。服务器端都是Linux操作系统,MindX SDK可以通过图形界面方式在线或离线安装,也可以通过命令行方式进行离线安装,CANN只能通过命令行方式安装;本地端我们使用的是Windows,一般都是通过MindStudio的图形界面将服务器端的CANN和MindX SDK同步到本地。

对于DROW3和DR-SPAAM模型或者其他的模型,本地环境的搭建和配置应该如按如下流程:MindStudio软件安装——SSH远程连接——CANN配置——推理源码和数据准备——昇腾工程转换——MindX SDK配置

MindStudio软件安装

介绍

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

安装

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

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

Python版本问题: 由于需要使用MindX SDK的功能,必须使用3.9版本的python。故需要确保python版本是否正确。

SSH连接

安装了MindStudio以后就要进行SSH连接,目的是将本地的软件与服务器进行连接。点击File->Settings->Tools->SSH Configurations,选择+号添加新的SSH配置。

将服务器IP地址、端口、密码或密钥文件填入,点击Test Connection,提示连接成功即可。

这里需要注意的是授权类型有两种,一种是密码,一种是密钥文件,本文选择使用.pem格式密钥文件。服务器地址、密码或密钥文件可通过华为云申请试用或购买获得。

配置好了SSH以后,点击Tools-->Start SSH Session,即可连接服务器端。MindStudio在界面正下方会弹出Remote Terminal,就可以输入各种命令操作远端服务器了。

CANN配置

CANN介绍

CANN(Compute Architecture for Neural Networks)是华为公司针对AI场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。

CANN 配置

在Windows上配置CANN,实际上是使用MindStudio把服务器端的安装包同步到本地。进入File->Settings-> Appearance & Behavior ->System Settings->CANN页面,点击右边的change CANN,在弹出的对话框中填写服务器端的CANN的地址。我们的MindStudio版本是5.0.RC1,因此CANN的版本需要安装5.1.RC1。然后就等待软件将服务器端的CANN同步到本地。

需要注意的是,在MindStudio中,如果没有安装CANN,是不能够将下载的源码转换为Ascend Project的。点击Ascend->Convert to Ascend Project,会提示没有安装CANN,无法转换。

这一步是安装MindX SDK的前提,否则在Settings中左边的菜单栏就不会有MindX SDK选项。在完成了CANN安装以后,可以点击Ascend->Convert to Ascend Project,进行工程转换的操作了。

推理源码和数据准备

介绍

上面我们介绍了如何正确安装和运行MindStudio工具。接下来准备模型转换和SDK开发所需要用到的数据。主要包括:模型推理代码、预训练模型、数据集。

模型推理代码

这里提供了全模型的网盘链接,可以直接下载。网盘内容如下图。链接:
https://pan.baidu.com/s/1F0QymfjGXsxEPKNhGlYKZg?pwd=9u0b 提取码:9u0b 。

本项目一共有两个模型及两个数据集。其中,DROWv2文件夹下为小数据集(已在网盘链接中DROWv2文件夹内提供),另一个数据集JackRobbot数据量较大,在这里没有使用,提供下载链接供开发者使用:
https://jrdb.stanford.edu/

图中,LaserDet文件夹下存放各种执行所需的脚本文件。Pipelines为需要调用的所对应的4个pipeline文件。主函数为release_lidar_main.py。具体细节可参考README.

接下来大致介绍release_lidar_main.py的主体流程。

1)输入类型是 2D LIDAR 每一帧的数据。对于DROW3 类型数据集,raw格式为在cononical坐标下的LiDAR 点云,每个文件为一个单控的序列,每个序列内包含多个帧。对于IRDB类型数据集,点云提供了主要的信息,同时增加了基于图像标注的伪标签。对于原始输入文件需要被提前处理成符合模型输入的格式。

数据预处理的流程主要写于
LaserDet/srcs/drow_handle.py(jrdb_handle.py)内。

2)通过调用MindX SDK 提供的buffer解码插件mxpi_buffer,解码后获取模型推理过程的输入数据。然后调用MindX SDK的mxpi_tensorinfer插件,将解码后的数据输入DROW3/DR_SPAAM模型进行推理。下图为输入与输出的调用代码段。

3)待数据推理完毕后,进行数据的后处理,检测输出结果需要进行坐标变换,由canonical转换为global坐标,再由global坐标转换为XY坐标,如果检测的两点之间距离过近,则认为是重复点,取均值保留。输出所有检测结果,并可视化。下图为可视化的部分代码。

预训练模型

在SDK推理阶段需要使用已完成训练后生成的模型文件,后缀为.onnx。

为了方便大家使用,上述源码链接中models文件夹内已包含了预训练模型。文件名格式为“模型名_数据集名_epoch数.onnx”。读者可按照自己所需要的onnx进行测试。

上传远端服务器

点击Tools-->Deployment-->upload上传准备好的代码、模型和数据集到远端服务器,此过程需要花费比较长的时间,需要耐心等待。如果因网络问题传输失败,重新upload即可覆盖原来的文件。这里需要注意的是,如果upload单个文件反复提示失败,可能需要检查一下服务器的硬盘空间是否已满,如果已满,需要整理一下服务器的存储空间,尽可能多空出一些空间来。

这里我们以远端服务器地址
/home/dianzikeji/MindStudio-WorkSpace/2D-LIDAR_1aa03018/为例进行后续的讲解,假设所有的代码和数据集已经上传至这个目录下了。

昇腾工程转换

介绍

相比于PyCharm,MindStudio增加了对华为昇腾系列芯片相关的开发支持,所以在MindStudio中创建的工程可以简单分为昇腾工程和非昇腾工程,其中昇腾工程特指需要昇腾芯片的相关工程,包括训练,推理,算子开发等等。特别的,MindStudio还支持非昇腾项目到昇腾项目的一键转换,方便其他IDE项目的转移。本项目是在昇腾310推理服务器上实现基于MindSpore 框架编写的DROW3和DR-SPAAM模型的部署推理,因此需要将代码转换为为昇腾工程。

工程转换

在源码和数据集都下载好的前提下,直接在MindStudio中点击左上角的file->open 打开之前下载下来的模型代码文件夹。工程界面和目录如下:

目前工程只是一个非昇腾工程,单击菜单栏 “Ascend > Convert To Ascend Project”。弹出如下窗口。这里针对该项目,Project Type选择Ascend App,Sub Type选择Ascend Python ACL App。如下图

完成工程转换后,可以看到在菜单栏多出了一栏蓝色的图标,是MindStudio为昇腾系列所特别支持的开发功能。

我们也可以通过Ascend下拉菜单查看这些功能, 下面列出了我们用到的一些功能模块。

MindX SDK配置

MindX SDK介绍

MindX SDK提供昇腾AI处理器加速的各类AI软件开发套件(SDK),提供极简易用的API,加速AI应用的开发。

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

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

MindX SDK配置

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

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

填写远端CANN位置,同上一步;填写远端SDK的位置

需要注意mxVision的位置,如果该文件夹下还有其他同名文件夹mxVision-3.0.RC1,需要选到最底层的mxVision-3.0.RC1。否则会报错。

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

任务运行

本章的工作是介绍如何使用MindStudio成功运行推理任务,有了上面的准备工作,下面的任务就变得比较直观了。MindStudio中的MindX SDK提供了多种可视化的操作,让一些需要代码编辑的工作通过可视化配置界面完成。本部分工作主要包括:模型转换——验证数据路径表生成——图像预处理——Pipeline编写——推理验证

注意:由于本项目共包含两个模型与两个数据集,故共四种推理形式。由于其执行过程基本类似,在此只展示其中一种(即在drow数据集下进行DR_SPAAM模型的推理),读者可按照自己所需修改部分操作即可。

模型转换

介绍

2.4.3节提到我们已经下载了一个onnx文件,这是训练完成以后的模型,可用于模型推理。在昇腾硬件平台实际部署时,需要使用工具将此文件转换为昇腾硬件平台支持的、后缀为.om的文件。模型转换可以通过两种方式:一是代码的方式进行,在远端服务器运行atc命令即可;二是通过MindStudio的可视化操作界面进行转换。本文重点介绍可视化界面配置转换的方法。

界面配置方式

点击Ascend->Model Converter

进入到配置界面,其中Model file 可以选择本地的模型文件也可以选择服务器端的模型文件,如果选择了本地的呢,需要耐心等待本地端的模型文件上传至服务器。Target SoC Version选择默认的Ascend310即可。Output Path默认是不用选的,默认生成在服务器端和onnx文件同路径,如果点击选择的话,则只能选择本地路径存储生成的om文件。

点击Next,进入到配置界面,这里也显示了实际使用到的各种命令,是一样的。我们全部选择默认即可。

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

等待一段时间则在对话框中显示模型转换已成功。转换后的模型路径可见:

需要注意的是,如果output path不选择默认,则需要指定本地存储路径,MindStudio直接将模型转换到本地。

转换成功后会在下方出现Model converted successfully.的绿色字体。

MindStudio提供了模型可视化功能,双击om文件,如下图所示,可以查看模型结构:

说明:需要注意的是,因为该模型数据无法使用aipp完成,所以我们将数据预处理部分直接放到了main.py中,因此在ATC模型转换时并未包含AIPP部分的参数设置。

pipeline编写

Pipeline编写可以采用直接编写代码方式或者界面配置方式。

代码方式

由于没有使用插件进行数据预处理与后处理,因此pipeline的编写就比较简单,调用发送数据插件appsrc、推理插件mxpi_tensorinfer、输出插件appsink进行编排即可,代码见pipeline文件夹内。

界面配置方式

也可以直接使用MindX SDK的可视化操作界面拖拽各种插件进行组合。在成功连接远端服务器的前提下,首先点击Ascend->MindX SDK Pipeline

MindStudio将打开名为new.pipeline的可视化编排窗口,并且在pipeline文件的左边出现Input、Other、Output三个选项,我们可以点击三个选项,选择需要的组件拖拽到右边图形界面框中进行组合。发送数据插件appsrc在Input选项中、推理插件mxpi_tensorinfer在Other选项中、输出插件appsink在Output选项中。

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

推理验证

推理验证可以使用命令行方式或者界面配置方式。

命令行方式

由于需要指定的参数比较多,我们采用脚本文件.sh的方式在验证数据集中执行推理验证任务。需要执行的脚本名为lidar_submit.sh,需按照脚本中需要的信息在命令中进行填写。

命令样式如下:

bash lidar_submit.sh --data_path $1 --pipe_store $2 --split $3 --visu $4

具体的参数说明如下:

表1 参数说明

参数

说明

data_path

数据集路径。

pipe_store

Pipeline路径。

split

数据集拆分(test/val)

Visu

是否需要可视化(True/False)

命令示例如下:

bash lidar_submit.sh ./DROWv2 ./pipelines/drow3_drow_e40.pipeline test False

界面配置方式

界面配置方式是MindStudio的特色,点击工程->Edit Configurations,

弹出Run/Debug Configurations配置对话框,设置可执行文件路径Executable,即脚本lidar_submit.sh的本地路径,此外还需要在command arguments里填写需要的指令,填完后点击OK。

返回主页面点击运行图标即可运行。

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

数据同步到服务器端后,开始执行推理任务。

推理结束后会得到如下结果。

如果command arguments的最后一项visu选择True,会在figs文件夹下生成对应数据集的可视化图片。

FAQ

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

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

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

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

第2章开头提到了“服务器端都是Linux操作系统,MindX SDK可以通过图形界面方式在线或离线安装“,这个功能如何实现?

从官网下载安装
MindStudio_5.0.RCX_linux.tar.gz文件,并完成此文件在服务器端的解压缩和安装。本地端使用Xshell远程连接到服务器(请注意本地端的MindStudio远程连接功能无法启动远程服务器端的图形界面功能,必须使用Xshell),找到~/MindStudio/bin目录中的MindStudio.sh文件,运行如下命令启动图形界面:

bash MindStudio.sh

此过程中可能提示需要安装Xmanager。启动服务器端的MindStudio,并打开服务器端的工程,和本地端的界面类似。

最后就可以使用此图形界面进行MindX SDK的安装了,方式同2.6节。

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

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

相关文章

Unity Gradient Lerp 颜色渐变

最近改插件,本来如果有Gradient的lerp方法,改起来会非常方便。因为插件的更改入口是这个Gradient。运行时候手动调节inspector面板可以直接更改效果。那么此时只要在代码中更改Gradient即可。 但是找了几遍Color,ColorUtility,Gr…

怎么去图片水印?三招让你快速学会图片去水印

上大学的时候,老师让我们每人写一个关于“阅读”的主题报告。写这个主题报告的时候,我发现在网上找的图片素材大多带有水印,十分影响报告的展示效果。于是,我就上网找了一些怎么去图片水印的方法,对这些方法进行试验后…

Redis持久化(RDBAOF)

持久化简介: 不知道大家有没有遇见过,就是正工作的时候停电了,如果你用的是笔记本电脑还好,你有电池,但如果你用的是台式机呢,那恐怕就比较灾难了,假如你现在正在写一个比较重要的文档&#xf…

Java集合——Map

Map集合 Map用于保存具有映射关系的数据,以键值对的形式存储,支持通过key来访问value,因此key不能重复。 Map接口下主要有Hashtable、HashMap、LinkedHashMap、ConcurrentHashMap 四个主要的实现类,实现的基本原理类似&#xff0…

【图像处理】Hough变换检测直线与圆的原理

霍夫变换的基本原理 霍夫变换(Hough Transform)可以理解为图像处理中的一种特征提取技术,通过投票算法检测具有特定形状的物体。霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或直线映射到另一个坐标空间中的一个点形成峰值,从而…

菜菜学paddle第七篇:目标检测的基本概念

一、什么是目标检测? 在前面的几篇中,我们学习了使用卷积神经网络进行图像分类,比如手写数字识别是用来识别0~9这十个数字。与图像分类处理单个物体的识别不同,目标检测它识别的不仅是物体,还是多个物体,…

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

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

Spring之IOC

IoC(Inverse of Control:控制反转)是一种设计思想,就是 将原本在程序中手动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语言中也有应用,并非 Spirng 特有。 IoC 容器是 Spring 用来实现 IoC 的载体&#xff0…

服务攻防-应用协议RsyncSSHRDPFTP漏洞批扫口令猜解

目录 测试思路 (一)口令猜解——SSH&RDP&FTP Demo: (二)配置不当-未授权访问-Rsync 文件备份 尝试读取src文件 (三)协议漏洞-应用软件-FTP&Proftpd 搭建 (四)协议漏…

音视频- iOS使用metal渲染图像(一)

概要 本文主要总结一下Metal的基本使用,用来渲染拍照的到的图像,其中涉及到的有UIKit中的MTKView,Metal中负责渲染的几个类,使用MSL(Metal Shading Language)编写着色器,最终将图片渲染出来…

Python 绘制极坐标图(玫瑰花图优化)

风速的玫瑰花图可见 Matlab 绘制风速、风向统计玫瑰花图 在今天的这边博文,选用Python工具,绘制玫瑰花图,并对图进行优化。 example 1 【不规则宽度】N = 20 theta = np.linspace(0.0,2*np.pi,N,endpoint=False)

Jmeter(十五):jmeter场景的运行方式(GUI运行和命令行运行)命令行相关参数

jmeter场景的运行方式(GUI运行和命令行运行) 运行方式: GUI运行:通过图形界面方式运行,该运行方式的可视化界面及监听器动态展示 结果都比较消耗负载机资源,建议大并发时不用,一般进行脚本调试; 命令行运…

【PTA-训练day17】L2-029 特立独行的幸福 + L1-071 前世档案

L2-029 特立独行的幸福 - 递归/模拟 判断素数 PTA | 程序设计类实验辅助教学平台 思路&#xff1a; 第一层循环是边界循环 for(int il;i<r;i)枚举每一个i 第二层循环是判断这个i是不是幸福数st数组 判定 i 这个数在迭代过程中是否出现循环 如果出现循环及时跳出比如&…

【TypeScript系列】【一篇就够】TypeScript知识点总结(二)

12 面向对象简介 简而言之&#xff0c;面向对象就是程序之中所有的操作都需要通过对象来完成。 举例来说&#xff0c; 操作浏览器要使用windows对象&#xff1b;操作网页要使用document对象&#xff1b;操作控制台要使用console对象。一切操作都要通过对象&#xff0c;也就是…

nacos--扩展--03--系统参数

nacos–扩展–03–系统参数 1、Nacos Server 配置参数位置&#xff1a;{nacos.home}/conf/application.properties里注意&#xff1a;如果参数名后标注了(-D)的&#xff0c;则表示是 JVM 的参数&#xff0c;需要在{nacos.home}/bin/startup.sh里进行相应的设置。 案例&#xf…

测试用例等级怎么划分?别再傻傻的一脸懵逼

我们都知道测试工程师最基本的能力便是编写测试用例&#xff0c;可是看似简单的用例&#xff0c;后面其实蕴含这个很多人忽略的细节&#xff0c;今天就来说测试里面所蕴含的很多细节。 很多时候不只是测试和测试用例息息相关&#xff0c;开发&#xff0c;产品也有的时候对于测试…

C/C++程序的断点调试 - CodeBlocks

本文以CodeBlocks为例&#xff0c;简述C/C程序断点调试的基本方法和过程。其它的IDE环境&#xff0c;大同小异。 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载&#xff0c;但需要注明原作者"海洋饼干叔 叔"&#xff1b;本文不允许…

单链表翻转-链表篇

leetcode206单链表的翻转 题目&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出…

如何指定标签在页面中显示的位置

如何指定标签在页面中显示的位置 在HTML页面设计中常常需要调整标签&#xff08;元素&#xff09;的位置&#xff0c;那么&#xff0c;如何指定标签在页面中显示的位置呢&#xff1f; 使用标签的align属性指定标签在页面中显示的位置&#xff0c;如align"left|right|cen…

02加锁源码分析-ReentrantReadWriteLock原理-AQS-并发编程(Java)

文章目录3.1 加锁3.1.1 读锁加锁3.1.1.1 tryAcquireShared()3.1.1.2 readerShouldBlock()3.1.1.3 fullTryAcquireShared()3.1.1.4 doAcquireShared()3.1.2 写锁加锁3.1.2.1 tryAcquire()3.1.2.2 acquireQueued()3.2 加锁示意图3.2.1 先写锁在读锁3.2.2 先读锁在写锁后记3.1 加锁…