移動端目標識別(1)——使用TensorFlow Lite將tensorflow模型部署到移動端(ssd)之TensorFlow Lite簡介


 

     平時工作就是做深度學習,但是深度學習沒有落地就是比較虛,目前在移動端或嵌入式端應用的比較實際,也了解到目前主要有

caffe2,騰訊ncnn,tensorflow,因為工作用tensorflow比較多,所以也就從tensorflow上下手了。

下面內容主要參考&翻譯:

  https://www.tensorflow.org/mobile/?hl=zh-cn

  https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/running_on_mobile_tensorflowlite.md

       ....等等,目前自己也是剛開始學移動端和嵌入式端部署,雖然這項技術感覺已經有點old了。

單獨閱讀英文文檔沒有翻譯理解的透徹,如果有表述不對或者誤人子弟的地方,還請拍磚,讓我改正。

 

 

TensorFlow Lite和TensorFlow Mobile簡介:

     tensorflow旨在成為深度學習在移動端平台部署的良好解決方案。google公司目前主要有兩套在移動端和嵌入式端部署解決方案,

分別是: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存儲庫。包含其他文檔,代碼示例和演示應用程序。  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM