低功耗MCU也能跑AI?揭秘TinyML應(yīng)用實(shí)戰(zhàn)!
關(guān)鍵詞: 邊緣設(shè)備AI TinyML MCU 模型優(yōu)化 實(shí)際應(yīng)用
邊緣設(shè)備上的人工智能(AI)正憑借其直接在低功耗設(shè)備上實(shí)現(xiàn)先進(jìn)的計(jì)算能力,徹底改變嵌入式電子設(shè)備領(lǐng)域。傳統(tǒng)上,神經(jīng)網(wǎng)絡(luò)需要強(qiáng)大的硬件和豐富的資源,但隨著微型機(jī)器學(xué)習(xí)(TinyML)等技術(shù)的發(fā)展,即使計(jì)算資源有限,也能直接在設(shè)備上進(jìn)行推理。在微控制器(MCU)上部署神經(jīng)網(wǎng)絡(luò)可以降低延遲、增強(qiáng)數(shù)據(jù)隱私并提高能效,而無(wú)需依賴昂貴且集中的云基礎(chǔ)設(shè)施。
TinyML與邊緣AI
TinyML為嵌入式系統(tǒng)帶來(lái)了革命性的進(jìn)步,使得在僅有數(shù)十KB RAM的設(shè)備上也能直接部署機(jī)器學(xué)習(xí)模型。其應(yīng)用涵蓋語(yǔ)音分析、圖像識(shí)別以及基于信號(hào)處理的異常檢測(cè)等多個(gè)領(lǐng)域。借助適用于MCU的TensorFlow Lite等優(yōu)化框架,神經(jīng)網(wǎng)絡(luò)可以在MCU(STM32、ESP32或nRF52)上運(yùn)行,而無(wú)需使用復(fù)雜的操作系統(tǒng)。
采用TinyML的一個(gè)有趣方面是模型優(yōu)化。神經(jīng)網(wǎng)絡(luò)通常為高性能硬件設(shè)計(jì),必須縮小尺寸并降低功耗才能在嵌入式設(shè)備上運(yùn)行。量化和剪枝等技術(shù)可最大限度地減少內(nèi)存占用并加快推理速度,使實(shí)施在廉價(jià)的低功耗MCU上成為可能。



圖1:TinyML——AI與嵌入式系統(tǒng)的交集(來(lái)源:t4.ftcdn.net)
為MCU優(yōu)化AI模型
神經(jīng)網(wǎng)絡(luò)訓(xùn)練通常在資源充足的計(jì)算機(jī)上進(jìn)行,然后將其轉(zhuǎn)換為與嵌入式設(shè)備兼容的格式。第一步是選擇合適的模型。輕量級(jí)網(wǎng)絡(luò)(例如MobileNet)或基于低復(fù)雜度卷積神經(jīng)網(wǎng)絡(luò)(CNN)的模型非常適合此類應(yīng)用。訓(xùn)練完成后,模型將以TensorFlow Lite(TFLite)格式導(dǎo)出,從而減小模型大小并提高在資源受限的硬件上的性能。為了進(jìn)一步優(yōu)化模型,量化是最有效的技術(shù)之一。
通過(guò)將網(wǎng)絡(luò)權(quán)重從32位浮點(diǎn)數(shù)轉(zhuǎn)換為8位整數(shù)格式,不僅能在不影響精度的前提下大幅減少內(nèi)存占用,還能顯著提升計(jì)算效率。另一方面,剪枝則可以消除冗余的神經(jīng)元連接,從而在不改變網(wǎng)絡(luò)行為的情況下減輕其負(fù)擔(dān)。這兩個(gè)過(guò)程都可以使用TensorFlow模型優(yōu)化工具包等工具執(zhí)行,然后將模型編譯為可在MCU上運(yùn)行的格式。
在MCU上部署AI模型
模型優(yōu)化完成后,下一步就是集成到兼容的MCU上。一個(gè)實(shí)際案例是使用ESP32和適用于MCU的TensorFlow Lite。這款MCU支持Wi-Fi和藍(lán)牙,非常適合傳輸處理后的數(shù)據(jù),因此特別適合邊緣機(jī)器學(xué)習(xí)。實(shí)現(xiàn)過(guò)程首先是將量化模型轉(zhuǎn)換為字節(jié)數(shù)組,然后將其包含在固件代碼中。
通過(guò)TensorFlow Lite Micro庫(kù),模型被加載到MCU的RAM中,并可用于實(shí)時(shí)推理。典型的執(zhí)行流程包括從傳感器捕獲數(shù)據(jù)、進(jìn)行預(yù)處理,然后將其傳遞給神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測(cè)。例如,語(yǔ)音識(shí)別就是一個(gè)常見的應(yīng)用。連接到MCU的麥克風(fēng)會(huì)采集音頻樣本,并使用梅爾倒譜系數(shù)(MFCC)等特征提取技術(shù)進(jìn)行處理。然后將預(yù)處理后的數(shù)據(jù)傳遞給神經(jīng)網(wǎng)絡(luò)模型,以識(shí)別特定的關(guān)鍵詞。推理過(guò)程僅需幾毫秒,使系統(tǒng)無(wú)需連接到外部服務(wù)器即可響應(yīng)。
MCU上TinyML的實(shí)際應(yīng)用案例
TinyML的應(yīng)用已在多個(gè)行業(yè)產(chǎn)生影響。在農(nóng)業(yè)領(lǐng)域,基于TinyML的傳感器可以監(jiān)控土壤濕度和溫度等環(huán)境參數(shù),從而優(yōu)化用水并提高作物產(chǎn)量。微軟FarmBeats開發(fā)了一項(xiàng)極具創(chuàng)新性的項(xiàng)目,利用集成TinyML的節(jié)能傳感器收集土壤狀況數(shù)據(jù),以優(yōu)化灌溉管理,在不浪費(fèi)水資源的前提下提升作物產(chǎn)量。這些設(shè)備可在無(wú)網(wǎng)絡(luò)覆蓋的偏遠(yuǎn)地區(qū)運(yùn)行,因?yàn)樗鼈兛稍诒镜靥幚頂?shù)據(jù),從而無(wú)需持續(xù)連接云端。
TinyML的實(shí)際應(yīng)用正在改變?cè)贛CU上直接收集和處理數(shù)據(jù)的方式,使系統(tǒng)無(wú)需持續(xù)連接至網(wǎng)絡(luò)即可運(yùn)行。在許多應(yīng)用的開發(fā)過(guò)程中,開發(fā)人員可使用的工具包括廣為人知的適用于MCU的TensorFlow Lite,該工具允許在資源有限的設(shè)備上運(yùn)行深度學(xué)習(xí)模型,而Edge Impulse則簡(jiǎn)化了訓(xùn)練數(shù)據(jù)的收集和管理。Arduino Nano 33 BLE Sense和Raspberry Pi Pico等開發(fā)板為實(shí)際解決方案的實(shí)施提供了絕佳的硬件平臺(tái)。
在工業(yè)監(jiān)控領(lǐng)域,搭載機(jī)器學(xué)習(xí)模型的MCU可用于檢測(cè)機(jī)器異常、分析振動(dòng)和噪聲,并實(shí)施預(yù)測(cè)性維護(hù),從而降低成本并防止突發(fā)故障。例如,可以在制造工廠中部署一個(gè)基于TinyML的電機(jī)控制系統(tǒng),該系統(tǒng)在本地處理MEMS傳感器采集的數(shù)據(jù),并在檢測(cè)到異常振動(dòng)時(shí)觸發(fā)干預(yù)警報(bào)。
在安防領(lǐng)域,集成AI的MCU可用于識(shí)別可疑動(dòng)作或檢測(cè)異常聲音,并觸發(fā)實(shí)時(shí)通知,而無(wú)需將敏感數(shù)據(jù)發(fā)送到外部服務(wù)器。Arduino與博世合作開發(fā)了一個(gè)具體的應(yīng)用:基于Arduino Nano 33 BLE Sense的TinyML系統(tǒng)通過(guò)分析陀螺儀和加速度計(jì)數(shù)據(jù)識(shí)別突發(fā)運(yùn)動(dòng),適用于家庭安防系統(tǒng)或貴重物品的監(jiān)控。通過(guò)這種方式,無(wú)需將敏感數(shù)據(jù)發(fā)送到外部服務(wù)器即可觸發(fā)實(shí)時(shí)通知,從而確保隱私和安全。
邊緣AI(Edge AI)的一個(gè)實(shí)際應(yīng)用案例是構(gòu)建用于控制家居設(shè)備的語(yǔ)音識(shí)別系統(tǒng)。該系統(tǒng)基于Arduino Nano 33 BLE Sense開發(fā)板實(shí)現(xiàn),并通過(guò)Edge Impulse進(jìn)行訓(xùn)練,形成一個(gè)超低功耗的語(yǔ)音助手,可在無(wú)網(wǎng)絡(luò)連接的情況下識(shí)別“開燈”或“開門”等簡(jiǎn)單命令。該系統(tǒng)特別適用于行動(dòng)不便、希望獨(dú)立操作家用設(shè)備的用戶。
另一個(gè)基于Arduino Nano 33 BLE Sense的有趣項(xiàng)目是室內(nèi)空氣質(zhì)量監(jiān)控。該設(shè)備使用集成在開發(fā)板中的HTS221傳感器來(lái)檢測(cè)環(huán)境的溫度和濕度。項(xiàng)目實(shí)現(xiàn)的第一步是通過(guò)USB將MCU連接到計(jì)算機(jī)進(jìn)行編程。完成此初始步驟后,需要安裝相應(yīng)的庫(kù)文件,例如Arduino_HTS221,以訪問(wèn)環(huán)境數(shù)據(jù)。
圖2:Arduino Nano 33 BLE Sense Rev2(來(lái)源:Arduino)
圖3:Arduino Nano 33 BLE Sense上的HTS221傳感器(來(lái)源:Arduino)
如果您還想包括揮發(fā)性有機(jī)化合物的檢測(cè),可以將附加傳感器(例如盛思銳SGP40)及其相應(yīng)的庫(kù)文件集成到您的項(xiàng)目中,并查閱數(shù)據(jù)手冊(cè)。
圖4:盛思銳SGP40傳感器(來(lái)源:盛思銳)
環(huán)境數(shù)據(jù)收集可通過(guò)Edge Impulse實(shí)現(xiàn),記錄不同條件下的溫度和濕度值,用于訓(xùn)練一個(gè)能夠識(shí)別可能預(yù)示異常狀況的變化模式的機(jī)器學(xué)習(xí)模型。訓(xùn)練完成后,該模型將通過(guò)適用于MCU的TensorFlow Lite上傳到Arduino Nano 33 BLE Sense開發(fā)板。編程草圖讀取傳感器數(shù)據(jù)并運(yùn)行模型,以實(shí)時(shí)分析環(huán)境。若檢測(cè)到異常,系統(tǒng)可觸發(fā)相應(yīng)動(dòng)作,如點(diǎn)亮警告LED或向外部設(shè)備發(fā)送藍(lán)牙信號(hào)。
以下是讀取HTS221傳感器數(shù)據(jù)并將其顯示在串口監(jiān)視器上的示例代碼:
#include <Arduino_HTS221.h>
void setup() {
Serial.begin(115200);
while (! Serial);
if (! HTS221.begin()) {
Serial.println("Error initializing the HTS221 sensor!");
while (1);
}
}
void loop() {
float temperatura = HTS221.readTemperature();
float umidita = HTS221.readHumidity();
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" °C, Umidità: ");
Serial.print(humidita);
Serial.println(" %");
delay(2000);
}
在空氣質(zhì)量監(jiān)控項(xiàng)目中,提供的代碼允許從集成在Arduino Nano 33 BLE Sense中的HTS221傳感器讀取數(shù)據(jù),以檢測(cè)環(huán)境的溫度和濕度。在setup()函數(shù)中,初始化串行通信并驗(yàn)證傳感器初始化是否成功。如果傳感器未被正確檢測(cè)到,程序?qū)⑦M(jìn)入無(wú)限循環(huán),并通過(guò)串行監(jiān)視器報(bào)告錯(cuò)誤。
在loop()函數(shù)中,代碼分別使用readTemperature()和readHumidity()方法從傳感器讀取溫度和濕度值。隨后,將獲取的值打印在串行監(jiān)視器上,以實(shí)時(shí)顯示環(huán)境條件。數(shù)據(jù)每2秒讀取一次,這是通過(guò)delay(2000)函數(shù)實(shí)現(xiàn)的,從而實(shí)現(xiàn)定期更新。這種基本結(jié)構(gòu)可輕松監(jiān)控環(huán)境條件,并可將系統(tǒng)適配于其他應(yīng)用,例如異常檢測(cè)或與機(jī)器學(xué)習(xí)模型集成,以分析并做出智能數(shù)據(jù)驅(qū)動(dòng)的決策。
為確保系統(tǒng)的可靠性,必須在不同的環(huán)境條件下進(jìn)行測(cè)試,驗(yàn)證模型的準(zhǔn)確性,并盡可能優(yōu)化檢測(cè)閾值以減少誤報(bào)。該項(xiàng)目的進(jìn)一步擴(kuò)展包括與移動(dòng)應(yīng)用程序的集成,借助低功耗藍(lán)牙(BLE)技術(shù),可實(shí)現(xiàn)空氣質(zhì)量的實(shí)時(shí)監(jiān)控。開發(fā)簡(jiǎn)潔的用戶界面可借助MIT App Inventor或Flutter等工具實(shí)現(xiàn),這些工具提供了在智能手機(jī)上直接可視化數(shù)據(jù)的實(shí)用解決方案。
要深入了解開發(fā)此項(xiàng)目所需的資源,可查閱Arduino_HTS221庫(kù)的官方文檔。Arduino論壇是解決各種技術(shù)問(wèn)題的有效支持渠道。Edge Impulse提供了針對(duì)嵌入式設(shè)備收集和訓(xùn)練機(jī)器學(xué)習(xí)模型的分步教程,而適用于MCU的TensorFlow Lite則提供了在低功耗MCU上實(shí)施機(jī)器學(xué)習(xí)的指南。
資源管理與性能優(yōu)化
在MCU上執(zhí)行AI模型會(huì)對(duì)可用資源的管理提出嚴(yán)格要求,這需要對(duì)內(nèi)存、計(jì)算能力和能效進(jìn)行仔細(xì)的優(yōu)化。其中一個(gè)最關(guān)鍵的方面是內(nèi)存的管理,而MCU中的內(nèi)存通常極其有限;因此,必須采用避免浪費(fèi)的內(nèi)存分配策略,并盡可能使用靜態(tài)緩沖區(qū)。
此外,使用AI模型量化技術(shù)有助于減小神經(jīng)網(wǎng)絡(luò)的規(guī)模,從而減少內(nèi)存消耗并提高性能,而使用硬件加速器(如果可用的話)則代表著提高處理速度的機(jī)會(huì)。一些先進(jìn)的MCU集成了專門用于處理神經(jīng)網(wǎng)絡(luò)的數(shù)字信號(hào)處理器(DSP),從而可減輕主CPU的計(jì)算負(fù)擔(dān),并更快、更高效地執(zhí)行推理。此外,使用修剪技術(shù)可以減少所需的運(yùn)算次數(shù),在不影響模型準(zhǔn)確性的情況下提高性能。
關(guān)于能效,尤其是對(duì)于電池供電的設(shè)備,可通過(guò)使用低功耗模式(例如深度睡眠模式)以及根據(jù)操作需求動(dòng)態(tài)調(diào)整模型執(zhí)行頻率來(lái)降低非活動(dòng)期間的功耗。此外,采用觸發(fā)事件是一種有效的策略,僅在特定刺激下觸發(fā)推理,從而減少活動(dòng)處理時(shí)間并優(yōu)化計(jì)算資源的使用。
精心選擇AI模型架構(gòu)也會(huì)影響其在MCU上的實(shí)現(xiàn)效率:輕量級(jí)神經(jīng)網(wǎng)絡(luò)專為資源受限的環(huán)境而設(shè)計(jì),能夠在準(zhǔn)確性和計(jì)算消耗之間取得良好的平衡。這些技術(shù)的集成使我們能夠構(gòu)建兼具高性能與高效率的AI模型,足以應(yīng)對(duì)MCU在資源上的限制。
總結(jié)與展望
TinyML在嵌入式系統(tǒng)中的應(yīng)用為在資源受限的設(shè)備上實(shí)現(xiàn)AI開辟了新的可能性。直接在MCU上執(zhí)行推理的能力可實(shí)現(xiàn)更快、更安全、更節(jié)能的應(yīng)用。隨著優(yōu)化技術(shù)的發(fā)展和專用硬件的改進(jìn),邊緣設(shè)備上的機(jī)器學(xué)習(xí)將繼續(xù)擴(kuò)展,為家庭自動(dòng)化、安防和環(huán)境監(jiān)控等領(lǐng)域帶來(lái)創(chuàng)新。
將AI集成到嵌入式系統(tǒng)中已不再是遙不可及的夢(mèng)想,而是人人皆可實(shí)現(xiàn)的現(xiàn)實(shí),即使使用廉價(jià)硬件也是如此。借助正確的優(yōu)化技術(shù)和精心的資源管理,智能解決方案可直接在MCU上實(shí)現(xiàn),從而催生新一代自主互聯(lián)的設(shè)備。
