2

我对 Tensorflow 训练后量化过程感到困惑。官网参考Tensorflow Lite Quantization。不幸的是,这在我的情况下不起作用,也就是说,TFLiteConverter我的 Mask RCNN 模型返回错误:

Some of the operators in the model are not supported by the standard TensorFlow Lite runtime and are not recognized by TensorFlow. If you have a custom implementation for them you can disable this error with --allow_custom_ops, or by setting allow_custom_ops=True when calling tf.lite.TFLiteConverter(). Here is a list of builtin operators you are using: <...>. Here is a list of operators for which you will need custom implementations: DecodeJpeg, StatelessWhile.

基本上,我已经尝试了所有可用的选项,TFLiteConverter包括实验选项。我对这些错误并不感到惊讶,因为不支持移动设备的 decodejpeg 可能是有意义的,但是,我希望我的模型由 Tensorflow Serving 提供服务,因此我不知道为什么 Tensorflow Lite 是官方选择为了。我也尝试过似乎已弃用的Graph Transform Tool ,并发现了 2 个问题。首先,不可能用 bfloat16 或 float16 量化,只有 int8。其次,量化模型因错误而中断:

Broadcast between [1,20,1,20,1,256] and [1,1,2,1,2,1] is not supported yet

在常规模型中什么不是问题。

此外,值得一提的是,我的模型最初是使用 Tensorflow 1.x 构建的,然后通过tensorflow.compat.v1.

这个问题占用了我大量的时间。我会很感激任何提示。

4

1 回答 1

0

您可以将模型转换为 Tensorflow Lite 并使用 TF 中不受支持的操作(如 DecodeJpeg),这称为 SELECT TF OPS,请参阅此处的指南,了解如何在转换期间启用它。

于 2020-07-22T03:07:41.583 回答