Tensorflow EDGE#TPU编译器错误:没有';无法找到内置操作码的op';调整最近邻的大小';版本';3';定制蛋黄酱
我已经对我的模型进行了深色训练,并使用它将我的深色权重转换为h5 为了量化,我用泄漏的relu替换了relu。 然后,我的模型通过使用tf nightly成功地转换为tflite模型 但是,我无法通过调整最近邻错误将模型解析为edgetpu。 据我所知,在中支持调整最近邻居的大小 那么为什么会发生这种错误呢? 有办法解决吗 以下是我的tflite转换代码:Tensorflow EDGE#TPU编译器错误:没有';无法找到内置操作码的op';调整最近邻的大小';版本';3';定制蛋黄酱,tensorflow,tensorflow-lite,tpu,google-coral,Tensorflow,Tensorflow Lite,Tpu,Google Coral,我已经对我的模型进行了深色训练,并使用它将我的深色权重转换为h5 为了量化,我用泄漏的relu替换了relu。 然后,我的模型通过使用tf nightly成功地转换为tflite模型 但是,我无法通过调整最近邻错误将模型解析为edgetpu。 据我所知,在中支持调整最近邻居的大小 那么为什么会发生这种错误呢? 有办法解决吗 以下是我的tflite转换代码: import tensorflow as tf import numpy as np import sys def representat
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)
将tensorflow导入为tf
将numpy作为np导入
导入系统
def代表_数据集_gen():
对于范围内的(250):
产量[np.random.uniform(0.0,1.0,size=(1416416,3)).aType(np.float32)]
如果len(sys.argv)!=三:
打印(f“用法:{sys.argv[0]}”)
系统出口(1)
模型_fn=sys.argv[1]
out_fn=sys.argv[2]
#转换并应用全整数量化
converter=tf.compat.v1.lite.TFLiteConverter.from\u keras\u model\u文件(model\u fn)
converter.optimizations=[tf.lite.Optimize.DEFAULT]
converter.target\u spec.supported\u ops=[tf.lite.OpsSet.TFLITE\u BUILTINS\u INT8,
tf.lite.optset.SELECT\u tf\u OPS]
#converter.target\u spec.supported\u ops=[tf.lite.optset.TFLITE\u BUILTINS\u INT8]
#将网络的输入和输出设置为8位无符号整数
converter.inference\u input\u type=tf.uint8
converter.inference\u输出类型=tf.uint8
converter.representative\u dataset=representative\u dataset\u gen
tflite_model=converter.convert()
打开(sys.argv[2],“wb”).write(tflite_模型)
我来自coral团队,我正计划亲自研究yolov3型号,只是还没有足够的带宽:) 以下是我收集到的一些提示:
- 用户在将
更改为leaky_relu
后能够成功编译模型,尽管准确性可能会降低。我知道你提到过这一点,但我想把它放在列表上,供其他用户参考relu
- 其次,我怀疑您每晚都在使用
或某种更新的tf版本进行转换?如果是这样,我建议降级到tf2.2,编译器还不支持相同ops的某些较新版本tf
- 尝试关闭
converter。另外,发布的MLIR
edgetpu\u编译器版本与
MLIR
仅供参考:我已转换了yolov4,但架构师只允许在edgetpu上运行1/962操作,因此这是一个不好的选择。我已更改为tf2.2,并使用了TOCO转换器。现在我无法转换模型,现在的问题是:
:0:错误:转换时失败:“main”:flex运行时支持的操作(通过设置-emit select tf Ops标志启用):ResizeNearestNeighbor,ResizeNearestNeighbor.
我也曾在tf上尝试过通过设置实验性的u new_uuuconverter=False关闭MLIR转换器,但结果是一样的。通过查看netron,我看到模型已被量化,并已转换为Toco。嘿,对不起,我认为您还需要使用tf2.2进行培训:/请查看以下答案:为了澄清,我的建议是,模型的创建和培训也应在tf2.2中完成,不仅仅是tflite转换。我认为量化感知训练是目前的解决方案:D