嵌入式中的人工神经网络

作者:媒体转发 时间:2018-11-28 17:48

字号

人工神经网络在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的相关文档)。

 

嵌入式中的人工神经网络

 

图1 训练结果

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

 

嵌入式中的人工神经网络

 

图2 分类器

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

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

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

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

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

 

嵌入式中的人工神经网络

 

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

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

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

 

嵌入式中的人工神经网络

 

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

使用信号预处理子系统

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

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接