a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 設計應用 > 在MCU上運用機器學習實現輕智能

在MCU上運用機器學習實現輕智能

—— (5月刊)在MCU上運用機器學習實現輕智能
作者:宋巖 時間:2019-04-28 來源:電子產品世界 收藏

  Enable light intelligence by using machine learning on s

本文引用地址:http://www.j9360.com/article/201904/400009.htm

      作者/宋巖 恩智浦(中國)管理有限公司 高級系統工程師 (北 京  100022)

  摘要:簡要探討了人工的主要實現方式——,尤其是深度學習應用于的可行性與特點。結合自己的實踐,介紹了在這類資源受限的平臺上建模的要點、工作流程、配套工具、優化方法,以及實踐的例子。筆者認為,在物聯時代,也就是AIoT時代的蓬勃發展下,與MCU都在飛速發展,它們的有機結合會與日俱增,大放異彩。

  關鍵詞:MCU;

  雖然在現今的生產生活中,以機器學習和深度學習為主力的人工智能應用已無處不在,但是承載的計算平臺絕大多數是具備加速器的服務器、PC,以及智能手機,而在微控制器(MCU)等級的平臺上的運用卻寥寥無幾。究其原因,傳統MCU的定位使其在算力和存儲資源上捉襟見肘,硬件的限制也導致應用深度學習所需的配套軟件和工具幾近為0。

  但近年來MCU的資源有著突飛猛進地發展,有代表性的是NXP的i.MX RT1060系列,使用高達600 MHz并且帶DSP擴展的Cortex-M7內核,理論整數算力已達1.2 GOPS;片內有1 MB快速內存并且可擴展,已能勝任相當多的機器學習應用。

  同時,由于MCU具有價格低,實時性強等自身的特點,基于MCU的機器學習也要與MCU的應用結合才能相得益彰,一般來說,“輕”是最顯著的特征。在這樣的背景下,筆者摸索和實踐了在MCU上如何應用深度學習,撰文以分享和總結相關的工作。

  1 在MCU上部署機器學習

  1.1 物聯網環境下的智能應用分布

  在智能物聯環境下,嵌入式系統一般位于網絡的,因此在嵌入式系統中的智能也常常被稱為輕智能。不過,嵌入式系統也是一個很寬泛的概念,其智能應用在邊緣上的分布也各有特色,如圖1所示。

  最邊緣的是IoT節點與離線節點——也就是傳統的嵌入式系統,它們通常使用MCU、DSP以及低功耗的MPU,運行最輕量級的智能模型,可以永遠在線。如果位于更復雜系統的前級處理,則完成初步的計算,視情況決定是否喚醒主系統。

  另一類可稱為富功能節點與邊緣門戶,它們使用更加強勁的處理器,或者是帶機器學習IP的MCU,能運行更加大型的模型,并常常作為IoT網關。對于復雜度很高的問題,比如語音識別,仍然能調用云端服務來完成。

  近年來,以i.MX RT (600 MHz) 和STM32H7 (400MHz)等為代表的高配置MCU逐漸豐富,模糊了節點與門戶的界限,使得產品設計得以更加一脈相承,并且能讓開發者以MCU簡單易用的方式上手。

1556603946474992.jpg

  1.2 MCU上機器學習應用的特點

  MCU強調降低功耗、節約成本、加快上市,以及實時響應。所以在MCU上一般都要精簡AI模型,在精度與算力上合理取舍,改進已有算法的性能。在一些分級響應的大型系統中,可以發揮MCU低功耗的優勢,在本地跑輕量級的AI模型,擔任永遠在線的前級處理。例如 ,語音識別系統的喚醒詞檢測就可以由MCU來完成。又如,物體識別系統可以先由MCU快速處理,遇到識別困難時再喚醒主系統來判定。

  下面列舉了一些適合MCU上部署的AI,為嵌入式系統屬性加成的常見場景:

  在強化圖像分類性能方面,可用于智能電器、生產線次品檢測、智能家居;

  在強化音頻分類性能方面,主要用于識別口令關鍵字;在工業應用方面,可改進電機與傳動、電源轉換,以及自動控制算法;MCU上AI還適合做異常檢測,判斷部件損壞、過程穩定性、異常情況的發生。

  1.3 MCU上機器學習應用的難點

  盡管MCU上的AI應用有自己的特色,但目前普及率還比較低。首要的難點就是算力弱,較專業的AI加速器可有成百上千倍的差距。拿AI模型常常需要的乘累加操作性能為例,即使是目前性能最高的MCU,i.MXRT1050/60主頻為600 MHz,其M7內核單周期能處理2個16位整數乘累加,其int16算力也只有1.2 GOPS,而目前的AI加速器動輒就是1 TOPS以上的算力。

  因此,我們首先采用先進的模型結構,并謹慎合理地精簡模型規模,配合高度優化的底層代碼,今后還要結合器件的特色充分利用異構多計算單元。其次,MCU上缺少建模工具,這方面我們可以借助PC/服務器上的建模軟件來建模與訓練。再次,MCU上缺少集成和部署工具,這方面我們“自己動手,豐衣足食”,下文會詳細報告具體的工作。最后,MCU上缺少標準運行環境。這方面,我們通過把模型轉換成C代碼以及開發執行引擎的方法來填補空白。

  1.4 部署機器學習模型的過程

  MCU的弱算力決定了通常不適合訓練模型。因此,整個工作分為在PC端的部分和設備端的部分(如圖2)。在PC端要完成建模與訓練、模型的轉換與量化,以及模型部署的上位機工作,比如把模型與工程合并,以及模型數據的下載等。在設備端則要完成模型部署的下位機部分,主要是把AI模型與其它模塊對接,采集模型輸入數據并運行模型。

  這里再詳細介紹一下模型的部署,這也是連接2個世界的關鍵環節。對于在上位機上訓練好的模型,一個關鍵的步驟就是轉換與量化。這是要根據目標計算平臺的硬件和軟件接口,把模型做格式的轉換、量化(參數由浮點轉成整數),并對接到目標平臺上的NN庫或執行引擎的API,生成可以部署的形式,如圖3所示。

  主要有兩種方式。


1557132209120155.jpg

1557132209521197.jpg1557132209468092.jpg

  第一種是生成與模型相對應的C/C++代碼,它們包括訓練出來的權重——用數組表示;模型各層的定義——用宏定義表示;以及模型所執行的操作——包裝成一個函數,由它來把模型操作映射成對目標平臺NN庫API的調用。這樣,模型就直接化成了C/C++工程的一部分,一起編譯鏈接到固件中了。這樣做的優勢是深度整合,效率高、代碼小;但進行模型修改的同時需要重新生成固件,非常死板,比較適合較單一的系統。

  另一種是在目標平臺上運行通用的模型執行引擎——也叫Inference Engine (IE)。IE接收模型的操作與參數,并調用目標平臺NN庫中對應的API。而轉換工具則把模型的參數和結構轉換成IE能識別的方式,再由IE來貫徹執行模型的操作。這樣,模型化成了一個文件或者是結構體實例。系統需要調用IE并把模型文件作為數據送給它,由IE解析和執行模型指定的操作。這樣,顯然更加靈活,模塊化。可以存儲多個模型文件,改模型無需重新生成固件,只是要承擔IE的資源開銷,在性能與體積上有所舍棄。

  無論哪一種,神經網絡底層庫都是關鍵的一環。在ARM Cortex-M系列MCU上,CMSIS-NN扮演這個角色,并且針對DSP和SIMD指令集高度優化,和基線的標準C實現相比性能提高可達4.5倍。不過它僅提供了神經網絡操作的API,需要另行生成上層代碼或提供執行引擎才能使用,另外對神經網絡建模方式的支持略有不足。而谷歌的TensorFlow-Lite自帶的NN庫則支持更豐富的神經網絡構建塊與連接方式,并且是通用的,但是并沒有針對Cortex-M優化,性能遠遠不如CMSIS-NN。

  目前筆者實現了把Keras模型轉換成調用CMSIS-NN的C代碼以及對應的權重表,得以充分發揮CMSIS-NN在Cortex-M上高性能的優點。把生成的C源文件加入到現有的工程中,即可應用深度學習。

  2 適用于MCU的深度學習建模方式

  深度學習的基礎是構建多層神經網絡(NN)。神經網絡作為深度學習的基礎技術,模型表達能力強,尤其是善于處理非結構化的多媒體數據。對于開發者而言,神經網絡相比眾多機器學習算法,需要的數學基礎更少,相對單純,容易掌握。這些最終使軟硬件開發資源也最為豐富。

  搭建適合在MCU端使用的神經網絡非常簡潔,如圖4所示:

  一般只需要3種主運算和對主運算的3種后加工操作。使用這三種基本構建塊并且適當處理輸出后,形成神經網絡的一級運算,也稱為一個層。每個層就猶如電路中的一個基本元件,按串聯、并聯、混聯的方式搭建在一起,就能組成強大的神經網絡。此外,在訓練模型期間,還會加入一些輔助運算,比如批正則化(batchnormalization)、隨機丟棄(dropout)等,以提高訓練效率。在把模型轉換成可供部署的形式時,會去掉或合并它們。

  這其中,普通卷積層(CNN)是最“萬能”的。在設計一個新的模型時,常常可以先用若干個卷積層提取特征,如果需要分類,尾部再追加一個全連接層。如果MCU算力強大或存儲空間不足,可以把CNN拆分成逐通道卷積(DS-CNN)尾隨一個 1x1 CNN,以在相同參數下獲取更強的表達能力,或在相同表達能力下節省空間。反之對于算力較弱的MCU,則可適當把CNN替換成全連接層(FC),它們雖然參數多,但算力需求通常遠遠小于CNN。

  前面提到的層層堆積的方法,好比是穿糖葫蘆,它只是構建神經網絡最常用最簡單的一種,這是微型/小型網絡的首選,已能應對大部分MCU上深度學習問題。如果把直筒結構稍加改造,使某層的輸出還加到后續幾層后,就可以輕松創建容易訓練的更深的網絡,能勝任更復雜的問題,如人臉識別,以及分辨上百種以上的種類,像用于MobileNet和MobileFaceNet的反向殘差連接就是典型的實例。

  早期的神經網絡構建塊中包含的參數較多,比如卷積核常用5x5,后面創新的結構常常把單個構建塊化整為零成一個小型的子網絡,既減少了參數又改進了性能。

1557132240936321.jpg

  盡管神經網絡的結構很豐富,但整體上看仍然是直筒式的順序處理結構。在搭建較深的神經網絡時,一些片段常常重復出現,于是在設計網絡時可以像宏定義一般預制復合結構,再串在一起,這樣可以簡化設計,并且靈活多用。

  基于以上建模方式,我們在NXP i.MX RT1062上實踐了多種模型,表1列出了典型的幾種。

  圖5展開介紹了10項物體分類所使用的NN結構。

  它是個小型直筒式結構,串了3個普通卷積層,以分級提取出1024個特征,再用一個全連接層來分類。卷積層用于從輸入的32x32 RGB圖片中分3次提取出特征來,每過一層都通過池化來減少特征,這體現了從前一層精練更高級特征的思想。最后的全連接層有十個輸出,每個輸出對應了各類物體中每個特征的重要程度。全連接層的運算通過矩陣乘向量的方式呈現,最終得到10個數,決定和每類物體的相似程度。整個網絡一共有87.3 k個參數,對M7的乘累加算力需求約為13 MOPs。模型使用8位整數量化,在Cortex-M7上,還需要數據搬運和8位轉16位,在無內存訪問怠機的情況下,理論算力利用率約42%。在理論乘累加算力為1.2 GOPS的i.MX 1060上,按100% CPU時間全額投入,每次運算需要約26 ms。

  2.1 借助CNN實現語音口令檢測

  我們再看一下深度學習在話音口令關鍵詞檢測——簡稱KWS中的應用。為了重用圖像處理的神經網絡技術,常常先把時域信號分割變換成多個頻譜,再拼接成一個灰度圖像。鑒于這類圖像經常出現比較長的水平線,在應用卷積網絡時對卷積核的設計一般也采用較扁的矩形而不再是常見的正方形。順便一提,另一種循環神經網絡,簡稱RNN,在處理這種前后聯系比較豐富的事物時往往更加得心應手,但是目前在MCU上還沒有優化支持,而在簡單短口令的檢測上,CNN系建模方案的效率也能媲美RNN。

  3 小結與未來展望

  MCU自身的綜合能力和機器學習的優化會不斷升級。比如廣泛用于MCU的ARM Cortex-M系列內核,先后加入了SIMD與DSP擴展,半精度浮點數,它們都有助于加速機器學習應用和提高效率;最新又發布的MVE(又稱Helium)技術,加入了128位寬矢量運算能力,最高可為機器學習再提速15倍!基于開源RISC-V指令集擴展機器學習加速也正在異軍突起。在內核周邊,MCU在存儲容量、主頻,以及多種數據輸入接口也在不斷升級,這一切為在MCU上部署更多更先進的智能應用提供堅實的支撐。

1557132254253094.jpg

  在基礎軟件方面,適用于MCU平臺的機器學習的庫也已經歷了從無到有,目前正在從簡陋向完善發展。比如, CMSIS-NN目前還只支持CNN、DS-CNN、FC層,今后可能會支持多種RNN;另一方面,支持多種傳統機器學習算法的軟件包也一定正在路上。


  在生態上,MCU上圖像分類、語音口令觸發、異常檢測這三大應用場景的相關的示例正在不斷豐富,模型轉換與部署工具也在不斷完善,今后用戶會得到越來越多的參考資源與開發工具。

  硬件、軟件和生態的發展,使MCU在工業、控制與物聯傳感領域中的智能化大顯身手的同時,也會漸漸勝任更多實時圖像處理和語音數據智能應用。智能物聯時代正滾滾而來,在功能安全(safety)與信息安全(security)的保障下,基于機器學習的邊緣輕型智能越發成為嵌入式系統創造新價值的關鍵,而MCU硬件和固件就責無旁貸地成為了承載智能物聯應用的主力軍。

  作者簡介

  宋巖 :MCU高級系統工程師,有近15年MCU與嵌入式系統從業經驗,近期專注于微控制器在人工智能、機器視覺以及高級語言開發等方面的開發資源與應用。

本文來源于科技期刊《電子產品世界》2019年第5期第頁,歡迎您寫論文時引用,并注明出處



評論


相關推薦

技術專區

關閉