减少TFLite模型尺寸?

时间:2018-07-24 15:32:24

标签: python tensorflow tensorflow-lite

我目前正在按照本指南制作多标签图像分类模型(它使用初始模型作为基本模型):https://towardsdatascience.com/multi-label-image-classification-with-inception-net-cbb2ee538e30

.pb转换为.tflite后,模型仅缩小了约0.3mb。

这是我的转换代码:

toco \
  --graph_def_file=optimized_graph.pb \
  --output_file=output/optimized_graph.tflite \
  --output_format=TFLITE \
  --input_shape=1,299,299,3 \
  --input_array=Mul \
  --output_array=final_result \
  --inference_type=FLOAT \
  --inference_input_type=FLOAT

所以,我有几个问题:

  1. 将模型转换为.tflite后,我希望尺寸减小多少?
  2. 有什么方法可以减小尺寸,同时仍然能够转换为适合移动设备的模型?如果没有,我想我需要转换移动网络以使用多标签分类。

2 个答案:

答案 0 :(得分:1)

好的,所以我找到了一种方法。我使用优化的图(未量化)并运行以下命令:

tflite_convert --graph_def_file=optimized_graph.pb \
  --output_file=output/optimized_graph_quantized.tflite \
  --output_format=TFLITE \
  --input_shape=1,299,299,3 \
  --input_array=Mul \
  --output_array=final_result \
  --inference_type=QUANTIZED_UINT8 \
  --std_dev_values=128 --mean_values=128 \
  --default_ranges_min=-6 --default_ranges_max=6 \
  --quantize_weights=true

我对上述内容的主要担心是,当我未指定最小/最大范围时,我收到以下消息:“数组conv是向Conv运算符提供的输入,它生成输出数组conv_1,但缺少最小值/最大值数据,这是量化所必需的。要么以非量化的输出格式为目标,要么更改输入图以包含最小/最大信息;或者,如果您不关心结果的准确性,则传递--default_ranges_min =和--default_ranges_max = 。”

我更改了tf-for-poets android代码,以允许我使用量化的tflite图(基本上是相反的https://github.com/tensorflow/tensorflow/issues/14719),而且我似乎得到的结果与原始的未量化图。

答案 1 :(得分:0)

我使用@ChristopherPaterson解决方案解决了相同的问题,但是删除 --quantize_weights=true为我工作。该命令是:

tflite_convert --graph_def_file=optimized_graph.pb \
  --output_file=output/optimized_graph_quantized.tflite \
  --output_format=TFLITE \
  --input_shape=1,299,299,3 \
  --input_array=Mul \
  --output_array=final_result \
  --inference_type=QUANTIZED_UINT8 \
  --std_dev_values=128 --mean_values=128 \
  --default_ranges_min=-6 --default_ranges_max=6