EDGE_TPU COMPILER ERROR: Didn't find op for builtin opcode 'RESIZE_NEAREST_NEIGHBOR' version '3' for custom YOLO

EDGE_TPU COMPILER ERROR: Didn't find op for builtin opcode 'RESIZE_NEAREST_NEIGHBOR' version '3' for custom YOLO

我在 Darknet 上重新训练了我的模型并使用 https://github.com/qqwweee/keras-yolo3 将我的 darknet 权重转换为 h5。

出于量化目的,我已将 relu 替换为 leaky relu。 然后,我的模型已通过使用 tf-nightly 成功转换为 tflite 模型。

但是,我无法通过调整最近邻错误的大小将模型解析为 edgetpu。 据我了解,https://coral.ai/docs/edgetpu/models-intro/#supported-operations 支持调整最近邻的大小 那么为什么会出现这个错误呢? 有什么办法可以解决吗?

这是我的 tflite 转换代码:

import tensorflow as tf
import numpy as np
import sys

def representative_dataset_gen():
    for _ in range(250):
        yield [np.random.uniform(0.0, 1.0, size=(1, 416, 416, 3)).astype(np.float32)]

if len(sys.argv) != 3:
    print(f"Usage: {sys.argv[0]} <keras-model> <output-filename>")
    sys.exit(1)

model_fn = sys.argv[1]
out_fn = sys.argv[2]

# Convert and apply full integer quantization
converter = tf.compat.v1.lite.TFLiteConverter.from_keras_model_file(model_fn)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8,
                                       tf.lite.OpsSet.SELECT_TF_OPS]
#converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
# Set inputs and outputs of network to 8-bit unsigned integer
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
converter.representative_dataset = representative_dataset_gen
tflite_model = converter.convert()

open(sys.argv[2], "wb").write(tflite_model)

ERROR

我来自珊瑚团队,我正计划自己研究 yolov3 模型,只是还没有足够的带宽来这样做:) 以下是我收集的一些提示:

  • 用户在将 leaky_relu 更改为 relu 后已经能够成功编译模型,尽管准确性可能会降低。我知道你提到过这个,但我想把它放在列表中供其他用户参考。

  • 其次,我怀疑您正在使用 tf-nightly 或更新的 tf 版本进行转换?如果是这样,我建议降级到 tf2.2,编译器尚不支持相同操作的某些较新版本。

  • 也尝试关闭 MLIR 转换器,edgetpu_compiler 的发布版本不能很好地与 MLIR

    [=30= 一起播放]

lmk 如果你发现了一些成功,也很乐意试一试! fyi:我转换了 yolov4,但架构师只允许在 edgetpu 上对 运行 进行 1/962 次操作,所以很遗憾,不行。