减小TFLite模型的大小?

3
我正在按照以下指南制作多标签图像分类模型(它使用Inception作为基础模型):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. 是否有任何方法可以在仍能够转换为移动友好型模型的情况下减小大小?如果没有,我猜我需要将mobilenet转换为适用于多标签分类的模型。
2个回答

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缺少最小/最大数据,这对于量化是必要的。 要么针对非量化输出格式,或更改输入图以包含min/max信息,或者如果您不关心结果的准确性,请传递--default_ranges_min=和--default_ranges_max=。”
我已经修改了tf-for-poets android代码,使我能够使用量化的tflite图(基本上是这个的反向 - https://github.com/tensorflow/tensorflow/issues/14719),并且我似乎得到的结果与原始的未量化图一样好。

回答你自己的问题,图形文件的最终大小是多少? - Gal_M
1
量化后的大小为21.9 MB。原始大小为87.2 MB。 - Christopher Paterson
@ChristopherPaterson,你从上面的教程生成的tflite在Android apk中能够正常工作吗? - Jennings
是的,我在诗人TF演示项目中进行了一些更改后,成功让它进行预测(与此帖子相反)。预测准确率基本与较大模型大小相同。 - Christopher Paterson

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接