从Android上的开放图像数据集中获取预训练的Inception v3模型

从Android上的开放图像数据集中获取预训练的Inception v3模型,android,tensorflow,Android,Tensorflow,我试了一会儿让这个经过训练的模型在android上运行。问题是,我只得到了预训练网络的ckpt和元文件。在我看来,android应用程序需要.pb。因此,我尝试将给定的文件转换为.pb文件 因此,我尝试了freeze_graph.py,但没有成功。因此,我使用了中的示例代码,并对其进行了修改以存储pb。加载后的文件 if not os.path.exists(FLAGS.checkpoint): tf.logging.fatal( 'Checkpoint %s does not

我试了一会儿让这个经过训练的模型在android上运行。问题是,我只得到了预训练网络的ckpt和元文件。在我看来,android应用程序需要.pb。因此,我尝试将给定的文件转换为.pb文件

因此,我尝试了freeze_graph.py,但没有成功。因此,我使用了中的示例代码,并对其进行了修改以存储pb。加载后的文件

if not os.path.exists(FLAGS.checkpoint):
  tf.logging.fatal(
      'Checkpoint %s does not exist. Have you download it? See tools/download_data.sh',
      FLAGS.checkpoint)
   g = tf.Graph()
with g.as_default():
  input_image = tf.placeholder(tf.string)
   processed_image = PreprocessImage(input_image)

  with slim.arg_scope(inception.inception_v3_arg_scope()):
    logits, end_points = inception.inception_v3(
        processed_image, num_classes=FLAGS.num_classes, is_training=False)

    predictions = end_points['multi_predictions'] = tf.nn.sigmoid(
       logits, name='multi_predictions')
  init_op = control_flow_ops.group(tf.global_variables_initializer(),
                             tf.global_variables_initializer(),
                             data_flow_ops.initialize_all_tables())
  saver = tf_saver.Saver()
  sess = tf.Session()
  saver.restore(sess, FLAGS.checkpoint)

  outpt_filename = 'output_graph.pb'
  #output_graph_def = sess.graph.as_graph_def()
  output_graph_def = graph_util.convert_variables_to_constants(sess, sess.graph.as_graph_def(), ["multi_predictions"])
  with gfile.FastGFile(outpt_filename, 'wb') as f:
      f.write(output_graph_def.SerializeToString())
现在我的问题是,我有.pb文件,但我对输入节点的名称没有任何意见,我也不确定
multi_predictions
是否是正确的输出名称。在示例android应用程序中,我必须同时指定这两个选项。android应用程序因以下原因崩溃:

tensorflow_inference_jni.cc:138 Could not create Tensorflow Graph: Invalid argument: No OpKernel was registered to support Op 'DecodeJpeg' with these attrs. 
我不知道通过尝试修复.pb问题是否还有更多问题。或者,在我的情况下,如果有人知道将ckpt和元文件移植到.pd文件的更好方法,或者知道具有输入和输出名称的最终文件的来源,请提示我完成此任务


谢谢

您需要使用optimize_for_inference.py脚本删除图形中未使用的节点。Android不支持“解码JPEG”——像素值应该直接输入。ClassificateRactivity.java提供了有关inception v3使用的特定节点的更多详细信息。

很抱歉,有一段时间很忙。您使用optimize_for_interference.py的技巧完全正确,我可以使用“Mul”作为输入节点。许多thanksHi@lampep您如何预处理图像?我试着在ios上运行这个,同样的预测也在重复。我遵循了你的代码,生成了一个优化的图表,但是预测不正确。谢谢