Google 開發者大會 (Google Developer Days,簡稱 GDD) 是展示 Google 最新開發者產品和平臺的全球盛會,旨在幫助你快速開發優質應用,發展和留住活躍使用者群,充分利用各種工具獲得更多收益。2018 Google 開發者大會於 9 月 20 日和 21 日於上海舉辦。?Google 開發者大會 2018 掘金專題
2018 年 9 月 21 日 ,凌鈺城(Google Brain 軟體工程師)帶來一場《TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案》的演講,本文將對演講做一個回顧。
在終端 / 裝置上執行機器學習日益重要
今天,機器學習的發展日新月異,機器學習不僅部署在伺服器端,執行在個人電腦上,也存在於我們生活中許許多多的小裝置上,比如移動裝置和智慧手機。智慧手機上的OK Google可以通過語音設定一個鬧鐘,這是一個關鍵字檢測和語音識別的機器學習綜合應用。再比如Google的照片app,可以通過機器學習來製作背景虛化、人像清晰的照片,這些在移動裝置、智慧手機上的機器學習應用很有用、很有趣。
在移動裝置上實現機器學習,可以有兩種實現方法。一種是在裝置上收集資料,傳遞給雲端,伺服器執行機器學習任務,最後把結果回傳給裝置。另一種方法是在終端裝置上執行所有功能,包含機器學習模型。
在終端上執行機器學習有許多優點:
- 沒有網路延遲
- 無需連線網路
- 資料留在終端
- 無需花費頻寬去上傳資料
- 某些情況下比較省電
- 可直接存取終端上的感測器
但是,在終端上執行應用也相當困難,主要存在以下幾點限制:
- 移動終端上有更小的記憶體
- 對省電有要求
- 更弱的計算能力
對機器學習來說更是困難,我們為伺服器開發的機器學習模型通常比較大,需要較大的記憶體,模型複雜,需要更多的耗電量和計算能力。
什麼是TensorFlow Lite
TensorFlow Lite是TensorFlow在移動裝置上執行機器學習的跨平臺解決方案,具有低延遲、執行時庫 (runtime library) 極小等特性,此外還有一系列的工具去轉換、除錯和優化模型。
採用TensorFlow Lite開發的應用優點之一是反應速度非常快,比如開發照片處理app,不需要將照片傳輸到雲端,可以直接在終端上處理。優點之二是可以離線使用,這在網路條件比較差的地區尤為重要。
Tensorflow Lite具有高度可移植性,已經在如下平臺成功移植:
- Android、iOS
- Raspberry PI、及其它Linux SoCs
- 微處理器(包括沒有作業系統,沒有POSIX環境的系統)
- 也能在PC、Mac執行,除錯方便
使用TensorFlow Lite的流程
TensorFlow Lite的優化
相較於TensorFlow,TensorFlow Lite進行了如下優化:
- 壓縮模型:縮小模型體積
- 量化 (Quantization):TensorFlow模型中包含大量的矩陣,矩陣數值通常採用32bit的float資料型別,量化就是將這些32bit的浮點數採用8bit的byte表示。
- CPU ops融合:比如特別為ARM Neon指令集優化
- 優化的SIMD運算核心
此外TensorFlow Lite還緊密整合硬體加速器,支援如下幾類硬體加速器:
- GPUs
- Edge-TPUs
- NNAPI支援的硬體加速器
對GPUs的支援狀況:
- Android上:基於OpenGL的GPU加速
- 預定2018年第四季度釋出binary
- 可加速MobileNet以及其它影像模型
關於Google打造的Edge TPUs:
TensorFlow Lite可以通過引數決定runtime library大小。基本的interpreter 80K,所有內建Ops kernel 750KB,相當小。考慮到不同模型可能用到不同的ops,還可以繼續優化,比如可以只註冊你需要的Ops,這樣其餘的Ops就不會編譯到runtime library中,體積還可以進一步縮減。
開發者的反饋
TensorFlow Lite得到了眾多開發者的使用,得到了很多正面的反饋:
- 跨平臺部署
- 更快的推斷 (inference) 速度
- 更小的runtime library
- 硬體加速
也收集到了一些改進意見:
- TensorFlow Lite更易於使用
- 增加支援的Ops數量
- 增強模型優化工具
- 更多的文件、範例原始碼...
後面會進一步說明TensorFlow Lite團隊對這些問題的改進。
誰使用了TensorFlow Lite
以及...
如何使用TensorFlow Lite
TensorFlow Lite非常易於上手,建議採用如下步驟:
使用Demo App
- 下載:從https://www.tensorflow.org/mobile/tflite下載一個demo app(iOS/Android)
- 編譯:在您的機器上簡單的編譯demo apps
- 執行:執行demo app,並試著修改看看
預訓練 (Pretrained) & 再訓練 (Retrained) 模型
預訓練模型:Tensorflow網站上提供了各種不同預訓練的機器學習模型,比如影像分類、物體檢測、影像分割、文字預測、等等。
再訓練模型:請嘗試遷移學習Colab教程 - Tensorflow for Poets。顧名思義,這個教程設計初衷是儘量簡單,讓沒有技術背景的人也能執行。所謂遷移學習,是重新訓練已經存在模型的一小部分,應用到一個新的問題上。
開發自己的模型
-
構建 & 訓練模型
使用TensorFlow(Estimator或Keras),構建模型,訓練,取得Saved Model。
-
轉換格式
使用TensorFlow Lite轉換器轉換為TensorFlow Lite可用的模型,模型轉換程式碼如下:
import tensorflow.contrib.lite as lite
graph_def_file = "/path/to/Downloads/mobilenet_v1_1.0_224/frozen_graph.pb"
input_arrays = ["input"]
output_arrays = ["MobilenetV1/Predictions/Softmax"]
converter = lite.TocoConverter.from_frozen_graph(
graph_def_file, input_arrays, output_arrays)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
複製程式碼
驗證
藉助模型視覺化工具:
由於TensorFlow Lite支援的Ops有限,可能存在模型轉換後,某些Ops不支援,針對這一問題,TensorFlow Lite團隊計劃支援更多的Ops
- 目前已經有75個內建Ops
- Coming soon: Tensorflow Lite Compat模式
- 計劃第四季度釋出
- 增加數百個支援的Ops
驗證模型、分析效能:
- 轉換後的模型是否正確
- 模型的推斷速度多快
- Runtime library多大
更多詳細資料,請參考:www.tensorflow.org/mobile/tfli…
部署
python API示例:
interpreter = tf.contrib.lite.Interpreter(
"/tmp/awesome_model.tflite")
input = interpreter.get_input_details()[0]["index"]
interpreter.set_tensor(input, np.array([1, 2, 3]))
interpreter.invoke()
prediction = interpreter.get_tensor(output)
複製程式碼
Java API示例:
import org.tensorflow.lite.Interpreter;
try {
Interpreter tflite = new Interpreter(
"/tmp/awesome_model.tflite");
// Fill the inputs and output buffers
// ...
// Invoke the interpreter
tflite.run(inputs, outputs);
}
複製程式碼
補充:模型優化
在實際專案中,通常還會進行模型優化,這樣在前面的流程中加入模型優化,演變為如下流程:
TensorFlow Lite提供一系列的工具幫助開發者優化模型:
- 訓練後Quantization
最新發布,其優點是使用簡單,只需在前面的converter程式碼加入一行:
converter.post_training_quantization = True
複製程式碼
量化會造成模型精確度的損失,但據觀察,對影像、音訊模型預測精確度影響很小。經過量化,CNN模型可增加10~50%的效能提升,RNN可以增加到3倍效能提升。
- 訓練時Quantization
一年前釋出的工具,理論上可以比訓練後Quantization更好的精確度,但使用上比較複雜,只在CNN模型中比較有效果,對於RNN模型,效果有限。
團隊同時在研究兩者,希望兩者都有所提升。
Demo
一個Raspberry PI實現的物件檢測模型,可以進行目標檢測,轉動攝影機始終跟隨目標
一個採用Google Edge TPU的系統,展現TensorFlow Lite的實時處理能力
採用ARM微處理的裝置,展現TensorFlow Lite在極低硬體配置上的表現
展現TensorFlow Lite的實時視訊處理能力
展望未來
Compat是Compatibility (相容) 的簡寫,所謂相容模式,就是TensorFlow Lite在遇到不支援的Ops時,會提示是否啟用Compat模式,這樣支援的Ops (600+) 更多,但也意味著runtime library會增加,開發者需要在功能和體積之間做權衡。
另外,TensorFlow Lite搬家了,從原來的tensorflow/contrib/lite/...提升到tensorflow/lite/...,這意味著TensorFlow Lite開始作為一個正式的project,得到官方支援。
程式碼:github.com/tensorflow/tensorflow
文件:tensorflow.org/mobile/tflite/
討論:tflite@tensorflow.org
複製程式碼
以上就是本次演講的全部內容,希望對大家有所幫助。 閱讀更多 Google 開發者大會 2018 技術乾貨