模型壓縮
為了將tensorflow深度學習模型部署到移動/嵌入式設備上,我們應該致力於減少模型的內存占用,縮短推斷時間,減少耗電。有幾種方法可以實現這些要求,如量化、權重剪枝或將大模型提煉成小模型。
在這個項目中,我使用了 TensorFlow 中的量化工具來進行模型壓縮。目前我只使用權重量化來減小模型大小,因為根據 Mac 上的測試結果,完整 8 位轉換沒有提供額外的好處,比如縮短推斷時間。(由於 requant_range 中的錯誤,無法在 Pixel 上運行完整的 8 位模型)。由於 8 位量化工具不適合 CPU,時間甚至翻了一倍。如果你有興趣了解更多關於量化的實用建議,可以閱讀 Pete Warden 這篇很棒的文章(https://petewarden.com/2017/06/22/what-ive-learned-about-neural-network-quantization/)。
對模型進行權重量化:
- 將模型寫入協議緩沖區文件。
- 從源安裝和配置 TensorFlow(https://www.tensorflow.org/install/install_sources)。
- 在 TensorFlow 目錄下運行下列命令行:
- bazel build tensorflow/tools/graph_transforms:transform_graph
- bazel-bin/tensorflow/tools/graph_transforms/transform_graph --in_graph=/your/.pb/file --outputs="output_node_name" --out_graph=/the/quantized/.pb/file --transforms='quantize_weights'
以我的項目為例,在量化權重后,預訓練的 WaveNet 模型的大小從 15.5Mb 下降到了 4.0Mb。現在可以將這個模型文件移動到安卓項目中的「assets」文件夾。