Tensorflow Lite 采坑记

作者: 我是吸血鬼 | 来源:发表于2018-03-07 10:57 被阅读187次

    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 采坑记

        本文链接:https://www.haomeiwen.com/subject/btqjfftx.html