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





