資料介紹
描述
介紹和動機
機器學(xué)習(xí)通常涉及大量計算能力,這些計算能力通常以帶有 GPU 的大型數(shù)據(jù)中心的形式出現(xiàn),訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的成本可能是天文數(shù)字。小至 14 KB 的微型神經(jīng)網(wǎng)絡(luò)的出現(xiàn)為新應(yīng)用打開了大量大門,這些應(yīng)用可以直接在微處理器本身上分析數(shù)據(jù)并得出可操作的見解(Warden 和 Situnayake,2019 年)。這可以節(jié)省時間并防止延遲,因為我們不必將數(shù)據(jù)傳輸?shù)皆茢?shù)據(jù)中心進行處理并等待其返回(Warden 和 Situnayake,2019 年)。這種現(xiàn)象稱為邊緣計算,允許在存儲數(shù)據(jù)的設(shè)備上處理和計算數(shù)據(jù)(Lea,2020)。
學(xué)習(xí)過程:模型訓(xùn)練
首先,在我開始這個項目之前,我不知道邊緣計算或 Arduino 是什么。正如技術(shù)列表所示,我必須使用并協(xié)調(diào)整個工具生態(tài)系統(tǒng),才能實現(xiàn)在運行良好的 Arduino 板上部署語音識別的目標(biāo)。
我做的第一件事是下載 VS Code IDE 并確保安裝了 Platform IO 擴展。同時,我必須下載 Arduino IDE 并包含 TensorFlow Lite 庫。在 VS Code 中,我從 Arduino IDE 導(dǎo)入了內(nèi)置的微語音示例,作為一個運行良好的示例。該模型接收到“yes”的輸入,打開 Arduino 上的綠色 LED;“否”打開了 Arduino 上的紅色 LED;所有其他打開 Arduino 上的藍色 LED 的單詞;或沒有打開 LED 的靜音。
TensorFlow 已經(jīng)在其 GitHub 存儲庫中提供了訓(xùn)練腳本:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/micro/examples/micro_speech/train/train_micro_speech_model.ipynb。
這個腳本也是我想如何為我的特定用例訓(xùn)練微語音模型的基礎(chǔ)。
我最初開始將訓(xùn)練腳本從 TensorFlow 版本 1.x 轉(zhuǎn)換為 2.x,因為后者的性能優(yōu)化和簡化的 API 調(diào)用。但是,我無法轉(zhuǎn)換整個腳本,因為在 TensorFlow v2 中沒有等效于 v1 的“tf.lite.constants.INT8”模塊。
修改這個腳本實際上是一個巨大的挑戰(zhàn)。主要因素是因為每當(dāng)我對模型進行更改時,都需要大約 2 個小時來訓(xùn)練,所以我選擇的超參數(shù)沒有快速和即時的反饋。我無法通過經(jīng)常試驗和操縱許多參數(shù)來執(zhí)行“快速原型設(shè)計”。我遇到的最令人抓狂的問題是,當(dāng)我在 TensorFlow 中訓(xùn)練模型后,當(dāng)我嘗試量化模型并從中生成 TensorFlow Lite 模型時,我會收到如下錯誤消息:

我對此進行了大量研究,結(jié)果發(fā)現(xiàn)這很可能歸因于我每次在 Colab 單元中運行代碼片段時創(chuàng)建的嵌套圖,因此新占位符無法獲得所需的輸入值在評估階段。每次我重新運行我的訓(xùn)練腳本來訓(xùn)練微語音模型時,我都通過重新啟動我的 GPU 來解決這個問題。
通過使用“go”和“stop”進行訓(xùn)練,我的模型得到的初始準(zhǔn)確率為 87.2%,因此我認為可以通過將訓(xùn)練步數(shù)從 15,000 次迭代增加到 25,000 次來改進它。我也很愚蠢同時 tweeked 另一個變量是模型將識別的喚醒詞的數(shù)量,因為我在列表中添加了“向后”和“向前”。
我用 25, 000 步訓(xùn)練的模型的準(zhǔn)確度實際上下降到了 85%。花了幾乎兩倍的時間,3.5 小時,但準(zhǔn)確度下降了!造成這種情況的原因可能有兩個:1)混淆矩陣變大,必須識別更大的詞向量并對更大的詞向量更敏感,因此準(zhǔn)確率下降;2)峰值性能實際上是在 15,000 個訓(xùn)練步驟,模型進入收益遞減階段。
我用兩個額外的喚醒詞回到最初的 15,000 個訓(xùn)練步驟,我的模型的最終準(zhǔn)確率為 85.8%。因此,從這個結(jié)果中,我可以得出一個結(jié)論,即最有可能達到峰值性能需要用 15,000 步進行訓(xùn)練。

?

?

從我之前在課堂上的作業(yè)來看,0.001 和 0.0001 的學(xué)習(xí)率產(chǎn)生了具有最高準(zhǔn)確度的模型,所以我用它們來訓(xùn)練我的模型。
我所做的其他調(diào)整是模型的實際架構(gòu)。有幾個可供選擇,其中包括一個全尺寸的卷積神經(jīng)網(wǎng)絡(luò)。我最初選擇了 MODEL_ARCHITECTURE = 'conv' 并嘗試將該模型部署到我的 Arduino。結(jié)果是模型太大,Arduino 無法處理,所以每當(dāng)我試圖在麥克風(fēng)中說出喚醒詞時,它都會拋出一堆“請求失敗”錯誤而關(guān)閉。之后我了解到,Arduino 可以處理的唯一模型架構(gòu)是其中包含“tiny”一詞的架構(gòu),例如效果最好的“tiny_conv”和“tiny_embedding_conv”。這些模型架構(gòu)已經(jīng)預(yù)先打包在訓(xùn)練腳本中并可以使用。
“tiny_conv”模型有一個卷積層,然后是一個具有 4 x 4000 權(quán)重的全連接層,最后一層是 softmax 層。
我選擇用來訓(xùn)練模型的詞多種多樣。該模型從識別“是”和“否”開始,它們之間的區(qū)別足夠大,與“開”和“關(guān)”等其他詞對相比,它們不容易混淆。然后我決定添加“前進”和“后退”,使這個模型像交通信號/停車信號一樣。當(dāng)說出“STOP”或“BACKWARD”時 LED 會變?yōu)榧t色,當(dāng)說出“GO”或“FORWARD”時 LED 會變?yōu)榫G色。如果說出不屬于這四個類別中的任何一個的單詞,LED 將變?yōu)樗{色。沉默根本不會打開 LED。
微語音模型本質(zhì)上是將傳給麥克風(fēng)的音頻輸入轉(zhuǎn)換為頻譜圖,然后通過 TensorFlow Lite 運行它以對說出的單詞進行分類。一旦模型完成訓(xùn)練,訓(xùn)練腳本就會生成一個名為 model.cc 的二進制模型文件。此二進制文件中的數(shù)據(jù)將使用腳本訓(xùn)練的模型和模型的二進制長度編碼到一個名為 micro_features_model.cpp 的文件中。

我使用 TensorBoard 來顯示準(zhǔn)確度和交叉熵的進展,它們應(yīng)該分別增加和減少。紅線指的是驗證數(shù)據(jù)集上的性能,它定期發(fā)生,因此數(shù)據(jù)點稀疏。藍線指的是訓(xùn)練數(shù)據(jù)集上的性能,它經(jīng)常出現(xiàn),所以這些線更接近。

除了“未知”和“沉默”之外,還有一個名為 kCategoryCount 的變量表示模型需要分類的詞數(shù)。對于我的特定用例,kCategoryCount 等于 6。
學(xué)習(xí)過程:部署到 Arduino
到目前為止,我剛剛討論了訓(xùn)練模型并使其達到盡可能高準(zhǔn)確度的挑戰(zhàn)。下一個障礙是將這個模型部署到 Arduino。
困擾我的最大挑戰(zhàn)是一個錯誤,說我在項目文件夾中定義了兩次模型。我花費了大量時間梳理所有不同的文件以解決該錯誤。事實證明,我忘記刪除舊的#include 語句,該語句引用的模型與我試圖部署到 Arduino 的模型不同。為了避免將來混淆,我給我的模型取了一個簡單的名稱,并刪除了與另一個模型相關(guān)的任何其他文件。我只是清理了我的項目文件夾并選擇了極簡主義。錯誤如下所示。

一旦我清除了這個障礙,我很快就被另一堵磚墻迎接了。該程序能夠編譯,但我無法將其上傳到 Arduino。我得到的錯誤是沒有檢測到上傳端口,所以我無法將模型上傳到 Arduino。我非常焦慮,因為我認為是我的 MacBook Pro 出現(xiàn)問題并且無法檢測到外部設(shè)備。我通過將 USB 插入它來測試這個理論,看看它是否會識別它,事實上它確實做到了。我只能摸不著頭腦,將開發(fā)轉(zhuǎn)移到我的 Windows 計算機上。在將我的模型部署到 Arduino 之前,一切都按預(yù)期工作。我得到了完全相同的錯誤,然后我開始非常擔(dān)心。我的 Arduino 會壞嗎?寄給我的是有缺陷的嗎?我什至從 Windows 7 移動到 Windows 10 并得到了同樣的錯誤!這變得非常令人擔(dān)憂。最后要檢查的是我的微型 USB 電纜。我用過舊的微型 USB 來為我的 Android 手機充電。這實際上是最后一個要改變的變量。如果切換我的微型 USB 電纜仍然不允許我將模型上傳到 Arduino,我只能寫下我無法上傳模型的原因。
我在下面的屏幕截圖中顯示了我的編譯成功但上傳失敗。

?

我將我的微型 USB 電纜換成了另一根更長且不是專門為手機充電的電纜……這是驚人的結(jié)果!

?

事實證明,無法檢測到上傳端口的原因是因為微型 USB 電纜有問題!我再放心不過了。
在部署到 Arduino 時解決了這兩個問題后,我現(xiàn)在可以自由地將模型部署到它。端口錯誤確實出現(xiàn)了,但這次我找到了 Arduino 推薦的快速解決方案:“如果板子沒有進入上傳模式,請在啟動上傳過程之前雙擊重置按鈕; 橙色 LED 應(yīng)該會慢慢淡入淡出,表明開發(fā)板正在等待上傳。” 在 Arduino 上執(zhí)行此重置操作可解決任何端口檢測錯誤。
更多研究還建議在上傳之前對構(gòu)建文件進行清理,如此屏幕截圖所示。

學(xué)習(xí)這些漂亮的技巧將使我進入與 Arduinos 合作的下一階段。

未來的工作
能夠在 Arduino 上部署微型深度學(xué)習(xí)模型徹底改變了物聯(lián)網(wǎng)和邊緣計算的功能。由于成本的顯著降低,可能性是無窮無盡的。由于模型的準(zhǔn)確性可能會更好,因此仍有很多改進工作要做。提高準(zhǔn)確性在某種程度上仍然是一項黑盒活動,尤其是在使用此類新技術(shù)的情況下,因此通過操縱多個參數(shù)進行徹底的實驗將使我們更接近更好的模型。這個特定模型的音頻輸入非常簡單,下一個合乎邏輯的舉措是訓(xùn)練并使用完整的短語來控制 Arduino,無論它仍然打開不同顏色的 LED 燈,還是讓它以另一種方式響應(yīng)。盡管在這個階段,Arduino 上的實現(xiàn)更多的是 POC,而不是可擴展或大規(guī)模工業(yè)生產(chǎn),但它讓我們對這個新的前沿領(lǐng)域有所了解。利用算法簡化的力量,我們可以將這些 POC 提供的解決方案堆疊和組合在一起,以解決與安全相關(guān)的更難、時間敏感的問題,例如機器人手術(shù)或自動駕駛汽車。
參考
Lea, P. (2020)。面向建筑師的物聯(lián)網(wǎng)和邊緣計算——第二版。O'Reilly 電子書[在線]。網(wǎng)址為:https ://learning.oreilly.com/library/view/iot-and-edge/9781839214806/ (訪問日期:2020 年 12 月 14 日)。
Warden, P. 和 Situnayake, D. (2019)。TinyML。O'Reilly 電子書[在線]。網(wǎng)址為:https ://learning.oreilly.com/library/view/tinyml/9781492052036/ (訪問日期:2020 年 11 月 10 日)。
監(jiān)獄長,P.(2017 年)。啟動語音命令數(shù)據(jù)集[在線]。網(wǎng)址為:https ://ai.googleblog.com/2017/08/launching-speech-commands-dataset.html (訪問日期:2020 年 12 月 5 日)。
?
?
?
- labview交通燈控制系統(tǒng) 23次下載
- 基于MULTISIM的交通燈 62次下載
- 基于Moore型狀態(tài)機的交通燈控制系統(tǒng) 35次下載
- 交通燈的電路原理圖 84次下載
- 交通燈系統(tǒng)設(shè)計與制作解析 42次下載
- plc交通燈控制電路設(shè)計合集 52次下載
- 交通燈控制系統(tǒng)設(shè)計 52次下載
- 交通燈監(jiān)控控制 指令表 MAIN 0次下載
- 交通燈程序設(shè)計 交通燈protues仿真程序基于51單片機交通燈 359次下載
- LED模擬交通燈 18次下載
- FPGA控制的交通燈課程設(shè)計 28次下載
- 基于單片機控制的交通燈畢業(yè)設(shè)計資料 33次下載
- 基于FPGA的交通燈控制器實現(xiàn)
- 交通燈控制板用戶手冊
- 交通燈設(shè)計
- 使用樹莓派Pico實現(xiàn)交通燈控制程序 2089次閱讀
- 使用單片機實現(xiàn)交通燈設(shè)計的資料概述 8059次閱讀
- 紅外遙控雙模式交通燈控制系統(tǒng)課程設(shè)計 2957次閱讀
- 基于超聲計數(shù)的智能交通燈控制系統(tǒng) 3411次閱讀
- 基于機器視覺識別的交通燈控制系統(tǒng) 1.1w次閱讀
- 基于模糊控制的智能交通燈監(jiān)控系統(tǒng)的畢業(yè)設(shè)計 5616次閱讀
- 基于FPGA+DSP的視頻控制的智能交通燈設(shè)計 2182次閱讀
- 自適應(yīng)模糊神經(jīng)網(wǎng)絡(luò)的交通燈控制系統(tǒng)的設(shè)計 3174次閱讀
- 基于LabVIEW的交通燈控制系統(tǒng)設(shè)計與仿真 4.3w次閱讀
- 基于MCGS組態(tài)軟件的交通燈控制系統(tǒng)設(shè)計 2.6w次閱讀
- 基于STC89S52的智能交通燈控制系統(tǒng)的設(shè)計與應(yīng)用 7441次閱讀
- 基于PLC的十字路口智能交通燈控制系統(tǒng)的設(shè)計 3.1w次閱讀
- 基于FPGA技術(shù)的智能交通燈控制系統(tǒng)設(shè)計 7556次閱讀
- 智能交通燈PLC控制實驗裝置研制 5108次閱讀
- 基于FPGA的智能交通燈模糊控制的設(shè)計 2005次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 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十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論