TensorFlow Lite是TensorFlow針對移動和嵌入式設備的輕量級解決方案。它使設備上的機器學習預測具有低延遲和小的二進製大小。 TensorFlow Lite還支持硬件加速Android神經網絡API。
TensorFlow Lite使用許多技術來實現低延遲,如優化移動應用程序的內核,pre-fused激活以及允許更小和更快的(fixed-point數學)模型的量化內核。
目前,我們的TensorFlow Lite文檔大部分在Github上。
TensorFlow Lite包含什麽?
TensorFlow Lite支持一係列數量化和浮點的核心運算符,這些核心運算符已針對移動平台進行了優化。它們結合pre-fused激活和偏差來進一步提高性能和量化精度。此外,TensorFlow Lite還支持在模型中使用自定義操作。
TensorFlow Lite定義了一個新的模型文件格式,基於FlatBuffers。 FlatBuffers是一個開源的高效的跨平台序列化庫。它與協議緩衝區類似,但主要區別在於,FlatBuffers在訪問數據之前不需要解析/解包步驟到二級表示,通常與per-object內存分配結合使用。此外,FlatBuffers的代碼尺寸比協議緩衝區小一個數量級。
TensorFlow Lite有一個新的基於移動設備優化的解釋器,其主要目標是保持應用程序的精簡和快速。解釋器使用靜態圖形排序和自定義(less-dynamic)內存分配器來確保最小的負載,初始化和執行延遲。
TensorFlow Lite提供了一個接口來利用硬件加速(如果在設備上可用)。它是通過Android神經網絡庫,作為Android O-MR1的一部分發布的。
為什麽我們需要一個新的移動專用(mobile-specific)庫?
機器學習正在改變計算模式,我們看到了移動和嵌入式設備上新用例的新趨勢。消費者的期望也趨向於與他們的設備自然而友好地互動,由相機和語音交互模式驅動。
有幾個因素促成了這個領域的興趣:
-
矽層的創新為硬件加速帶來了新的可能性,像Android Neural Networks API這樣的框架可以很容易地利用這些特性。
-
實時計算機視覺和口頭語言理解的最新進展:一些mobile-optimized評測模型已開放源代碼(例如MobileNets,SqueezeNet)。
-
廣泛使用的智能設備為on-device智能創造了新的可能性。
-
對用戶數據不需要離開移動設備的更強大的用戶數據隱私範例感興趣。
-
能夠在設備不需要連接到網絡的情況下提供“離線”用例。
我們相信下一波機器學習應用將在移動和嵌入式設備上進行重要的處理。
TensorFlow Lite開發人員預覽亮點
TensorFlow Lite可作為開發人員預覽的點,包括以下內容:
-
一組核心操作符,既有數量化也有浮點值,其中很多已經針對移動平台進行了調優。這些可以用來創建和運行自定義模型。開發人員也可以編寫自己的自定義操作符並在模型中使用它們。
-
一個新的FlatBuffers基於模型的文件格式。
-
On-device解釋器,內核經過優化,可在移動設備上更快執行。
-
TensorFlow轉換器將TensorFlow-trained模型轉換為TensorFlow Lite格式。
-
規模較小:當所有支持的操作符鏈接時,TensorFlow Lite小於300KB,而僅使用支持InceptionV3和Mobilenet所需的操作符時,TensorFlow Lite小於200KB。
-
預訓練好的模型:
以下所有型號均可保證開箱即用:
-
Inception V3是一種流行的模型,用於檢測圖像中存在的主要對象。
-
MobileNetsmobile-first係列計算機視覺模型,旨在有效提高準確性,同時注意on-device或嵌入式應用程序的受限資源。它們很小,低延遲,低功耗,模型參數化,以滿足各種用例的資源約束。它們可以建立在分類,檢測,嵌入和分割之上。 MobileNet模型比較小,但是比Inception V3準確度較低。
-
在設備智能回複上,提供one-touch的on-device模型,能通過建議上下文相關的消息來回複傳入的文本消息。該模型專為內存受限的設備而建立,例如手表&手機,它已被成功使得Android Wear上的智能回複應用於所有first-party和third-party應用程序。
-
-
MobileNet模型的量化版本,其運行速度比CPU上的non-quantized(浮點)版本快。
-
新的Android演示應用程序來說明使用TensorFlow Lite與量化的MobileNet模型進行對象分類。
-
Java和C++ API支持
入門
建議使用上述的pre-tested模型試用TensorFlow Lite。如果有一個現有的模型,則需要測試模型是否兼容轉換器和支持的操作集。要測試你的模型,請看GitHub上的文檔。
為自定義數據集重新設置Inception-V3或MobileNet
上麵提到的pre-trained模型已經在ImageNet數據集上進行了訓練,該數據集由1000個預定義的類組成。如果這些類不適合您的用例,那麽您需要重新訓練這些模型。這種技術被稱為轉移學習(transfer learning),它從一個已經被訓練過的問題的模型開始,然後在類似的問題上進行再訓練。從頭開始深入學習可能需要幾天,但轉移學習可以很快完成。為了做到這一點,您需要生成標有相關類的自定義數據集。
TensorFlow for Poets codelab 一步一步走讀了這個過程。再訓練代碼支持浮點和量化推理的再訓練。
TensorFlow Lite架構
下圖顯示了TensorFlow Lite的架構設計:
從訓練有素的TensorFlow模型開始,您將把模型轉換為TensorFlow Lite文件格式(.tflite
),這需要使用TensorFlow Lite轉換器。然後,您可以在移動應用程序中使用該轉換後的文件。
部署TensorFlow Lite模型文件使用:
-
Java API:圍繞Android上C++ API的便捷包裝。
-
C++ API:加載TensorFlow Lite模型文件並調用解釋器。 Android和iOS都提供相同的庫。
-
解釋器:使用一組內核來執行模型。解釋器支持選擇性內核加載;沒有內核,隻有100KB,加載了所有內核的300KB。這比TensorFlow Mobile要求的1.5M的顯著減少。
-
在選定的Android設備上,解釋器將使用Android神經網絡API進行硬件加速,如果沒有可用的,則默認為CPU執行。
您也可以使用解釋器可以使用的C++ API來實現定製的內核。
未來的工作
在未來的版本中,TensorFlow Lite將支持更多的模型和內置運算符,包含定點和浮點模型的性能改進,改進工具以簡化開發人員工作流程以及支持其他更小的設備等等。隨著我們的不斷發展,我們希望TensorFlow Lite能夠大大簡化針對小型設備定位模型的開發者體驗。
未來的計劃包括使用專門的機器學習硬件,以獲得特定設備上特定型號的最佳性能。
下一步
對於開發人員的預覽,我們的大部分文檔都在GitHub上。請看看TensorFlow Lite庫在GitHub上獲取更多信息和代碼示例,演示應用程序等等。