【问题标题】:Please post working tflite_convert command line examples请发布工作 tflite_convert 命令行示例
【发布时间】:2020-12-26 08:09:37
【问题描述】:

我正在将几个模型从 Tensorflowsj Keras 和 Tensorflow 转换为 TensorflowLite,然后再转换为 TensorflowMicro c-header 文件。

我可以进行主要转换,但几乎没有找到关于使用 tflite_convert 进行量化的信息。

想知道人们是否可以发布有效的命令行示例。据我所知,我们鼓励使用 python 进行转换,但我更愿意留在命令行上。

我在这里总结了我正在做的事情https://github.com/hpssjellis/my-examples-for-the-arduino-portentaH7/tree/master/m09-Tensoflow/tfjs-convert-to-arduino-header

这是我目前所拥有的,它可以将保存的 tensorfowjs model.json 转换为 .pb 文件,该文件转换为 .tflite,然后转换为 c-header 文件以在 Arduino 风格的微控制器上工作。

tensorflowjs_converter --input_format=tfjs_layers_model --output_format=keras_saved_model ./model.json ./
tflite_convert --keras_model_file ./ --output_file ./model.tflite
xxd -i model.tflite model.h

但是当我尝试任何量化时,我的文件并没有变小。

Tensorflow 的 tflit_convert 命令行帮助不够具体https://www.tensorflow.org/lite/convert/cmdline

以下是我发现的一些使用 tflite_convert 或 tensorflowjs_convert 的示例,其中一些似乎适用于其他人的模型,但似乎不适用于我自己的模型:


tflite_convert --output_file=/home/wang/Downloads/deeplabv3_mnv2_pascal_train_aug/optimized_graph.tflite --graph_def_file=/home/wang/Downloads/deeplabv3_mnv2_pascal_train_aug/frozen_inference_graph.pb --inference_type=FLOAT --inference_input_type=QUANTIZED_UINT8 --input_arrays=ImageTensor --input_shapes=1,513,513,3 --output_arrays=SemanticPredictions –allow_custom_ops



tflite_convert --graph_def_file=<your_frozen_graph> \
--output_file=<your_chosen_output_location> \
--input_format=TENSORFLOW_GRAPHDEF \
--output_format=TFLITE \
--inference_type=QUANTIZED_UINT8 \
--output_arrays=<your_output_arrays> \
--input_arrays=<your_input_arrays> \
--mean_values=<mean of input training data> \
--std_dev_values=<standard deviation of input training data>


tflite_convert --graph_def_file=/tmp/frozen_cifarnet.pb \
--output_file=/tmp/quantized_cifarnet.tflite \
--input_format=TENSORFLOW_GRAPHDEF \
--output_format=TFLITE \
--inference_type=QUANTIZED_UINT8 \
--output_arrays=CifarNet/Predictions/Softmax \
--input_arrays=input \
--mean_values 121 \
--std_dev_values 64

tflite_convert 
        --graph_def_file=frozen_inference_graph.pb 
        --output_file=new_graph.tflite 
        --input_format=TENSORFLOW_GRAPHDEF 
        --output_format=TFLITE 
        --input_shape=1,600,600,3 
        --input_array=image_tensor 
        --output_array=detection_boxes,detection_scores,detection_classes,num_detections 
        --inference_type=QUANTIZED_UINT8 
        --inference_input_type=QUANTIZED_UINT8
        --mean_values=128 \
        --std_dev_values=127


tflite_convert --graph_def_file=~YOUR PATH~/yolov3-tiny.pb --output_file=~YOUR PATH~/yolov3-tiny.tflite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --input_shape=1,416,416,3 --input_array=~YOUR INPUT NAME~ --output_array=~YOUR OUTPUT NAME~ --inference_type=FLOAT --input_data_type=FLOAT


tflite_convert \  --graph_def_file=built_graph/yolov2-tiny.pb \  --output_file=built_graph/yolov2_graph.lite \  --input_format=TENSORFLOW_GRAPHDEF \  --output_format=TFLITE \  --input_shape=1,416,416,3 \  --input_array=input \  --output_array=output \  --inference_type=FLOAT \  --input_data_type=FLOAT


tflite_convert --graph_def_file=frozen_inference_graph.pb --output_file=optimized_graph.lite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --input_shape=1,1024,1024,3 --input_array=image_tensor --output_array=Softmax


tensorflowjs_converter --quantize_float16 --input_format=tf_hub 'https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/classification/1' ./


tensorflowjs_converter --control_flow_v2=True --input_format=tf_hub --quantize_uint8=* --strip_debug_ops=True --weight_shard_size_bytes=4194304 --output_node_names='Postprocessor/ExpandDims_1,Postprocessor/Slice' --signature_name 'serving_default' https://tfhub.dev/tensorflow/ssd_mobilenet_v2/2 test

如果有人有量化的工作示例,他们可以特别解释什么是重要的,什么是可选的,那将非常有帮助。我使用 netron 来可视化模型,因此我应该能够看到浮点输入何时更改为 int8。稍微解释一下会有所帮助。

最近试了这组命令,编译后量化文件比未量化文件大


tensorflowjs_converter --input_format=tfjs_layers_model --output_format=keras_saved_model ./model.json ./saved_model
tflite_convert --keras_model_file ./saved_model --output_file ./model.tflite
xxd -i model.tflite model.h


tflite_convert --saved_model_dir=./saved_model \
--output_file=./model_int8.tflite \
--input_format=TENSORFLOW_GRAPHDEF \
--output_format=TFLITE \
--inference_type=QUANTIZED_UINT8 \
--output_arrays=1,1 \
--input_arrays=1,2 \
--mean_value=128 \
--std_dev_value=127

xxd -i model_int8.tflite model_int8.h

【问题讨论】:

    标签: tensorflow2.0 tensorflow-lite tensorflow.js


    【解决方案1】:

    python 方式也很简单。你可以在这里找到官方的例子: https://www.tensorflow.org/lite/performance/post_training_quantization 有一个完整的部分。我认为您没有训练模型,因此您正在寻找训练后量化。

    【讨论】:

    • 可以在这里保存一个测试model.json和bin文件,用Tensorflowjs创建hpssjellis.github.io/my-examples-for-the-arduino-portentaH7/…我同意python方式很简单,但我希望能够使用命令行方式如果完全有可能。命令行路由不起作用是有原因的,我想知道原因。谢谢你的链接。
    • 所以我终于有一个量化命令在工作,但是它正在使用``` tensorflowjs_converter --input_format=tfjs_layers_model --output_format=keras_saved_model ./model.json ./saved_model tensorflowjs_converter --quantize_uint8 --output_node_names= logits/BiasAdd --saved_model_tags=serve ./saved_model ./web_model ``` tensorflowjs_converter 转换器。这绝对适用于我的模型。诀窍是在任何名称中包含 --output_node_names=。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多