0

我使用以下示例创建 tensorflow 模型:http ://cv-tricks.com/tensorflow-tutorial/training-convolutional-neural-network-for-image-classification/ 您可以从此处下载代码:https:// github.com/sankit1/cv-tricks.com/tree/master/Tensorflow-tutorials/tutorial-2-image-classifier我还使用了http://cv-tricks.com/how 中的“2. Freezing the graph”部分-to/freeze-tensorflow-models/ 创建我的模型的 *.pb 文件。我尝试使用 toco 命令行工具转换 *.pb 文件,如https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite上的“将 TensorFlow SavedModel 转换为 TensorFlow Lite”中所述/toco/g3doc/cmdline_examples.md#savedmodel 并得到以下错误:

(venv) user@user-desktop:~/PycharmProjects/tensorflow_tutorial/tensorflow$ bazel run -c opt tensorflow/contrib/lite/toco:toco -- --savedmodel_directory=/home/user/PycharmProjects/tensorflow_tutorial/tutorial-2-图像分类器 --output_file=/home/user/PycharmProjects/tensorflow_tutorial/tutorial-2-image-classifier/dogs-cats-model.tflite 警告:/home/user/.cache/bazel/_bazel_user/e21a56d90e65395c94952f8aa3d0c4bc/external/protobuf_archive /WORKSPACE:1:/home/user/.cache/bazel/_bazel_user/e21a56d90e65395c94952f8aa3d0c4bc/external/protobuf_archive/WORKSPACE (@com_google_protobuf) 中的工作区名称与存储库定义 (@protobuf_archive) 中给出的名称不匹配;这将在未来版本中导致构建错误信息:已分析目标 //tensorflow/contrib/lite/toco:toco (0 个包已加载)。信息:找到 1 个目标... 警告:缓存/bazel/_bazel_user/e21a56d90e65395c94952f8aa3d0c4bc/execroot/org_tensorflow/bazel-out/k8-opt/bin/tensorflow/contrib/lite/toco/toco 信息:经过时间:0.271s,关键路径:0.00s 信息:0 个进程。信息:构建成功完成,总共 1 个操作信息:运行命令行:/home/user/.cache/bazel/_bazel_user/e21a56d90e65395c94952f8aa3d0c4bc/execroot/org_tensorflow/bazel-out/k8-opt/bin/tensorflow/contrib/lite/toco /toco '--savedmodel_directory=/home/user/PycharmProjects/tensorflow_tutorial/tutorial-2-image-classifier' '--output_file=/home/user/PycharmProjects/tensorflow_tutorial/tutorial-2-image-classifier/dogs-cats- model.tflite' 2018-05-07 01:33:13.776954: F tensorflow/contrib/lite/toco/toco_saved_model.cc:34]检查失败:tensorflow::MaybeSavedModelDirectory(model_path) 模型未以支持的 SavedModel 格式保存。

引发此错误的函数是 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/toco/toco_saved_model.cc 上的 MaybeSavedModelDirectory 我 在https://github.com/ /github.com/tensorflow/tensorflow/blob/master/tensorflow/cc/saved_model/loader.cc 实际上它在模型目录中寻找 *.pb 或 *.pbtxt 文件,我在请求的位置得到了这个文件,所以为什么我得到这个错误?

机器详细信息:操作系统平台和分发 - ubuntu x64,TensorFlow 安装自 - pip,TensorFlow 版本 - cpu 版本 1.8.0,Bazel 版本 - 0.13.0,CUDA/cuDNN 版本 - 无 cuda,GPU 模型和内存 - 无 gpu,Exact命令重现 - 不需要,python 版本 - 3.5.2

4

2 回答 2

0

不要使用 toco,而是使用 Colab 将您的 .pb 转换为 .lite,如下所述:

https://stackoverflow.com/a/58583419/11517841

解释为什么这会更简单。

于 2019-10-27T21:53:56.480 回答
0

TensorFlow 1.8 支持两种格式:

  1. 已保存模型
  2. 通过 freeze_graph.py 生成的冻结GraphDefs

在您的情况下,如果您已经使用了 freeze_graph.py,那么您应该遵循引用 GraphDefs 的文档。TensorFlow Lite 的最新文档可在此处获得。

从文档(TensorFlow 1.9)复制:

以下示例将基本 TensorFlow GraphDef(由 冻结freeze_graph.py)转换为 TensorFlow Lite FlatBuffer 以执行浮点推理。冻结图包含存储在检查点文件中的变量作为常量操作。

curl https://storage.googleapis.com/download.tensorflow.org/models/mobilenet_v1_0.50_128_frozen.tgz \
  | tar xzv -C /tmp
tflite_convert \
  --output_file=/tmp/foo.tflite \
  --graph_def_file=/tmp/mobilenet_v1_0.50_128/frozen_graph.pb \
  --input_arrays=input \
  --output_arrays=MobilenetV1/Predictions/Reshape_1

的值input_shapes会尽可能自动确定。

于 2018-07-27T20:31:05.000 回答