当前位置: 首页 > 知识库问答 >
问题:

如何训练mobilenet-v1量化模型在TF Lite上的应用

凌征
2023-03-14

我从Tensorflow Hub重新训练了一个mobilenet-v1图像分类模型,并使用toco对其进行转换,以便使用Tensorflow Lite进行推断。

但是,当我使用tflite模型运行推断时,它需要与我使用--input_shape指定的输入大小不同的输入大小。

我如何在自己的数据上重新训练一个mobilenetv1量化模型?

下面是我尝试的步骤:

>

  • 从tensorflow for poets Codelab下载训练数据集
  • 使用上面的数据集在TF Hub上重新训练mobilenet v1量化模型

    验证模型是否已正确训练,输入/输出张量名称是否正确python label_image.py\\--graph=“${IMAGE_DIR}”/tf_files/retrained_mobileNet_v1_050_224.pb\--labels=“${IMAGE_DIR}”/tf_files/retrained_labels.txt\--input_layer=placeholder\--input_layer=final_result\--input_height=224--input_width=224\--image=“${IMAGE_DIR}”/tf_files/flower_photos/daisy/21652746_cc 379e0eea_m.jpg

    将模型转换为tflite

    toco\--input_file=“${IMAGE_DIR}”/tf_files/retrained_mobileNet_v1_050224.pb\--output_file=“${IMAGE_DIR}”/tf_files/mobileNet_v1_050224_quant.tflite\--input_format=tensorflow_graphdef\--output_format=tflite\--input_shape=1,224,224,3\--input_array=placeholder\--output_array=final_result\--input_type=quantized_uint8\--input_file=“${IMAGE_DIR}”put_data_type=float

    虽然我指定了--input_shape=1,224,224,3,但当我运行推断时,我得到了一个错误:

    java.lang.IllegalArgumentException:输入数据的DataType(1)与模型输入的DataType(3)不匹配。

  • 共有1个答案

    贺玉石
    2023-03-14

    --input_data_type=“”或--input_data_types=“”>>输入数组类型(如果图中尚未提供)。通常需要在将任意数组传递给--input_arrays时指定。

    在我的例子中,它是不需要的(我使用的是MobileNet_V2预训练模型)。

    您必须在命令中再添加几个参数(--mean_value-std_value-default_ranges_min和--default_ranges_max)来进行quatification。

    正如在gihub文档页面中提到的,以下命令对我有效

    bazel-bin/tensorflow/contrib/lite/toco/toco --input_file=~/tf_files/retrained_graph_mobileNet_v2_100_224.pb --output_file=~/tf_files/retrained_graph_mobileNet_q_v2_100_224.tflite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --inference_type=QUANTIZED_UINT8 --input_shape=1,224,224,3 --input_array=Placeholder --output_array=final_result --mean_value=128 --std_value=128 --default_ranges_min=0 --default_ranges_max=6
    
     类似资料:
    • 我已经使用Keras来微调MobileNet v1。现在我有,我需要将其转换为TensorFlow Lite,以便在Android应用程序中使用。 我使用TFLite转换脚本。我可以在没有量化的情况下进行转换,但我需要更高的性能,所以我需要进行量化。 如果我运行此脚本: 它失败了: F tensorflow/contrib/lite/toco/tooling\u util。cc:1634]Arra

    • 我是Tensorflow的初学者,请原谅我这个简单的问题,但我在哪里都找不到这个答案。我正致力于将mobilenet分段模型(http://download.tensorflow.org/models/deeplabv3_mnv2_pascal_trainval_2018_01_29.tar.gz)转换为Tensorflow-lite,用于移动推理,已经用了一个多星期了,但没有成功。我无法正确定义

    • 错误为: 谁能帮帮我吗?

    • 我使用以下代码生成量化的tflite模型 但是根据训练后量化: 生成的模型将完全量化,但为了方便起见,仍然采用浮点输入和输出。 要为Google Coral Edge TPU编译tflite模型,我还需要量化输入和输出。 在模型中,我看到第一个网络层将浮点输入转换为,最后一个网络层将转换为浮点输出。如何编辑tflite模型以除去第一个和最后一个浮动层? 我知道我可以在转换期间将输入和输出类型设置为

    • 在之前的描述中,我们通常把机器学习模型和训练算法当作黑箱子来处理。如果你实践过前几章的一些示例,你惊奇的发现你可以优化回归系统,改进数字图像的分类器,你甚至可以零基础搭建一个垃圾邮件的分类器,但是你却对它们内部的工作流程一无所知。事实上,许多场合你都不需要知道这些黑箱子的内部有什么,干了什么。 然而,如果你对其内部的工作流程有一定了解的话,当面对一个机器学习任务时候,这些理论可以帮助你快速的找到恰

    • 在之前的描述中,我们通常把机器学习模型和训练算法当作黑箱子来处理。如果你实践过前几章的一些示例,你惊奇的发现你可以优化回归系统,改进数字图像的分类器,你甚至可以零基础搭建一个垃圾邮件的分类器,但是你却对它们内部的工作流程一无所知。事实上,许多场合你都不需要知道这些黑箱子的内部有什么,干了什么。 然而,如果你对其内部的工作流程有一定了解的话,当面对一个机器学习任务时候,这些理论可以帮助你快速的找到恰