TensorFlow 在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案
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具有高度可移植性,已經在如下平臺成功移植:
使用TensorFlow Lite的流程
TensorFlow Lite的優化
相較於TensorFlow,TensorFlow Lite進行了如下優化:
-
壓縮模型:縮小模型體積
-
量化 (Quantization):TensorFlow模型中包含大量的矩陣,矩陣數值通常採用32bit的float資料型別,量化就是將這些32bit的浮點數採用8bit的byte表示。
-
優化的SIMD運算核心
此外TensorFlow Lite還緊密整合硬體加速器,支援如下幾類硬體加速器:
對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多大
更多詳細資料,請參考:https://www.tensorflow.org/mobile/tflite/performance/
部署
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,得到官方支援。
以上就是本次演講的全部內容,希望對大家有所幫助。