Tensorflow 2.6 CNN架構下的Audio關鍵詞檢測模型訓練流程

1. 前言

各位看官們可能之前已經看過筆者寫的Anaconda搭配CUDA及cuDNN安裝及介紹(Win10平台),裡面有教大家如何於Window 10上架設Anaconda環境及安裝CUDA與cuDNN,這次筆者要利用之前文章的環境來教大家如何使用TensorFlow 2.6中的Keras進行CNN Audio關鍵詞檢測訓練。

2. TensorFlow 2.6 GPU下載安裝

  1. 使用命令提示字元進入tensorflow虛擬環境(圖1)

conda activate tensorflow

 

(圖1)

  1. tensorflow虛擬環境內輸入以下指令進行安裝

pip install tensorflow==2.6.0


  1. 安裝時如果發生AttributeError: module 'brotli' has no attribute 'error',請輸入以下指令進行解決,解決完再重新輸入上一步驟指令進行安裝。

conda install -c anaconda urllib3


  1. 安裝tensorflow時如果發生以下錯誤,請把錯誤的資料進行pip install安裝(圖2)

 

圖2

如:

pip install decorator>=3.0.0

pip install joblib>=0.14

pip install packaging>=20.0

pip install scikit-learn >=0.14.0

  1. 輸入以下指令驗證TensorFlow 2.6 GPU版本是否安裝成功

python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"


  1. 成功應會出現以下相關資訊(圖3)
 

圖3

3. 安裝相關套件

  1. 安裝jupyter notebook

conda install jupyter notebook


  1. 安裝jupyter notebook時會也會安裝相關packages,請輸入”y”繼續安裝(圖4)

 

圖4

  1. 安裝librosa套件

pip install librosa


  1. 安裝tqdm套件

pip install tqdm


  1. 把虛擬環境加入Jupyter Notebook的核心,讓Jupyter Notebook能夠應用自建的虛擬環境

python -m ipykernel install --user --name tensorflow --display-name "tensorflow"


4. Audio模型訓練

程式碼是依照網路上『Building a Dead Simple Speech Recognition Engine using ConvNet in Keras』範例教學為基礎,修改參數進行模型訓練;

a. 訓練前處理

  1. Github下載DeadSimpleSpeechRecognizer範例(圖5),裡面包含三個語音檔Data Sets(分別是npy、cat.npy、happy.npy),後續關鍵詞檢測會依據訓練時關鍵詞量的多寡來決定可使用的關鍵詞。
 

圖5

  1. 解壓縮DeadSimpleSpeechRecognizer-master檔案
  2. Anaconda的tensorflow虛擬環境下開啟DeadSimpleSpeechRecognizer-master資料夾(圖6)

 

圖6

  1. 輸入以下指令開啟jupyter notebook

jupyter notebook


  1. 開啟ipynb (圖7)

 

 

圖7

  1. 選擇虛擬環境核心(圖8)
 

圖8

b. 模型訓練與除錯

  1. jupyter notebook點擊RUN運行代碼(圖9)
 

(圖9)

  1. 運行時會發生以下錯誤(圖10)
 

圖10

  1. 此版本屬舊版寫法,新版tensorflow以支援keras,因此需要進行代碼修改,首先修改DeadSimpleSpeechRecognition.ipynb

import keras改為

from tensorflow import keras

from keras.utils import to_categorical改為

from tensorflow.keras.utils import to_categorical

  1. 修改preprocess.py

from keras.utils import to_categorical改為

from tensorflow.keras.utils import to_categorical

  1. 修改好再執行RUN可能會發生以下錯誤(圖11)
 

圖11

  1. 此問題為keras版本問題,把原本的版本移除,改安裝2.6.0版本。

pip uninstall keras

pip install keras==2.6.0

  1. 修改epochs = 2000及batch_size參數

epochs = 2000

batch_size = 1

  1. 修改完後既可開始訓練模型(圖12),訓練完成
 

圖12

c. 由於我們只訓練bed、cat、happy三個關鍵詞,因此使用以下指令測試模型

print(predict('./data/bed/0c2ca723_nohash_0.wav', model=model))

print(predict('./data/cat/00f0204f_nohash_0.wav', model=model))

print(predict('./data/happy/012c8314_nohash_0.wav', model=model))

 

 

圖13

d. 使用以下指令儲存模型

from keras.models import load_model

model.save('kws.h5')  # creates a HDF5 file 'model.h5'

e. 如需轉成Tensorflow-Lite可使用以下指令進行轉換

from tensorflow import lite

from tensorflow.keras import models

 

keras_model_filename = 'kws.h5'

tflite_filename = 'kws.tflite'

 

model = models.load_model(keras_model_filename)

# Convert model to TF Lite model

model = models.load_model(keras_model_filename)

converter = lite.TFLiteConverter.from_keras_model(model)

tflite_model = converter.convert()

open(tflite_filename, 'wb').write(tflite_model)

 

f.  增加其他語音類別

看官們如果認為基本三個語音類別不夠用,或者想使用其他語音進行關鍵詞識別,可使用Google research 提供的類別進行擴增或替換,達到不同關鍵詞應用。

  1. 下載Google research 提供的data sets V2 2018 裡面包含35個類別。
  2. 檔案進行解壓縮,可得到35個資料夾語音(圖14)
 

圖14

  1. 複製需要訓練的資料夾至DeadSimpleSpeechRecognizer-masteràdata資料夾內
  2. 修改DeadSimpleSpeechRecognition.ipynb的num_classes參數

num_classes = 3

Example:如果DeadSimpleSpeechRecognizer-masteràdata資料夾內有7個資料,把num_classes參數改成7,num_classes = 7

  1. 執行模型訓練


結語

透過以上的教學,相信各位已經能夠成功地訓練自己想要的關鍵詞模型,大家可以將此模型加到自己的設備上使用,讓設備能夠支援關鍵詞喚醒功能,有問題的看官們歡迎聯繫我,我們一同討論。

喜歡我的帖子,請幫我按個”收藏”,我們下回見。

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論