移動端目標識別(2)——使用TENSORFLOW LITE將TENSORFLOW模型部署到移動端(SSD)之TF Lite Developer Guide

TF Lite開發人員指南

  目錄:html

   1 選擇一個模型java

      使用一個預訓練模型node

      使用本身的數據集從新訓練inception-V3,MovileNet python

      訓練本身的模型android

   2 轉換模型格式git

      轉換tf.GraphDefgithub

      完整轉換器參考api

      計算節點兼容性網絡

      Graph 可視化工具app

   3 在移動端app,使用TensorFlow Lite模型推理

                      android

                      IOS

                      Raspberry PI

   使用一個TensorFlow Lite 模型在你的移動端app須要受到須要約束:首先,你必須有訓練好的模型(預訓練/本身訓練),其次,將模型轉換爲TensorFlow Lite格式,最後,在app內整合模型.

 

1 選擇一個模型

  根據使用場景,你能夠選擇一個普遍應用的開源模型,好比InceptionV3,Mobilenets,和使用本身的數據集訓練的模型,甚至使用本身設計的模型.

  使用預訓練的模型:

    MobileNets是TensorFlow的移動優先計算機視覺模型系列,旨在有效地最大限度地提升準確性,同時考慮到設備或嵌入式應用程序的受限資源.MobileNets是小型,低延遲,低功耗模型,參數化以知足各類用途的資源限制。它們可用於分類,檢測,嵌入和分割 - 相似於其餘流行的大型模型,例如Inception。Google爲MobileNets提供了16個通過預先培訓的ImageNet分類ckpt模型文件,可用於各類規模的移動項目。

    Inception-v3是一種圖像識別模型,能夠實現至關高的準確度,能夠識別1000個類別的通常對象,例如「斑馬」,「達爾馬提亞」和「洗碗機」。該模型使用卷積神經網絡從輸入圖像中提取通常特徵,並基於具備徹底鏈接和softmax層的那些特徵對它們進行分類。

    On Device Smart Reply是一種設備上模型,經過建議與上下文相關的消息,爲傳入的文本消息提供一鍵式回覆。該模型專爲內存受限設備(如手錶和手機)而構建,並已成功用於Android Wear上的Smart Replies.目前這個模型是安卓特有的.

    這些預訓練的模型可用下載連接是:https://www.tensorflow.org/lite/models    

  使用本身的數據,從新train Inception-V3 或MobileNet

    這些預訓練的模型使用ImageNet 數據集訓練預約義的1000個類別.若是這些類別在你的業務場景中並不足夠,預訓練的模型將須要從新訓練.在預訓練模型基礎上再訓練,咱們稱之爲遷移學習,就是一個已經在某個解決方式上訓練的模型,在類似的問題上,使用本身的數據重訓練.深度學習從頭開始訓練將花費不少天的時間,可是遷移學習十分快.爲了實現遷移學習,你須要生成本身的數據和標註.

   Tensorflow for poets(https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0)代碼庫逐步完成了從新培訓過程.該代碼支持浮點和量化推理.

            訓練本身的模型

    開發者選擇tensorflow 訓練本身的模型(詳細見tensorflow tutorials).若是,你已經有了一個寫好的模型,你須要作的就是輸出這個模型爲tf.GraphDef文件.這是必需的,由於某些格式不會將模型結構存儲在代碼以外,咱們必須與框架的其餘部分進行通訊。 查看 Exporting the Inference Graph:https://www.tensorflow.org/tutorials/keras/save_and_restore_models#save_the_entire_model,以經過本身的模型建立tf.GraphDef文件.

    tensorflow lite 目前支持tensorflow 操做的子集,請查閱: TensorFlow Lite & TensorFlow Compatibility Guide(https://www.tensorflow.org/lite/tf_ops_compatibility)獲取當前支持的操做和使用方式.這個操做集合將在將來發布的tensorlow lite 版本上不斷增長.

 

2 轉換模型格式

   TensofFlow Lite Converter(https://www.tensorflow.org/lite/convert/index)轉換器支持下面的文件格式:

       SacedModel :一個圖定義文件GraphDef,和ckpt保存的模型,包含輸入輸出的簽名和參數.查看文檔使用python(https://www.tensorflow.org/lite/convert/python_api#basic_savedmodel)和命令行(https://www.tensorflow.org/lite/convert/cmdline_examples#savedmodel) 

       tf.keras 一個HDF5文件,包含tf.keras生成的模型文件,輸入輸出參數.查看python(https://www.tensorflow.org/lite/convert/python_api#basic_keras_file)或者命令行(https://www.tensorflow.org/lite/convert/cmdline_examples#keras)  

                frozen tf.GraphDef 屬於不包含變量tf.GraphDef的子類.一個GraphDef能夠被轉換爲grizen GraphDef,經過一個帶有ckpt的模型和GraphDef文件,並使用從ckpt檢索的值將每一個變量轉換爲常量.有關將tf.GraphDef轉換爲TensorFlow Lite模型的說明將在下一小節中介紹。

轉換tf.GraphDef

    TensorFlow模型能夠保存爲.pb或.pbtxt tf.GraphDef文件。爲了將tf.GraphDef文件轉換爲TensorFlow Lite,必須首先frozen模型。此過程會調用多種文件格式,包括frozen的GraphDef:

        tf.GraphDef(.pb或.pbtxt) - 表示TensorFlow訓練或計算圖的protobuf。它包含運算符,張量和變量定義。

        checkpoint(.ckpt) - 來自TensorFlow圖的序列化變量。因爲這不包含圖形結構,所以沒法自行解釋。

        TensorFlow Lite模型(.tflite) - 一個序列化的FlatBuffer,包含用於TensorFlow Lite解釋器的TensorFlow Lite運算符和張量。

     您必須擁有包含訓練權值的檢查點ckpt文件。 tf.GraphDef文件僅包含圖形的結構。將檢查點值與圖結構合併的過程稱爲凍結圖(freezing the graph).

    tf.GraphDef和MobileNet模型的檢查點文件可在此處得到:https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet_v1.md

    要凍結圖形freeze the graph,請使用如下命令(更改參數)

            

freeze_graph --input_graph=/tmp/mobilenet_v1_224.pb \
  --input_checkpoint=/tmp/checkpoints/mobilenet-10202.ckpt \
  --input_binary=true \
  --output_graph=/tmp/frozen_mobilenet_v1_224.pb \
  --output_node_names=MobileNetV1/Predictions/Reshape_1

    讀取二進制protobuf(.pb文件)時,將input_binary標誌設置爲True。對於.pbtxt文件,設置爲False。

    將input_graph和input_checkpoint設置爲相應的文件名。在構建模型的代碼以外,output_node_names可能並不明顯。找到它們的最簡單方法是使用TensorBoard或graphviz可視化圖形。

    freeze的GraphDef如今能夠轉換爲FlatBuffer格式(.tflite),以便在Android或iOS設備上使用.對於Android,TensorFlow Lite轉換器工具支持浮點和量化模型。要將凍結的GraphDef轉換爲.tflite格式,請使用相似於如下內容的命令:

tflite_convert \
  --output_file=/tmp/mobilenet_v1_1.0_224.tflite \
  --graph_def_file=/tmp/mobilenet_v1_0.50_128/frozen_graph.pb \
  --input_arrays=input \
  --output_arrays=MobilenetV1/Predictions/Reshape_1

 這裏使用的frozen_graph.pb文件可供下載:https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_1.0_224_frozen.tgz

設置input_array和output_array參數並不簡單.找到這些值的最簡單方法是使用TensorBoard探索圖形。在freeze_graph步驟中重用用於指定推理的輸出節點的參數。

 

完整轉換器參考

        TensorFlow Lite轉換器能夠是Python(https://www.tensorflow.org/lite/convert/python_api),也能夠是命令行(https://www.tensorflow.org/lite/convert/cmdline_examples)。這容許您將轉換步驟集成到模型設計工做流程中,確保模型易於轉換爲移動推理圖.

 

Ops兼容性

         有關故障排除幫助,請參閱操做兼容性指南(https://www.tensorflow.org/lite/tf_ops_compatibility),若是這樣作無效,請提出問題(https://github.com/tensorflow/tensorflow/issues)。

 

圖形可視化工具

    development repo(https://github.com/tensorflow/tensorflow)包含一個在轉換後可視化TensorFlow Lite模型的工具。要構建visualize.py (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/tools/visualize.py)工具:

bazel run tensorflow/lite/tools:visualize -- model.tflite model_viz.html

  這將生成一個交互式HTML頁面,其中列出了子圖,操做和圖形可視化

 

3.使用TensorFlow Lite模型在移動應用程序中進行推理

   完成前面的步驟後,您如今應該有一個.tflite模型文件。

 

Android

   因爲Android應用程序是用Java編寫的,核心TensorFlow庫是用C ++編寫的,所以提供了一個JNI庫做爲接口.這僅用於推理 - 它提供加載圖形,設置輸入和運行模型以計算輸出的能力。開源Android演示應用程序使用JNI接口,可在GitHub上使用(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/java/demo/app).您還能夠下載預建的APK(http://download.tensorflow.org/deps/tflite/TfLiteCameraDemo.apk)。有關詳細信息,請參閱Android演示指南(https://www.tensorflow.org/lite/demo_android)。Android移動(https://www.tensorflow.org/lite/android_build)指南提供了在Android上安裝TensorFlow以及設置bazel和Android Studio的說明。 

 

Ios ...

樹莓派 ...  

相關文章
相關標籤/搜索