出門問問:使用 TensorFlow Lite 在嵌入式端部署熱詞檢測模型

文 / 出門問問信息科技有限公司算法

來源 | TensorFlow 公衆號性能優化

一、背景

熱詞喚醒 (Keyword Spotting) 每每是用戶對語音交互體驗的第一印象,要作到準確快速。所以熱詞檢測算法要同時保證高喚醒率和低誤喚醒率,可以準確地區分熱詞和非熱詞的音頻信號。主流的熱詞檢測方法,一般使用深度神經網絡來從原始音頻特徵中提取 high-level 的抽象特徵(見下圖)。爲了可以在計算性能和內存大小都很是有限的嵌入式設備上作到 「Always On」 和 「低延遲」,咱們使用 TensorFlow Lite 做爲神經網絡模型的部署框架,既可以很好地兼容基於 TensorFlow 的模型訓練流程,也可以提供很是高效和輕量的嵌入式端運行時 (Runtime)。網絡

二、開發部署流程

在神經網絡結構大致肯定的狀況下,會顯著影響最終計算性能的主要是:模型量化 (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 的計算核提供了調用示例。優化

三、熱詞檢測中使用 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 可讓咱們應用和優化新模型結構的開發週期,從大於一個月縮短到小於一個星期,極大地提高了嵌入式端深度學習開發的迭代速度。

此內容爲精簡版,想要閱讀完整版案例說明,請點擊此連接☛ www.tensorflowers.cn/t/6306

相關文章
相關標籤/搜索