設(shè)計(jì)一款自行車手的智能AI頭盔
每個(gè)騎自行車的人在使用手勢(shì)左轉(zhuǎn)和右轉(zhuǎn)時(shí)都會(huì)遇到困難,在某些情況下這可能相當(dāng)危險(xiǎn)。我已經(jīng)開(kāi)發(fā)了一個(gè)原型,可以戴在任何自行車頭盔,使其便攜和易于使用。
在模型中,我們需要遵循以下步驟在邊緣脈沖。
首先,我們將創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),并將樣本數(shù)據(jù)標(biāo)記為“右”,“左”,背景道路噪聲和“道路噪聲”作為單獨(dú)的數(shù)據(jù)集。隨后,我們將使用邊緣脈沖啟動(dòng)模型訓(xùn)練過(guò)程。基于驗(yàn)證的結(jié)果,可能需要調(diào)整訓(xùn)練參數(shù)或合并額外的數(shù)據(jù)集,然后重新訓(xùn)練模型以提高其性能。一旦模型已成功訓(xùn)練和驗(yàn)證,達(dá)到可接受的精度水平,我們將繼續(xù)利用Arduino庫(kù)將其部署在Portenta H7硬件上。
要將Arduino Portenta H7板連接到EI帳戶,請(qǐng)按照下面鏈接中列出的步驟進(jìn)行操作。
設(shè)備連接
固件安裝完成后,打開(kāi)命令窗口/終端(MacOs),輸入以下daemon命令:
edge-impulse-daemon
連接設(shè)備后,導(dǎo)航到數(shù)據(jù)采集部分。
通過(guò)Portenta H7錄制音頻,開(kāi)始收集音頻數(shù)據(jù)。這里我讀左,并記錄數(shù)據(jù)在邊緣脈沖工具,并標(biāo)記為左。同樣,為Right記錄音頻數(shù)據(jù),并單獨(dú)收集道路噪音,以提高準(zhǔn)確性。
邊緣脈沖中的模型訓(xùn)練
在Create Impulse部分,請(qǐng)將預(yù)處理模塊設(shè)置為MFCC,選擇“Classification”作為學(xué)習(xí)模塊。
然后生成特征并可視化以獲得每個(gè)標(biāo)簽的高級(jí)概述。
神經(jīng)網(wǎng)絡(luò)設(shè)置:
在神經(jīng)網(wǎng)絡(luò)設(shè)置中,將訓(xùn)練周期設(shè)置為200,學(xué)習(xí)率設(shè)置為0.005
在Neural Network部分,按指示配置層。
我使用重塑層將音頻數(shù)據(jù)轉(zhuǎn)換為1D數(shù)組,并應(yīng)用1D卷積層進(jìn)行模型訓(xùn)練。為了提高準(zhǔn)確性,我也使用了drop out圖層。
該模型在訓(xùn)練階段達(dá)到了100%的準(zhǔn)確率,這足以進(jìn)行下一步。
模型試驗(yàn)
在測(cè)試階段,使用未納入訓(xùn)練過(guò)程的新數(shù)據(jù)集對(duì)模型進(jìn)行評(píng)估。該模型達(dá)到了84.21%,足以用于硬件部署。
部署
在成功驗(yàn)證訓(xùn)練模型后,將其部署回Arduino Portenta H7。
然而,我們不會(huì)直接將其部署到Arduino Portenta H7上,因?yàn)槲覀冃枰跈C(jī)器學(xué)習(xí)預(yù)測(cè)之上添加更多的邏輯。
下載模型后,按照以下步驟將庫(kù)導(dǎo)入Arduino IDE:
Arduino IDE中導(dǎo)入庫(kù):
1. 打開(kāi)Arduino IDE,轉(zhuǎn)到**Sketch** > **Add File**,選擇下載的文件。
2. 導(dǎo)入后,導(dǎo)航到**Examples** > **Smart_Helmet_V2_Inferencing** > **Portenta_H7** > **Portenta_h7_microphone_continuous**。
連續(xù)音頻采樣
在對(duì)音頻進(jìn)行分類時(shí),例如在關(guān)鍵字檢測(cè)中,必須確保捕獲和分析所有信息,以避免遺漏任何事件。這需要你的設(shè)備在分析音頻樣本的同時(shí)捕獲它們。
為什么需要連續(xù)推理?
在對(duì)數(shù)據(jù)進(jìn)行分類的標(biāo)準(zhǔn)(非連續(xù))推理模式中,您將對(duì)數(shù)據(jù)進(jìn)行采樣,直到有一個(gè)完整的窗口(例如,1秒用于關(guān)鍵字發(fā)現(xiàn)模型,如studio中的Create Impulse選項(xiàng)卡中詳細(xì)介紹的那樣)。一旦有了這個(gè)窗口,就可以使用‘ run_classifier ’函數(shù)對(duì)其進(jìn)行分類,該函數(shù)將返回一個(gè)預(yù)測(cè)。之后,清除緩沖區(qū),采樣新數(shù)據(jù),并再次運(yùn)行推理過(guò)程。然而,在現(xiàn)實(shí)世界中部署模型時(shí),有一些重要的注意事項(xiàng)需要考慮:
1. 窗口之間存在延遲,因?yàn)閷?duì)每個(gè)窗口進(jìn)行分類需要時(shí)間,并且在此分類期間不會(huì)對(duì)數(shù)據(jù)進(jìn)行采樣。這可能導(dǎo)致事件丟失。
2. 窗戶之間沒(méi)有重疊。因此,如果事件正好發(fā)生在窗口的末尾,則可能無(wú)法完全捕獲它,從而導(dǎo)致不正確的分類。
為了減輕這種情況,我們需要進(jìn)行連續(xù)推理。關(guān)于連續(xù)推理的詳細(xì)說(shuō)明請(qǐng)點(diǎn)擊下面的鏈接。
算法
在檢測(cè)到關(guān)鍵字“右”或“左”后,SW將各自的led(左或右)閃爍7000毫秒,周期時(shí)間為500毫秒。
我已將自定義邏輯集成到此庫(kù)中,以激活特定的通用輸入/輸出(GPIO)引腳,以便在檢測(cè)到關(guān)鍵字時(shí)打開(kāi)/關(guān)閉特定的led。A修改后的鏈接。一旦將庫(kù)添加到Arduino中,將提供ino文件以供參考。
最終的模型
我已經(jīng)連接了5V迷你電源,為Portenta H7和led供電。
結(jié)論
這個(gè)TinyML模型,通過(guò)Edge Impulse工具使用連續(xù)推理方法,在微控制器中啟用“嘿Siri”功能。這些機(jī)器學(xué)習(xí)模型可以用于各種用例,例如在家庭自動(dòng)化中打開(kāi)或關(guān)閉燈。
本文編譯自hackster.io





