我已经训练了一个检测模型,当嵌入到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'
两种方法均失败。错误:
方式:
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
方式:
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.)
我真的很感谢任何帮助,这使我能够使用给定测试的张量流比较两个图的输出。
答案 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
工具。