1、项目介绍

2、模型介绍

3、模型训练

3.1、标注文件修改

3.2、模型转换

4、基于MindX SDK开发

4.1、创建MindX SDK(Python)工程

4.2、配置MindStudio的python环境

4.3、ATC模型转换

4.4、配置插件

4.5、图片测试

4.6、精度测试

获取帮助

本文的视频教程可点击下面链接:

使用MindStudio进行UAV场景下人群密度估计开发_哔哩哔哩_bilibili

1、项目介绍

任务场景:无人机场景下人群密度估计算法

任务描述:基于MindX SDK将其部署于昇腾平台上,实现无人机在线人群密度估计。

任务目标:在VisDrone2021数据集上实现,均方误差(MSE)不大于35,绝对误差(MAE)不大于20,且FPS不低于20最低实时检测帧数。

环境信息:昇腾设备: Ascend310;Mind SDK版本:2.0.4;CANN版本:5.0.4

2、模型介绍

本项目使用的模型为DM-Count,论文地址链接,其模型是基于VGG19()使用Pytorch框架开发,其论文表明高斯规则强加于注释标注会损害泛化性能。DM-Count则不需要任何高斯方法对真值标注进行处理,进而提升算法性能。

由于本项目是基于MindX SDK部署于昇腾边缘硬件,因此本文着重于在MindX SDK部署过程中所遇到的问题以及解决方法,为基于Mind SDK的开发人员排坑。对模型的训练本文只提及训练VisDrone2021数据集时需修改的代码。具体训练过程也可直接参考地址。

下载DM-Count项目,并使用MindStudio打开项目目录,其目录结构如图所示,

由于服务器需用内网连接的,因此本文对DM-Count布置本地实验环境,首先配置python环境以及SDK等,步骤如下图所示

3、模型训练

本项目是基于无人机场景,首先我们需要修改VisDrone2021数据集的标注文件以适用于DM-Count模型的训练。下载VisDrone2021数据集并将其移至DM-Count根目录,其数据集目录结构如下图所示,GT_文件夹为xml标注文件,RGB为无人机场景下RGB颜色模型JPG格式图像文件,TIR为红外拍摄的灰度JPG格式图像文件,两个文件夹图像一一对应。由于VisDrone2021测试数据集没有真实值标注,需要在官网提交检测结果才能获取测试精度,因此本项目将RGB文件夹下的数据以4:1随机分为训练集和测试集,即训练集1445张图像,测试集为362张图像。

然后在DroneRGBT/Train目录中新建xml2mat.py文件,添加如下图代码,并运行,其目的是将xml文件改为预处理所需用到的mat文件。运行结果在DroneRGBT/Train目录中生成mats文件夹,文件夹内.mat文件为对应图像标注文件。

然后,在此目录中新建spilt_tain_test.py文件夹生成train.txt和val.txt文件,即训练图像和测试图像,代码以及结果如下图所示,其train.txt和val.txt文件内容为训练和测试图像的文件名字。

3.1、标注文件修改

训练DM-Count需要对数据集进行预处理生成密度图和训练真实值,其源码如下图所示,原始代码中只对QNRF和NWPU数据集做了预处理,我们添加22-25行代码,即图中红色框部分,VisDrone2021数据集图像为640*512的固定大小,因此我们在main()函数中传入参数为:输入数据集路径,输出数据及路径,图像高度,图像宽度。

在DM-Count/preprocess/文件夹下复制preprocess_dataset_nwpu.py并重命名为preprocess_dataset_vis.py并修改main()函数,具体代码如下图所示

然后运行preprocess_dataset.py预处理文件,可生成train和val文件夹,其中每个文件夹下为训练图像,该训练图像的密度图以及真实值,即.jpg文件为训练或测试图像,.npy文件为该图像真实值, 以_densitymap.npy后缀的文件为该图像密度图。

至此,原DM-Count代码修改完毕,更改train.py文件如图所示,然后点击运行按钮等待运行完毕即可生成Pytorch框架的权重文件。

模型训练过程中需注意:

可能对于pytorch的版本会出现如下问题,

解决办法:

在datasets/crowd.py文件中修改如下代码

3.2、模型转换

完成训练之后,得到的Pytorch权重文件,因此我们在主目录新建pth2onnx.py将权重转换成Mind SDK所支持的onnx文件,其代码如下,3.1节所生成的权重文件在ckpts文件夹中,最后生成Visdrone_CrowdCounting.onnx

4、基于MindX SDK开发

完成开发后的UAV_CrowdCounting无人机场景下人群密度估计目录结构

4.1、创建MindX SDK(Python)工程

在MindStudio IDE中新建Ascend App项目,如图所示,首先,选择Ascend App,然后后可以命名项目名称,如图本项目名称为UAV_CrowdCounting,项目位置可以直接选择默认位置,紧接着部署服务器CANN,点击图中Change按钮

点击Change按钮之后,我们在远程连接中配置我们的服务器,如图所示,

成功连接服务器后,找到服务器中CANN安装文件夹,并选择其中使用的版本,我所使用的服务器只安装了5.0.4版本,如图所示

选择之后,点击Finish,等待MindStudio完成配置

成功配置之后,可以在创建项目页面看到CANN版本,然后点击下一步

本次项目使用python语言开发基于MindX SDK的UAV场景下的人群密度估计,选择模板如图所示,并在新的窗口打开

窗口变化如图所示,则完成了UAV_CrowdCounting项目的创建,并点击红框处,配置执行文件。

选择mian.py作为执行程序,如下图所示,

4.2、配置MindStudio的python环境

在MindStudio中配置接众智实验室服务器的开发环境,首先连接服务器,并测试测试是否连接成功,以确保与服务器文件夹完成映射。如图所示

将本地文件夹映射在服务器的文件夹中,路径可设置为自己方便寻找以及开发的目录下,如下图红色框所示,本项目映射在/home目录下。

勾选代码自动上传,即修改代码按ctrl+s可自动上传至服务器,如下图所示

增加远程的python SDK,如下图所示,以方便在本地运行服务器上的python环境

增加SSH Interpreter,即远程python解释器(服务器上使用的python),再将配置好的python SDK配置于本项目中,步骤如下图所示

4.3、ATC模型转换

至此,我们已将完成了该项目在MindStudio所需的环境,我们创建如图目录文件夹,转换模型时,首先我们需要设置aipp配置文件,并将其命名为aipp.cfg如图所示,

图中,我们使用静态模型,即aipp_mode设置为static,然后输入的图片格式为RGB888_U8,关闭色域转换,关闭R通道与B通道交换,即csc_switch和rbuv_swap_switch,因为我们在训练过程中会对图像进行归一化,aipp配置文件归一化的运算方式可参考链接。mean_chn_0,mean_chn_1,mean_chn_2分别代表RGB颜色每个通道中的均值,min_chn_0,min_chn_1,min_chn_2分别代表RGB颜色每个通道的最小值,var_reci_chn_0,var_reci_chn_1,var_reci_chn_2表示RGB颜色每个通道方差的倒数。例如,在本项目中,模型训练过程中使用使用了归一化和标准化,即相对应Pytorch框架中transforms.ToTensor()和transforms.Normalize()数据预处理方法。transforms.ToTensor()首先会将图像的像素值输入图像缩放为[0.0,1.0]之间,在将数据转化为张量,而transforms.Normalize()是逐通道的对图像进行标准化,本项目中mean= [0.485, 0.456, 0.406](各通道的均值),std= [0.229, 0.224, 0.225](各通道的标准差)。具体运算如下图所示,

完成aipp文件的设置后,我们可以将上文所训练的onnx模型文件或下载提供的模型并放置models

然后,我们可以点击模型转换按钮,进行模型转换,如图所示

添加models文件夹下的onnx模型,操作如下

完成之后如上操作后点击下一步,配置模型的图像预处理函数,

最后,点击Finish按钮,完成模型转换,如图可看到模型转换成功

4.4、配置插件

在MindStudio中,可以直接可视化编排插件,如下图所示,新建Mind SDK Pipeline,然后直接搜索或者选取项目所需用的插件,并对其进行连线,然后保存在pipeline文件夹中,并命名为crowdcount.pipeline,

在新建的pipeline中,首先选择输入插件(appsrc),获取图像输入数据,如下图所示,

然后在其他插件中选取图像解码插件(mxpi_imagedecoder),并将输入插件(appsrc)与解码插件连线,如下图所示,注意需以OpenCV方式解码图片并将图片转成RGB颜色模型,以符合模型推理数据格式避免检测精度下降。

接着引入缩放插件(mxpi_imageresize),同样以OpenCV方式将输入图片放缩到模型指定输入640*512的尺寸大小,以满足模型推理时图像的大小。如图所示,

紧接着调用推理插件(mxpi_tensorinfer)插件,并加载已转换好的om模型(写入相对路径,如在本项目中则为./models/uav_crowdcounting_norm.om,若使用绝对路径则会报错或保存不了文件)对输入数据张量进行推理。如图所示,

然后再使用输出插件appsink,从stream中获取数据。如下图所示

最后,对每个插件点击鼠标右键进行命名,如图所示

至此,插件配置完成,将文件保存在pipeline文件夹中,并命名为crowdcount.pipeline

配置插件过程中需注意:

1、图像解码插件mxpi_imagedecoder,在本项目模型推理使用的是RGB数据,因此图像解码插件要使用OpenCV处理方式,且需将输出数据改为RGB数据格式。

2、图像归一化或标准化处理插件mxpi_imagenormalize的使用,与4.2模型转换有相关联系,在初步模型转换过程中,我们使用mxpi_imagenormalize图像的归一化与标准化并未使用aipp配置文件,模型虽然能够完成转换,但是在模型推理的结果值为零,具体原因目前尚未知晓,解决方式是将图像的归一化或标准化配置在aipp文件中。

4.5、图片测试

首先我们需要在MindStudio中配置MindX SDK,如图所示,点击红色框按钮,然后选择MindX SDK配置,并点击安装Install SDK按钮

点击之后和配置CANN类似,完成远程CANN和SDK远程路径,然后等待配置完成。

如图所示,SDK配置完之后的效果

到此,我们准备好了模型, pipeline,以及MindX SDK,现在可以使用模型测试单张图片了,main.py编写单张测试代码,如图23所示,

其中创建StreamManager,以及创建Pipeline部分是常规代码,可按照一般流程开发即可,主要区别于对推理结果的处理,即红色框中的代码(69-78行)。模型最终输出为1*5120的一维张量,每个张量代表人群密度值,因此张量之和为该张图片的人群统计数。对于人群密度图,我们将1*5120的一维张量重塑成大小为64*80的数组,并进行最大最小归一化形成人群密度图,然后保存即完成单张图片的人群密度估计。

我们可以在3.1节中在生成的val文件夹下随意选取一张图片复制到data文件夹下并重命名为test.jpg,如图所示,然后点击运行按钮,测试该图像人群密度

运行之后,结果如图所示,

对于生成的密度图,我们可以新建一个名为vis_img.jpg的文件,然后同步服务器文件夹,即可在本地查看生成的人群密度图。

运行程序过程中需注意:

可能出现找不到如下模块的问题,

解决办法:在MindStudio中打开SSH远程连接,在用户目录下新建.profile文件,添加CANN和MindX SDK的环境变量。步骤如图所示

4.6、精度测试

在data文件夹下,将第3节中val.txt重命名为visdrone_test.txt放置data文件夹下,并新建VisDrone2021文件夹,在官网链接下载数据集,且将将数据集中RGB和GT_目录放置在新建的VisDrone2021目录中,步骤如下图所示,

新建eval.py文件之后,我们将测试代码写入eval.py文件中,代码如下

在精度测试中,主要代码则为获取VisDrone测试的数据集,即Dataset类,代码首先按照visdrone_test.txt文件中的图片名加载到Dataset类中,然后在迭代图片的时候以MxDataInput()读取图像的数据,与训练不同测试时是直接使用xml文件中的人群统计数,最后我们计算平均FPS,均方误差(MSE)以及绝对误差(MSE)。

由于我们设置了main.py程序作为MindStudio的运行文件,因此测试精度时,我们需要将运行文件更改为eval.py文件,步骤如下

更改完成之后,我们直接开始进度测试,如下图所示,为运行结果

在图中可以看到FPS未能满足最低20的要求,这可能是因为图片传输过程中有一些耗时,在服务器中均能满足任务要求,服务器中结果图下图所示

精度测试过程中需注意:

所遇问题如4.5中一致

获取帮助

如果有任何疑问,都可以前往MindStudio昇腾论坛获取更多信息。

使用MindStudio进行UAV场景下人群密度估计开发相关推荐

  1. 青海vr消防模拟演练系统,满足了对多人群多场景下的培训需求

    传统校园消防逃生因现实生活中的受限,无法真实模拟火灾现场的场景.采用VR技术能让学生身临其境地在火灾中感受生死大城市的困境,从而学习逃生技巧.危机时刻掌握的逃生技能能体验学生的学习成果. VR消防体验 ...

  2. 人群计数/人群密度估计的研究背景

    人群计数是什么 人群计数是公共安防行业中非常需要的一种技术.对于给定的一幅图像或一段视频,通过计算机自动处理,分析出其中的人数. 为什么要做人群计数 1.公共安全管理:人群计数重中之重的用途就是用于公 ...

  3. 人群密度估计--CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes

    CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes CVPR2018 ...

  4. 人群密度估计--CNN-based Cascaded Multi-task Learning of High-level Prior and Density Estimation for Crowd

    CNN-based Cascaded Multi-task Learning of High-level Prior and Density Estimation for Crowd Counting ...

  5. 神策数据成林松:数据智能在业务场景下的应用(附 PPT 下载)

     在神策 2020 数据驱动用户大会「上海站」现场,神策数据业务咨询师成林松分享了<数据智能在业务场景下的应用>的演讲.(文末附 PPT 下载地址) 本文根据其演讲内容整理,数据均为虚拟. ...

  6. AI安检:北航提出安检场景下的危险品检测基准和去遮挡注意力模块

    ©作者 | 尉言路.陶仁帅 学校 | 北京航空航天大学 研究方向 | 目标检测.小样本学习 随着公共交通枢纽中人群密度的不断增加,安全检查在保护公共空间免受恐怖主义等安全威胁方面的作用越来越重要.安检 ...

  7. 新零售场景下的AIPL分析

    新零售的时代,消费者产生消费的场景越来越复杂,传统营销意义上的AIPL模型也延伸出无数的可能性.AIPL链路分析的重点是针对每个消费者在不同阶段的特征进行深入挖掘,进而支撑市场.运营.商品等进行策略调 ...

  8. 旅行场景下的个性化营销平台揭秘

    分享嘉宾:弘轶.寻潇.溪怀@飞猪 编辑整理:郭嘉伟 内容来源:DataFunTalk 导读:个性化投放的"无人驾驶"平台何以自动化支持上千个场景的千人千面投放?商家.运营.小二,我 ...

  9. 【阿里妈妈营销科学系列】第八篇:增强分析在营销分析场景下的实现和应用...

    丨目录: · 背景 · 业务场景 · 基本概念 · 阿里妈妈智能洞察系统Autolnsight · 应用场景和案例 · 总结 · 关于我们 ▐ 背景 随着以数据驱动业务增长的发展趋势,"数据 ...

最新文章

  1. 微服务架构·基础篇,傻瓜看了都会
  2. 飞利浦AC6608空气净化器粉尘传感器维修
  3. 学校电用计算机控制的,高等学校适用教材:计算机控制技术
  4. 吴恩达入驻知乎首答:如何系统学习机器学习?
  5. readonly和const的区别
  6. leetcode206 反转链表
  7. win10右键一直转圈_Win10总是自动更新?教你如何关掉自动更新
  8. 介绍一下再Apache下的Tomcat负载均衡的一些使用问题
  9. mysql 安装gbk字符_mysql安装后添加gbk字符集的方法
  10. linux .bin文件处理,linux下制作.bin文件方法简介
  11. Java-压缩指针compressedOops
  12. 早上内部资源共享讨论发言稿
  13. 相亲交友源码中,音频AAC解码的实现代码
  14. SAP系统如何打NOTE?
  15. 详解什么是BT种子、迅雷下载链接、磁力链接
  16. 最新的python是哪个版本的好_书声琅琅:Python哪个版本好用
  17. socket通信压力测试
  18. 聚名企服商标注册流程及资料(2022新版新手教程)
  19. 贷款用户逾期问题Task2
  20. 技术变化太快,程序员咋办? 从Adobe Flash想到那些年我幸运躲过的MFC和塞班

热门文章

  1. 莫烦python神经网络进化(NeuroEvolution)之最全篇
  2. 2020年科协第一次硬件培训总结
  3. MySQL搜索: WHERE 多条件
  4. 爆料:曹旭东创立自动驾驶公司Momenta 首次公开项目细节
  5. 直播电商购物消费者满意度在线调查报告(四)
  6. union翻译成中文_union什么意思(union翻译成中文)
  7. bzoj-4433 小凸玩矩阵(二分图,二分+匈牙利)
  8. java中文字符_Java 完美判断中文字符
  9. Edge-SLAM论文翻译
  10. ubuntu虚拟化技术OpenVZ