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


TF Lite開發人員指南

  目錄:

   1 選擇一個模型

      使用一個預訓練模型

      使用自己的數據集重新訓練inception-V3,MovileNet 

      訓練自己的模型

   2 轉換模型格式

      轉換tf.GraphDef

      完整轉換器參考

      計算節點兼容性

      Graph 可視化工具

   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 ...

樹莓派 ...  

 

 


免責聲明!

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



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