将.pb文件转换为.tflite的工作流程

概述

我知道这个话题已经被讨论过很多次了,但我很难理解这个工作流程,或者说,工作流程的各种变化。

例如,假设您正在Windows 10上安装TensorFlow。主要目标是训练一个自定义模型,将其转换为TensorFlow Lite,并将转换后的.tflite文件复制到运行TensorFlow Lite的树莓派上。

对我来说,困惑从转换过程开始。在跟随多个指南后,似乎TensorFlow通常是通过pip或Anaconda安装的。但随后我看到详细的教程,指出需要从源码构建才能将TensorFlow模型转换为TFLite模型。

为了让事情更有趣,我还看到了一些通过Python脚本转换的模型,如这里所示

问题

到目前为止,我已经看到了三种转换方法,可能是我没有完全理解全貌。以下是我看到的简化方法:

  1. 从源码构建,并使用TensorFlow Lite优化转换器(TOCO):

    bazel run --config=opt tensorflow/lite/toco:toco -- --input_file=$OUTPUT_DIR/tflite_graph.pb --output_file=$OUTPUT_DIR/detect.tflite ...

  2. 使用TensorFlow Lite转换器Python API:

    converter = tf.lite.TFLiteConverter.from_saved_model(export_dir)tflite_model = converter.convert()with tf.io.gfile.GFile('model.tflite', 'wb') as f:f.write(tflite_model)
  3. 使用tflite_convert命令行工具:

    tflite_convert --saved_model_dir=/tmp/mobilenet_saved_model --output_file=/tmp/mobilenet.tflite

我认为我理解的是选项2/3是相同的,意思是tflite_convert工具已安装,可以从命令行或通过Python脚本调用。但选择一个而不是另一个有什么特定的原因吗?

最后,让我感到困惑的是选项1。也许这是版本问题(1.x vs 2.x)?但TensorFlow Lite优化转换器(TOCO)和TensorFlow Lite转换器之间有什么区别?看起来为了使用TOCO,你必须从源码构建TensorFlow,所以有什么理由你会选择一个而不是另一个吗?


回答:

只要参数保持不变,不同的转换方法的输出没有区别。如果您想以自动化方式生成TFLite模型(例如定期运行的Python脚本),Python API会更好。

TensorFlow Lite优化转换器(TOCO)是TF到TFLite转换器的第一个版本。它最近被废弃,并被一个新转换器所取代,后者可以处理更多的操作/模型。所以我不推荐使用toco:toco通过bazel,而是使用tflite_convert,如这里所述。

除非您对转换器进行了一些更改并想测试它们,否则您永远不需要从源码构建转换器。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注