平時工做就是作深度學習,可是深度學習沒有落地就是比較虛,目前在移動端或嵌入式端應用的比較實際,也瞭解到目前主要有html
caffe2,騰訊ncnn,tensorflow,由於工做用tensorflow比較多,因此也就從tensorflow上下手了。android
下面內容主要參考&翻譯:git
https://www.tensorflow.org/mobile/?hl=zh-cngithub
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_mobile_tensorflowlite.md網絡
....等等,目前本身也是剛開始學移動端和嵌入式端部署,雖然這項技術感受已經有點old了。架構
單獨閱讀英文文檔沒有翻譯理解的透徹,若是有表述不對或者誤人子弟的地方,還請拍磚,讓我改正。框架
TensorFlow Lite和TensorFlow Mobile簡介:機器學習
tensorflow旨在成爲深度學習在移動端平臺部署的良好解決方案。google公司目前主要有兩套在移動端和嵌入式端部署解決方案,ide
分別是:TensorFlow for Mobile 和 TensorFlow Lite.咱們此次主要學習tensorflow lite,而後再看tensorflow Mobile。工具
他們兩個的主要不一樣點:
TensorFlow Lite是TensorFlow Mobile的演變,在大多數狀況下,使用TensorFlow Lite開發的應用程序將具備更小的二進制
大小,更少的依賴性和更好的性能。TensorFlow Lite僅支持一組有限的運算符,所以默認狀況下並不是全部模型均可以使用它。 TensorFlow for Mobile具備更全面的支持功能
TensorFlow Lite在移動平臺上提供更好的性能和更小的二進制文件存儲大小,而且能夠利用硬件進行加速(若是該平臺支持)。此外,
它具備更少的依賴,所以能夠在更簡單,更受約束的設備方案上構建(build/編譯)和託管。TensorFlow Lite還支持 Neural Networks API 的定位加速器。
TensorFlow Lite目前包含了一組有限的操做集合(operators set)。雖然TensorFlow for Mobile默認狀況下僅支持一組約束操做,
但原則上:能夠對其進行自定義以編譯該內核,使得在TensorFlow中使用任意運算符。所以,TensorFlow Lite當前不支持的用例應繼續使用TensorFlow for Mobile。
隨着TensorFlow Lite的發展,它所支持的操做集合將不斷增長,使得在移動端的部署更加地容易。
TensorFlow Lite簡介:
TensorFlow Lite是TensorFlow針對移動和嵌入式設備的輕量級解決方案。它支持設備端機器學習推理,並具備的低延遲和較小的二進制文件尺寸。
TensorFlow Lite還支持Android Neural Networks API的硬件加速。TensorFlow Lite使用許多技術來實現低延遲,例如優化移動應用程序的內核,
預融合激活層,以及容許量化內核(更小和更快(定點數學/定點數計算)模型,浮點轉整型)。
大多數TensorFlow Lite文檔暫時都在GitHub上(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/lite)。
TensorFlow Lite包含什麼?
TensorFlow Lite支持一組核心運算符,包括量化和浮點運算,它們已針對移動平臺進行了調整。它們結合了預融合激活和偏置,
以進一步提升性能和量化精度。此外,TensorFlow Lite還支持在模型中使用自定義操做。TensorFlow Lite基於FlatBuffers定義了一種新的模型文件格式。
FlatBuffers是一個開源,高效的跨平臺序列化庫。它相似於 protocol buffers(協議緩衝區),但主要區別在於FlatBuffers在訪問數據以前一般與每一個對象的內存分配相結合,
不須要對輔助表示(a secondary representation)進行解析/解包步驟。此外,FlatBuffers的代碼佔用空間比protocol buffers(協議緩衝區)小一個數量級。
TensorFlow Lite擁有一個新的移動優化解釋器,其主要目標是保持應用程序的精簡和快速。解釋器使用靜態圖形排序和自定義(少許動態)內存分配器來確保最小的負載、初始化和執行延遲。
TensorFlow Lite提供了一個利用硬件加速的接口(若是在設備支持)。它經過Android Neural Networks API, 實現,可在Android 8.1(API級別27)及更高版本上使用。
爲何咱們須要一個新的移動專用庫?
機器學習正在改變計算範式,咱們看到了移動和嵌入式設備上新用例的新趨勢。在相機和語音交互模型的推進下,消費者的指望也趨向於與其設備進行天然的,類人的交互。
有幾個因素引發了這個領域的興趣:
× 硅層的創新爲硬件加速提供了新的可能性,而Android Neural Networks API 等框架能夠輕鬆利用這些功能。
×實時計算機視覺技術和口語理解的最新進展已引導了移動優化的基準模型的開源(例如,MobileNets,SqueezeNet)。
×普遍可用的智能應用爲設備智能創造了新的可能性。
×可以提供「離線」用例,其中設備不須要鏈接到網絡。
咱們相信下一波機器學習應用程序將在移動和嵌入式設備上進行大量處理。
TensorFlow Lite亮點
TensorFlow Lite提供:
× 一組核心運算操做(operators),包括量化和浮動,其中許多已經針對移動平臺進行了調整。
這些可用於建立和運行自定義模型。開發人員還能夠編寫本身的自定義運算符並在模型中使用它們。
× 一種新的基於FlatBuffers的模型文件格式。
× 具備基於設備的內核優化解釋器,可在移動設備上更快地執行。
× TensorFlow轉換器(TensorFlow converter)將TensorFlow訓練的模型轉換爲TensorFlow Lite格式。
× 更小的尺寸:當全部支持的操做連接時,TensorFlow Lite小於300KB,當僅使用支持InceptionV3和Mobilenet所需的操做時,小於200KB。
×預先測試的模型:
如下全部模型都可保證「開箱即用/work」:
× Inception V3,一種用於檢測圖像中存在的主要對象的流行模型。
×MobileNets一系列移動優先計算機視覺模型,旨在有效地最大限度地提升準確性,同時注意到設備或嵌入式應用程序的受限資源。
它們是小型,低延遲,低功耗模型,參數化以知足各類用例的資源限制。它們能夠用於分類,檢測,嵌入(特徵編碼)和分割。
MobileNet模型比Inception V3更小但精度更低(稍低)。
×在智能回覆上,一種端上模型,經過聯繫與上下文相關的消息,爲新傳入的文本消息提供一鍵式回覆。該模型專爲內存受限設備(如手錶和手機)而構建,
並已成功應用於Smart Replies on Android Wear,在全部第一方和第三方應用。
另請參閱TensorFlow Lite支持的模型的完整列表TensorFlow Lite's supported models(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/models.md),包括型號,性能編號和可下載的模型文件。
× MobileNet 模型的量化版本,其運行速度比CPU上的非量化(浮點)版本快。
× 新的Android演示應用程序,用於說明使用TensorFlow Lite和量化的MobileNet模型進行對象分類。
× Java和C ++ API支持
TensorFlow Lite架構:
下圖顯示了TensorFlow Lite的架構設計:
從磁盤上通過訓練的TensorFlow模型開始,您將使用TensorFlow Lite轉換器將該模型轉換爲TensorFlow Lite文件格式(.tflite)。而後,您能夠在移動應用程序中使用該轉換後的文件。
部署TensorFlow Lite模型文件使用:
Java API:圍繞Android上的C ++ API的便利包裝器。
C ++ API:加載TensorFlow Lite模型文件並調用Interpreter。 Android和iOS都提供相同的庫。
解釋器:使用一組內核執行模型。解釋器支持選擇性內核加載。沒有內核它只有100KB,加載了全部內核300KB。這比TensorFlow Mobile要求的1.5M顯着下降。
在部分Android設備上,Interpreter將使用Android Neural Networks API進行硬件加速,若是沒有,則默認爲CPU執行。
您還可使用可由Interpreter使用的C ++ API實現自定義內核。
將來的工做
在將來的版本中,TensorFlow Lite將支持更多模型和內置運算符,包括定點和浮點模型的性能改進,工具的改進,以便更輕鬆地開發工做流程以及支持其餘更小的設備等。
在咱們繼續開發的過程當中,咱們但願TensorFlow Lite可以大大簡化針對小型設備模型的開發人員體驗。
Next Steps
TensorFlow Lite GitHub存儲庫。包含其餘文檔,代碼示例和演示應用程序。