Tensorflow Lite 采坑记

Tensorflow Lite 采坑记

  1. 操作符支持有限

    目前Tensorflow Lite中支持的Operator十分有限,导出模型中如果存在不支持的Operator将导致模型无法转换。
    解决方案

    • 自定义Operator (难度高)
    • 在项目中自己实现相应Operator的算法逻辑 (难度中等)
  2. 模型输入尺度固定

    每一个转换的模型都有固定的输入尺寸,而我们的项目中存在多种尺度的输入,如果每一种尺度对应一个的模型,那么将会增加模型的数量和大小,同时也增加了使用难度。
    解决方案:

    1. 通过加载一个model,可以生成N个Interpreter(模型代理对象),同时Interpreter可以动态ResizeInputTensor,理论上也可以支持N种尺度的输出。
  3. 模型大小优化
    移动端对于Model的大小有很高的要求,因此模型优化十分重要。Tensorflow Lite 的模型优化主要依赖于Tensorflow model 的优化。
    主要有两种方案:

    1. 在模型优化的时候使用--transforms='quantize_weights',优化后的模型为原始模型的70%左右,压缩率极低,同时会导致模型精度的损失,一般不推荐采用。
    2. 在模型优化的时候使用参数--transforms='round_weights(num_steps=256)',优化后的模型和原始模型大小一致,但是在zip 或者 移动端打包的时候压缩率达到70%以上,推荐使用。
  4. Tensorflow Lite 默认支持 NHWC,特别要注意模型输入的尺度。
    // input_dims = {1, image_height,image_width,image_channel}
    N--- 常量1
    H--- image height
    W--- image width
    C--- image channel

  5. tflite::Interpreter的内部属性依赖于tflite::FlatBufferModel。
    Tensorflow Lite 使用过程中需要注意tflite::FlatBufferModel对象和 tflite::Interpreter对象 生命周期的一致性。

你可能感兴趣的:(Tensorflow Lite 采坑记)