h1_key

當(dāng)前位置:首頁(yè) >新聞資訊 > 技術(shù)文章>意法半導(dǎo)體>STM32 MCU優(yōu)化的STM32Cube.AI庫(kù)
STM32 MCU優(yōu)化的STM32Cube.AI庫(kù)
2022-11-14 1918次

STM32Cube.AI是意法半導(dǎo)體AI生態(tài)系統(tǒng)的一部分,是STM32Cube的一個(gè)擴(kuò)展包,它可以自動(dòng)轉(zhuǎn)換和優(yōu)化預(yù)先訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型并將生成的優(yōu)化庫(kù)集成到用戶(hù)項(xiàng)目中,從而擴(kuò)展了STM32CubeMX的功能。它還提供幾種在桌面PC和STM32上驗(yàn)證神經(jīng)網(wǎng)絡(luò)模型以及測(cè)量模型性能的方法,而無(wú)需用戶(hù)手工編寫(xiě)專(zhuān)門(mén)的C語(yǔ)言代碼。

  本文將更深入地介紹它的一些高級(jí)特性。將涉及以下主題:

  運(yùn)行時(shí)環(huán)境支持:Cube.AI vs TensorFlow Lite

  量化支持

  圖形流與存儲(chǔ)布局優(yōu)化

  可重定位的二進(jìn)制模型支持

  運(yùn)行時(shí)環(huán)境支持:Cube.AI vs TensorFlow Lite

  STM32Cube.AI支持兩種針對(duì)不同應(yīng)用需求的運(yùn)行時(shí)環(huán)境:Cube.AITensorFlow Lite。作為默認(rèn)的運(yùn)行時(shí)環(huán)境,Cube.AI是專(zhuān)為STM32高度優(yōu)化的機(jī)器學(xué)習(xí)庫(kù)。而TensorFlow Lite for Microcontroller是由谷歌設(shè)計(jì),用于在各種微控制器或其他只有幾KB存儲(chǔ)空間的設(shè)備上運(yùn)行機(jī)器學(xué)習(xí)模型的。其被廣泛應(yīng)用于基于MCU的應(yīng)用場(chǎng)景。STM32Cube.AI集成了一個(gè)特定的流程,可以生成一個(gè)即時(shí)可用的STM32 IDE項(xiàng)目,該項(xiàng)目?jī)?nèi)嵌TensorFlow Lite for Microcontrollers運(yùn)行時(shí)環(huán)境(TFLm)以及相關(guān)的TFLite模型。這可以被看作是Cube.AI運(yùn)行時(shí)環(huán)境的一個(gè)替代方案,讓那些希望擁有一個(gè)跨多個(gè)項(xiàng)目的通用框架的開(kāi)發(fā)人員也有了選擇。

  

 

  雖然這兩種運(yùn)行時(shí)環(huán)境都是為資源有限的MCU而設(shè)計(jì),但Cube.AI在此基礎(chǔ)上針對(duì)STM32的獨(dú)特架構(gòu)進(jìn)行了進(jìn)一步優(yōu)化。因此,TensorFlow Lite更適合有跨平臺(tái)可移植性需求的應(yīng)用,而Cube.AI則更適合對(duì)計(jì)算速度和內(nèi)存消耗有更高要求的應(yīng)用。

  下表展示了兩個(gè)運(yùn)行時(shí)環(huán)境之間的性能比較(基于一個(gè)預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)參考模型)。評(píng)價(jià)指標(biāo)是在STM32上的推斷時(shí)間和內(nèi)存消耗。

  

 

  如表中所示,對(duì)于同一模型,Cube.AI運(yùn)行時(shí)環(huán)境比TFLite運(yùn)行時(shí)環(huán)境節(jié)約了大概20%flash存儲(chǔ)和約8%RAM存儲(chǔ)。此外,它的運(yùn)行速度幾乎比TFLite運(yùn)行時(shí)環(huán)境快了2倍。

  對(duì)于TFLite模型,用戶(hù)可以在STM32Cube.AI的網(wǎng)絡(luò)配置菜單中對(duì)2個(gè)運(yùn)行時(shí)環(huán)境進(jìn)行選擇。

  

 

  量化支持

  量化是一種被廣泛使用的優(yōu)化技術(shù),它將32位浮點(diǎn)模型壓縮為位數(shù)更少的整數(shù)模型,在精度只略微下降的情況下,減少了存儲(chǔ)大小和運(yùn)行時(shí)的內(nèi)存峰值占用,也減少了CPU/MCU的推斷時(shí)間和功耗。量化模型對(duì)整數(shù)張量而不是浮點(diǎn)張量執(zhí)行部分或全部操作。它是面向拓?fù)?、特征映射縮減、剪枝、權(quán)重壓縮等各種優(yōu)化技術(shù)的重要組成部分,可應(yīng)用在像MCU一樣資源受限的運(yùn)行時(shí)環(huán)境。

  通常有兩種典型的量化方法:訓(xùn)練后量化(PTQ)和量化訓(xùn)練(QAT)。PTQ相對(duì)容易實(shí)現(xiàn),它可以用有限的具有代表性的數(shù)據(jù)集來(lái)量化預(yù)先訓(xùn)練好的模型。而QAT是在訓(xùn)練過(guò)程中完成的,通常具有更高的準(zhǔn)確度。

  STM32Cube.AI通過(guò)兩種不同的方式直接或間接地支持這兩種量化方法:

  首先,它可以用來(lái)部署一個(gè)由PTQQAT過(guò)程生成的TensorFlow Lite量化模型。在這種情況下,量化是由TensorFlow Lite框架完成的,主要是通過(guò)“TFLite converter” utility導(dǎo)出TensorFlow Lite文件。

  其次,其命令行接口(CLI)還集成了一個(gè)內(nèi)部的訓(xùn)練后量化(PTQ)的過(guò)程,支持使用不同的量化方案對(duì)預(yù)訓(xùn)練好的Keras模型進(jìn)行量化。與使用TFLite Converter工具相比,該內(nèi)部量化過(guò)程提供了更多的量化方案,并在執(zhí)行時(shí)間和精確度方面有更好的表現(xiàn)。

  

 

  下表顯示了在STM32上部署量化模型(與原有浮點(diǎn)模型相比)的好處。此表使用FD-MobileNet作為基準(zhǔn)模型,共有12層,參數(shù)大小145k,MACC操作數(shù)24M,輸入尺寸為224x224x3。

  

 

從表中很容易看出,量化模型節(jié)省了約4倍的flash存儲(chǔ)和RAM存儲(chǔ),且運(yùn)行速度提高了約3倍,而精確度僅僅下降了0.7%。

  在文檔的末尾還附上了一個(gè)快速實(shí)踐示例:量化一個(gè)MNIST模型。

  圖形流與存儲(chǔ)布局優(yōu)化

  除了量化技術(shù),STM32Cube.AI還通過(guò)使用其C代碼生成器的優(yōu)化引擎,針對(duì)推理時(shí)間優(yōu)化內(nèi)存使用(RAM & ROM)。該引擎基于無(wú)數(shù)據(jù)集的方法,無(wú)需驗(yàn)證或測(cè)試數(shù)據(jù)集來(lái)應(yīng)用壓縮和優(yōu)化算法。

  一種方法:權(quán)重/偏置項(xiàng)壓縮,采用k -均值聚類(lèi)算法。該壓縮算法僅適用于全連接層。其優(yōu)勢(shì)是壓縮速度快,但是結(jié)果并不是無(wú)損的,最終的精度可能會(huì)受到影響。STM32Cube.AI提供驗(yàn)證功能,用于對(duì)所生成的C模型中產(chǎn)生的誤差進(jìn)行評(píng)估。

  壓縮選項(xiàng)可以在STM32Cube.AI的網(wǎng)絡(luò)配置中激活,如下圖所示:

  

 

  第二種方法:操作融合,通過(guò)合并層來(lái)優(yōu)化數(shù)據(jù)布局和相關(guān)的計(jì)算核。轉(zhuǎn)換或優(yōu)化過(guò)程中會(huì)刪除一些層(“Dropout”“Reshape”),而有些層(如非線(xiàn)性層以及卷積層之后的池化層)會(huì)被融合到前一層中。其好處是轉(zhuǎn)換后的網(wǎng)絡(luò)通常比原始網(wǎng)絡(luò)層數(shù)少,降低了存儲(chǔ)器中的數(shù)據(jù)吞吐需求。

  

 

  最后一種方法是優(yōu)化的激活項(xiàng)存儲(chǔ)。其在內(nèi)存中定義一個(gè)讀寫(xiě)塊來(lái)存儲(chǔ)臨時(shí)的隱藏層值(激活函數(shù)的輸出)。此讀寫(xiě)塊可以被視為推理函數(shù)使用的暫存緩沖區(qū),在不同層之間被重復(fù)使用。因此,激活緩沖區(qū)的大小由幾個(gè)連續(xù)層的較大存儲(chǔ)需求決定。比如,假設(shè)有一個(gè)3層的神經(jīng)網(wǎng)絡(luò),每一層的激活值分別有5KB, 12KB3KB,那么優(yōu)化后的激活緩沖區(qū)大小將是12KB,而不是20KB

  可重定位的二進(jìn)制模型支持

  非可重定位方法(靜態(tài)方法)指的是:生成的神經(jīng)網(wǎng)絡(luò)C文件被編譯并與最終用戶(hù)應(yīng)用程序堆棧靜態(tài)鏈接在一起。

  如下圖所示,所有對(duì)象(包括神經(jīng)網(wǎng)絡(luò)部分和用戶(hù)應(yīng)用程序)根據(jù)不同的數(shù)據(jù)類(lèi)型被一起鏈接到不同的部分。在這種情況下,當(dāng)用戶(hù)想要對(duì)功能進(jìn)行部分更新時(shí)(比如只更新神經(jīng)網(wǎng)絡(luò)部分),將需要對(duì)整個(gè)固件進(jìn)行更新。

  

 

  相反,可重定位二進(jìn)制模型指定一個(gè)二進(jìn)制對(duì)象,該對(duì)象可以安裝和執(zhí)行在STM32內(nèi)存子系統(tǒng)的任何位置。它是所生成的神經(jīng)網(wǎng)絡(luò)C文件的編譯后的版本,包括前向核函數(shù)以及權(quán)重。其主要目的是提供一種靈活的方法來(lái)更新AI相關(guān)的應(yīng)用程序,而無(wú)需重新生成和刷寫(xiě)整個(gè)終端用戶(hù)固件。

  生成的二進(jìn)制對(duì)象是一個(gè)輕量級(jí)插件。它可以從任何地址(位置無(wú)關(guān)的代碼)運(yùn)行,其數(shù)據(jù)也可放置于內(nèi)存中的任何地方(位置無(wú)關(guān)的數(shù)據(jù))

  STM32Cube.AI簡(jiǎn)單而高效的AI可重定位運(yùn)行時(shí)環(huán)境可以將其實(shí)例化并使用它。STM32固件中沒(méi)有內(nèi)嵌復(fù)雜的資源消耗型動(dòng)態(tài)鏈接器,其生成的對(duì)象是一個(gè)獨(dú)立的實(shí)體,運(yùn)行時(shí)不需要任何外部變量或函數(shù)。

  下圖的左側(cè)部分是神經(jīng)網(wǎng)絡(luò)的可重定位二進(jìn)制對(duì)象,它是一個(gè)自給自足的獨(dú)立實(shí)體,鏈接時(shí)將被放置于終端用戶(hù)應(yīng)用程序的一個(gè)單獨(dú)區(qū)域中(右側(cè)部分)。它可以通過(guò)STM32Cube.AI的可重定位運(yùn)行時(shí)環(huán)境被實(shí)例化以及動(dòng)態(tài)鏈接。因此,用戶(hù)在更新AI模型時(shí)只需要更新這部分二進(jìn)制文件。另外,如果有進(jìn)一步的靈活性需求,神經(jīng)網(wǎng)絡(luò)的權(quán)重也可以選擇性地被生成為獨(dú)立的目標(biāo)文件。

  

 

  可重定位網(wǎng)絡(luò)可以在STM32Cube.AI的高級(jí)設(shè)置中激活,如下圖所示:

  

 

  最后,作為意法半導(dǎo)體人工智能生態(tài)系統(tǒng)的核心工具,STM32Cube.AI提供許多基本和高級(jí)功能,以幫助用戶(hù)輕松創(chuàng)建高度優(yōu)化和靈活的人工智能應(yīng)用。

 

  • 意法半導(dǎo)體STM32H743IIT6高性能MCU深度剖析
  • 意法半導(dǎo)體(STMicroelectronics)的 STM32H743IIT6 是一款備受矚目的高性能微控制器,在嵌入式系統(tǒng)領(lǐng)域中具有重要的地位。本文將對(duì)其產(chǎn)品參數(shù)進(jìn)行專(zhuān)業(yè)準(zhǔn)確的介紹。STM32H743IIT6 基于 Arm? Cortex?-M7 內(nèi)核,主頻高達(dá) 480MHz,具備強(qiáng)大的計(jì)算能力和高效的處理性能。這使得該微控制器能夠輕松應(yīng)對(duì)復(fù)雜的計(jì)算任務(wù)和實(shí)時(shí)性要求較高的應(yīng)用場(chǎng)景。
    2024-07-08 143次
  • 意法半導(dǎo)體STM32F722RET6性能和穩(wěn)定性
  • 在當(dāng)今高度智能化和數(shù)字化的時(shí)代,微控制器作為電子系統(tǒng)的核心組件,其性能和功能的優(yōu)劣直接決定了整個(gè)系統(tǒng)的運(yùn)行效果和應(yīng)用范圍。意法半導(dǎo)體(STMicroelectronics)推出的 STM32F722RET6 微控制器,以其出色的性能、豐富的功能和可靠的穩(wěn)定性,成為眾多應(yīng)用領(lǐng)域的理想之選。
    2024-07-05 162次
  • 意法半導(dǎo)體STM32F723ZET6高性能MCU卓越之選
  • 在當(dāng)今電子技術(shù)領(lǐng)域,MCU作為系統(tǒng)的核心組件,其性能和功能直接影響著整個(gè)系統(tǒng)的運(yùn)行效果和應(yīng)用范圍。意法半導(dǎo)體(STMicroelectronics)推出的 STM32F723ZET6 微控制器,以其出色的性能和豐富的功能,成為眾多應(yīng)用場(chǎng)景中的理想選擇。STM32F723ZET6 基于高性能的 Arm? Cortex?-M7 內(nèi)核,運(yùn)行頻率高達(dá) 216 MHz,能夠提供強(qiáng)大的計(jì)算能力和快速的響應(yīng)速度。這使得它在處理復(fù)雜的算法和實(shí)時(shí)任務(wù)時(shí)表現(xiàn)出色,為系統(tǒng)的高效運(yùn)行提供了有力保障。
    2024-07-05 138次
  • 意法半導(dǎo)體 STM32F746IGT6高性能低功耗優(yōu)勢(shì)
  • 意法半導(dǎo)體(STMicroelectronics)的 STM32F746IGT6 就是這樣一款令人矚目的產(chǎn)品,它以出色的性能和豐富的特性成為眾多嵌入式系統(tǒng)的理想選擇。STM32F746IGT6 基于高性能的 Arm? Cortex?-M7 內(nèi)核,工作頻率高達(dá) 216 MHz,這使其具備強(qiáng)大的數(shù)據(jù)處理能力和快速的響應(yīng)速度,能夠輕松應(yīng)對(duì)復(fù)雜的計(jì)算任務(wù)和實(shí)時(shí)性要求極高的應(yīng)用場(chǎng)景。
    2024-07-05 117次
  • 意法半導(dǎo)體STM32F750Z8T6高頻率運(yùn)行
  • 意法半導(dǎo)體(STMicroelectronics)推出的 STM32F750Z8T6基于高性能的Arm? Cortex?-M7內(nèi)核,運(yùn)行頻率高達(dá) 216 MHz,能夠?yàn)楦鞣N復(fù)雜的任務(wù)提供強(qiáng)大的計(jì)算能力。其內(nèi)核架構(gòu)經(jīng)過(guò)優(yōu)化,具備高效的指令執(zhí)行效率和低延遲響應(yīng)特性,使得系統(tǒng)能夠快速處理數(shù)據(jù)和執(zhí)行指令。
    2024-07-05 142次

    萬(wàn)聯(lián)芯微信公眾號(hào)

    元器件現(xiàn)貨+BOM配單+PCBA制造平臺(tái)
    關(guān)注公眾號(hào),優(yōu)惠活動(dòng)早知道!
    10s
    溫馨提示:
    訂單商品問(wèn)題請(qǐng)移至我的售后服務(wù)提交售后申請(qǐng),其他需投訴問(wèn)題可移至我的投訴提交,我們將在第一時(shí)間給您答復(fù)
    返回頂部