2017-01-08 3 views
2

GitHubの関連する問題やスタックオーバーフローのスレッドは、Webで問題を検索して見つかりましたか?Tensorflow:Androidのデモの精度

は、私は#1269#504

環境情報デモを実行するための.apkビルドとAndroidのバージョン5のための

Mac OSの検索しました。

可能であれば、私は#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

を使用してみましたが、残念ながら、それは次のエラーで失敗します。

[[email protected]: ~/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パースされていないが原因であることを疑うが、私なら、私を修正してください間違っています。

解決策を試した他に何か試みましたか?

はい、私は上記のスクリプトと私はかなり高い精度の結果を与えます。

答えて

0

悪い精度の理由は以下の通りですまあ、:

私はレノボバイブK5携帯電話上でこのサンプルコードを実行した(これはSanpDragon 415を持っている)、これは415にも、DSPを通じて、六角DSP用にコンパイルされませんでした835(Hexagon DSP 682)に比べて非常に古く、実際にはHexagon SDKが415で動作するかどうかはわかりませんが、私はこれを試しませんでした。これは、最初にモーションを検出して後でそれらを分類し、その結果パフォーマンスが悪いという例がCPU上で実行されていたことを意味します。

  1. スローFPSは、非常にゆっくりと画像をキャプチャするため、移動するオブジェクトは本当に困難になります。
  2. 悪いイメージがある場合、予測も悪い可能性が非常に高いです。
  3. カメラのキャプチャと分類には、レイテンシが非常にリアルタイムでないため、時間がかかります。