如何将Tensorflow模型与tflite_diff_example_test进行比较

时间:2018-09-10 10:22:31

标签: tensorflow bazel tensorflow-lite

我已经训练了一个检测模型,当嵌入到tensorflow样本应用程序中时,该模型非常有用。
`<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="Document"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="example"> <xs:complexType> <xs:sequence> <xs:element name="testvalue" type="xs:float" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>` 冻结并使用toco转换为tflite后,结果确实表现不佳,并且具有巨大的“多样性”。

阅读this关于类似问题的答案,但准确性下降,我想在tensorflow docker计算机上尝试tflite_diff_example_test。

由于文档尚不完善,因此我构建了引用this SO Post的工具
使用:  export_tflite_ssd_graph运行顺利。


弄清所有需要的输入参数后,我使用以下命令尝试了testscript:

bazel build tensorflow/contrib/lite/testing/tflite_diff_example_test.cc

~/.cache/bazel/_bazel_root/68a62076e91007a7908bc42a32e4cff9/external/bazel_tools/tools/test/test-setup.sh tensorflow/contrib/lite/testing/tflite_diff_example_test '--tensorflow_model=/tensorflow/shared/exported/tflite_graph.pb' '--tflite_model=/tensorflow/shared/exported/detect.tflite' '--input_layer=a,b,c,d' '--input_layer_type=float,float,float,float' '--input_layer_shape=1,3,4,3:1,3,4,3:1,3,4,3:1,3,4,3' '--output_layer=x,y'

两种方法均失败。错误:

  1. 方式: bazel-bin/tensorflow/contrib/lite/testing/tflite_diff_example_test --tensorflow_model="/tensorflow/shared/exported/tflite_graph.pb" --tflite_model="/tensorflow/shared/exported/detect.tflite" --input_layer=a,b,c,d --input_layer_type=float,float,float,float --input_layer_shape=1,3,4,3:1,3,4,3:1,3,4,3:1,3,4,3 --output_layer=x,y

  2. 方式:

    tflite_diff_example_test.cc:line 1: /bazel: Is a directory tflite_diff_example_test.cc: line 3: syntax error near unexpected token '(' tflite_diff_example_test.cc: line 3: 'Licensed under the Apache License, Version 2.0 (the "License");' /root/.cache/bazel/_bazel_root/68a62076e91007a7908bc42a32e4cff9/external/bazel_tools/tools/test/test-setup.sh: line 184: /tensorflow/: Is a directory /root/.cache/bazel/_bazel_root/68a62076e91007a7908bc42a32e4cff9/external/bazel_tools/tools/test/test-setup.sh: line 276: /tensorflow/: Is a directory tf.contrib.resampler 2018-09-10 09:34:27.650473: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA Failed to create session. Op type not registered 'TFLite_Detection_PostProcess' in binary running on d36de5b65187. Make sure the Op and Kernel are registered in the binary running in this process. Note that if you are loading a saved graph which used ops from tf.contrib, accessing (e.g.)

我真的很感谢任何帮助,这使我能够使用给定测试的张量流比较两个图的输出。

1 个答案:

答案 0 :(得分:0)

您提到的第二种方法是使用tflite_diff的正确方法。但是,包含TFLite_Detection_PostProcess op的对象检测模型无法通过tflite_diff运行。

tflite_diff在TensorFlow运行时中运行提供的TensorFlow(.pb)模型,并在TensorFlow Lite运行时中运行提供的TensorFlow Lite(.tflite)模型。为了在TensorFlow运行时中运行.pb模型,所有操作都必须在TensorFlow中实现。

但是,在您提供的模型中,TFLite_Detection_PostProcess操作未在TensorFlow运行时中实现-仅在TensorFlow Lite运行时中可用。因此,TensorFlow无法解决该操作。因此,很遗憾,您无法在此模型上使用tflite_diff工具。