在之前的文章中,我們介紹了沒有AI基礎(chǔ)知識的工程師如何使用NanoEdge AI快速訓(xùn)練一個用于風(fēng)扇異常檢測的模型。
該模型根據(jù)來自電機(jī)控制板的電流信號,檢測風(fēng)扇過濾單元的堵塞百分比。我們知道,當(dāng)風(fēng)扇發(fā)生堵塞時,電機(jī)的電流信號形狀會與正常時不同,而傳統(tǒng)算法很難有效地處理這種差異。因此,機(jī)器學(xué)習(xí)算法成為解決該問題的明智選擇。對于機(jī)器學(xué)習(xí)算法,我們通常使用scikit-learn庫來訓(xùn)練模型。今天我們將展示如何自行訓(xùn)練機(jī)器學(xué)習(xí)模型,然后使用STM32Cube.AI 將其部署到同一設(shè)備上,以便讓大家充分了解兩種工具的不同之處。
NanoEdgeAI是一款端到端工具,允許對數(shù)據(jù)進(jìn)行一些預(yù)處理,并進(jìn)行訓(xùn)練和算法選擇,而STM32Cube.AI 則需要工程師具備一定的AI建模經(jīng)驗(yàn),因?yàn)镾TM32Cube.AI 暫不支持模型訓(xùn)練。
硬件和軟件準(zhǔn)備
用于驅(qū)動風(fēng)扇的P-NUCLEO-IHM03電機(jī)控制套件包括一塊NUCLEO-G431RB主板、一塊電機(jī)控制擴(kuò)展板,以及一臺無刷電機(jī)。
在軟件準(zhǔn)備方面,您需要配置anaconda環(huán)境,并安裝sklearn、pandas、ONNX等必要的庫。
讓我們回顧一下創(chuàng)建AI項(xiàng)目的一些關(guān)鍵步驟,然后據(jù)此逐步演示如何基于STM32Cube.AI 從零開始創(chuàng)建AI項(xiàng)目。
在步驟1中,用戶需要收集用于機(jī)器學(xué)習(xí)模型創(chuàng)建的數(shù)據(jù)。該數(shù)據(jù)集的一部分(訓(xùn)練數(shù)據(jù)集)將用于訓(xùn)練模型,另一部分(測試數(shù)據(jù)集)稍后將用于評估所構(gòu)建模型的性能。機(jī)器學(xué)習(xí)的數(shù)據(jù)集中的典型比率為:訓(xùn)練數(shù)據(jù)集占80%,測試數(shù)據(jù)集占20%。我們此次試驗(yàn)用的數(shù)據(jù)集與之前NanoedgeAI訓(xùn)練模型使用的數(shù)據(jù)是一樣的。
在步驟2中,用戶需要對數(shù)據(jù)進(jìn)行標(biāo)記;基本上,我們需要告訴機(jī)器收集的數(shù)據(jù)屬于哪一類(例如“跑步”、“散步”、“靜止”……) 分類指的是根據(jù)您認(rèn)為重要的屬性對數(shù)據(jù)進(jìn)行分組:這種屬性在機(jī)器學(xué)習(xí)領(lǐng)域被稱為“類”。
接下來,在步驟3中,用戶使用預(yù)先準(zhǔn)備的數(shù)據(jù)集訓(xùn)練機(jī)器學(xué)習(xí)模型。該任務(wù)也稱為“擬合”。訓(xùn)練結(jié)果的準(zhǔn)確性在很大程度上取決于用于訓(xùn)練的數(shù)據(jù)的內(nèi)容和數(shù)量。
在步驟4中,用戶將訓(xùn)練過的機(jī)器學(xué)習(xí)模型嵌入到系統(tǒng)中。對于在計(jì)算機(jī)上執(zhí)行的機(jī)器學(xué)習(xí),用戶可以利用Python庫直接執(zhí)行模型。對于在MCU等器件上運(yùn)行的機(jī)器學(xué)習(xí),用戶可以在執(zhí)行之前將該庫轉(zhuǎn)換為C代碼。
最后在步驟5中,用戶驗(yàn)證機(jī)器學(xué)習(xí)模型。如果驗(yàn)證結(jié)果與預(yù)期的結(jié)果不匹配,則用戶必須確定上述步驟中需要改進(jìn)的部分,以及如何改進(jìn)。比如增加數(shù)據(jù),更改模型,調(diào)整模型超參數(shù)等。
至此,我們已經(jīng)幫大家重新梳理了一次AI項(xiàng)目的建模過程。接下來我們將按照這樣的過程完成我們今天的實(shí)驗(yàn)。
首先,導(dǎo)入一些必要的庫
為了便于對比,我們使用了之前NanoEdgeAI訓(xùn)練模型中使用的數(shù)據(jù)集。我們使用pandas從csv文件讀取數(shù)據(jù),然后用于模型訓(xùn)練。
在訓(xùn)練之前,讓我們先來了解一下該數(shù)據(jù)集。讓我們打印出數(shù)據(jù)集的維度。
可以看到,該數(shù)據(jù)集一共有119條數(shù)據(jù)和128個特征,最后一列實(shí)際上是我們的數(shù)據(jù)標(biāo)簽。
接下來,我們將數(shù)據(jù)集分為訓(xùn)練集和測試集,訓(xùn)練集用于訓(xùn)練模型,測試集用于檢驗(yàn)?zāi)P偷姆夯芰ΑN覀儗?0%的數(shù)據(jù)用于訓(xùn)練,20%的數(shù)據(jù)用于測試
一旦數(shù)據(jù)集準(zhǔn)備就緒,我們就可以開始訓(xùn)練模型。
訓(xùn)練完成后,我們可以在測試集上驗(yàn)證模型的性能。我們發(fā)現(xiàn),該模型在測試集上可以達(dá)到約83%的準(zhǔn)確率。
最后,我們保存經(jīng)過訓(xùn)練的模型,將得到一個ONNX格式的文件random_forest.onnx
我們使用netron查看模型的結(jié)構(gòu)如下
STM32Cube集成使得STM32Cube.AI 用戶能夠有效地在廣泛的STM32微控制器系列產(chǎn)品之間移植模型,并且(在相似型號適用于不同產(chǎn)品的情況下)在STM32產(chǎn)品之間輕松遷移。
該插件擴(kuò)展了STM32CubeMX功能,可自動轉(zhuǎn)換訓(xùn)練好的AI模型,生成的優(yōu)化庫集成到用戶項(xiàng)目中,而不是人工構(gòu)建代碼,并支持將深度學(xué)習(xí)解決方案嵌入到廣泛的STM32微控制器產(chǎn)品組合中,從而為每個產(chǎn)品添加新的智能化功能。
STM32Cube.AI 原生支持各種深度學(xué)習(xí)框架,如Keras、TensorFlow Lite、ConvNetJs,并支持可導(dǎo)出為ONNX標(biāo)準(zhǔn)格式的所有框架,如PyTorch、Microsoft Cognitive Toolkit、MATLAB等。
此外,STM32Cube.AI 支持來自廣泛ML開源庫Scikit-Learn的標(biāo)準(zhǔn)機(jī)器學(xué)習(xí)算法,如隨機(jī)森林、支持向量機(jī)(SVM)、K-Means。
現(xiàn)在,我們準(zhǔn)備將模型部署到MCU。我們使用STM32Cube.AI 的命令行模式將模型轉(zhuǎn)換為經(jīng)過優(yōu)化的C代碼。我們運(yùn)用以下命令執(zhí)行模型轉(zhuǎn)換。
stm32ai generate -m random_forest.onnx
如果轉(zhuǎn)換成功,我們將看到以下消息。
在stm32ai_output文件夾中,我們將看到有以下文件生成。其中,network.c/.h包含關(guān)于模型拓?fù)涞囊恍?a target="_blank">信息,而network_data.c/.h則記錄了關(guān)于模型權(quán)重的一些信息。
此時,我們準(zhǔn)備好將生成的模型集成到stm32項(xiàng)目中。在CLI模式下,我們需要手動添加STM32Cube.AI 的運(yùn)行環(huán)境到項(xiàng)目,所以我們可以調(diào)用network.h中的函數(shù)來運(yùn)行模型。
當(dāng)然,STM32Cube.AI 提供一種更簡便的方式來集成AI模型。假設(shè)您的項(xiàng)目從一個ioc文件開始,我們可以將AI模型添加到cubeMX的代碼生成階段,然后一起生成代碼。
啟用cubeMX中的AI功能如下,選擇對應(yīng)的STM32Cube.AI 的版本。
我們可借此將AI模型集成到項(xiàng)目中。
就這樣,在我們生成代碼后,AI模型轉(zhuǎn)化為優(yōu)化的C代碼,然后與STM32Cube.AI 運(yùn)行環(huán)境的對應(yīng)版本一起集成到項(xiàng)目中。
這樣,我們就可以調(diào)用network.h中的函數(shù)將模型運(yùn)行起來。
最終,我們通過這種方式順利地將模型集成到了項(xiàng)目中。通過比較這兩種不同的方法,我們可以發(fā)現(xiàn)STM32Cube.AI 和NanoEdgeAI之間的差異。NanoEdgeAI更簡單、高效,而STM32Cube.AI 則更加靈活且可定制。
-
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354291 -
AI
+關(guān)注
關(guān)注
87文章
29806瀏覽量
268103 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8349瀏覽量
132312
原文標(biāo)題:AI技術(shù)專題之十三:用STM32Cube.AI 部署ONNX 模型實(shí)操示例:風(fēng)扇堵塞檢測
文章出處:【微信號:STMChina,微信公眾號:意法半導(dǎo)體中國】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論