嵌入式中的人工神經(jīng)網(wǎng)絡
人工神經(jīng)網(wǎng)絡在AI中具有舉足輕重的地位,除了找到***的神經(jīng)網(wǎng)絡模型和訓練數(shù)據(jù)集之外,人工神經(jīng)網(wǎng)絡的另一個挑戰(zhàn)是如何在嵌入式設備上實現(xiàn)它,同時優(yōu)化性能和功率效率。 使用云計算并不總是一個選項,尤其是當設備沒有連接的時候。 在這種情況下,需要一個能夠實時進行信號預處理和執(zhí)行神經(jīng)網(wǎng)絡的平臺,需要***功耗,尤其是在一個電池設備上運行的時候。
通過使用不同的工具(如 python 腳本) ,可以訓練一個數(shù)據(jù)格式的網(wǎng)絡(在 Caffe 和 Tensorflow),然后使用Snapdragon 神經(jīng)處理引擎的SDK將其轉換為可在Snapdragon 平臺上運行的神經(jīng)網(wǎng)絡。
概述
高通的Snapdragon 平臺和Snapdragon 神經(jīng)處理引擎SDK是一個非常好的選擇,可以在低功耗和小規(guī)模設備上創(chuàng)建一個定制的神經(jīng)網(wǎng)絡。 Snapdragon NPE 是為了給開發(fā)者提供工具,使他們能夠輕松地將智能從云端遷移到邊緣設備。
Snapdragon NPE 為開發(fā)者提供軟件工具,深度神經(jīng)網(wǎng)絡上的工作負載在移動和其他邊緣物聯(lián)網(wǎng)(IoT)設備上,由 Snapdragon 處理器提供軟件工具。 開發(fā)者可以為所需的用戶體驗選擇***的 Snapdragon 核心—— Qualcomm Kryo CPU、 Qualcomm Adreno GPU 或Hexagon DSP。
本文探討了利用 Matlab 工具在 Snapdragon 平臺上開發(fā)和實現(xiàn)神經(jīng)網(wǎng)絡,并主要關注 ONNX 格式。 同時,我們還研究了 Snapdragon 平臺如何通過使用 Snapdragon 核心和 SNPE SDK 提供的工具來幫助減少電力和處理時間。
設計并開發(fā)簡單的 DNN
從設計和培訓深度神經(jīng)網(wǎng)絡開始,使用 Matlab并移植帶Snapdragon的設計,尋找Snapdragon上***的子系統(tǒng)來完成這項工作。
手寫數(shù)字識別系統(tǒng)
從使用 DNN 的手寫數(shù)字識別系統(tǒng)開始。 這個網(wǎng)絡與(音頻數(shù)字識別系統(tǒng))之間的主要區(qū)別之一是這個系統(tǒng)沒有對輸入信號進行任何預處理。 具有異構計算架構的 Snapdragon 平臺擁有強大的音頻和圖像處理引擎,使用數(shù)字信號處理(dsp)和圖形處理單元(GPU)進行音頻和圖像處理。
該網(wǎng)絡是一個基于三層卷積的網(wǎng)絡。為了開發(fā)和訓練這個網(wǎng)絡,可以使用 Matlab,還可以使用 Matlab 的手寫數(shù)據(jù)庫(與 MNIST 數(shù)據(jù)庫相同; 關于該數(shù)據(jù)庫的資料,請查看 Matlab 文檔)。
編寫腳本
選擇數(shù)據(jù)庫
- [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')];
建立網(wǎng)絡
- options = trainingOptions('sgdm',...
- 'MaxEpochs',6,...
- 'Shuffle','every-epoch',...
- 'ValidationData',{XValidation,YValidation},...
- 'ValidationFrequency',20,...
- 'Verbose',false,...
- 'Plots','training-progress');
進行訓練(有關訓練過程的細節(jié),參見 Matlab的相關文檔)。
圖1 訓練結果
為了驗證網(wǎng)絡,使用這個圖像作為分類器,網(wǎng)絡可以正確地對它進行分類。
圖2 分類器
現(xiàn)在,在將網(wǎng)絡轉換為 ONNX 格式之后,進入了下一步,即使用 SNPE 工具。
首先,需要將 ONNX 格式轉換為 DLC。
- snpe-onnx-to-dlc -m handwritten-onnx --debug
這將創(chuàng)建一個 DLC 格式網(wǎng)絡,可用于SNPE。
然后使用此命令,可以驗證網(wǎng)絡結構與在 Matlab 中創(chuàng)建的結構是否匹配。
圖3 拓撲對比(左側 SNPE DLC,右側 Matlab)
現(xiàn)在使用相同的測試圖像并在 Snapdragon 目標板上驗證它。 以下是 ARM,cDSP 和 GPU 的結果摘要,使用了以下步驟:
拉取平臺上不同核(使用 dsp 和使用 gpu)的 snpe-net-run 結果
比較結果表明,DSP 和 GPU 關系密切,但在這些平臺上,與 GPU 相比,cDSP 沒有較大負載(特別是當有圖形應用程序運行時).
使用信號預處理子系統(tǒng)
到目前為止,已經(jīng)實現(xiàn)的 DNN 網(wǎng)絡不需要對輸入信號進行任何預處理(比如從輸入圖像中提取特征)。 然而,并不是所有的實現(xiàn)都是這樣。
對于這些情況和實現(xiàn)較低的功耗,可以使用Snapdragon-aDSP,mDSP,cDSP,GPU,dsp/hvx,arm/neon 的不同子系統(tǒng)。看看xDSP和如何使用這些處理器進行特征提取的例子。
Snapdragon上的Hexagon xDSP
Hexagon DSP 是一種具有 L1/2緩存和內存管理單元的多線程DSP,在大多數(shù) Snapdragon SOC上,它和其他核心一樣可以訪問一些資源。QuRT OS這個獨特的結構創(chuàng)建了一個靈活的 DSP 平臺,為不同的用例創(chuàng)建應用程序。
圖4 DSP 硬件體系結構
圖像處理
對于實時圖像處理,可以在 ISP 管道中注入定制的 HVX 模塊。 該模塊的管道位置可能不同,取決于Snapdragon 具體型號。 在某些平臺上,可以在相機傳感器接口模塊之后使用它。
圖5 圖像的管道處理
或者在其他地方,可以在相機管道的不同位置(紅點)中注入 HVX 模塊。
圖6 HVX模塊的注入點
或者可以用于 ISP 之后的內存轉移中。有幾個例子可以在 Hexagon sdk3.3中找到。
例如,一個使用 HVX 的噪聲640x480圖像上的 Sobel 處理,可以使用大約10K 的指令周期。
圖7 噪聲圖像的sobel 處理
音頻處理
對于音頻預處理,aDSP 及其 Elite 框架適用于實時特征提取。 在數(shù)字識別系統(tǒng)的 DNN 網(wǎng)絡中,該網(wǎng)絡的輸入為 Mel-frequency cepstral coefficients (MFCC) ,使用一秒音頻文件和14個系數(shù),輸入層為14x98。 這個數(shù)據(jù)是從 https://aiyprojects.withgoogle.com/open_speech_recording 中收集的,每個數(shù)字(0-9)使用1500個音頻文件。 這里有一個用于數(shù)字1的 MFCC 例子。
圖8 數(shù)字1的音頻信號
網(wǎng)絡配置為
圖9 數(shù)字的DNN
DNN將嘗試學習和分類這些類型的圖像為不同的數(shù)字。 特征提取部分是在 aDSP 中完成的,是 Elite 框架中音頻路徑拓撲中的一個定制模塊。
傳感器處理
平臺包含一個傳感器集線器,是Snapdragon 傳感器核心,可以幫助整合來自不同傳感器的數(shù)據(jù)并處理它們。 這種技術可以幫助從中央處理器卸載這些任務,減少電池消耗,同時提供更好的性能。 針對傳感器行為識別目標的任何傳感器信息的任何DNN預處理都可以從 DSP 上卸載,并且可以實時完成。
在上述所有情況下,可以不使用分配的 DSP 進行輸入,而是使用 FastRPC 從 ARM 中卸載處理到任何其他子系統(tǒng)(如 mDSP) ,但是這種技術有它自己的處理開銷。
小結
Snapdragon 平臺和 Snapdragon 神經(jīng)處理引擎SDK提供了強大的平臺和工具,可以在低功耗和小規(guī)模的邊緣設備上創(chuàng)建一個定制的人工神經(jīng)網(wǎng)絡。
(本文編譯自 http://www.embedded-computing.com/iot/artificial-neural-networks-ann-on-snapdragon-based-edge-devices)
【本文來自51CTO專欄作者“老曹”的原創(chuàng)文章,作者微信公眾號:喔家ArchiSelf,id:wrieless-com】