开发者社区> abel_cao> 正文

嵌入式中的人工神经网络

简介: 版权声明:本文为半吊子子全栈工匠(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)

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
14278 0
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
19807 0
嵌入式中的人工神经网络
版权声明:本文为半吊子子全栈工匠(wireless_com,同公众号)原创文章,未经允许不得转载。
1211 0
启明云端分享:一款低功耗高性价比的嵌入式无线网络控制模块
WT32C3-S5 WiFi 模块是一款低功耗高性价比的嵌入式无线网络控制模块。可满足智能电网、 楼宇自动化、安防、智能家居、远程医疗等物联网应用的需求。
89 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29151 0
基于神经网络嵌入的推荐系统:利用深度学习和维基百科构建图书推荐系统
快来利用深度学习和维基百科构建一个属于你自己的图书推荐系统吧,手把手教学,够简单够酷炫。
2608 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22538 0
+关注
abel_cao
半吊子全栈工匠一枚
436
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载