資料介紹
描述
介紹和動機
機器學習通常涉及大量計算能力,這些計算能力通常以帶有 GPU 的大型數據中心的形式出現,訓練深度神經網絡的成本可能是天文數字。小至 14 KB 的微型神經網絡的出現為新應用打開了大量大門,這些應用可以直接在微處理器本身上分析數據并得出可操作的見解(Warden 和 Situnayake,2019 年)。這可以節省時間并防止延遲,因為我們不必將數據傳輸到云數據中心進行處理并等待其返回(Warden 和 Situnayake,2019 年)。這種現象稱為邊緣計算,允許在存儲數據的設備上處理和計算數據(Lea,2020)。
學習過程:模型訓練
首先,在我開始這個項目之前,我不知道邊緣計算或 Arduino 是什么。正如技術列表所示,我必須使用并協調整個工具生態系統,才能實現在運行良好的 Arduino 板上部署語音識別的目標。
我做的第一件事是下載 VS Code IDE 并確保安裝了 Platform IO 擴展。同時,我必須下載 Arduino IDE 并包含 TensorFlow Lite 庫。在 VS Code 中,我從 Arduino IDE 導入了內置的微語音示例,作為一個運行良好的示例。該模型接收到“yes”的輸入,打開 Arduino 上的綠色 LED;“否”打開了 Arduino 上的紅色 LED;所有其他打開 Arduino 上的藍色 LED 的單詞;或沒有打開 LED 的靜音。
TensorFlow 已經在其 GitHub 存儲庫中提供了訓練腳本:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/micro/examples/micro_speech/train/train_micro_speech_model.ipynb。
這個腳本也是我想如何為我的特定用例訓練微語音模型的基礎。
我最初開始將訓練腳本從 TensorFlow 版本 1.x 轉換為 2.x,因為后者的性能優化和簡化的 API 調用。但是,我無法轉換整個腳本,因為在 TensorFlow v2 中沒有等效于 v1 的“tf.lite.constants.INT8”模塊。
修改這個腳本實際上是一個巨大的挑戰。主要因素是因為每當我對模型進行更改時,都需要大約 2 個小時來訓練,所以我選擇的超參數沒有快速和即時的反饋。我無法通過經常試驗和操縱許多參數來執行“快速原型設計”。我遇到的最令人抓狂的問題是,當我在 TensorFlow 中訓練模型后,當我嘗試量化模型并從中生成 TensorFlow Lite 模型時,我會收到如下錯誤消息:
我對此進行了大量研究,結果發現這很可能歸因于我每次在 Colab 單元中運行代碼片段時創建的嵌套圖,因此新占位符無法獲得所需的輸入值在評估階段。每次我重新運行我的訓練腳本來訓練微語音模型時,我都通過重新啟動我的 GPU 來解決這個問題。
通過使用“go”和“stop”進行訓練,我的模型得到的初始準確率為 87.2%,因此我認為可以通過將訓練步數從 15,000 次迭代增加到 25,000 次來改進它。我也很愚蠢同時 tweeked 另一個變量是模型將識別的喚醒詞的數量,因為我在列表中添加了“向后”和“向前”。
我用 25, 000 步訓練的模型的準確度實際上下降到了 85%。花了幾乎兩倍的時間,3.5 小時,但準確度下降了!造成這種情況的原因可能有兩個:1)混淆矩陣變大,必須識別更大的詞向量并對更大的詞向量更敏感,因此準確率下降;2)峰值性能實際上是在 15,000 個訓練步驟,模型進入收益遞減階段。
我用兩個額外的喚醒詞回到最初的 15,000 個訓練步驟,我的模型的最終準確率為 85.8%。因此,從這個結果中,我可以得出一個結論,即最有可能達到峰值性能需要用 15,000 步進行訓練。
?
?
從我之前在課堂上的作業來看,0.001 和 0.0001 的學習率產生了具有最高準確度的模型,所以我用它們來訓練我的模型。
我所做的其他調整是模型的實際架構。有幾個可供選擇,其中包括一個全尺寸的卷積神經網絡。我最初選擇了 MODEL_ARCHITECTURE = 'conv' 并嘗試將該模型部署到我的 Arduino。結果是模型太大,Arduino 無法處理,所以每當我試圖在麥克風中說出喚醒詞時,它都會拋出一堆“請求失敗”錯誤而關閉。之后我了解到,Arduino 可以處理的唯一模型架構是其中包含“tiny”一詞的架構,例如效果最好的“tiny_conv”和“tiny_embedding_conv”。這些模型架構已經預先打包在訓練腳本中并可以使用。
“tiny_conv”模型有一個卷積層,然后是一個具有 4 x 4000 權重的全連接層,最后一層是 softmax 層。
我選擇用來訓練模型的詞多種多樣。該模型從識別“是”和“否”開始,它們之間的區別足夠大,與“開”和“關”等其他詞對相比,它們不容易混淆。然后我決定添加“前進”和“后退”,使這個模型像交通信號/停車信號一樣。當說出“STOP”或“BACKWARD”時 LED 會變為紅色,當說出“GO”或“FORWARD”時 LED 會變為綠色。如果說出不屬于這四個類別中的任何一個的單詞,LED 將變為藍色。沉默根本不會打開 LED。
微語音模型本質上是將傳給麥克風的音頻輸入轉換為頻譜圖,然后通過 TensorFlow Lite 運行它以對說出的單詞進行分類。一旦模型完成訓練,訓練腳本就會生成一個名為 model.cc 的二進制模型文件。此二進制文件中的數據將使用腳本訓練的模型和模型的二進制長度編碼到一個名為 micro_features_model.cpp 的文件中。
我使用 TensorBoard 來顯示準確度和交叉熵的進展,它們應該分別增加和減少。紅線指的是驗證數據集上的性能,它定期發生,因此數據點稀疏。藍線指的是訓練數據集上的性能,它經常出現,所以這些線更接近。
除了“未知”和“沉默”之外,還有一個名為 kCategoryCount 的變量表示模型需要分類的詞數。對于我的特定用例,kCategoryCount 等于 6。
學習過程:部署到 Arduino
到目前為止,我剛剛討論了訓練模型并使其達到盡可能高準確度的挑戰。下一個障礙是將這個模型部署到 Arduino。
困擾我的最大挑戰是一個錯誤,說我在項目文件夾中定義了兩次模型。我花費了大量時間梳理所有不同的文件以解決該錯誤。事實證明,我忘記刪除舊的#include 語句,該語句引用的模型與我試圖部署到 Arduino 的模型不同。為了避免將來混淆,我給我的模型取了一個簡單的名稱,并刪除了與另一個模型相關的任何其他文件。我只是清理了我的項目文件夾并選擇了極簡主義。錯誤如下所示。
一旦我清除了這個障礙,我很快就被另一堵磚墻迎接了。該程序能夠編譯,但我無法將其上傳到 Arduino。我得到的錯誤是沒有檢測到上傳端口,所以我無法將模型上傳到 Arduino。我非常焦慮,因為我認為是我的 MacBook Pro 出現問題并且無法檢測到外部設備。我通過將 USB 插入它來測試這個理論,看看它是否會識別它,事實上它確實做到了。我只能摸不著頭腦,將開發轉移到我的 Windows 計算機上。在將我的模型部署到 Arduino 之前,一切都按預期工作。我得到了完全相同的錯誤,然后我開始非常擔心。我的 Arduino 會壞嗎?寄給我的是有缺陷的嗎?我什至從 Windows 7 移動到 Windows 10 并得到了同樣的錯誤!這變得非常令人擔憂。最后要檢查的是我的微型 USB 電纜。我用過舊的微型 USB 來為我的 Android 手機充電。這實際上是最后一個要改變的變量。如果切換我的微型 USB 電纜仍然不允許我將模型上傳到 Arduino,我只能寫下我無法上傳模型的原因。
我在下面的屏幕截圖中顯示了我的編譯成功但上傳失敗。
?
我將我的微型 USB 電纜換成了另一根更長且不是專門為手機充電的電纜……這是驚人的結果!
?
事實證明,無法檢測到上傳端口的原因是因為微型 USB 電纜有問題!我再放心不過了。
在部署到 Arduino 時解決了這兩個問題后,我現在可以自由地將模型部署到它。端口錯誤確實出現了,但這次我找到了 Arduino 推薦的快速解決方案:“如果板子沒有進入上傳模式,請在啟動上傳過程之前雙擊重置按鈕; 橙色 LED 應該會慢慢淡入淡出,表明開發板正在等待上傳。” 在 Arduino 上執行此重置操作可解決任何端口檢測錯誤。
更多研究還建議在上傳之前對構建文件進行清理,如此屏幕截圖所示。
學習這些漂亮的技巧將使我進入與 Arduinos 合作的下一階段。
未來的工作
能夠在 Arduino 上部署微型深度學習模型徹底改變了物聯網和邊緣計算的功能。由于成本的顯著降低,可能性是無窮無盡的。由于模型的準確性可能會更好,因此仍有很多改進工作要做。提高準確性在某種程度上仍然是一項黑盒活動,尤其是在使用此類新技術的情況下,因此通過操縱多個參數進行徹底的實驗將使我們更接近更好的模型。這個特定模型的音頻輸入非常簡單,下一個合乎邏輯的舉措是訓練并使用完整的短語來控制 Arduino,無論它仍然打開不同顏色的 LED 燈,還是讓它以另一種方式響應。盡管在這個階段,Arduino 上的實現更多的是 POC,而不是可擴展或大規模工業生產,但它讓我們對這個新的前沿領域有所了解。利用算法簡化的力量,我們可以將這些 POC 提供的解決方案堆疊和組合在一起,以解決與安全相關的更難、時間敏感的問題,例如機器人手術或自動駕駛汽車。
參考
Lea, P. (2020)。面向建筑師的物聯網和邊緣計算——第二版。O'Reilly 電子書[在線]。網址為:https ://learning.oreilly.com/library/view/iot-and-edge/9781839214806/ (訪問日期:2020 年 12 月 14 日)。
Warden, P. 和 Situnayake, D. (2019)。TinyML。O'Reilly 電子書[在線]。網址為:https ://learning.oreilly.com/library/view/tinyml/9781492052036/ (訪問日期:2020 年 11 月 10 日)。
監獄長,P.(2017 年)。啟動語音命令數據集[在線]。網址為:https ://ai.googleblog.com/2017/08/launching-speech-commands-dataset.html (訪問日期:2020 年 12 月 5 日)。
?
?
?
- labview交通燈控制系統 14次下載
- 基于MULTISIM的交通燈 56次下載
- 基于Moore型狀態機的交通燈控制系統 34次下載
- 交通燈的電路原理圖 81次下載
- 交通燈系統設計與制作解析 42次下載
- plc交通燈控制電路設計合集 52次下載
- 交通燈控制系統設計 52次下載
- 交通燈監控控制 指令表 MAIN 0次下載
- 交通燈程序設計 交通燈protues仿真程序基于51單片機交通燈 352次下載
- LED模擬交通燈 18次下載
- FPGA控制的交通燈課程設計 28次下載
- 基于單片機控制的交通燈畢業設計資料 33次下載
- 基于FPGA的交通燈控制器實現
- 交通燈控制板用戶手冊
- 交通燈設計
- 使用樹莓派Pico實現交通燈控制程序 1604次閱讀
- 使用單片機實現交通燈設計的資料概述 7759次閱讀
- 紅外遙控雙模式交通燈控制系統課程設計 2784次閱讀
- 基于超聲計數的智能交通燈控制系統 3204次閱讀
- 基于機器視覺識別的交通燈控制系統 1.1w次閱讀
- 基于模糊控制的智能交通燈監控系統的畢業設計 5375次閱讀
- 基于FPGA+DSP的視頻控制的智能交通燈設計 2044次閱讀
- 自適應模糊神經網絡的交通燈控制系統的設計 2984次閱讀
- 基于LabVIEW的交通燈控制系統設計與仿真 4.2w次閱讀
- 基于嵌入式的智能交通燈控制系統的設計與實現 1.1w次閱讀
- 基于MCGS組態軟件的交通燈控制系統設計 2.5w次閱讀
- 基于STC89S52的智能交通燈控制系統的設計與應用 7076次閱讀
- 基于FPGA技術的智能交通燈控制系統設計 6973次閱讀
- 智能交通燈PLC控制實驗裝置研制 4837次閱讀
- 基于FPGA的智能交通燈模糊控制的設計 1906次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多