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 次操作,所以很遗憾,不行。
我在 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,编译器尚不支持相同操作的某些较新版本。也尝试关闭
[=30= 一起播放]MLIR
转换器,edgetpu_compiler
的发布版本不能很好地与MLIR
lmk 如果你发现了一些成功,也很乐意试一试! fyi:我转换了 yolov4,但架构师只允许在 edgetpu 上对 运行 进行 1/962 次操作,所以很遗憾,不行。