TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

雲水木石發表於2018-09-22

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,可以通過機器學習來製作背景虛化、人像清晰的照片,這些在移動裝置、智慧手機上的機器學習應用很有用、很有趣。

在移動裝置上實現機器學習,可以有兩種實現方法。一種是在裝置上收集資料,傳遞給雲端,伺服器執行機器學習任務,最後把結果回傳給裝置。另一種方法是在終端裝置上執行所有功能,包含機器學習模型。

在終端上執行機器學習有許多優點:

  • 沒有網路延遲
  • 無需連線網路
  • 資料留在終端
    • 無需花費頻寬去上傳資料
    • 某些情況下比較省電
  • 可直接存取終端上的感測器

但是,在終端上執行應用也相當困難,主要存在以下幾點限制:

  1. 移動終端上有更小的記憶體
  2. 對省電有要求
  3. 更弱的計算能力

對機器學習來說更是困難,我們為伺服器開發的機器學習模型通常比較大,需要較大的記憶體,模型複雜,需要更多的耗電量和計算能力。

什麼是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在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

TensorFlow Lite的優化

相較於TensorFlow,TensorFlow Lite進行了如下優化:

  • 壓縮模型:縮小模型體積
  • 量化 (Quantization):TensorFlow模型中包含大量的矩陣,矩陣數值通常採用32bit的float資料型別,量化就是將這些32bit的浮點數採用8bit的byte表示。
  • CPU ops融合:比如特別為ARM Neon指令集優化
  • 優化的SIMD運算核心

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

此外TensorFlow Lite還緊密整合硬體加速器,支援如下幾類硬體加速器:

  • GPUs
  • Edge-TPUs
  • NNAPI支援的硬體加速器

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

對GPUs的支援狀況:

  • Android上:基於OpenGL的GPU加速
  • 預定2018年第四季度釋出binary
  • 可加速MobileNet以及其它影象模型

關於Google打造的Edge TPUs:

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

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在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

以及...

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

如何使用TensorFlow Lite

TensorFlow Lite非常易於上手,建議採用如下步驟:

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

使用Demo App
  • 下載:從https://www.tensorflow.org/mobile/tflite下載一個demo app(iOS/Android)
  • 編譯:在您的機器上簡單的編譯demo apps
  • 執行:執行demo app,並試著修改看看
預訓練 (Pretrained) & 再訓練 (Retrained) 模型

預訓練模型:Tensorflow網站上提供了各種不同預訓練的機器學習模型,比如影象分類、物體檢測、影象分割、文字預測、等等。

再訓練模型:請嘗試遷移學習Colab教程 - Tensorflow for Poets。顧名思義,這個教程設計初衷是儘量簡單,讓沒有技術背景的人也能執行。所謂遷移學習,是重新訓練已經存在模型的一小部分,應用到一個新的問題上。

開發自己的模型

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

  1. 構建 & 訓練模型

    使用TensorFlow(Estimator或Keras),構建模型,訓練,取得Saved Model。

  2. 轉換格式

    使用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:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

由於TensorFlow Lite支援的Ops有限,可能存在模型轉換後,某些Ops不支援,針對這一問題,TensorFlow Lite團隊計劃支援更多的Ops

  • 目前已經有75個內建Ops
  • Coming soon: Tensorflow Lite Compat模式
  • 計劃第四季度釋出
  • 增加數百個支援的Ops

驗證模型、分析效能:

  • 轉換後的模型是否正確
  • 模型的推斷速度多快
  • Runtime library多大

更多詳細資料,請參考:www.tensorflow.org/mobile/tfli…

部署

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

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:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

TensorFlow Lite提供一系列的工具幫助開發者優化模型:

  • 訓練後Quantization

最新發布,其優點是使用簡單,只需在前面的converter程式碼加入一行:

converter.post_training_quantization = True
複製程式碼

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

量化會造成模型精確度的損失,但據觀察,對影象、音訊模型預測精確度影響很小。經過量化,CNN模型可增加10~50%的效能提升,RNN可以增加到3倍效能提升。

  • 訓練時Quantization

一年前釋出的工具,理論上可以比訓練後Quantization更好的精確度,但使用上比較複雜,只在CNN模型中比較有效果,對於RNN模型,效果有限。

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

團隊同時在研究兩者,希望兩者都有所提升。

Demo

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

一個Raspberry PI實現的物件檢測模型,可以進行目標檢測,轉動攝影機始終跟隨目標

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

一個採用Google Edge TPU的系統,展現TensorFlow Lite的實時處理能力

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

採用ARM微處理的裝置,展現TensorFlow Lite在極低硬體配置上的表現

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

展現TensorFlow Lite的實時視訊處理能力

展望未來

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

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
複製程式碼

以上就是本次演講的全部內容,希望對大家有所幫助。 TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018 閱讀更多 Google 開發者大會 2018 技術乾貨

TensorFlow Lite:TensorFlow在移動裝置與嵌入式裝置上的輕量級跨平臺解決方案 | Google 開發者大會 2018

相關文章