2016-11-03 8 views
0

Ich habe versucht, quantisierte Grafik in Android App, die gleiche Weise wie beschrieben here. Die verwendete Version von Tensorflow ist 0.11.0rc0.Android App stürzt ab, wenn quantisierte Grafik verwendet

Zuerst lief ich die folgenden Befehle:

bazel-bin/tensorflow/python/tools/optimize_for_inference \ 
--input=/Users/nikogamulin/Desktop/assets/output_flowers.pb \ 
--output=/Users/nikogamulin/Desktop/assets/tensorflow_inception_graph_optimized.pb \ 
--input_names=Mul \ 
--output_names=final_result 

bazel-bin/tensorflow/tools/quantization/quantize_graph \ 
--input=/Users/nikogamulin/Desktop/assets/tensorflow_inception_graph_optimized.pb \ 
--output=/Users/nikogamulin/Desktop/assets/tensorflow_inception_graph_rounded.pb \ 
--output_node_names=final_result \ 
--mode=weights_rounded 

bazel build //tensorflow/contrib/util:convert_graphdef_memmapped_format 
bazel-bin/tensorflow/contrib/util/convert_graphdef_memmapped_format \ 
--in_graph=/Users/nikogamulin/Desktop/assets/tensorflow_inception_graph_rounded.pb \ 
--out_graph=/Users/nikogamulin/Desktop/assets/tensorflow_inception_graph_mapped.pb 

output_flowers.pb ist Anfang v3 Graph, der die gleiche Art und Weise wie beschrieben here umgeschult wurde, außer ich verschiedene Datensatz verwendet wird.

Bei der Verwendung des Graph tensorflow_inception_graph_optimized.pb in Android-App, hat alles gut funktioniert. Nach dem Wechsel zu tensorflow_inception_graph_mapped.pb oder tensorflow_inception_graph_rounded.pb stürzt die App ab: Sobald die Benutzeroberfläche angezeigt wird, wird der Dialog "Leider wurde TensorFlow Demo beendet." aufpoppen.

Im Folgenden sind die Anfangszeilen TensorFlowImageListener Klasse:

private static final int NUM_CLASSES = 23; 
    private static final int INPUT_SIZE = 299; 
    private static final int IMAGE_MEAN = 128; 
    private static final float IMAGE_STD = 128; 
    private static final String INPUT_NAME = "Mul:0"; 
    private static final String OUTPUT_NAME = "final_result:0"; 

    private static final String MODEL_FILE = "file:///android_asset/tensorflow_inception_graph_mapped.pb"; 
    private static final String LABEL_FILE = "file:///android_asset/labels_flowers.txt"; 
... 

Wenn jemand quantisiert Anfang v3 Graph in Android verwenden verwaltet oder weiß, wie das Problem zu lösen, würde ich für Anregungen sehr dankbar über die Lösung Problem.

+0

Können Sie versuchen, einen Stack-Trace zu bekommen und den tatsächlichen Fehler, der ausgelöst wird? –

Antwort

0

Ich habe in ähnliches Problem geraten und ich denke, dass das Problem mit Ihren Schritten war, dass Speicher-Mapping-Teil. Weil ich denke, dass dies wahrscheinlich Knoten Namen oder ähnliches ausgibt.

Wenn Sie nur Ihr Modell (von optimize_for_inference oder noch besser strip_unused) strippen und es dann nur quantisieren, wird es mit der Einführung v3-Modell richtig funktionieren - ich habe es gerade versucht.

Allerdings würde Ich mag auch mem-Mapping Teil tun, aber ich habe das noch nicht geschafft ...

EDIT:

Schließlich fand ich Arbeitslösung auf Peter Warden Blog:

bazel-bin/tensorflow/python/tools/optimize_for_inference \ 
--input=/tmp/output.pb \ 
--output=/tmp/optimized.pb \ 
--input_names=Mul \ 
--output_names=final_result 

bazel-bin/tensorflow/tools/quantization/quantize_graph \ 
--input=/tmp/optimized.pb \ 
--output=/tmp/rounded.pb \ 
--output_node_names=final_result \ 
--mode=weights_rounded 

bazel-bin/tensorflow/contrib/util/convert_graphdef_memmapped_format \ 
--in_graph=/tmp/rounded.pb \ 
--out_graph=/tmp/mmapped.pb 

(Alle Skripte müssen im Voraus mit dem Bazel-Bin-Befehl vor der Verwendung erstellt werden).

Mit diesem konnte ich mein v3 umtrainiertes Modell auf rund 21 MB verkleinern und im Android-Projekt arbeiten. Prost.

Verwandte Themen