???? 機(jī)器學(xué)習(xí)和深度學(xué)習(xí)應(yīng)用程序正越來(lái)越多地從云端轉(zhuǎn)移到靠近數(shù)據(jù)源頭的嵌入式設(shè)備。隨著邊緣計(jì)算市場(chǎng)的快速擴(kuò)張,多種因素正在推動(dòng)邊緣人工智能的增長(zhǎng),包括可擴(kuò)展性、對(duì)實(shí)時(shí)人工智能應(yīng)用的不斷增長(zhǎng)的需求,以及由強(qiáng)大而高效的軟件工具鏈補(bǔ)充的低成本邊緣設(shè)備的可用性。此外,需要避免通過(guò)網(wǎng)絡(luò)傳輸數(shù)據(jù)——無(wú)論是出于安全原因還是僅僅為了盡量減少通信成本。
邊緣人工智能涵蓋廣泛的設(shè)備、傳感器、微控制器、片上多微處理器、應(yīng)用處理器和專用片上系統(tǒng)——包括相對(duì)強(qiáng)大的邊緣服務(wù)器和物聯(lián)網(wǎng)模塊。參考社區(qū),TinyML 基金會(huì),成立于 2019 年,專注于開(kāi)發(fā)機(jī)器學(xué)習(xí)模型并將其部署在內(nèi)存、處理能力和能耗預(yù)算有限的資源極其受限的嵌入式設(shè)備上。TinyML 開(kāi)辟了獨(dú)特的機(jī)會(huì),包括可使用廉價(jià)電池甚至小型太陽(yáng)能電池板供電的應(yīng)用程序,以及在低成本硬件上本地處理數(shù)據(jù)的大規(guī)模應(yīng)用程序。當(dāng)然,TinyML 也帶來(lái)了各種挑戰(zhàn)。其中一個(gè)挑戰(zhàn)是機(jī)器學(xué)習(xí)和嵌入式系統(tǒng)開(kāi)發(fā)人員必須優(yōu)化應(yīng)用程序的性能和占用空間,這需要熟練掌握人工智能和嵌入式系統(tǒng)。
在這樣的背景下,本文介紹了一種在邊緣設(shè)備上設(shè)計(jì)和部署深度神經(jīng)網(wǎng)絡(luò)的實(shí)用框架。該框架基于 MATLAB 和 Simulink 產(chǎn)品,以及 STMicroelectronics Edge AI 工具,可幫助團(tuán)隊(duì)快速提升深度學(xué)習(xí)和邊緣部署方面的專業(yè)知識(shí),使他們能夠克服使用 TinyML 時(shí)遇到的常見(jiàn)障礙。這反過(guò)來(lái)又使他們能夠快速構(gòu)建和基準(zhǔn)測(cè)試概念驗(yàn)證 TinyML 應(yīng)用程序。在工作流程的第一步中,團(tuán)隊(duì)使用 MATLAB 構(gòu)建深度學(xué)習(xí)網(wǎng)絡(luò),使用貝葉斯優(yōu)化調(diào)整超參數(shù),使用知識(shí)提煉,并使用修剪和量化壓縮網(wǎng)絡(luò)。最后一步,開(kāi)發(fā)人員使用集成到 ST Edge AI Developer Cloud—一項(xiàng)免費(fèi)的在線服務(wù),用于在 STMicroelectronics 32 位 (STM32、Stellar) 微控制器和微處理器(包括配備集成 AI 的傳感器)上開(kāi)發(fā) AI,以對(duì)已部署的深度學(xué)習(xí)網(wǎng)絡(luò)的資源利用率和推理速度進(jìn)行基準(zhǔn)測(cè)試(圖 1)。
圖 1. 將深度學(xué)習(xí)網(wǎng)絡(luò)部署到微控制器和邊緣設(shè)備的迭代工作流程。反饋回路有助于形成更精確、更微小的模型。
▼
網(wǎng)絡(luò)設(shè)計(jì)、訓(xùn)練和超參數(shù)優(yōu)化
一旦工程師收集、預(yù)處理并準(zhǔn)備好用于深度學(xué)習(xí)應(yīng)用程序的數(shù)據(jù)集,下一步就是訓(xùn)練和評(píng)估候選模型,其中可以包括預(yù)訓(xùn)練模型,例如 NASNet、SqueezeNet、Inception-v3 和 ResNet-101,或者機(jī)器學(xué)習(xí)工程師使用深度網(wǎng)絡(luò)設(shè)計(jì)器(圖 2)。多個(gè)模型提供了可用于快速啟動(dòng)開(kāi)發(fā)的示例,包括以下示例模型:圖像,視頻,聲音 和激光雷達(dá)點(diǎn)云分類;物體檢測(cè);姿勢(shì)估計(jì);和波形分割。
圖 2. 深度網(wǎng)絡(luò)設(shè)計(jì)器在設(shè)計(jì)器面板中顯示網(wǎng)絡(luò)的多層。
深度學(xué)習(xí)網(wǎng)絡(luò)的性能在很大程度上取決于控制其訓(xùn)練的參數(shù)和描述其網(wǎng)絡(luò)架構(gòu)的參數(shù)。這些超參數(shù)示例包括學(xué)習(xí)率和批量大小,以及層數(shù)、層的類型以及層之間的連接。適當(dāng)?shù)某瑓?shù)調(diào)整可以使模型實(shí)現(xiàn)更高的準(zhǔn)確性和更好的性能,即使在 TinyML 應(yīng)用程序運(yùn)行的資源受限的環(huán)境中也是如此。然而,選擇和微調(diào)超參數(shù)值以找到優(yōu)化性能的組合可能是一項(xiàng)困難且耗時(shí)的任務(wù)。
貝葉斯優(yōu)化非常適合分類和回歸深度學(xué)習(xí)網(wǎng)絡(luò)的超參數(shù)優(yōu)化,因?yàn)樗梢杂行У靥剿鞲呔S超參數(shù)空間以找到最佳或接近最佳的配置。在 MATLAB 中,機(jī)器學(xué)習(xí)開(kāi)發(fā)人員可以使用 bayesopt 函數(shù)使用貝葉斯優(yōu)化來(lái)找到最佳超參數(shù)值。例如,它可以提供一組要評(píng)估的超參數(shù)(例如卷積層的數(shù)量、初始學(xué)習(xí)率、動(dòng)量和 L2 正則化)以及要最小化的目標(biāo)函數(shù)(例如驗(yàn)證誤差)。然后該函數(shù)可以使用 bayesopt 選擇一組或多組超參數(shù)配置,以便在工作流程的下一階段進(jìn)一步探索。
▼
知識(shí)提煉
資源受限的嵌入式設(shè)備可用內(nèi)存有限。知識(shí)提煉是一種減少深度學(xué)習(xí)網(wǎng)絡(luò)占用空間同時(shí)保持高精度的方法。該技術(shù)使用更大、更準(zhǔn)確的教師網(wǎng)絡(luò)來(lái)教更小的學(xué)生網(wǎng)絡(luò)進(jìn)行預(yù)測(cè)。關(guān)鍵在于師生網(wǎng)絡(luò)架構(gòu)中的損失函數(shù)的選擇。
在前面的步驟中訓(xùn)練的網(wǎng)絡(luò)可以用作教師模型。學(xué)生網(wǎng)絡(luò)是教師模型的較小但相似的版本。通常,學(xué)生模型包含較少的 convolution-batchnorm-ReLU 模塊。為了考慮降維,在學(xué)生網(wǎng)絡(luò)中添加了最大池化層或全局平均池化層。與教師網(wǎng)絡(luò)相比,這些修改顯著減少了可學(xué)習(xí)內(nèi)容的數(shù)量。
必須定義知識(shí)提煉損失函數(shù)來(lái)訓(xùn)練學(xué)生網(wǎng)絡(luò)。它由學(xué)生網(wǎng)絡(luò)、教師網(wǎng)絡(luò)的輸入、具有對(duì)應(yīng)目標(biāo)的輸入數(shù)據(jù)和溫度超參數(shù)確定。從經(jīng)驗(yàn)上講,損失函數(shù)由以下兩項(xiàng)的加權(quán)平均值組成:1)硬損失,即學(xué)生網(wǎng)絡(luò)輸出與真實(shí)標(biāo)簽之間的交叉熵?fù)p失;2)軟損失,即學(xué)生網(wǎng)絡(luò)日志與教師網(wǎng)絡(luò)日志之間帶溫度的 SoftMax 的交叉熵?fù)p失。
訓(xùn)練后的學(xué)生網(wǎng)絡(luò)更好地保留了教師網(wǎng)絡(luò)的準(zhǔn)確性,并減少了可學(xué)習(xí)參數(shù),使其更適合部署到嵌入式設(shè)備中。
▼
模型壓縮與優(yōu)化
訓(xùn)練階段的有效設(shè)計(jì)和超參數(shù)優(yōu)化是必不可少的第一步;然而,這還不足以確保在邊緣設(shè)備上的部署。因此,通過(guò)模型修剪和量化進(jìn)行訓(xùn)練后優(yōu)化對(duì)于進(jìn)一步減少深度神經(jīng)網(wǎng)絡(luò)的內(nèi)存占用和計(jì)算要求非常重要。
網(wǎng)絡(luò)壓縮最有效的方法之一是量化。這是因?yàn)闆](méi)有大容量傳感器輸出浮點(diǎn)表示,所以數(shù)據(jù)是以整數(shù)精度獲取的。通過(guò)量化,目標(biāo)是通過(guò)減少存儲(chǔ)網(wǎng)絡(luò)參數(shù)所需的內(nèi)存占用,并通過(guò)用更少的位數(shù)表示模型的權(quán)重和激活來(lái)提高計(jì)算速度。例如,這可能涉及用 8 位整數(shù)替換 32 位浮點(diǎn)數(shù)——同樣,當(dāng)可能這樣做時(shí),僅接受預(yù)測(cè)準(zhǔn)確度的輕微下降。量化可以節(jié)約使用嵌入式內(nèi)存,這對(duì)于邊緣資源受限的傳感器、微控制器和微處理器(圖 3)至關(guān)重要。此外,整數(shù)運(yùn)算在硬件上通常比浮點(diǎn)運(yùn)算更快,從而提高微控制器的推理性能。這使得模型消耗的電量更少,使其更適合部署在電池供電或能源受限的設(shè)備上,例如移動(dòng)電話和物聯(lián)網(wǎng)設(shè)備。雖然訓(xùn)練后量化可能會(huì)引入一些精度損失,MATLAB 中的量化工具旨在最大限度地減少對(duì)模型精度的影響。采用微調(diào)、校準(zhǔn)等技術(shù)來(lái)保持量化模型的性能。在 MATLAB 中,dlquantizer 函數(shù)簡(jiǎn)化了將深度神經(jīng)網(wǎng)絡(luò)的權(quán)重、偏差和激活量化為 8 位整數(shù)值的過(guò)程。
圖 3. MATLAB修剪和量化后深度神經(jīng)網(wǎng)絡(luò)的內(nèi)存占用。
相比之下,修剪技術(shù)側(cè)重于通過(guò)最小化操作冗余來(lái)降低網(wǎng)絡(luò)的復(fù)雜性。這對(duì)于大幅降低計(jì)算復(fù)雜性至關(guān)重要。其目的是識(shí)別并刪除那些對(duì)網(wǎng)絡(luò)預(yù)測(cè)影響不大的連接、權(quán)重、過(guò)濾器甚至整個(gè)層。投影是 MATLAB 的專有技術(shù),用于通過(guò)有選擇地刪除不太重要的權(quán)重或連接來(lái)優(yōu)化神經(jīng)網(wǎng)絡(luò)。此過(guò)程降低了模型的復(fù)雜性,從而減小了模型尺寸并加快了推理時(shí)間,同時(shí)又不會(huì)顯著影響性能。雖然常規(guī)修剪通常涉及直接基于閾值去除低幅度權(quán)重,但投影可能采用更復(fù)雜的標(biāo)準(zhǔn)和方法來(lái)確保網(wǎng)絡(luò)的基本特征得到保留。此外,投影通常旨在維持權(quán)重空間的幾何特性,與傳統(tǒng)修剪方法相比,可能產(chǎn)生更高效、更穩(wěn)健的模型。
▼
ST Edge AI Developer Cloud 基準(zhǔn)測(cè)試
在 MATLAB 中完成初始網(wǎng)絡(luò)設(shè)計(jì)、超參數(shù)優(yōu)化、提煉和壓縮后,工作流程的下一步是在微控制器或微處理器上評(píng)估該設(shè)計(jì)的性能。具體來(lái)說(shuō),工程師需要評(píng)估網(wǎng)絡(luò)的閃存和 RAM 要求以及推理速度等因素。
ST Edge AI Developer Cloud 旨在通過(guò)對(duì) ST Edge 設(shè)備上的網(wǎng)絡(luò)進(jìn)行快速基準(zhǔn)測(cè)試來(lái)簡(jiǎn)化工作流程的這一階段。要將此服務(wù)用于在 MATLAB 中開(kāi)發(fā)的 TinyML 應(yīng)用程序,您首先需將網(wǎng)絡(luò)導(dǎo)出為 ONNX 格式。將生成的 ONNX 文件上傳到 ST Edge AI Developer Cloud 后,工程師可以選擇要在其上運(yùn)行基準(zhǔn)測(cè)試的 ST 設(shè)備(圖 4)。
圖 4. 可在 ST Edge AI Developer Cloud 用戶界面中進(jìn)行基準(zhǔn)測(cè)試的設(shè)備。
基準(zhǔn)測(cè)試完成后,ST Edge AI Developer Cloud 會(huì)提供一份詳細(xì)說(shuō)明結(jié)果的報(bào)告(圖 5)。ST Edge AI Developer Cloud 提供的性能分析工具提供了各種詳細(xì)的見(jiàn)解,包括內(nèi)存使用情況、處理速度、資源利用率和模型準(zhǔn)確性。開(kāi)發(fā)人員會(huì)收到有關(guān) RAM 和閃存消耗的信息,以及模型不同層和組件的內(nèi)存分配細(xì)目。此外,這些工具還提供每一層的執(zhí)行時(shí)間和總體推理時(shí)間,以及詳細(xì)的時(shí)序分析以識(shí)別和優(yōu)化緩慢的操作。資源利用率統(tǒng)計(jì)數(shù)據(jù)(包括 CPU 和硬件加速器使用情況以及功耗指標(biāo))有助于優(yōu)化能源效率。
圖 5. ST Edge AI Developer Cloud 中典型基準(zhǔn)測(cè)試會(huì)話的結(jié)果。
通過(guò)審查基準(zhǔn)測(cè)試結(jié)果,工程師可以確定下一步的最佳行動(dòng)方案。如果網(wǎng)絡(luò)設(shè)計(jì)能夠輕松地適應(yīng)具有較低推理時(shí)間的給定邊緣設(shè)備的約束,他們可能會(huì)探索使用更小的設(shè)備或使用更大、更復(fù)雜的網(wǎng)絡(luò)來(lái)提高預(yù)測(cè)準(zhǔn)確性的機(jī)會(huì)。另一方面,如果網(wǎng)絡(luò)設(shè)計(jì)太大,由于使用外部 Flash 或 RAM 而導(dǎo)致推理時(shí)間變慢,那么團(tuán)隊(duì)可能會(huì)尋找具有更多嵌入式 Flash 和 RAM 的計(jì)算能力更強(qiáng)大的設(shè)備,或者他們可能會(huì)使用 MATLAB 執(zhí)行額外的超參數(shù)優(yōu)化、知識(shí)提煉、修剪和量化迭代以進(jìn)一步壓縮網(wǎng)絡(luò)。ST Edge AI Developer Cloud 還提供自動(dòng)代碼生成,以簡(jiǎn)化在 ST 設(shè)備上部署 AI 模型。該功能將訓(xùn)練有素的 AI 模型轉(zhuǎn)換為與 STMicroelectronics 的傳感器、微控制器和微處理器兼容的優(yōu)化 C 代碼。
▼
從基準(zhǔn)測(cè)試到部署
工作流程的最后一步是部署到傳感器、微控制器或微處理器。有了基準(zhǔn)測(cè)試結(jié)果,工程師們就可以做出明智的決定,選擇一個(gè)平臺(tái),比如 STM32 Discovery Kit,在真實(shí)硬件上評(píng)估他們的 TinyML 應(yīng)用程序。根據(jù)應(yīng)用情況,他們可能需要將深度神經(jīng)網(wǎng)絡(luò)與其他組件(例如控制器)集成,并在部署之前將其合并到更大的系統(tǒng)中。對(duì)于這些用例,他們可以進(jìn)一步擴(kuò)展工作流程,在 Simulink 中對(duì)其他組件進(jìn)行建模,運(yùn)行系統(tǒng)級(jí)仿真以驗(yàn)證設(shè)計(jì),并使用 Embedded Coder 和 Embedded Coder Support Package for STMicroelectronics STM32 Processors 生成 C/C++ 代碼以部署到 STM32 設(shè)備。
◆ ◆ ◆ ◆
-
matlab
+關(guān)注
關(guān)注
185文章
2976瀏覽量
230464 -
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100760 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8418瀏覽量
132627
原文標(biāo)題:MathWorks × STMicroelectronics | 在邊緣設(shè)備上快速部署深度學(xué)習(xí)
文章出處:【微信號(hào):MATLAB,微信公眾號(hào):MATLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論