未找到android tensorflow ExtractImagePatches Op

未找到android tensorflow ExtractImagePatches Op,android,tensorflow,build,inference,darkflow,Android,Tensorflow,Build,Inference,Darkflow,我试图在yolo模型上使用tensorflow android运行推理。我可以成功地在默认的tiny yolo voc模型上运行,但当我将模型(及其相应的参数)更改为yolo模型时,我得到以下异常: java.lang.RuntimeException: Unable to resume activity {com.bendaf.tfdroidtest/com.bendaf.tfdroidtest.MainActivity}: java.lang.IllegalArgumentException

我试图在yolo模型上使用tensorflow android运行推理。我可以成功地在默认的tiny yolo voc模型上运行,但当我将模型(及其相应的参数)更改为yolo模型时,我得到以下异常:

java.lang.RuntimeException: Unable to resume activity {com.bendaf.tfdroidtest/com.bendaf.tfdroidtest.MainActivity}: java.lang.IllegalArgumentException: No OpKernel was registered to support Op 'ExtractImagePatches' with these attrs.  Registered devices: [CPU], Registered kernels:
  <no registered kernels>

   [[Node: ExtractImagePatches = ExtractImagePatches[T=DT_FLOAT, ksizes=[1, 2, 2, 1], padding="VALID", rates=[1, 1, 1, 1], strides=[1, 2, 2, 1]](47-leaky)]]
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3841)
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3882)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.ActivityThread.-wrap14(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1639)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6780)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)
 Caused by: java.lang.IllegalArgumentException: No OpKernel was registered to support Op 'ExtractImagePatches' with these attrs.  Registered devices: [CPU], Registered kernels:
  <no registered kernels>

   [[Node: ExtractImagePatches = ExtractImagePatches[T=DT_FLOAT, ksizes=[1, 2, 2, 1], padding="VALID", rates=[1, 1, 1, 1], strides=[1, 2, 2, 1]](47-leaky)]]
    at org.tensorflow.Session.run(Native Method)
    at org.tensorflow.Session.access$100(Session.java:48)
    at org.tensorflow.Session$Runner.runHelper(Session.java:295)
    at org.tensorflow.Session$Runner.run(Session.java:245)
    at org.tensorflow.contrib.android.TensorFlowInferenceInterface.run(TensorFlowInferenceInterface.java:143)
    at org.tensorflow.contrib.android.TensorFlowInferenceInterface.run(TensorFlowInferenceInterface.java:112)
    at com.bendaf.tfdroidtest.inference.InferenceRunner.runInference(InferenceRunner.java:44)
    at com.bendaf.tfdroidtest.MainActivity.runInferenceWithTiming(MainActivity.java:65)
    at com.bendaf.tfdroidtest.MainActivity.onResume(MainActivity.java:59)
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1277)
    at android.app.Activity.performResume(Activity.java:7094)
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3818)
      ... 10 more
异常在第二行中抛出。正如我前面提到的,这适用于微小的yolo voc模型,但不适用于yolo模型

我使用的是Ubuntu 16.04,android API级别24。如果您需要更多信息,请随时发表评论。
谢谢你抽出时间

将实现添加到构建中

如果您使用的是Bazel,则需要将找到的文件添加到 android_扩展_操作_组1或android_扩展_操作_组2 目标。您可能还需要在中包含它们所依赖的任何.cc文件 那里如果生成抱怨缺少头文件,请添加.h 这是android_扩展_操作系统目标所需要的

如果您使用的是makefile,请转到tensorflow/contrib/makefile/
tf_op_files.txt并在那里添加正确的实现文件。

如果您使用的是暗流,您可以尝试在.\Darkflow\net\ops covolution.pyreorg类中更改/交换方法名称(forward和_forward


请参阅参考资料:

您需要在ExtractImagePatches操作中编译为TensorFlow库的自定义版本。这里有一些文档:听起来不错,谢谢,但我不能再尝试了。我看到你已经在发布另一个问题的答案了。请解释这有何帮助。
mInferenceInterface.feed(INPUT_NODE, floatValues, 1, mInputSize, mInputSize, 3);
mInferenceInterface.run(new String[]{OUTPUT_NODE});

final float[] resu =
        new float[mGridSize * mGridSize * (mNumOfLabels + 5) * 5];
mInferenceInterface.fetch(OUTPUT_NODE, resu);