電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>用微語(yǔ)音控制交通燈

用微語(yǔ)音控制交通燈

2023-06-27 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

介紹和動(dòng)機(jī)

機(jī)器學(xué)習(xí)通常涉及大量計(jì)算能力,這些計(jì)算能力通常以帶有 GPU 的大型數(shù)據(jù)中心的形式出現(xiàn),訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的成本可能是天文數(shù)字。小至 14 KB 的微型神經(jīng)網(wǎng)絡(luò)的出現(xiàn)為新應(yīng)用打開(kāi)了大量大門,這些應(yīng)用可以直接在微處理器本身上分析數(shù)據(jù)并得出可操作的見(jiàn)解(Warden 和 Situnayake,2019 年)。這可以節(jié)省時(shí)間并防止延遲,因?yàn)槲覀儾槐貙?shù)據(jù)傳輸?shù)皆茢?shù)據(jù)中心進(jìn)行處理并等待其返回(Warden 和 Situnayake,2019 年)。這種現(xiàn)象稱為邊緣計(jì)算,允許在存儲(chǔ)數(shù)據(jù)的設(shè)備上處理和計(jì)算數(shù)據(jù)(Lea,2020)。

學(xué)習(xí)過(guò)程:模型訓(xùn)練

首先,在我開(kāi)始這個(gè)項(xiàng)目之前,我不知道邊緣計(jì)算或 Arduino 是什么。正如技術(shù)列表所示,我必須使用并協(xié)調(diào)整個(gè)工具生態(tài)系統(tǒng),才能實(shí)現(xiàn)在運(yùn)行良好的 Arduino 板上部署語(yǔ)音識(shí)別的目標(biāo)。

我做的第一件事是下載 VS Code IDE 并確保安裝了 Platform IO 擴(kuò)展。同時(shí),我必須下載 Arduino IDE 并包含 TensorFlow Lite 庫(kù)。在 VS Code 中,我從 Arduino IDE 導(dǎo)入了內(nèi)置的微語(yǔ)音示例,作為一個(gè)運(yùn)行良好的示例。該模型接收到“yes”的輸入,打開(kāi) Arduino 上的綠色 LED;“否”打開(kāi)了 Arduino 上的紅色 LED;所有其他打開(kāi) Arduino 上的藍(lán)色 LED 的單詞;或沒(méi)有打開(kāi) LED 的靜音。

TensorFlow 已經(jīng)在其 GitHub 存儲(chǔ)庫(kù)中提供了訓(xùn)練腳本:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/micro/examples/micro_speech/train/train_micro_speech_model.ipynb。

這個(gè)腳本也是我想如何為我的特定用例訓(xùn)練微語(yǔ)音模型的基礎(chǔ)。

我最初開(kāi)始將訓(xùn)練腳本從 TensorFlow 版本 1.x 轉(zhuǎn)換為 2.x,因?yàn)楹笳叩男阅軆?yōu)化和簡(jiǎn)化的 API 調(diào)用。但是,我無(wú)法轉(zhuǎn)換整個(gè)腳本,因?yàn)樵?TensorFlow v2 中沒(méi)有等效于 v1 的“tf.lite.constants.INT8”模塊。

修改這個(gè)腳本實(shí)際上是一個(gè)巨大的挑戰(zhàn)。主要因素是因?yàn)槊慨?dāng)我對(duì)模型進(jìn)行更改時(shí),都需要大約 2 個(gè)小時(shí)來(lái)訓(xùn)練,所以我選擇的超參數(shù)沒(méi)有快速和即時(shí)的反饋。我無(wú)法通過(guò)經(jīng)常試驗(yàn)和操縱許多參數(shù)來(lái)執(zhí)行“快速原型設(shè)計(jì)”。我遇到的最令人抓狂的問(wèn)題是,當(dāng)我在 TensorFlow 中訓(xùn)練模型后,當(dāng)我嘗試量化模型并從中生成 TensorFlow Lite 模型時(shí),我會(huì)收到如下錯(cuò)誤消息:

poYBAGN0M_SAQnH-AACbi9MOfj0145.png
?

我對(duì)此進(jìn)行了大量研究,結(jié)果發(fā)現(xiàn)這很可能歸因于我每次在 Colab 單元中運(yùn)行代碼片段時(shí)創(chuàng)建的嵌套圖,因此新占位符無(wú)法獲得所需的輸入值在評(píng)估階段。每次我重新運(yùn)行我的訓(xùn)練腳本來(lái)訓(xùn)練微語(yǔ)音模型時(shí),我都通過(guò)重新啟動(dòng)我的 GPU 來(lái)解決這個(gè)問(wèn)題。

通過(guò)使用“go”和“stop”進(jìn)行訓(xùn)練,我的模型得到的初始準(zhǔn)確率為 87.2%,因此我認(rèn)為可以通過(guò)將訓(xùn)練步數(shù)從 15,000 次迭代增加到 25,000 次來(lái)改進(jìn)它。我也很愚蠢同時(shí) tweeked 另一個(gè)變量是模型將識(shí)別的喚醒詞的數(shù)量,因?yàn)槲以诹斜碇刑砑恿恕跋蚝蟆焙汀跋蚯啊薄?/font>

我用 25, 000 步訓(xùn)練的模型的準(zhǔn)確度實(shí)際上下降到了 85%。花了幾乎兩倍的時(shí)間,3.5 小時(shí),但準(zhǔn)確度下降了!造成這種情況的原因可能有兩個(gè):1)混淆矩陣變大,必須識(shí)別更大的詞向量并對(duì)更大的詞向量更敏感,因此準(zhǔn)確率下降;2)峰值性能實(shí)際上是在 15,000 個(gè)訓(xùn)練步驟,模型進(jìn)入收益遞減階段。

我用兩個(gè)額外的喚醒詞回到最初的 15,000 個(gè)訓(xùn)練步驟,我的模型的最終準(zhǔn)確率為 85.8%。因此,從這個(gè)結(jié)果中,我可以得出一個(gè)結(jié)論,即最有可能達(dá)到峰值性能需要用 15,000 步進(jìn)行訓(xùn)練。

poYBAGN0M_aAZJ_VAACX7zDwdkc575.png
經(jīng)過(guò) 15,000 步訓(xùn)練的最終模型
?

?

pYYBAGN0M_mADog6AACrSYuxwP4728.png
模型經(jīng)過(guò) 15,000 次迭代訓(xùn)練。
?

?

poYBAGN0M_uACLaTAACMW7w45nA967.png
模型經(jīng)過(guò) 25,000 次迭代訓(xùn)練。
?

從我之前在課堂上的作業(yè)來(lái)看,0.001 和 0.0001 的學(xué)習(xí)率產(chǎn)生了具有最高準(zhǔn)確度的模型,所以我用它們來(lái)訓(xùn)練我的模型。

我所做的其他調(diào)整是模型的實(shí)際架構(gòu)。有幾個(gè)可供選擇,其中包括一個(gè)全尺寸的卷積神經(jīng)網(wǎng)絡(luò)。我最初選擇了 MODEL_ARCHITECTURE = 'conv' 并嘗試將該模型部署到我的 Arduino。結(jié)果是模型太大,Arduino 無(wú)法處理,所以每當(dāng)我試圖在麥克風(fēng)中說(shuō)出喚醒詞時(shí),它都會(huì)拋出一堆“請(qǐng)求失敗”錯(cuò)誤而關(guān)閉。之后我了解到,Arduino 可以處理的唯一模型架構(gòu)是其中包含“tiny”一詞的架構(gòu),例如效果最好的“tiny_conv”和“tiny_embedding_conv”。這些模型架構(gòu)已經(jīng)預(yù)先打包在訓(xùn)練腳本中并可以使用。

“tiny_conv”模型有一個(gè)卷積層,然后是一個(gè)具有 4 x 4000 權(quán)重的全連接層,最后一層是 softmax 層。

我選擇用來(lái)訓(xùn)練模型的詞多種多樣。該模型從識(shí)別“是”和“否”開(kāi)始,它們之間的區(qū)別足夠大,與“開(kāi)”和“關(guān)”等其他詞對(duì)相比,它們不容易混淆。然后我決定添加“前進(jìn)”和“后退”,使這個(gè)模型像交通信號(hào)/停車信號(hào)一樣。當(dāng)說(shuō)出“STOP”或“BACKWARD”時(shí) LED 會(huì)變?yōu)榧t色,當(dāng)說(shuō)出“GO”或“FORWARD”時(shí) LED 會(huì)變?yōu)榫G色。如果說(shuō)出不屬于這四個(gè)類別中的任何一個(gè)的單詞,LED 將變?yōu)樗{(lán)色。沉默根本不會(huì)打開(kāi) LED。

微語(yǔ)音模型本質(zhì)上是將傳給麥克風(fēng)的音頻輸入轉(zhuǎn)換為頻譜圖,然后通過(guò) TensorFlow Lite 運(yùn)行它以對(duì)說(shuō)出的單詞進(jìn)行分類。一旦模型完成訓(xùn)練,訓(xùn)練腳本就會(huì)生成一個(gè)名為 model.cc 的二進(jìn)制模型文件。此二進(jìn)制文件中的數(shù)據(jù)將使用腳本訓(xùn)練的模型和模型的二進(jìn)制長(zhǎng)度編碼到一個(gè)名為 micro_features_model.cpp 的文件中。

pYYBAGN0M_6AcUa_AAF6vWkiW9o322.png
訓(xùn)練期間輸入到模型的頻譜圖
?

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

pYYBAGN0NACAad6CAAEIFBxMxNw813.png
?

除了“未知”和“沉默”之外,還有一個(gè)名為 kCategoryCount 的變量表示模型需要分類的詞數(shù)。對(duì)于我的特定用例,kCategoryCount 等于 6。

學(xué)習(xí)過(guò)程:部署到 Arduino

到目前為止,我剛剛討論了訓(xùn)練模型并使其達(dá)到盡可能高準(zhǔn)確度的挑戰(zhàn)。下一個(gè)障礙是將這個(gè)模型部署到 Arduino。

困擾我的最大挑戰(zhàn)是一個(gè)錯(cuò)誤,說(shuō)我在項(xiàng)目文件夾中定義了兩次模型。我花費(fèi)了大量時(shí)間梳理所有不同的文件以解決該錯(cuò)誤。事實(shí)證明,我忘記刪除舊的#include 語(yǔ)句,該語(yǔ)句引用的模型與我試圖部署到 Arduino 的模型不同。為了避免將來(lái)混淆,我給我的模型取了一個(gè)簡(jiǎn)單的名稱,并刪除了與另一個(gè)模型相關(guān)的任何其他文件。我只是清理了我的項(xiàng)目文件夾并選擇了極簡(jiǎn)主義。錯(cuò)誤如下所示。

pYYBAGN0NASAT1BJAAK_NyQ1_H0042.png
錯(cuò)誤,因?yàn)槲以谖业捻?xiàng)目文件夾中定義了兩個(gè)不同的模型,并且沒(méi)有刪除對(duì)舊模型的引用。
?

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

我在下面的屏幕截圖中顯示了我的編譯成功但上傳失敗。

poYBAGN0NAaARjAGAAEBRveXF-s001.png
模型已編譯但上傳失敗
?

?

poYBAGN0NAmAbt7BAAEAbxxgUpQ335.png
由于無(wú)法檢測(cè)到上傳端口,模型無(wú)法上傳
?

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

pYYBAGN0NAuASbWeAADBcWrC2UQ678.png
?

?

poYBAGN0NA6AE9yNAAC7KCrbkXM882.png
模型成功上傳到我的 Arduino!
?

事實(shí)證明,無(wú)法檢測(cè)到上傳端口的原因是因?yàn)槲⑿?USB 電纜有問(wèn)題!我再放心不過(guò)了。

在部署到 Arduino 時(shí)解決了這兩個(gè)問(wèn)題后,我現(xiàn)在可以自由地將模型部署到它。端口錯(cuò)誤確實(shí)出現(xiàn)了,但這次我找到了 Arduino 推薦的快速解決方案:“如果板子沒(méi)有進(jìn)入上傳模式,請(qǐng)?jiān)趩?dòng)上傳過(guò)程之前雙擊重置按鈕; 橙色 LED 應(yīng)該會(huì)慢慢淡入淡出,表明開(kāi)發(fā)板正在等待上傳?!?在 Arduino 上執(zhí)行此重置操作可解決任何端口檢測(cè)錯(cuò)誤。

更多研究還建議在上傳之前對(duì)構(gòu)建文件進(jìn)行清理,如此屏幕截圖所示。

pYYBAGN0NBCAWWkSAAECohb1I7M486.png
?

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

pYYBAGN0NBKALLEzAAC3Tmk2XF0768.png
?

未來(lái)的工作

能夠在 Arduino 上部署微型深度學(xué)習(xí)模型徹底改變了物聯(lián)網(wǎng)和邊緣計(jì)算的功能。由于成本的顯著降低,可能性是無(wú)窮無(wú)盡的。由于模型的準(zhǔn)確性可能會(huì)更好,因此仍有很多改進(jìn)工作要做。提高準(zhǔn)確性在某種程度上仍然是一項(xiàng)黑盒活動(dòng),尤其是在使用此類新技術(shù)的情況下,因此通過(guò)操縱多個(gè)參數(shù)進(jìn)行徹底的實(shí)驗(yàn)將使我們更接近更好的模型。這個(gè)特定模型的音頻輸入非常簡(jiǎn)單,下一個(gè)合乎邏輯的舉措是訓(xùn)練并使用完整的短語(yǔ)來(lái)控制 Arduino,無(wú)論它仍然打開(kāi)不同顏色的 LED 燈,還是讓它以另一種方式響應(yīng)。盡管在這個(gè)階段,Arduino 上的實(shí)現(xiàn)更多的是 POC,而不是可擴(kuò)展或大規(guī)模工業(yè)生產(chǎn),但它讓我們對(duì)這個(gè)新的前沿領(lǐng)域有所了解。利用算法簡(jiǎn)化的力量,我們可以將這些 POC 提供的解決方案堆疊和組合在一起,以解決與安全相關(guān)的更難、時(shí)間敏感的問(wèn)題,例如機(jī)器人手術(shù)或自動(dòng)駕駛汽車。

參考

Lea, P. (2020)。面向建筑師的物聯(lián)網(wǎng)和邊緣計(jì)算——第二版。O'Reilly 電子書(shū)[在線]。網(wǎng)址為:https ://learning.oreilly.com/library/view/iot-and-edge/9781839214806/ (訪問(wèn)日期:2020 年 12 月 14 日)。

Warden, P. 和 Situnayake, D. (2019)。TinyML。O'Reilly 電子書(shū)[在線]。網(wǎng)址為:https ://learning.oreilly.com/library/view/tinyml/9781492052036/ (訪問(wèn)日期:2020 年 11 月 10 日)。

監(jiān)獄長(zhǎng),P.(2017 年)。啟動(dòng)語(yǔ)音命令數(shù)據(jù)集[在線]。網(wǎng)址為:https ://ai.googleblog.com/2017/08/launching-speech-commands-dataset.html (訪問(wèn)日期:2020 年 12 月 5 日)。

?

?

?

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開(kāi)發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)