嵌入式中的人工神經網絡

人工神經網絡在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 結果
  • 對照拉取的結果在主機上運行 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 平臺,爲不同的用例創建應用程序。

圖4 DSP 硬件體系結構

圖像處理

對於實時圖像處理,可以在 ISP 管道中注入定製的 HVX 模塊。 該模塊的管道位置可能不同,取決於Snapdragon 具體型號。 在某些平臺上,可以在相機傳感器接口模塊之後使用它。

圖5 圖像的管道處理

或者在其他地方,可以在相機管道的不同位置(紅點)中注入 HVX 模塊。

圖6 HVX模塊的注入點

或者可以用於 ISP 之後的內存轉移中。有幾個例子可以在 Hexagon sdk3.3中找到。

例如,一個使用 HVX 的噪聲640x480圖像上的 Sobel 處理,可以使用大約10K 的指令週期。

圖7 噪聲圖像的sobel 處理

音頻處理

對於音頻預處理,aDSP 及其 Elite 框架適用於實時特徵提取。 在數字識別系統的 DNN 網絡中,該網絡的輸入爲 Mel-frequency cepstral coefficients (MFCC) ,使用一秒音頻文件和14個係數,輸入層爲14x98。 這個數據是從 https://aiyprojects.withgoogle.com/open_speech_recording 中收集的,每個數字(0-9)使用1500個音頻文件。 這裏有一個用於數字1的 MFCC 例子。

圖8 數字1的音頻信號

網絡配置爲

圖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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章