出門問問:使用 TensorFlow Lite 在嵌入式端部署熱詞檢測模型
熱詞喚醒 (Keyword Spotting) 往往是使用者對語音互動體驗的第一印象,要做到準確快速。因此熱詞檢測演算法要同時保證高喚醒率和低誤喚醒率,能夠準確地區分熱詞和非熱詞的音訊訊號。主流的熱詞檢測方法,通常使用深度神經網路來從原始音訊特徵中提取 high-level 的抽象特徵(見下圖)。為了能夠在計算效能和記憶體大小都非常有限的嵌入式裝置上做到 “Always On” 和 “低延遲”,我們使用 TensorFlow Lite 作為神經網路模型的部署框架,既能夠很好地相容基於 TensorFlow 的模型訓練流程,也能夠提供非常高效和輕量的嵌入式端執行時 (Runtime)。

2、開發部署流程
在神經網路結構大體確定的情況下,會顯著影響最終計算效能的主要是:模型量化 (Quantization),計算圖的優化 (Computation Graph Optimization),以及 Ops 計算核的實現。使用 TensorFlow Lite 部署熱詞檢測模型的開發工作主要也是在這三方面。
應用 Simulated Quantization 進行模型訓練 在嵌入式裝置上部署神經網路模型時,通常使用模型 “量化” (Quantization) 來減少模型引數需要的空間大小,並且提高計算吞吐量 (throughput)。使用 TensorFlow 可以在模型訓練時通過增加 FakeQuant 節點來實現 “Simulated Quantization”,在前向計算 (forward) 時模擬引數定點化帶來的精度損失。FakeQuant 節點可以在構建模型計算圖時手動新增,對於常見的網路結構也可以使用 TensorFlow contrib/quantize 工具,自動在模型訓練的計算圖中匹配需要進行引數量化的 Layers,並在合適的位置加入 FakeQuant 節點。
使用 TOCO 進行模型轉換
使用 TensorFlow Lite 在嵌入式平臺進行部署,需要使用 TOCO 工具進行模型格式轉換,同時會對神經網路的計算圖進行各種變換優化,比如會去掉或者合併不必要的常量計算,會將部分啟用函式計算融合到相關 FullyConnected 或者 Conv2D 節點等,以及處理模型量化 (Quantization) 相關操作。如果不涉及到 Custom Ops,在模型轉換這個環節,主要需要關注的兩個方面是:
1)正確處理Quantization引數和FakeQuant相關節點 2)避免轉換後的計算圖中出現低效的節點
Custom Ops 實現和效能優化
如果模型的神經網路結構中用到了目前 TensorFlow Lite 尚不支援的操作,可以以 Custom Op 方式實現相應計算核 (kernel)。要在 Custom Op 中實現高效計算,需要根據資料維度充分利用 SIMD 指令集的加速,並且減少不必要的記憶體讀寫。在快速原型階段,對於 Custom Op 中的向量和矩陣運算,可以呼叫 tensor_util 中的函式,充分利用 TFLite 中已有的優化實現。而如果 TFLite 已有的函式不能滿足需求,可以呼叫更加底層的高效能運算庫,例如 float 型別可以呼叫 Eigen,int8 型別可以呼叫 gemmlowp,TFLite 中 Builtin Ops 的計算核提供了呼叫示例。
3、熱詞檢測中使用 TensorFlow Lite 的效果
我們按照上述流程將熱詞檢測中的神經網路推理在 TensorFlow Lite 框架中實現,並部署到小問音箱上進行效能和效果的測試。在音箱的低功耗 ARM 處理器 (Cortex-A7) 上,基於 TensorFlow Lite 的神經網路推理計算,相比於我們原有內部開發的神經網路推理框架,計算效能有 20%~30% 的提升。考慮到我們內部推理框架已經針對 8-bit 低精度模型和 ARM 計算平臺進行了相當充分的效能優化,因此我們認為 TensorFlow Lite 在嵌入式平臺上的計算效能表現是非常優秀的。用 TensorFlow Lite 進行模型部署,結合 TensorFlow 用於模型訓練,使我們整個深度學習開發流程更為統一和高效。例如,得益於 Simulated Quantization,我們在模型量化過程中能夠更好地處理例如 BatchNorm 等網路結構,並且在訓練階段可以 fine-tune 模擬量化後的模型,因此應用 TensorFlow Lite 以及相關的訓練和部署流程之後,我們的熱詞檢測模型在相同誤喚醒水平下喚醒率會有約 3% 的提升。此外,根據我們實際經驗,使用 TensorFlow Lite 可以讓我們應用和優化新模型結構的開發週期,從大於一個月縮短到小於一個星期,極大地提升了嵌入式端深度學習開發的迭代速度。
此內容為精簡版,想要閱讀完整版案例說明,請點選此連結☛ ofollow,noindex">www.tensorflowers.cn/t/6306