目前,在許多需要在本地進行數據分析的“永遠在線”的物聯網邊緣設備中,神經網絡正在變得越來越普及,主要是因為可以有效地同時減少數據傳輸導致的延時和功耗。 而談到針對物聯網邊緣設備上的神經網絡,我們自然會想到Arm Cortex-M系列處理器內核,那么如果您想要強化它的性能并且減少內存消耗,CMSIS-NN就是您最好的選擇。基于CMSIS-NN內核的神經網絡推理運算,對于運行時間/吞吐量將會有4.6X的提升,而對于能效將有4.9X的提升。 CMSIS-NN庫包含兩個部分: NNFunction和NNSupportFunctions。 NNFunction包含實現通常神經網絡層類型的函數,比如卷積(convolution),深度可分離卷積(depthwise separable convolution),全連接(即內積inner-product), 池化(pooling)和激活(activation)這些函數被應用程序代碼用來實現神經網絡推理應用。 內核API也保持簡單,因此可以輕松地重定向到任何機器學習框架。NNSupport函數包括不同的實用函數,如NNFunctions中使用的數據轉換和激活功能表。 這些實用函數也可以被應用代碼用來構造更復雜的NN模塊,例如, 長期短時記憶(LSTM)或門控循環單元(GRU)。 對于某些內核(例如全連接和卷積),會使用到不同版本的內核函數。 我們提供了一個基本的版本,可以為任何圖層參數“按原樣”通用。 我們還部署了其他版本,包括進一步的優化技術,但會對輸入進行轉換或對層參數有一些限制。 理想情況下,可以使用簡單的腳本來分析網絡拓撲,并自動確定要使用的相應函數。 我們在卷積神經網絡(CNN)上測試了CMSIS-NN內核,在CIFAR-10數據集上進行訓練,包括60,000個32x32彩色圖像,分為10個輸出類。 網絡拓撲結構基于Caffe中提供的內置示例,具有三個卷積層和一個完全連接層。 下表顯示了使用CMSIS-NN內核的層參數和詳細運行時結果。 測試在運行頻率為216 MHz的ARM Cortex-M7內核STMichelectronics NUCLEO-F746ZG mbed開發板上進行。 整個圖像分類每張圖像大約需要99.1毫秒(相當于每秒10.1張圖像)。 運行此網絡的CPU的計算吞吐量約為每秒249 MOps。 預量化的網絡在CIFAR-10測試集上達到了80.3%的精度。 在ARM Cortex-M7內核上運行的8位量化網絡達到了79.9%的精度。 使用CMSIS-NN內核的最大內存占用空間為〜133 KB,其中使用局部im2col來實現卷積以節省內存,然后進行矩陣乘法。 沒有使用局部im2col的內存占用將是〜332 KB,這樣的話神經網絡將無法在板上運行。 為了量化CMSIS-NN內核相對于現有解決方案的好處,我們還使用一維卷積函數(來自CMSIS-DSP的arm_conv),類似Caffe的pooling和ReLU來實現了一個基準版本。 對于CNN應用,下表總結了基準函數和CMSIS-NN內核的比較結果。 CMSIS-NN內核的運行時間/吞吐量比基準函數提高2.6至5.4倍。 能效提高也與吞吐量的提高相一致。 高效的NN內核是充分發揮ARM Cortex-M CPU能力的關鍵。 CMSIS-NN提供了優化的函數來加速關鍵的NN層,如卷積,池化和激活。 此外,非常關鍵的是CMSIS-NN還有助于減少對于內存有限的微控制器而言至關重要的內存占用。 更多細節在我們的白皮書中您可以讀到,您可以使用下面的按鈕從康奈爾大學圖書館網站下載。 CMSIS-NN內核可在github.com/ARM-software/CMSIS_5上找到。 應用 代碼可以直接使用這些內核來實現Arm Cortex-M CPU上的神經網絡算法。 或者,這些內核可以被機器學習框架用作原語函數(primitives)來部署訓練過的模型。 如需進一步資源,更詳細的產品信息和教程,幫助您解決來自邊緣ML的挑戰,請訪問我們的新機器學習開發者網站。 參考:CMSIS-NN: Efficient Neural Network Kernels for Arm Cortex-M CPUs White Paper |