移动端目标识别(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 ...

树莓派 ...  

相关文章
相关标签/搜索