Honk是Google的TensorFlow卷積神經網絡的Pytorch重新實現,用於關鍵字點,這伴隨著他們最近發行的語音命令數據集。有關更多詳細信息,請諮詢我們的文章:
Honk對於為交互式智能代理人建立了設備上的語音識別能力很有用。我們的代碼可用於識別簡單的命令(例如,“停止”和“ go”),並適用於檢測自定義“命令觸發器”(例如,“嘿Siri!”)。
觀看此視頻,以獲取Action Honk的演示!
使用下面的說明來運行演示應用程序(如上所述)!
當前,Pytorch僅對Linux和OS X有官方的支持。因此,Windows用戶將無法輕鬆運行此演示。
要部署演示,請運行以下命令:
pip install -r requirements.txt
apt-get install freeglut3-dev
)./fetch_data.sh
python .
python utils/speech_demo.py
如果您需要調整選項,例如關閉CUDA,請編輯config.json
。
Mac OS X的其他註釋:
python .
部署Web服務以識別音頻是否包含命令字。默認情況下, config.json
用於配置,但可以使用--config=<file_name>
更改。如果服務器在防火牆後面,則一個工作流程是創建一個SSH隧道並使用配置中指定的端口(默認16888)中的端口轉發。
在我們的Honk-Models存儲庫中,有幾種用於CAFFE2(ONNX)和Pytorch的預培訓模型。 fetch_data.sh
腳本獲取這些模型並將它們提取到model
目錄。您可以分別指定在配置文件的model_path
和backend
中使用的模型和後端。具體而言, backend
可以是caffe2
或pytorch
,具體取決於model_path
所處的格式。請注意,要運行我們的ONNX型號,必須在系統上存在onnx
和onnx_caffe2
的軟件包;這些在需求中不存在。
不幸的是,讓圖書館在RPI上工作,尤其是天秤座,並不像運行幾個命令那樣簡單。我們概述了我們的流程,這可能對您有效,也可能不起作用。
sudo apt-get install -y protobuf-compiler libprotoc-dev python-numpy python-pyaudio python-scipy python-sklearn
pip install protobuf
pip install --no-deps onnx
caffe2
模塊路徑添加到PYTHONPATH
環境變量。對我們來說,這是通過export PYTHONPATH=$PYTHONPATH:/home/pi/caffe2/build
pip install onnx-caffe2
pip install -r requirements_rpi.txt
pip install --no-deps resampy librosa
python -c "import librosa"
。由於我們尚未安裝它,因此應該對Numba丟下錯誤。/home/pi/.local/lib/python2.7/site-packages/resampy/interpn.py
刪除numba和@numba.jit
./fetch_data.sh
config.json
中,將backend
更改為caffe2
和model_path
更改為model/google-speech-dataset-full.onnx
。python .
如果沒有錯誤,您已經成功部署了該模型,默認情況下可以通過端口16888訪問。python utils/speech_demo.py
。您需要一個工作的麥克風和揚聲器。如果您遠程與RPI進行交互,則可以在本地運行語音演示,並指定遠程端點--server-endpoint=http://[RPi IP address]:16888
。 不幸的是,質量保證客戶端尚不支持公眾,因為它需要自定義質量保證服務。但是,它仍然可以用來重新定位命令關鍵字。
python client.py
運行QA客戶端。您可以通過執行python client.py --mode=retarget
來重新制定關鍵字。請注意,文本到語音在Linux發行版上可能無法正常工作;在這種情況下,請通過--watson-username
和--watson--password
提供IBM Watson憑據。您可以通過執行python client.py -h
查看所有選項。
CNN模型。 python -m utils.train --type [train|eval]
訓練或評估模型。它希望所有培訓示例都遵循與語音命令數據集相同的格式。建議的工作流程是下載數據集並添加自定義關鍵字,因為數據集已經包含許多有用的音頻示例和背景噪聲。
剩餘模型。我們建議使用以下用於培訓我們的任何res{8,15,26}[-narrow]
模型的超參數:
python -m utils.train --wanted_words yes no up down left right on off stop go --dev_every 1 --n_labels 12 --n_epochs 26 --weight_decay 0.00001 --lr 0.1 0.01 0.001 --schedule 3000 6000 --model res{8,15,26}[-narrow]
有關我們深層剩餘模型的更多信息,請參閱我們的論文:
有命令選項可用:
選項 | 輸入格式 | 預設 | 描述 |
---|---|---|---|
--audio_preprocess_type | {MFCC,PCEN} | MFCC | 使用的音頻預處理 |
--batch_size | [1,N) | 100 | 用於使用的迷你批量尺寸 |
--cache_size | [0,INF) | 32768 | 音頻緩存中的項目數量,消耗約32 kb * n |
--conv1_pool | [1,INF)[1,INF) | 2 2 | 泳池過濾器的寬度和高度 |
--conv1_size | [1,INF)[1,INF) | 10 4 | 轉換過濾器的寬度和高度 |
--conv1_stride | [1,INF)[1,INF) | 1 1 | 大步的寬度和長度 |
--conv2_pool | [1,INF)[1,INF) | 1 1 | 泳池過濾器的寬度和高度 |
--conv2_size | [1,INF)[1,INF) | 10 4 | 轉換過濾器的寬度和高度 |
--conv2_stride | [1,INF)[1,INF) | 1 1 | 大步的寬度和長度 |
--data_folder | 細繩 | /data/secement_dataset | 數據路徑 |
--dev_every | [1,INF) | 10 | 開發時間間隔 |
--dev_pct | [0,100] | 10 | 設置用於開發的總數的百分比 |
--dropout_prob | [0.0,1.0) | 0.5 | 使用的輟學率 |
--gpu_no | [-1,n] | 1 | GPU使用 |
--group_speakers_by_id | {true,false} | 真的 | 是否將演講者分組到火車/開發/測試中 |
--input_file | 細繩 | 加載模型的路徑 | |
--input_length | [1,INF) | 16000 | 音頻的長度 |
--lr | (0.0,INF) | {0.1,0.001} | 使用的學習率 |
--type | {火車,評估} | 火車 | 使用的模式 |
--model | 細繩 | CNN-Trad-Pool2 | cnn-trad-pool2 , cnn-tstride-{2,4,8} , cnn-tpool{2,3} , cnn-one-fpool3 cnn-one-fstride{4,8} res{8,15,26}[-narrow] , cnn-trad-fpool3 , cnn-one-stride1 |
--momentum | [0.0,1.0) | 0.9 | SGD使用的動力 |
--n_dct_filters | [1,INF) | 40 | 使用的DCT基礎數量 |
--n_epochs | [0,INF) | 500 | 時代數量 |
--n_feature_maps | [1,INF) | {19,45} | 用於殘差體系結構的特徵地圖數量 |
--n_feature_maps1 | [1,INF) | 64 | Conv Net 1的功能地圖數量1 |
--n_feature_maps2 | [1,INF) | 64 | Conv Net 2的功能地圖數量 |
--n_labels | [1,N) | 4 | 使用的標籤數量 |
--n_layers | [1,INF) | {6,13,24} | 殘留體系結構的捲積層數 |
--n_mels | [1,INF) | 40 | 使用的MEL過濾器數量 |
--no_cuda | 轉變 | 錯誤的 | 是否使用cuda |
--noise_prob | [0.0,1.0] | 0.8 | 與噪聲混合的可能性 |
--output_file | 細繩 | 型號/Google-Speech-dataset.pt | 將模型保存到的文件 |
--seed | (INF,INF) | 0 | 使用的種子 |
--silence_prob | [0.0,1.0] | 0.1 | 挑選沉默的概率 |
--test_pct | [0,100] | 10 | 用於測試的總數的百分比 |
--timeshift_ms | [0,INF) | 100 | 以毫秒的時間隨機移動音頻 |
--train_pct | [0,100] | 80 | 用於培訓的總數的百分比 |
--unknown_prob | [0.0,1.0] | 0.1 | 選擇一個未知詞的概率 |
--wanted_words | String1 String2 ... Stringn | 命令隨機 | 所需的目標詞 |
Honkling是Honk的JavaScript實施。借助Honkling,可以通過瀏覽器關鍵字發現功能實現各種Web應用程序。
為了提高鳴笛和鳴叫的靈活性,我們提供了一個從YouTube視頻中構建數據集的程序。詳細信息可以在keyword_spotting_data_generator
文件夾中找到
您可以執行以下操作以記錄順序音頻,並保存到與語音命令數據集相同的格式:
python -m utils.record
輸入返回記錄,向上箭頭撤回,然後“ Q”完成。一秒鐘的沉默後,記錄自動停止。
有幾個選項可用:
--output-begin-index: Starting sequence number
--output-prefix: Prefix of the output audio sequence
--post-process: How the audio samples should be post-processed. One or more of "trim" and "discard_true".
後處理包括修剪或丟棄“無用”音頻。修剪是不言自明的:錄音將錄音縮小到x毫秒的最大窗口,由--cutoff-ms
指定。丟棄“無用”音頻( discard_true
)使用預先訓練的模型來確定哪些樣本令人困惑,並丟棄了正確標記的樣本。預先訓練的模型和正確的標籤分別由--config
和--correct-label
定義。
例如,請考慮python -m utils.record --post-process trim discard_true --correct-label no --config config.json
。在這種情況下,實用程序記錄了一系列語音片段,將它們修剪為一秒鐘,最後丟棄了config.json
中未標記為“否”的人。
python manage_audio.py listen
這有助於為記錄設置--min-sound-lvl
設置理智值。
python manage_audio.py generate-contrastive --directory [directory]
使用語音分割從[directory]
中的所有.WAV文件中生成對比示例。
語音命令數據集包含一秒長的音頻片段。
python manage_audio.py trim --directory [directory]
將[directory]
中所有.WAV文件的最響亮的一秒鐘的縮小。小心用戶應使用Audacity等音頻編輯器手動檢查所有音頻樣本。