gpt4 book ai didi

未找到 android tensorflow ExtractImagePatches Op

转载 作者:行者123 更新时间:2023-11-30 00:26:41 24 4
gpt4 key购买 nike

我正在尝试在 darkflow 上使用 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

我假设关于 this发表评论, tensorflow 无法识别 ExtracImagePatches 运算符。但是如何让 tensorflow 在我的 android 设备上识别它?

到目前为止我做了什么:

  • 根据 this 从 yolo.cfg 使用 darkflow 生成 yolo.pb 文件. (使用相同的命令我生成了 tiny-yolo-voc.pb):

$ ./flow --model cfg/yolo.cfg --load bin/yolo.weights --savepb --verbalise

  • 根据this优化了yolo.pb文件可能的解决方案并将其放入我的 android 项目的 Assets 文件夹中:

$ bazel-bin/tensorflow/tools/graph_transforms/transform_graph --in_graph=../darkflow/darkflow/built_graph/yolo.pb --out_graph=../android/test/TfDroidTest/app/src/main/assets/optimized_yolo.pb --inputs='input' --outputs='output' --transforms='strip_unused_nodes(type=float, shape="1,2,2,1") fold_constants(ignore_errors=true) fold_batch_norms fold_old_batch_norms'

  • 根据 this 修改了我的 tensorflow/contrib/makefile/tf_op_files.txt 以包含行 tensorflow/core/kernels/extract_image_patches_op.cc .

  • 使用这些命令重建 android tensorflow:

$ cd tensorflow/contrib/makefile/ && ./build_all_android.sh && cd -

$ ./configure

$ bazel build -c opt //tensorflow/contrib/android:libtensorflow_inference.so --crosstool_top=//external:android/crosstool --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cpu=arm64-v8a

$ bazel build //tensorflow/contrib/android:android_tensorflow_inference_java

并将 .so 和 .jar 文件添加到我的 android 项目中。

  • 使用 native 支持重建和部署我的 android 项目。这是我的 InferenceRunner.java 的相关部分:

    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);

第二行抛出异常。正如我上面提到的,这适用于 tiny-yolo-voc 模型,但不适用于 yolo 模型。

我使用的是 Ubuntu 16.04,Android API 级别 24。如果您需要更多信息,请随时发表评论。感谢您的宝贵时间!

最佳答案

将实现添加到构建中

如果您使用的是 Bazel,您需要将找到的文件添加到android_extended_ops_group1 或 android_extended_ops_group2目标。您可能还需要包含它们所依赖的任何 .cc 文件那里。如果构建提示缺少头文件,请添加 .handroid_extended_ops 目标所需的。

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

关于未找到 android tensorflow ExtractImagePatches Op,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45237703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com