<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 設計應用 > 在MCU上運用機器學(xué)習實(shí)現輕智能

在MCU上運用機器學(xué)習實(shí)現輕智能

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

  Enable light intelligence by using machine learning on s

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

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

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

  關(guān)鍵詞:MCU;;;

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

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

  同時(shí),由于MCU具有價(jià)格低,實(shí)時(shí)性強等自身的特點(diǎn),基于MCU的機器學(xué)習也要與MCU的應用結合才能相得益彰,一般來(lái)說(shuō),“輕”是最顯著(zhù)的特征。在這樣的背景下,筆者摸索和實(shí)踐了在MCU上如何應用深度學(xué)習,撰文以分享和總結相關(guān)的工作。

  1 在MCU上部署機器學(xué)習

  1.1 物聯(lián)網(wǎng)環(huán)境下的智能應用分布

  在智能物聯(lián)環(huán)境下,嵌入式系統一般位于網(wǎng)絡(luò )的,因此在嵌入式系統中的智能也常常被稱(chēng)為輕智能。不過(guò),嵌入式系統也是一個(gè)很寬泛的概念,其智能應用在邊緣上的分布也各有特色,如圖1所示。

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

  另一類(lèi)可稱(chēng)為富功能節點(diǎn)與邊緣門(mén)戶(hù),它們使用更加強勁的處理器,或者是帶機器學(xué)習IP的MCU,能運行更加大型的模型,并常常作為IoT網(wǎng)關(guān)。對于復雜度很高的問(wèn)題,比如語(yǔ)音識別,仍然能調用云端服務(wù)來(lái)完成。

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

1556603946474992.jpg

  1.2 MCU上機器學(xué)習應用的特點(diǎn)

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

  下面列舉了一些適合MCU上部署的AI,為嵌入式系統屬性加成的常見(jiàn)場(chǎng)景:

  在強化圖像分類(lèi)性能方面,可用于智能電器、生產(chǎn)線(xiàn)次品檢測、智能家居;

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

  1.3 MCU上機器學(xué)習應用的難點(diǎn)

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

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

  1.4 部署機器學(xué)習模型的過(guò)程

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

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

  主要有兩種方式。


1557132209120155.jpg

1557132209521197.jpg1557132209468092.jpg

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

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

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

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

  2 適用于MCU的深度學(xué)習建模方式

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

  搭建適合在MCU端使用的神經(jīng)網(wǎng)絡(luò )非常簡(jiǎn)潔,如圖4所示:

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

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

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

  早期的神經(jīng)網(wǎng)絡(luò )構建塊中包含的參數較多,比如卷積核常用5x5,后面創(chuàng )新的結構常常把單個(gè)構建塊化整為零成一個(gè)小型的子網(wǎng)絡(luò ),既減少了參數又改進(jìn)了性能。

1557132240936321.jpg

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

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

  圖5展開(kāi)介紹了10項物體分類(lèi)所使用的NN結構。

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

  2.1 借助CNN實(shí)現語(yǔ)音口令檢測

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

  3 小結與未來(lái)展望

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

1557132254253094.jpg

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


  在生態(tài)上,MCU上圖像分類(lèi)、語(yǔ)音口令觸發(fā)、異常檢測這三大應用場(chǎng)景的相關(guān)的示例正在不斷豐富,模型轉換與部署工具也在不斷完善,今后用戶(hù)會(huì )得到越來(lái)越多的參考資源與開(kāi)發(fā)工具。

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

  作者簡(jiǎn)介

  宋巖 :MCU高級系統工程師,有近15年MCU與嵌入式系統從業(yè)經(jīng)驗,近期專(zhuān)注于微控制器在人工智能、機器視覺(jué)以及高級語(yǔ)言開(kāi)發(fā)等方面的開(kāi)發(fā)資源與應用。

本文來(lái)源于科技期刊《電子產(chǎn)品世界》2019年第5期第頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>