【问题标题】:Tensorflow : Android demo accuracyTensorflow:Android 演示准确性
【发布时间】:2017-01-08 02:27:47
【问题描述】:

通过在网上搜索您的问题,您发现了哪些相关的 GitHub 问题或 Stack Overflow 线程?

我搜索了 #1269 #504

环境信息

用于构建的 Mac OS 和用于运行 .apk 演示的 Android 版本 5。

如果可能,请提供一个可重现的最小示例(我们通常没有时间阅读您的数百行代码)

我按照#1269中提到的步骤,可以成功运行示例,但是结果的准确性很低,而且经常出错。我已经针对 25 种不同的日常用品(如肥皂、汤、面条等)训练了我的系统。 当我使用以下脚本运行相同的示例时,它给了我非常高的准确性(大约 90-95%)

import sys
import tensorflow as tf
// change this as you see fit
image_path = sys.argv[1]

// Read in the image_data
image_data = tf.gfile.FastGFile(image_path, 'rb').read()

// Loads label file, strips off carriage return
label_lines = [line.rstrip() for line 
                   in tf.gfile.GFile("/tf_files/retrained_labels.txt")]

// Unpersists graph from file
with tf.gfile.FastGFile("/tf_files/retrained_graph.pb", 'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    _ = tf.import_graph_def(graph_def, name='')

with tf.Session() as sess:
    // Feed the image_data as input to the graph and get first prediction
    softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')

    predictions = sess.run(softmax_tensor, \
             {'DecodeJpeg/contents:0': image_data})

    // Sort to show labels of first prediction in order of confidence
    top_k = predictions[0].argsort()[-len(predictions[0]):][::-1]

    for node_id in top_k:
        human_string = label_lines[node_id]
        score = predictions[0][node_id]
        print('%s (score = %.5f)' % (human_string, score))

我在这里看到的唯一区别是,Android 演示中使用的模型文件被剥离,因为它不支持DecodeJpeg,而在上面的代码中,它是实际生成的未剥离模型。有什么具体原因或我在这里错了吗?

我也尝试过使用optimize_for_inference

但不幸的是,它失败并出现以下错误:

[milinddeore@P028: ~/tf/tensorflow ] bazel-bin/tensorflow/python/tools/optimize_for_inference --input=/Users/milinddeore/tf_files_nm/retrained_graph.pb --output=/Users/milinddeore/tf/tensorflow/tensorflow/examples/android/assets/tf_ul_stripped_graph.pb --input_names=DecodeJpeg/content —-output_names=final_result
Traceback (most recent call last):
  File "/Users/milinddeore/tf/tensorflow/bazel-bin/tensorflow/python/tools/optimize_for_inference.runfiles/org_tensorflow/tensorflow/python/tools/optimize_for_inference.py", line 141, in <module>
    app.run(main=main, argv=[sys.argv[0]] + unparsed)
  File "/Users/milinddeore/tf/tensorflow/bazel-bin/tensorflow/python/tools/optimize_for_inference.runfiles/org_tensorflow/tensorflow/python/platform/app.py", line 44, in run
    _sys.exit(main(_sys.argv[:1] + flags_passthrough))
  File "/Users/milinddeore/tf/tensorflow/bazel-bin/tensorflow/python/tools/optimize_for_inference.runfiles/org_tensorflow/tensorflow/python/tools/optimize_for_inference.py", line 90, in main
    FLAGS.output_names.split(","), FLAGS.placeholder_type_enum)
  File "/Users/milinddeore/tf/tensorflow/bazel-bin/tensorflow/python/tools/optimize_for_inference.runfiles/org_tensorflow/tensorflow/python/tools/optimize_for_inference_lib.py", line 91, in optimize_for_inference
    placeholder_type_enum)
  File "/Users/milinddeore/tf/tensorflow/bazel-bin/tensorflow/python/tools/optimize_for_inference.runfiles/org_tensorflow/tensorflow/python/tools/strip_unused_lib.py", line 71, in strip_unused
    output_node_names)
  File "/Users/milinddeore/tf/tensorflow/bazel-bin/tensorflow/python/tools/optimize_for_inference.runfiles/org_tensorflow/tensorflow/python/framework/graph_util_impl.py", line 141, in extract_sub_graph
    assert d in name_to_node_map, "%s is not in graph" % d
AssertionError:  is not in graph

我怀疑这个问题是由于 android 没有被解析 DecodeJpeg,但如果我错了,请纠正我。

您还尝试过哪些其他尝试性解决方案?

是的,我是上面的脚本,它给了我相当高的准确度结果。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    嗯,准确率不好的原因如下:

    我在 Lenovo Vibe K5 手机上运行了这个示例代码(这有 SanpDragon 415),这不是为 hexagon DSP 编译的,即使 415 上的 DSP 与 835(Hexagon DSP 682)相比已经很老了,事实上我不太确定 Hexagon SDK 是否适用于 415,不过我还没有尝试过。这意味着该示例在 CPU 上运行以首先检测运动,然后对其进行分类,因此性能不佳。

    1. 慢速 FPS,将非常缓慢地捕获图像,因此移动对象将非常困难。
    2. 因此,如果您的形象不佳,那么预测也很可能很糟糕。
    3. 摄像头捕捉和分类需要很长时间,因为延迟不是很实时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 2021-06-16
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多