嵌入式中的人工神经网络

简介: 版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。 https://blog.csdn.net/wireless_com/article/details/83965703

人工神经网络在AI中具有举足轻重的地位,除了找到最好的神经网络模型和训练数据集之外,人工神经网络的另一个挑战是如何在嵌入式设备上实现它,同时优化性能和功率效率。 使用云计算并不总是一个选项,尤其是当设备没有连接的时候。 在这种情况下,需要一个能够实时进行信号预处理和执行神经网络的平台,需要最低功耗,尤其是在一个电池设备上运行的时候。

通过使用不同的工具(如 python 脚本) ,可以训练一个数据格式的网络(在 Caffe 和 Tensorflow),然后使用Snapdragon 神经处理引擎的SDK将其转换为可在Snapdragon 平台上运行的神经网络。

概述

高通的Snapdragon 平台和Snapdragon 神经处理引擎SDK是一个非常好的选择,可以在低功耗和小规模设备上创建一个定制的神经网络。 Snapdragon NPE 是为了给开发者提供工具,使他们能够轻松地将智能从云端迁移到边缘设备。

Snapdragon NPE 为开发者提供软件工具,深度神经网络上的工作负载在移动和其他边缘物联网(IoT)设备上,由 Snapdragon 处理器提供软件工具。 开发者可以为所需的用户体验选择最佳的 Snapdragon 核心—— Qualcomm Kryo CPU、 Qualcomm Adreno GPU 或Hexagon DSP。

本文探讨了利用 Matlab 工具在 Snapdragon 平台上开发和实现神经网络,并主要关注 ONNX 格式。 同时,我们还研究了 Snapdragon 平台如何通过使用 Snapdragon 核心和 SNPE SDK 提供的工具来帮助减少电力和处理时间。

设计并开发简单的 DNN

从设计和培训深度神经网络开始,使用 Matlab并移植带Snapdragon的设计,寻找Snapdragon上最好的子系统来完成这项工作。

手写数字识别系统

从使用 DNN 的手写数字识别系统开始。 这个网络与(音频数字识别系统)之间的主要区别之一是这个系统没有对输入信号进行任何预处理。 具有异构计算架构的 Snapdragon 平台拥有强大的音频和图像处理引擎,使用数字信号处理(dsp)和图形处理单元(GPU)进行音频和图像处理。

该网络是一个基于三层卷积的网络。为了开发和训练这个网络,可以使用 Matlab,还可以使用 Matlab 的手写数据库(与 MNIST 数据库相同; 关于该数据库的资料,请查看 Matlab 文档)。

编写脚本

选择数据库

[XTrain,YTrain] = digitTrain4DArrayData;

[XValidation,YValidation] = digitTest4DArrayData;

设置图层

layers = [    imageInputLayer([28 28 1],'Name','input', 'Normalization', 'none')

convolution2dLayer(5,16,'Padding','same','Name','conv_1')

batchNormalizationLayer('Name','BN_1')

reluLayer('Name','relu_1')

convolution2dLayer(3,32,'Padding','same','Name','conv_2')

batchNormalizationLayer('Name','BN_2')

reluLayer('Name','relu_2')

fullyConnectedLayer(10,'Name','fc')

softmaxLayer('Name','softmax')

classificationLayer('Name','classOutput')];

建立网络

 options = trainingOptions('sgdm',...

'MaxEpochs',6,...

'Shuffle','every-epoch',...

'ValidationData',{XValidation,YValidation},...

'ValidationFrequency',20,...

'Verbose',false,...

'Plots','training-progress');

进行训练(有关训练过程的细节,参见 Matlab的相关文档)。

640?wx_fmt=png

图1 训练结果

为了验证网络,使用这个图像作为分类器,网络可以正确地对它进行分类。

640?wx_fmt=png

 图2 分类器

现在,在将网络转换为 ONNX 格式之后,进入了下一步,即使用 SNPE 工具。

首先,需要将 ONNX 格式转换为 DLC。

snpe-onnx-to-dlc -m handwritten-onnx --debug

这将创建一个 DLC 格式网络,可用于SNPE。

然后使用此命令,可以验证网络结构与在 Matlab 中创建的结构是否匹配。

640?wx_fmt=png

图3 拓扑对比(左侧 SNPE DLC,右侧 Matlab)

现在使用相同的测试图像并在 Snapdragon 目标板上验证它。 以下是 ARM,cDSP 和 GPU 的结果摘要,使用了以下步骤:

  • 拉取平台上不同核(使用 dsp 和使用 gpu)的 snpe-net-run 结果

  • 对照拉取的结果在主机上运行 snpe-diagview

ARM GPU
Dnn Runtime Load/Deserialize/Create Statistics: Load: 4627 us Deserialize: 5148 us Create: 126428 us Average SNPE Statistics: ------------------------------ Total Inference Time: 10956 us Forward Propagate Time: 3080 us Layer Times: --------------- 0: 1 us 1: 1298 us 2: 74 us 3: 8 us 4: 908 us 5: 257 us 6: 16 us 7: 465 us 8: 6 us Dnn Runtime Load/Deserialize/Create Statistics: Load: 4099 us Deserialize: 4931 us Create: 1136097 us Average SNPE Statistics: ------------------------------ Total Inference Time: 3723 us Forward Propagate Time: 3648 us Layer Times: --------------- 0: 5 us 1: 31 us 4: 83 us 7: 381 us 8: 5 us

比较结果表明,DSP 和 GPU 关系密切,但在这些平台上,与 GPU 相比,cDSP 没有较大负载(特别是当有图形应用程序运行时).

使用信号预处理子系统

到目前为止,已经实现的 DNN 网络不需要对输入信号进行任何预处理(比如从输入图像中提取特征)。 然而,并不是所有的实现都是这样。

对于这些情况和实现较低的功耗,可以使用Snapdragon-aDSP,mDSP,cDSP,GPU,dsp/hvx,arm/neon 的不同子系统。看看xDSP和如何使用这些处理器进行特征提取的例子。

Snapdragon上的Hexagon xDSP

Hexagon DSP 是一种具有 L1/2缓存和内存管理单元的多线程DSP,在大多数 Snapdragon SOC上,它和其他核心一样可以访问一些资源。QuRT OS这个独特的结构创建了一个灵活的 DSP 平台,为不同的用例创建应用程序。 

640?wx_fmt=png

 

图4 DSP 硬件体系结构

图像处理

对于实时图像处理,可以在 ISP 管道中注入定制的 HVX 模块。 该模块的管道位置可能不同,取决于Snapdragon 具体型号。 在某些平台上,可以在相机传感器接口模块之后使用它。

640?wx_fmt=png

图5 图像的管道处理

或者在其他地方,可以在相机管道的不同位置(红点)中注入 HVX 模块。 

640?wx_fmt=png

图6 HVX模块的注入点

或者可以用于 ISP 之后的内存转移中。有几个例子可以在 Hexagon sdk3.3中找到。

例如,一个使用 HVX 的噪声640x480图像上的 Sobel 处理,可以使用大约10K 的指令周期。 

640?wx_fmt=png

图7 噪声图像的sobel 处理

音频处理

对于音频预处理,aDSP 及其 Elite 框架适用于实时特征提取。 在数字识别系统的 DNN 网络中,该网络的输入为 Mel-frequency cepstral coefficients (MFCC) ,使用一秒音频文件和14个系数,输入层为14x98。 这个数据是从 https://aiyprojects.withgoogle.com/open_speech_recording 中收集的,每个数字(0-9)使用1500个音频文件。 这里有一个用于数字1的 MFCC 例子。

640?wx_fmt=png

图8 数字1的音频信号

网络配置为 

640?wx_fmt=png

图9 数字的DNN

DNN将尝试学习和分类这些类型的图像为不同的数字。 特征提取部分是在 aDSP 中完成的,是 Elite 框架中音频路径拓扑中的一个定制模块。

 

处理方式 ARM GPU DSP
DNN运行时负载 2532 us 1729 us 15103 us
DNN运行时反序列化 1196 us 1168 us 7678 us
DNN运行时创建 122546 us 1137250 us 216279 us
平均SPNE总推理时间 9020 us 3429 us 4289 us
平均SPNE前向传播时间 3712 us 3382 us 4244 us
平均SPNE层处理时间 0: 2 us 1: 1441 us 2: 117 us 3: 18 us 4: 1736 us 5: 86 us 6: 166 us 7: 91 us 8: 4 us 0: 5 us 1: 132 us 4: 209 us 7: 211 us 8: 4 us 0: 38 us 1: 263 us 2: 1527 us 3: 9 us 4: 154 us 5: 609 us 6: 5 us 7: 128 us 8: 29 us

 

传感器处理

平台包含一个传感器集线器,是Snapdragon 传感器核心,可以帮助整合来自不同传感器的数据并处理它们。 这种技术可以帮助从中央处理器卸载这些任务,减少电池消耗,同时提供更好的性能。 针对传感器行为识别目标的任何传感器信息的任何DNN预处理都可以从 DSP 上卸载,并且可以实时完成。

在上述所有情况下,可以不使用分配的 DSP 进行输入,而是使用 FastRPC 从 ARM 中卸载处理到任何其他子系统(如 mDSP) ,但是这种技术有它自己的处理开销。

小结

Snapdragon 平台和 Snapdragon 神经处理引擎SDK提供了强大的平台和工具,可以在低功耗和小规模的边缘设备上创建一个定制的人工神经网络。

(本文编译自 http://www.embedded-computing.com/iot/artificial-neural-networks-ann-on-snapdragon-based-edge-devices)

 

相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
目录
相关文章
|
6月前
|
机器学习/深度学习 人工智能 算法
人工智能之从零理解人工神经网络
人工智能并非是一个新型的词汇,从十九世纪五十年代开始,人们就开始探索为机器赋予类似人的智能能力。限于当时的基础数学理论不够完善,人工智能的发展并不顺利。直到九十年代发展出了基于统计学的数学工具,人工智能才得到飞速的发展。
178 5
人工智能之从零理解人工神经网络
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
脑科学与人工神经网络ANN的发展历程
脑科学与人工神经网络ANN的发展历程
114 0
|
8月前
|
机器学习/深度学习 调度
【FFNN负荷预测】基于人工神经网络的空压机负荷预测(Matlab代码实现)
【FFNN负荷预测】基于人工神经网络的空压机负荷预测(Matlab代码实现)
|
9月前
|
机器学习/深度学习 计算机视觉
基于人工神经网络的车牌识别系统的研究(Matlab代码实现)
基于人工神经网络的车牌识别系统的研究(Matlab代码实现)
120 1
基于人工神经网络的车牌识别系统的研究(Matlab代码实现)
|
4月前
|
机器学习/深度学习 自然语言处理 算法
一分钟了解人工神经网络(ANN)
人工神经网络(Artificial Neural Network,简称ANN)是一种模仿生物神经网络的算法数学模型,用于进行信息处理和模式识别。 人工神经网络的基本原理是模拟人脑中神经元之间的相互连接和信息传递。它由多个人工神经元(节点)组成,这些神经元通过连接权重相互传递信号,并通过激活函数对输入信号进行处理。如果网络不能准确识别输入,系统就会调整权重。经过充分的训练后,它将始终如一地识别出正确的模式。
|
4月前
|
机器学习/深度学习 自然语言处理 算法
Python高级算法——人工神经网络(Artificial Neural Network)
Python高级算法——人工神经网络(Artificial Neural Network)
86 0
|
4月前
|
机器学习/深度学习 人工智能 算法
数学建模——人工神经网络模型
数学建模——人工神经网络模型
|
11月前
|
机器学习/深度学习 人工智能 算法
基于Transformer的人工神经网络,将有机结构的图像转换为分子结构
基于Transformer的人工神经网络,将有机结构的图像转换为分子结构
178 0
|
8月前
|
机器学习/深度学习 算法 调度
【经济调度】基于多目标宇宙优化算法优化人工神经网络环境经济调度研究(Matlab代码实现)
【经济调度】基于多目标宇宙优化算法优化人工神经网络环境经济调度研究(Matlab代码实现)
|
8月前
|
机器学习/深度学习 数据采集 数据可视化
基于Kaggle训练集预测的多层人工神经网络的能源消耗的时间序列预测研究(Matlab代码实现)
基于Kaggle训练集预测的多层人工神经网络的能源消耗的时间序列预测研究(Matlab代码实现)

热门文章

最新文章