Google 開發者大會 (Google Developer Days,簡稱 GDD) 是展現 Google 最新開發者產品和平臺的全球盛會,旨在幫助你快速開發優質應用,發展和留住活躍用戶羣,充分利用各類工具得到更多收益。2018 Google 開發者大會於 9 月 20 日和 21 日於上海舉辦。👉Google 開發者大會 2018 掘金專題java
2018 年 9 月 21 日 ,凌鈺城(Google Brain 軟件工程師)帶來一場《TensorFlow Lite:TensorFlow在移動設備與嵌入式設備上的輕量級跨平臺解決方案》的演講,本文將對演講作一個回顧。python
今天,機器學習的發展突飛猛進,機器學習不只部署在服務器端,運行在我的電腦上,也存在於咱們生活中許許多多的小設備上,好比移動設備和智能手機。智能手機上的OK Google能夠經過語音設定一個鬧鐘,這是一個關鍵字檢測和語音識別的機器學習綜合應用。再好比Google的照片app,能夠經過機器學習來製做背景虛化、人像清晰的照片,這些在移動設備、智能手機上的機器學習應用頗有用、頗有趣。git
在移動設備上實現機器學習,能夠有兩種實現方法。一種是在設備上收集數據,傳遞給雲端,服務器執行機器學習任務,最後把結果回傳給設備。另外一種方法是在終端設備上運行全部功能,包含機器學習模型。github
在終端上運行機器學習有許多優勢:服務器
可是,在終端上運行應用也至關困難,主要存在如下幾點限制:網絡
對機器學習來講更是困難,咱們爲服務器開發的機器學習模型一般比較大,須要較大的內存,模型複雜,須要更多的耗電量和計算能力。app
TensorFlow Lite是TensorFlow在移動設備上運行機器學習的跨平臺解決方案,具備低延遲、運行時庫 (runtime library) 極小等特性,此外還有一系列的工具去轉換、調試和優化模型。機器學習
採用TensorFlow Lite開發的應用優勢之一是反應速度很是快,好比開發照片處理app,不須要將照片傳輸到雲端,能夠直接在終端上處理。優勢之二是能夠離線使用,這在網絡條件比較差的地區尤其重要。工具
Tensorflow Lite具備高度可移植性,已經在以下平臺成功移植:post
相較於TensorFlow,TensorFlow Lite進行了以下優化:
此外TensorFlow Lite還緊密整合硬件加速器,支持以下幾類硬件加速器:
對GPUs的支持情況:
關於Google打造的Edge TPUs:
TensorFlow Lite能夠經過參數決定runtime library大小。基本的interpreter 80K,全部內建Ops kernel 750KB,至關小。考慮到不一樣模型可能用到不一樣的ops,還能夠繼續優化,好比能夠只註冊你須要的Ops,這樣其他的Ops就不會編譯到runtime library中,體積還能夠進一步縮減。
TensorFlow Lite獲得了衆多開發者的使用,獲得了不少正面的反饋:
也收集到了一些改進意見:
後面會進一步說明TensorFlow Lite團隊對這些問題的改進。
以及...
TensorFlow Lite很是易於上手,建議採用以下步驟:
預訓練模型: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
驗證模型、分析性能:
更多詳細資料,請參考: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提供一系列的工具幫助開發者優化模型:
最新發布,其優勢是使用簡單,只需在前面的converter代碼加入一行:
converter.post_training_quantization = True
複製代碼
量化會形成模型精確度的損失,但據觀察,對圖像、音頻模型預測精確度影響很小。通過量化,CNN模型可增長10~50%的性能提高,RNN能夠增長到3倍性能提高。
一年前發佈的工具,理論上能夠比訓練後Quantization更好的精確度,但使用上比較複雜,只在CNN模型中比較有效果,對於RNN模型,效果有限。
團隊同時在研究二者,但願二者都有所提高。
一個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 技術乾貨