基于香橙派AIpro和昇腾AI计算芯片的目标检测应用(详细教程)

目录

前言

1.介绍开发板

2.应用场景

3.安装操作系统

3.1 下载工具

3.2 烧录系统

3.3 系统装载

4.配置操作系统

4.1 登录系统账户

4.2 配置网络连接

4.3 查看设备网络

4.4 配置远程连接

5.部署目标检测应用

5.1 准备运行环境

5.2 模型二次训练

​5.3 热成像温度检测

5.4 转换模型格式

5.5 编译运行应用

6.体验感想与结论

6.1 社区资源

6.2 快速开发

6.3 智启未来


author

daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主

daisy.skye_嵌入式,Linux,Qt-CSDN博客daisy.skye擅长嵌入式,Linux,Qt,等方面的知识​编辑https://blog.csdn.net/qq_40715266?type

前言

在接触Orange Pi AIpro之前接触过香橙派家的H618开发板开发过小项目,整体的了解就是基于sunxi全志家的内核开发的,较早一点的还接触过瑞芯微的,行业里面也经常拿搭载这两家内核的芯片做一些安卓话机,广告机之类的。

最近看到香橙派搭载的昇腾算力芯片当然要也体验一把啦!

1.介绍开发板

本文是一篇Orange Pi AIpro开发板的新手上手指导,详尽地从开发板的介绍、烧录、上电,直到开发板的使用、部署、成果、结论。首先来简单看一下开发板的外观以及都有哪些重要组件。

图:开发板正面视图以及各组件介绍

可以看到开发板上最显眼也是最重要的就是中间的4核64位+AI双处理器了,处理器核心用金属盖板盖住,采用钎焊技术增强了高负载场景下的散热能力。同时也能看到,开发板的外围接口十分丰富,包括两个HDMI输出、GPIO接口、Type-C电源接口、支持SATA/NVMe SSD 2280的M.2插槽、TF插槽、千兆网口、两个USB3.0、一个USB Type-C 3.0、一个Micro USB(串口打印调试功能)、两个MIPI摄像头、一个MIPI屏等,预留电池接口,是接口非常齐全的一款开发板了,大家都知道,外围资源越多,开发时候就越方便,越能充分发挥出开发板的能力。

Orange Pi AIpro开发板需要使用可以提供PD协议20v电压的充电器。查看充电器的铭文位置,看充电器是否支持20v的输出电压。

图:选择合适的充电器

2.应用场景

拿到这块开发板之后,我需要先搞清楚我可以用它做什么。来看一下官方的介绍: Orange Pi AIro 开发板是香橙派联合华为精心打造的高性能 AI 开发板,采用昇腾AI技术路线,具体为4核64位处理器+AI处理器,集成图形处理器,支持8-12TOPS AI算力,拥有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模块,支持双4K高清输出。 Orange Pi AIpro引用了相当丰富的接口,可广泛适用于AI边缘计算、深度视觉学习及视频流AI分析、视频图像分析、自然语言处理、智能小车、机械臂、人工智能、无人机、云计算、AR/VR、智能安防、智能家居等领域,覆盖 AIoT各个行业。 Orange Pi AIpro支持Ubuntu、openEuler操作系统,满足大多数AI算法原型验证、推理应用开发的需求。

图:Orange Pi AIpro开发板的应用场景

从官方的介绍中可以得知,Orange Pi AIpro开发板是香橙派联合华为精心打造的人工智能算力平台,它的核心卖点就是它是一款具有很高扩展性的高算力平台,买它就是图它的算力和开放易用的平台,我可以使用它的算力来运行各类AI应用。在大家日常生活中最常接触的算力应用应该就是智能驾驶了吧。但凡车企有新车型发布,在发布会上几乎都会提到其搭载芯片的算力,足以见得高算力对于推动科技进步的关键作用。

图:近年来机器学习系统所需算力增长趋势

算力领域细分为本地算力与云端算力两大阵营,其差异核心在于能耗效率与成本考量。在轻量级任务场景中,本地算力足以胜任高速且直接的简单计算需求,确保即时响应。然而,面对大规模或复杂计算挑战时,繁重的计算工作就会交给云端算力解决,展现出无可比拟的优势。Orange Pi AIpro开发板作为一款搭载了昇腾310B AI处理器的本地算力平台,用户可以使用它进行一些AI计算、AI应用。下面就从操作系统的安装开始我们的教程吧。

3.安装操作系统

由于Orange Pi AIpro开发板本身并不自带操作系统和运行环境,需要在启动介质上进行安装系统的操作,才可以正常使用开发板。Orange Pi AIpro开发板的操作系统支持安装在TF卡、eMMC、NVMe、SATA SSD这四种介质上。下面来了解一下这四种启动介质的特点。

  • TF卡特点主要在于体积小重量轻,接口通用简单,在小体积设备上尤其常用,连接各种设备都很方便。
  • eMMC是一种将主控、闪存单元都封装在一个颗粒芯片中的存储介质,特点同样是体积小重量轻,但是因为其封装接口一般是BGA或者B2B连接器,易用性上不如插卡槽的TF卡。Orange Pi AIpro开发板上便是通过B2B连接器来连接eMMC。
  • NVMe是通过PCIe通道连接的SSD,特点是数据传输带宽大,所以NVMe的传输速度是这四种介质中最快的,同时也是价格最贵的。接口可以和SATA SSD通用。
  • SATA SSD是使用了传统的SATA接口标准的SSD,特点是技术简单,价格比NVMe便宜,在速度和价格之间达成了比较有性价比的平衡。接口可以和NVMe通用。

图:Orange Pi AIpro开发板支持的四种启动介质

经过上面的对比,我就选择了最简单方便的TF卡来开始安装操作系统。

3.1 下载工具

首先需要下载系统烧录工具包和系统镜像。进入官方提供的Orange Pi AIpro下载页面 Orange Pi - Orangepi ,下载好官方工具,接着向下滚动到官方镜像部分,这里选择下载openEuler镜像。openEuler系统也就是华为服务器操作系统 EulerOS,在开源后命名为 openEuler。这个镜像具备了完整的开发环境,同时也自带了一些AI测试demo,用于测试开发板性能。

图:需要下载的文件

3.2 烧录系统

把一张准备烧录系统的TF卡插入读卡器,并连接电脑。随后安装工具包中的balenaEtcher软件,这是一款跨平台的免费系统烧录工具。安装完毕后打开balenaEtcher,选择解压后的.img系统镜像,将系统烧录到TF卡中。步骤比较简单,这也是这款烧录软件广受好评被大家推荐的原因。

图:烧录系统流程一览

3.3 系统装载

系统烧录完毕后,将卡插入开发板背面的卡槽中。

图:开发板背面视图以及各组件介绍

随后需要将启动方式拨码开关拨到TF卡启动模式,也就是两个开关都拨到最右,远离TF卡的方向。

这样一来,操作系统的安装就到此结束了,接下来开始配置操作系统。

4.配置操作系统

4.1 登录系统账户

按图示连接方式连接开发板和外设。

图:外设连接示意图

上电后,开发板会进行开机自检,板载的风扇会以最大功率启动,大约会持续10秒左右,同时,设备上的两个LED灯也会随着系统启动而依次点亮。

图:启动后LED灯亮起

使用HDMI连接线连接显示屏,会看见系统启动后的系统主屏登录界面,至此就完成了系统的启动。

图:系统主屏登录界面

进入登录界面后,需要输入账户HwHiAiUser的密码,根据官方文档的说明,需要输入密码 Mind@123

4.2 配置网络连接

进入系统后,首先需要给设备配网,这里可以选择连接网线,也可以选择WiFi连接。有线连接的话直接接上网线到网络上即可;WiFi连接需要是通过右上角的无线网络连接进行连接。

图:WiFi网络连接示意图

4.3 查看设备网络

接着可以在界面下方,单击图标,打开终端,在终端欢迎界面可以查看到开发板的ip地址。

由于openEuler镜像是自带了可视化桌面的,所以在网络连接完毕后,Orange Pi AIpro开发板可以直接作为一台电脑使用,浏览网页、播放视频对于它来说都不在话下。当然,在本篇教程里是把开发板作为算力平台使用的,所以接下来转移到下一个章节,开始进入开发板的核心。

4.4 配置远程连接

回到电脑面前,接下来需要在电脑上通过ssh连接开发板,这样就不需要使用鼠标键盘连接开发板进行操作,相当于在电脑上远程控制开发板。首先,在菜单中打开终端

图:菜单中的终端

根据ssh的连接格式,输入ssh HwHiAiUser@ 紧跟着把开发板的ip输进去,回车

图:ssh连接开发板

需要输入密码 Mind@123 。注意,在linux系统中,输入的账户密码并不会有任何显示,需要盲操。输入完毕后回车

连接成功后,会显示欢迎文本以及等待输入的命令行

到这里就可以正式开始AI应用的部署了。

5.部署目标检测应用

19年的疫情已经过去,在痊愈后的今天,大家最好还是要在公共场所佩戴口罩。这里我来部署一个开源的口罩佩戴检测的应用,这个开源项目的网址是

Ascend/EdgeAndRobotics - Gitee.com,它基于预训练的ssd-mobilenet模型,使用了预设的口罩识别数据集,这个应用包含了从训练到om推理的全过程。

这里要提示一下,运行AI应用前的系统环境需要安装了 昇腾NPU(Neural-Network Processing Unit,神经网络处理器单元)驱动固件、CANN(Compute Architecture for Neural Networks,异构计算架构)软件、二进制算子包、PyTorch框架2.1.0、torchvision1.16.0、torch_npu插件1.16.0、ACLLite库 方可正常执行。看见这些环境不要害怕,其实这些环境在烧录的系统中已经配置好了,我只要使用它们就可以了。如果遇到系统环境上的问题,不用担心,昇腾官方的社区有着非常完善的系统环境配置教程,相信你一定可以顺利安装它们。

回到电脑面前,开始部署应用的流程。

5.1 准备运行环境

首先需要下载口罩识别目标检测应用的源码仓库到本地目录中。目录是什么?我们需要了解一下linux中目录的概念,目录的形式与Windows中的文件夹类似,大家所说的“切换到system目录”其实就是在文件管理器中打开并进入到system文件夹的操作,只是在linux命令行中,使用的是 cd /system 命令。

登录ssh后可以运行pwd,查看当前所在目录的完整路径

可以看到当前所在的是home目录下的用户名目录,这是用于存放用户文件的主目录,可以把项目、文件、资料都放在这里,就像一个家一样,所以称之为家目录。还可以看到,默认所在的目录是一个波浪号~,这是为了方便用户回家而设置的快捷方式,在想回家的时候运行 cd ~ 就可以回家了。在这里可以把项目下载到家目录中。

在ssh窗口中运行 git clone Ascend/EdgeAndRobotics ,源码会下载到当前目录下,也就是家目录,所以直接运行ls命令来列出当前目录下的所有文件,可以看到home目录下已经有了一个EdgeAndRobotics目录,运行 cd EdgeAndRobotics/Samples/DetectionRetrainingAndInfer/ 进入口罩识别目标检测应用的目录。

接着需要配置环境变量,指定一些参数,减小算子编译内存占用。环境变量是一种在系统中全局定义的变量,也就是用来指定操作系统运行环境的一种动态值。可以通过export 变量=值 的格式来进行环境变量的配置。在这里需要配置两个环境变量

export TE_PARALLEL_COMPILER=1

export MAX_COMPILE_CORE_NUMBER=1

配置完环境变量后,需要下载依赖包,由于网络环境的原因,需要使用到国内的镜像源,执行下面的命令进行下载

pip3 install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com -r requirements.txt

5.2 模型二次训练

接下来是下载用于训练模型的数据集。在机器学习中,数据集是算法和模型的基础,通过对数据集的学习,算法能够识别数据中的模式和规律,从而进行预测或分类。进入到dataset目录,运行

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/detection/mobilenet-v1-ssd-mp-0_675.pth

等下载进度条跑完,需要解压压缩包,使用unzip命令进行解压

unzip mask.zip

接下来需要进行数据集的预处理,分出训练集和验证集。训练集顾名思义,是用于训练机器学习模型的数据集;而验证集是用于验证不同参数下模型的成绩。训练集和验证集之间的数据不会重叠,这样可以保证模型在没有见过的数据上的能力。返回上一次目录,开始数据预处理

cd ..

python3 predata.py

数据预处理结束后,下一步下载一个预训练模型进行二次训练。预训练模型是在大型数据集上预先训练好的模型,在此基础上进行二次训练微调,可以提高很多的效率。

​cd models

Wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/detection/mobilenet-v1-ssd-mp-0_675.pth

cd ..

python3 main.py

5.3 热成像温度检测

二次训练需要比较长的时间,在训练的运行过程中,由于开发板此时正处于最高负载状态下,可以通过温度检测来考量开发板的散热设计。我使用热成像仪对开发板进行了温度检测,检测可见开发板温度最高处达到了55.8度,主要发热源是昇腾310B AI处理器。这个温度达到8TOPS算力,在AI计算平台中是属于相当冷静的那一部分了。

图:使用热成像仪检测开发板高负载运行温度

5.4 转换模型格式

训练完毕后,需要导出ONNX模型。ONNX模型(Open Neural Network Exchange)是一种开放格式的模型格式,用于实现不同机器学习框架之间的互操作性,允许开发者在不同的框架和工具之间轻松迁移和部署深度学习模型。使用下面的指令导出

python3 export.py

导出完毕后,获取一张用于测试的检测图片,待会就用这张戴口罩的图片测试我训练的模型究竟能不能成功识别出来口罩

图:待测试的原始图片

cd omInfer/data

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/detection/mask.jpg

下一步,获取PyTorch框架的mobilenet-ssd模型(*.onnx),并转换为昇腾AI处理器能识别的专用模型(*.om)。首先将导出的mobilenet-ssd.onnx模型复制到model目录下

cd ../model

cp ../../mobilenet-ssd.onnx ./

接着获取AIPP配置文件

​wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/detection/aipp/aipp.cfg

最后进行模型转换

atc --model=mobilenet-ssd.onnx --framework=5 --soc_version=Ascend310B4 --output=mobilenet-ssd --insert_op_conf=aipp.cfg

atc命令中各参数的解释如下:

- model:转换前模型文件的路径。

- framework:原始框架类型。5表示ONNX。

- output:转换后模型文件的路径。请注意,记录保存该om模型文件的路径,后续开发应用时需要使用。

- input_shape:模型输入数据的shape。

- soc_version:昇腾AI处理器的版本。

5.5 编译运行应用

终于到了最关键的步骤了,编译应用源码,继续运行以下命令来开始编译

cd ../scripts

bash sample_build.sh

最后,等待编译完成后就可以运行这个口罩识别目标检测应用了。运行检测程序:

bash sample_run.sh

执行成功后,omInfer/output目录下会生成检测结果的输出图片,可以看到,模型对图片中的口罩进行了正确的识别框选和置信度打分。准确的识别框表示模型能正确找到目标在图片中的位置和尺寸,置信度0.999表示模型对于检测结果非常确信。

图:模型对口罩成功进行了识别

6.体验感想与结论

经过一番实际操作与测试,一个口罩识别目标检测应用已经成功运行在Orange Pi AIpro开发板上,可以直观地感受到Orange Pi AIpro开发板搭载的昇腾310B AI处理器8TOPS(每秒万亿次操作)带来的澎湃算力,作为计算核心,强大而又冷静的算力提供了高效的性能,为复杂的人工智能算法提供了坚实的性能支撑。

6.1 社区资源

在我体验Orange Pi AIpro开发板的过程中,华为昇腾提供的丰富的社区资源为我的整个体验过程带来了充分的文档保障,昇腾AI市场众多的解决方案也为不同业务场景带来了更多的可能性。

对于开发者而言,Orange Pi AIpro开发板丰富的接口设计、强大的硬件兼容性、优化的软件开发环境以及资料齐全的社区,极大地降低了AI应用开发门槛,让开发者能够更专注于功能的优化与应用场景的创新。

6.2 快速开发

在实际开发过程中,我发现通过简单的数据集替换与模型微调,就能轻松实现应用的多元化扩展。作为一种目标检测应用,我可以很轻松地更换上述二次训练的数据集,快速为特定目标来改变模型识别能力。比如换成交通标志数据集,配合摄像头实时图传,就实现了电子狗系统,实时监测并提醒驾驶员注意道路标志,有效提升行车安全;换成道路行人车辆数据集,就可以应用到智能驾驶情景中去,通过目标检测与识别能力,为智能驾驶带来更好更安全的体验。

6.3 智启未来

在大模型大AI百花齐放的今天,算力和开发成本越来越重要。在本篇教程中,不难发现,Orange Pi AIpro开发板同时具备了强大的算力和易于集成的开发环境,强大的算力意味着运行速度快,而开发成本降低意味着开发速度快降本增效,在开发与部署中有着显著的优势。再加上Orange Pi AIpro开发板拥有充沛的社区资源以及快速开发能力,可以帮助用户轻松实现从创意到原型再到批量生产的交付,是创客、梦想家、业余爱好者的理想创意平台。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 13:14:02       132 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 13:14:02       146 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 13:14:02       122 阅读
  4. Python语言-面向对象

    2024-07-20 13:14:02       133 阅读

热门阅读

  1. 定个小目标之刷LeetCode热题(45)

    2024-07-20 13:14:02       26 阅读
  2. 人工势场法路径规划算法

    2024-07-20 13:14:02       23 阅读
  3. Android笔试面试题AI答之Activity(2)

    2024-07-20 13:14:02       27 阅读
  4. HIVE:使用get_json_object解析json对象

    2024-07-20 13:14:02       32 阅读
  5. Elasticsearch索引管理和生命周期管理

    2024-07-20 13:14:02       29 阅读
  6. 现代生活背景下陶瓷艺术设计的延伸与发展

    2024-07-20 13:14:02       30 阅读
  7. LeetCode 2956.找到两个数组中的公共元素:哈希表

    2024-07-20 13:14:02       28 阅读
  8. 麦芒30全新绽放,中国电信勾勒出AI手机的新方向

    2024-07-20 13:14:02       33 阅读
  9. Prometheus 运维中实际的故障案例以及解决办法

    2024-07-20 13:14:02       25 阅读
  10. Gmsh应用程序编程接口

    2024-07-20 13:14:02       25 阅读
  11. 【Go系列】RPC和grpc

    2024-07-20 13:14:02       29 阅读
  12. Spark SQL----INSERT OVERWRITE DIRECTORY

    2024-07-20 13:14:02       30 阅读