当前位置: 首页 > 科技观察

嵌入式人工神经网络

时间:2023-03-20 15:35:56 科技观察

人工神经网络在人工智能中起着举足轻重的作用。除了找到最好的神经网络模型和训练数据集,人工神经网络的另一个挑战是如何将它们集成到嵌入式设备中。在Internet上实现它,同时优化性能和电源效率。使用云计算并不总是一种选择,尤其是当设备未连接时。在这种情况下,需要一个能够实时进行信号预处理和神经网络执行的平台,需要最小的功耗,尤其是在电池供电的设备上运行时。通过使用不同的工具(例如python脚本),可以以一种数据格式(在Caffe和Tensorflow中)训练一个网络,然后使用Snapdragon神经处理引擎SDK将其转换成可以运行在机器上的神经网络骁龙平台。概述Qualcomm的Snapdragon平台和Snapdragon神经处理引擎SDK是在低功耗和小型设备上创建自定义神经网络的绝佳选择。SnapdragonNPE旨在为开发人员提供工具,让他们能够轻松地将智能从云端转移到边缘设备。SnapdragonNPE为开发人员提供软件工具,用于处理由Snapdragon处理器提供支持的移动和其他边缘物联网(IoT)设备上的深度神经网络工作负载。开发者可以选择最先进的骁龙内核以获得所需的用户体验——QualcommKryoCPU、QualcommAdrenoGPU或HexagonDSP。本文探讨使用Matlab工具在Snapdragon平台上开发和实现神经网络,重点介绍ONNX格式。同时,我们还研究了骁龙平台如何通过使用SNPESDK提供的骁龙内核和工具来帮助降低功耗和处理时间。设计和开发简单的DNN从设计和训练深度神经网络开始,使用Matlab并将设计移植到Snapdragon,在Snapdragon上找到最好的子系统来完成这项工作。手写数字识别系统从使用DNN的手写数字识别系统开始。该网络与(音频编号识别系统)的主要区别之一是该系统不对输入信号进行任何预处理。采用异构计算架构的骁龙平台拥有强大的音频和图像处理引擎,采用数字信号处理(DSP)和图形处理单元(GPU)进行音频和图像处理。该网络是一个基于三层卷积的网络。要开发和训练这个网络,您可以使用Matlab,您可以使用Matlab的手写数据库(与MNIST数据库相同;有关此数据库的信息,请参阅Matlab文档)。编写脚本选择数据库[XTrain,YTrain]=digitTrain4DArrayData;[XValidation,YValidation]=digitTest4DArrayData;设置图层layers=[imageInputLayer([28281],'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')];buildnetworkoptions=trainingOptions('sgdm',...'MaxEpochs',6,...'Shuffle','every-epoch',...'ValidationData',{XValidation,YValidation},...'ValidationFrequency',20,...'Verbose',false,...'Plots','training-progress');用于训练(与训练过程相关,详见Matlab的相关文档)。图1.训练结果为了验证网络,使用此图像作为分类器,网络可以正确地对其进行分类。图2分类器现在,将网络转换为ONNX格式后,我们进入下一步,即使用SNPE工具。首先,需要将ONNX格式转为DLC格式。snpe-onnx-to-dlc-mhandwritten-onnx--debug这将创建可与SNPE一起使用的DLC格式网络。然后使用此命令,您可以验证网络结构是否与在Matlab中创建的网络结构相匹配。图3拓扑对比(左边是SNPEDLC,右边是Matlab)现在使用相同的测试图像,在Snapdragon目标板上进行验证。下面是对ARM、cDSP和GPU的结果汇总,使用步骤如下:拉取平台上不同核的snpe-net-run结果(使用dsp和使用gpu)对比结果显示DSP和GPU接近相关,但在这些平台上,cDSP相比GPU的负载并不大(尤其是有图形应用运行时)。使用信号预处理子系统到目前为止已经实现的DNN网络不需要对输入信号进行任何预处理(例如从输入图像中提取特征)。然而,并不是所有的实现都是这样的。对于这些情况,为了实现更低的功耗,可以使用Snapdragon-aDSP、mDSP、cDSP、GPU、dsp/hvx、arm/neon的不同子系统。查看xDSP以及如何使用这些处理器进行特征提取的示例。Snapdragon上的HexagonxDSPHexagonDSP是一个多线程DSP,具有L1/2缓存和内存管理单元,它可以像大多数SnapdragonSOC上的其他内核一样访问某些资源。QuRTOS的这种独特结构创建了一个灵活的DSP平台,可以为不同的用例创建应用程序。图4.DSP硬件架构图像处理对于实时图像处理,可以在ISP流水线中注入自定义HVX模块。该模块的管道位置可能会有所不同,具体取决于具体的Snapdragon型号。在某些平台上,它可以在相机传感器接口模块之后使用。图5.图像或其他地方的流水线处理,HVX模块可以注入相机流水线的不同地方(红点)。图6HVX模块的注入点也可用于ISP后的内存传输。在Hexagonsdk3.3中可以找到几个示例。例如,使用HVX对嘈杂的640x480图像进行Sobel处理可以使用大约10K指令周期。图7.噪声图像的Sobel处理。音频处理。对于音频预处理,aDSP及其Elite框架适用于实时特征提取。在数字识别系统的DNN网络中,网络的输入是Mel-frequencycepstralcoefficients(MFCC),使用第二个音频文件和14个系数,输入层为14x98。此数据是从https://aiyprojects.withgoogle.com/open_speech_recording收集的,每个数字(0-9)使用1500个音频文件。下面是数字1的MFCC示例。图8配置为图9的数字1音频信号网络数字DNNDNN将尝试学习这些类型的图像并将其分类为不同的数字。特征提取部分在aDSP中完成,aDSP是Elite框架中音频路径拓扑中的自定义模块。传感器处理平台包括一个传感器中枢,它是骁龙传感器的核心,有助于整合来自不同传感器的数据并进行处理。这种技术可以帮助从CPU卸载这些任务,减少电池消耗,同时提供更好的性能。传感器行为识别目标的任何传感器信息的任何DNN预处理都可以从DSP卸载并实时完成。在上述所有情况下,可以使用FastRPC将处理从ARM卸载到任何其他子系统(例如mDSP),而不是将分配的DSP用于输入,但这种技术有其自身的处理开销。总结骁龙平台和骁龙神经处理引擎SDK提供了一个强大的平台和工具,可以在低功耗和小型边缘设备上创建自定义人工神经网络。(本文编译自http://www.embedded-computing.com/iot/artificial-neural-networks-ann-on-snapdragon-based-edge-devices)【本文来自专栏作者原创文章】老曹》,作者微信公众号:哦家ArchiSelf,id:wrieless-com】点此阅读更多作者好文