通過對TinyML領域基礎概念的堅實理解,我們將把我們的知識應用到現實生活中的項目中。nbsp;
在深入研究這個項目之前,我想說明一下,這個項目將使用現有的數據集,Google Colabs和由Pete Warden和哈佛大學TinyML團隊開發的Arduino代碼。為了在我們的微控制器單元(MCU)上部署,他們的資源將為我們提供:
訪問數據集
模型架構
培訓腳本
量化腳本
評價工具
Arduino代碼
作為免責聲明,我們沒有開發絕大多數代碼,我們不擁有它的權利。nbsp;
TinyML項目-構建語音命令機器人子系統
在這個項目中,我們將構建一個簡單的機器人子系統,使用機器學習來響應語音命令。微控制器將收集來自麥克風的輸入,使用ML來監聽喚醒詞,如“向前”和“向后”,然后在命令的方向上驅動一個小型直流電機。
由于已經有很多關于用微控制器控制電機的好信息,本文將主要集中在演示如何:
使用現有資源使用TensorFlow Lite for Microcontrollers訓練ML模型
量化并將模型部署到Arduino Nano 33 BLE Sense
在Arduino上運行本地推理,并讓它控制由標準電池電源(AA或9 V)供電的電機
帶聲控電機的TinyML機器人子系統的BOM
在下面的表1中,您將找到此項目的物料清單(BOM)。
表1.
BOM例如TInyML聲控電機項目。整個項目將花費不到30美元。
部分 | 例如 | 費用 * 美元 | 注意到 |
---|---|---|---|
Arduino Nano 33 BLE Sense | 鏈路 | 二十二塊五 | 這是一個標準的TinyML開發設備。 |
L293D Dual H-Bridge Motor Driver |
鏈路 | 四元五角 | 我用這個IC,因為我已經有它躺在周圍。在您的項目中,這可以由您選擇的H橋代替。 |
直流電機L | 鏈路 | 一塊九毛五 | 我使用的是Elegoo Uno R3入門套件中的直流電機。任何便宜的5 VDC電機將為這個項目工作。 |
3x 1k電阻器 | 0.30美元 | ||
4x AA電池和連接器 | 鏈路 | 0.58美元 | 這個項目的輸入電壓范圍可以從4.5到21 V。在我的項目中,我使用了4節AA電池(~6 V),因為我有它們,但在這個范圍內的9V或其他電源將工作。 |
(* 注:所有費用均自2021年9月起計算)
對于這個特定的項目,我從手頭已有的部件中選擇了大部分部件,如圖1所示。
圖1.
我在這個項目中使用的部件
在這個項目中,你將有很大的自由選擇其他類似的部分來復制這個項目。nbsp;
設置TinyML軟件Arduino納米33 BLE感
要在我們的Arduino Nano 33 BLE Sense上運行TinyML腳本,我們需要安裝一些包和依賴項。如果您的
安裝完成后,我們需要安裝Arduino Nano 33 BLE Sense的板文件。要執行此操作,請從IDE中轉到Tools → Board → Boards Manager。在這里,搜索“mbed nano”并安裝“Arduino Mbed OS Nano Boards.“
如下圖2所示。
圖2.
我們需要安裝Nano 33 BLE Sense的板文件
在此之后,我們需要安裝此項目所需的庫。要執行此操作,請轉到工具→管理庫。從那里,搜索并下載以下庫:
Arduino_TensorFlowLite
哈佛_TinyMLx
完成了這些,我們就可以開始這個項目了!
步驟1:使用TensorFlow Lite訓練機器學習模型
一般來說,ML工作流將從收集和標記數據集開始開始,然后從頭開始設計模型架構。為了時間和簡單起見,我們將通過利用一些現成的數據集和預先訓練的關鍵字識別模型來“作弊”,這兩個模型都是由Pete Warden開發的。為了利用這些資源并訓練我們的模型,我們將使用哈佛大學TinyML團隊開發的Google Colab中的腳本。nbsp;
Google Colab可以在這里找到。
首先,確保您在Colab中使用圖形處理單元(GPU)運行時(如圖3所示),因為這將顯著加快訓練時間。一旦你這樣做了,所有的代碼都可以按原樣使用了。nbsp;只需點擊每個單元格左上角的黑色"運行"按鈕,按順序運行每個單元格。& nbsp;
圖3.
您必須確保在Colab中使用GPU運行時
我們使用的模型架構是tiny_conv,我們將總共訓練15,000步。前12,000個將使用0.001的學習率,最后3,000個將使用0.0001的學習率。此外,我們還將訓練模型來理解“forwards”和“backwards”這兩個詞,Warden的關鍵字定位(KWS)數據集已經包含了這兩個詞。這可以在圖4中看到。
圖4
.這是Colab中的一部分,我們在這里定義要訓練的單詞、訓練參數和模型架構
請記住,培訓可能需要幾個小時才能完成,因此請確保您的計算機已插入電源,并且您的互聯網連接穩定。
步驟2:量化和評估ML模型
訓練完成后,您將到達Colab中標記為步驟2的點。這里是量化開始的地方。
首先,我們凍結我們的模型,這是將所有相關的訓練結果(圖,權重等)組合到一個文件中進行推理的過程。一旦我們有了一個凍結的模型,我們將把模型轉換成一個TFLite模型。哈佛建立的腳本使這個過程相對容易,輸出的TFLite模型應該是完全量化的。最終的模型大小應該在20 kB以下。
當完全轉換后,Colab有腳本可用于比較量化和非量化模型之間的準確性。如果一切正常,準確度應該幾乎相同。
步驟3:將機器學習模型部署到Arduino
在繼續之前,我想讓你知道你可以在這里找到我的完整代碼作為參考。
一旦我們有了一個完全量化和轉換的TensorFlow Lite模型,我們需要將其部署到Arduino。我們將修改哈佛預先存在的micro_speech示例,您可以在Arduino IDE中找到:文件→示例→不兼容→哈佛_TinyMLx → micro_speech。nbsp;
您可能會有點不知所措,因為這段代碼中有很多內容;但是,出于本項目的目的,我們不需要關注其中的大部分內容。
首先,我們必須輸入新的TFLite Micro模型來代替當前在micro_speech示例中使用的模型。nbsp;在Colab的最后一個單元格中,我們應該輸出一個十六進制字符的大矩陣,如圖5所示。這是我們的TensorFlow Lite for Microcontrollers模型,將用于我們的Arduino代碼。nbsp;
圖5.
Google Colab輸出的TensorFlow Lite Micro模型片段
在micro_features_model.CPP文件中,僅復制并粘貼Colab中的十六進制字符,以取代文件中已有的字符。在Colab代碼的最底部,應該有一行寫著unsigned int g_model_len,后面跟著一個數字。最后一件事是從Colab復制這個數字,并將其插入Arduino代碼文件底部當前用于const int g_model_len的數字。
在此之后,與模型相關的唯一更改是在micro_features_micro_model_settings.CPP文件中。如圖6所示,將類別標簽"yes"和"no"更改為"forwards"和"backward"。確保你不碰"沉默"或"未知"的標簽。
圖6.
我們必須改變我們的新單詞的預期類別標簽
步驟4:解釋推理并編寫電機驅動程序代碼
此時,TFLite Micro模型應該按預期運行,現在我們需要驅動電機以響應TinyML推理輸出。為此,我們將修改arduino_command_responder. CPP文件。
如圖7所示,在文件的頂部,我們將添加幾個#define語句來定義Arduino上的哪些引腳將連接到電機驅動器上的哪些引腳。對于我們的項目,我們將使用D2作為ENABLE信號,D3作為Driver1A輸入,D4作為Driver2A輸入。請確保還將這些引腳設置為RespondToCommand()函數中的pinMode()函數的輸出。
圖7.
我們需要定義引腳,將其設置為輸出,并編寫簡單的motorCTRL函數。
從那里我們可以定義我們的運動控制功能。這個函數接受一個速度(我們不會為了這個項目的目的而改變它),以及一個Driver1A和Driver2A的邏輯值。基本上,如果驅動程序1A是高,驅動程序2A是低,電機將在一個方向旋轉。如果反過來,我們的馬達就會朝相反的方向旋轉。
現在剩下的唯一事情就是更改代碼中已經存在的命令響應。如圖8所示,我們將更改命令響應,以便如果找到的命令的第一個字符是"f"(即找到的命令是"Forward"),它將使電機向前旋轉。我們對"后退"命令執行相同的操作。
圖8.
我們將根據ML模型找到的命令控制電機向前或向后移動。
步驟5:構建電機電路-電機驅動器電路
有了所有的軟件的方式,我們現在可以建立我們的電機驅動器電路。上面列出了BOM,示意圖如下圖9所示。
圖9.
我們的馬達驅動電路。
我們使用4.5到21 V的電壓源為Arduino和L293D供電。接線中的D4連接到電機驅動器2A輸入端,D3連接到電機驅動器1A輸入端,D2連接到EN 1,2。我們在每個信號上都有一個1 k Ω下拉電阻,以確保始終定義我們的狀態,為了安全起見,我們還有一個0.1 μ F電容用于去耦。
審核編輯 黃宇
-
機器人
+關注
關注
211文章
28418瀏覽量
207083 -
BLE
+關注
關注
12文章
660瀏覽量
59406 -
語音控制
+關注
關注
5文章
482瀏覽量
28249 -
Arduino
+關注
關注
188文章
6469瀏覽量
187056 -
TinyML
+關注
關注
0文章
42瀏覽量
1237
發布評論請先 登錄
相關推薦
評論