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

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

在終端上運行機器學習有許多優勢:服務器

  • 沒有網絡延遲
  • 無需鏈接網絡
  • 數據留在終端
    • 無需花費帶寬去上傳數據
    • 某些狀況下比較省電
  • 可直接存取終端上的傳感器

可是,在終端上運行應用也至關困難,主要存在如下幾點限制:網絡

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

對機器學習來講更是困難,咱們爲服務器開發的機器學習模型一般比較大,須要較大的內存,模型複雜,須要更多的耗電量和計算能力。app

什麼是TensorFlow Lite

TensorFlow Lite是TensorFlow在移動設備上運行機器學習的跨平臺解決方案,具備低延遲、運行時庫 (runtime library) 極小等特性,此外還有一系列的工具去轉換、調試和優化模型。機器學習

採用TensorFlow Lite開發的應用優勢之一是反應速度很是快,好比開發照片處理app,不須要將照片傳輸到雲端,能夠直接在終端上處理。優勢之二是能夠離線使用,這在網絡條件比較差的地區尤其重要。工具

Tensorflow Lite具備高度可移植性,已經在以下平臺成功移植:post

  • 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。顧名思義,這個教程設計初衷是儘可能簡單,讓沒有技術背景的人也能運行。所謂遷移學習,是從新訓練已經存在模型的一小部分,應用到一個新的問題上。

開發本身的模型

  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支持的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 技術乾貨

相關文章
相關標籤/搜索