我对 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
.
这个问题占用了我大量的时间。我会很感激任何提示。