Сбой при переносе пользовательской модели Inception V3 в демоверсию Android Tensor Flow Camera

Моя предполагаемая задача:

  1. создайте файлы контрольных точек для моих пользовательских классов (один класс), используя начальную версию версии 3.
  2. заморозить их в protobuf (.pb) с помощью freeze_graph
  3. оптимизируйте замороженный график с помощью optimize_for_inference
  4. Используйте файл pb в демонстрации камеры Android TF для классификации: TensorFlow Демонстрация камеры Android

На шаге 1 во время обучения размер пакета устанавливается равным 1. Также добавлено images = tf.identity(images, name='Inputs_layer'), чтобы назвать тензорную сеть, как предложено в вопросе Нет операции с именем [input] в ошибке Graph при точной настройке/переобучении тонкой модели inceptionV1.

Перед шагом 3,

>> bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --
   in_graph=frozen_graph.pb
   No inputs spotted.
   No variables spotted.
   Found 1 possible outputs: (name=tower_0/logits/predictions, op=Softmax)
   Found 21781804 (21.78M) const parameters, 0 (0) variable parameters, and 188 
   control_edges
   Op types used: 777 Const, 378 Mul, 284 Add, 283 Sub, 190 Identity, 188 Sum, 
   96 Reshape, 94
   Conv2D, 94 StopGradient, 94 SquaredDifference, 94 Square, 94 Mean, 94 Rsqrt, 
   94 Relu, 94
   Reciprocal, 15 ConcatV2, 10 AvgPool, 4 MaxPool, 1 RealDiv, 1 RandomUniform, 1
   QueueDequeueManyV2, 1 Softmax, 1 Split, 1 MatMul, 1 Floor, 1 FIFOQueueV2, 1 
   BiasAdd

На шаге 3

bazel-bin/tensorflow/python/tools/optimize_for_inference \
   --input=tensorflow/examples/android/assets/frozen_graph.pb \
   --output=tensorflow/examples/android/assets/stripped_graph.pb \
   --input_names=inputs_layer \
   --output_names=tower_0/logits/predictions

После шага 3,

 >>> bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --
   in_graph=stripped_graph.pb
   No inputs spotted.
   No variables spotted.
   Found 1 possible outputs: (name=tower_0/logits/predictions, op=Softmax) 
   Found 21781804 (21.78M) const parameters, 0 (0) variable parameters, and 188 
   control_edges
   Op types used: 777 Const, 378 Mul, 284 Add, 283 Sub, 188 Sum, 96 Reshape, 94 
   Conv2D, 94 StopGradient, 94 SquaredDifference, 94 Square, 94 Mean, 94 Rsqrt, 
   94 Relu, 94 Reciprocal, 15 ConcatV2, 10 AvgPool, 4 MaxPool, 1 RealDiv, 1 
   RandomUniform, 1 QueueDequeueManyV2, 1 Softmax, 1 Split, 1 MatMul, 1 Floor, 1 
   FIFOQueueV2, 1 BiasAdd
   To use with tensorflow/tools/benchmark:benchmark_model try these arguments:
   run tensorflow/tools/benchmark:benchmark_model -- --
   graph=stripped_graph.pb --show_flops --logtostderr --input_layer= --
   input_layer_type= --input_layer_shape= --
   output_layer=tower_0/logits/predictions

В ClassifierActivity.java,

private static final int INPUT_SIZE = 224;//299; //224;  
private static final int IMAGE_MEAN = 117;
private static final float IMAGE_STD = 1;
private static final String INPUT_NAME = "inputs_layer";
private static final String OUTPUT_NAME = "tower_0/logits/predictions";
private static final String MODEL_FILE = 
                       "file:///android_asset/stripped_graph.pb";
private static final String LABEL_FILE =
      "file:///android_asset/custom_label.txt";

После выполнения вышеуказанных 4 шагов журнал сбоев APK на устройстве Android:

E/AndroidRuntime( 8558): FATAL EXCEPTION: inference
   E/AndroidRuntime( 8558): Process: org.tensorflow.demo, PID: 8558
   E/AndroidRun time( 8558): java.lang.IllegalArgumentException: No Operation 
   named [inputs_layer] in the Graph

Как это исправить?


person Santle Camilus    schedule 04.05.2017    source источник
comment
Похоже, сборка прошла успешно, поэтому проблема, скорее всего, не связана с Bazel. Если вы согласны, не могли бы вы удалить тег bazel?   -  person László    schedule 04.05.2017
comment
Тег Bazel удален. Спасибо.   -  person Santle Camilus    schedule 04.05.2017
comment
@Dr.SantleCamilus есть прогресс в этом вопросе? У меня есть аналогичный вопрос о том, почему предварительно обученное-›замороженное-›квантованное начало-v3 имеет вход = вход и выход = InceptionV3/Reshape_1 вместо «Mul» и «Softmax». Вот мой вопрос: stackoverflow.com/questions/50941369/   -  person Amir    schedule 20.06.2018


Ответы (1)


Когда вы оптимизируете вывод, у него нет правильного имени входного узла. Вы только что дали inputs_layer, поэтому оптимизированный файл .pb неправильно распознается в Android.

Нигде не сказано, что ваш входной узел inputs_layer. Дайте правильное имя входного узла, и оно должно работать.

person Ameema Zainab    schedule 24.10.2017