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

从同一检查点提取的再培训Tflite/Pb模型给出不同的结果

龙弘济
2023-03-14

在我使用自己的图像数据集使用object_detection\model_main重新训练了预先训练好的ssd mobilenet v1模型之后。py脚本,我导出了两个.pb冻结图(使用export_inference_graph.py脚本)

python models\research\object_detection\export_inference_graph.py 
--input_type image_tensor 
--input_shape=1,300,300,3 
--pipeline_config_path ssd_mobilenet_v1_test.config 
--trained_checkpoint_prefix training/model.ckpt 
--output_directory export\freeze\

和 .tflite 图形(带有export_tflite_ssd_graph.py脚本和tflite_convert)。

python models\research\object_detection\export_tflite_ssd_graph.py 
--input_type image_tensor 
--pipeline_config_path ssd_mobilenet_v1_test.config 
--trained_checkpoint_prefix training/model.ckpt 
--output_directory export\tflite\ 
--max_detections 16 
--add_postprocessing_op=true

tflite_convert 
--output_file=export\tflite\model.tflite 
--graph_def_file=export\tflite\tflite_graph.pb 
--input_shapes=1,300,300,3 
--input_arrays=normalized_input_image_tensor 
--output_arrays=TFLite_Detection_PostProcess,TFLite_Detection_PostProcess:1,TFLite_Detection_PostProcess:2,TFLite_Detection_PostProcess:3 
--inference_type=QUANTIZED_UINT8 
--mean_values=128 
--std_dev_values=128 
--default_ranges_min=0 
--default_ranges_max=6 
--allow_custom_ops

Pb图似乎工作得很好,但tflite一错误检测到了android上的所有内容,所以无论我传递给它的图像是什么,甚至是填充黑色的图像,我都能从16种可能的检测中得到16种(我在android设备上测试它。它与预训练的模型很好地配合)。

更改转换选项,如禁用/启用量化,图像std/means并没有改变任何东西。我还将我的tflite图与示例移动网图进行了比较,它们看起来非常相似。知道什么会导致这个问题吗?

(windows 10/cuda 9.0/cud nn 7.0/TF-每夜-gpu/models-master)

共有1个答案

杨安歌
2023-03-14

tflite模型的输出张量似乎返回一些极值(例如:5e35或-3e34)。由于这些分数值中的一些大于1,所以它算作检测。

我的解决方案,将所有大于限制的值(我做了1e5)替换为0。(Python更快。)

tensor[tensor > 1e5] = 0

很奇怪,这个例子检测器没有出现。tflite或导出的冻结推理图。导出tflite模型必须有正确的方法。

 类似资料:
  • 我正在使用ML Vision api从FaceNet模型创建嵌入,然后比较两个嵌入之间的余弦距离。Android版本和Python的输出有很大不同。Python版本的性能比android版本好得多。可能是什么问题?我在两者中都使用FaceNet模型。 我正在使用ML工具包进行推理 https://firebase.google.com/docs/ml-kit/android/use-custom-

  • 我正在培训一个Keras模型,我想在量化的8位环境(微控制器)中使用TFLite部署它。为了提高量化性能,我进行量化感知训练。然后,我使用验证集作为代表性数据集创建量化的TFLite模型。使用验证集评估性能,如图所示: 不同条件下20次运行的不同批次的错误率 如果我不是简单地从QA训练模型(图中红色)生成TFLite模型(图中青色),而是将权重从QA训练模型复制到原始模型,然后生成TFLite模型

  • 问题内容: 当我运行此代码时: 我在Eclipse的JUnit运行程序中得到以下结果: 这导致从命令行Maven: 如您所见,时间有所不同。 (同一台计算机,相同的Java版本,可能相隔30秒)。为什么? [编辑] 时区也不同。从Maven 启动和从Eclipse 启动时,为什么要使用Java ? 或换一种说法:如何强制Java使用两者? 问题答案: 要指定默认时区,您可以设置系统属性。您可以通过

  • 我在Cplex中使用Python API来解决一个线性编程问题。使用Cplex时,我的结果如下: 但随后我将LP prolem保存为LP文件,并再次使用Cplex进行求解,结果与第一个略有不同: 下面是我的功能:

  • Sagemaker是培训您的模型的绝佳工具,我们通过使用AWS spot实例节省了一些资金。然而,培训工作有时会在中间停止。我们正在使用一些机制在重新启动后从最新的检查点继续。另请参见文档。 不过,您如何有效地测试这种机制?你能自己触发吗?否则,您必须等待spot实例实际重新启动。 另外,您是否需要为此使用链接的参数或?例如,估计器文档似乎为检查点建议了一些。

  • 我想在Tensorflow中将整数量化的tflite模型转换为冻结图(.pb)。我通读并尝试了许多有关StackOverflow的解决方案,但没有一个有效。具体来说,toco不起作用(输出格式不能是TENSORFLOW\u GRAPHDEF)。 我的最终目标是通过tf2onnx获得量化的ONNX模型,但tf2onnx不支持tflite作为输入(只支持保存的_模型、检查点和图形_定义)。但是,在使用