toco_from_protos: 命令未找到。

3
我正在使用以下链接将我的TensorFlow模型转换为tf lite模型:https://www.tensorflow.org/lite/convert/python_api。在这里,我正在按照“从文件导出GraphDef”的指令进行操作,但是我遇到了以下错误。
    "TOCO failed. See console for info.\n%s\n%s\n" % (stdout, stderr))
     tensorflow.lite.python.convert.ConverterError: TOCO failed. See console for info.
    /bin/sh: toco_from_protos: command not found

我已经安装了最新版本的tensorflow v1.13.1。


你解决了这个问题吗? - lelloman
不是真的,问题在于设置路径,它无法在我的机器上找到路径,尝试设置路径但没有成功,从另一台机器上进行了转换。 - chin87
你能否友善地给我一个提示 如何进行转换?这个问题让我抓狂 :( - lelloman
@lelloman 在我的一个同事的机器上进行了转换,不知何故他的tensorflow处于工作状态,你可以使用另一台机器或找到一个没有从旧版本更新的人。 - chin87
1
谢谢,最终我通过使用 Docker 镜像解决了问题,现在我尝试过之后,我觉得我再也不会在系统上安装 TensorFlow 了。 - lelloman
3个回答

4

问题

Tensorflow调用特定的二进制文件将.pb文件(由protobuf存储)转换为tflite模型。该二进制文件是“ toco_from_protos”,错误消息表明shell解释器(在此情况下为“ / bin / sh”)无法找到该二进制文件(“ toco_from_proto”)。

您需要将路径包含到' toco_from_proto'文件中以便于PATH环境变量可访问它。

如何实现

首先,检查文件是否存在。例如,您可以使用“ locate”命令:

$ locate toco_from_proto
/home/user/anaconda3/envs/tensorflow/bin/toco_from_protos
/home/user/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/lite/toco/python/toco_from_protos.py
/home/user/anaconda3/envs/tensorflow/lib/python3.6/site-packages/tensorflow/lite/toco/python/__pycache__/toco_from_protos.cpython-36.pyc

在我的情况下,我使用Anaconda来管理环境。因此,在环境容器中(本例中为'tensorflow'),二进制文件位于二进制路径('bin'文件夹)中。

为了确保二进制文件的正确执行,需要将'toco_from_protos'文件的路径包含在PATH环境变量中。如果您使用的是基于Linux的系统,则可以执行以下操作:

$ export PATH=$PATH:/home/user/anaconda3/envs/tensorflow/bin

如果您正在使用IDE程序(例如Pycharm),您可以使用与导出PATH变量相同的控制台调用IDE运行脚本。例如:
$ export PATH=$PATH:/home/user/anaconda3/envs/tensorflow/bin
$ /opt/pycharm-community-2018.1.4/bin/pycharm.sh

新PATH值的更改仅在该控制台窗口中保留,因此如果您想使更改持久化,请将导出语句包含在“〜/ .bashrc”文件中。

1
嗨,goe,即使将virtualenv bin添加到$PATH变量中,Tensorflow(2.0)仍然无法找到toco_from_protos,你知道发生了什么吗? - Igor Hoogerwoord
我尚未测试Tensorflow 2.0,因此对其在路径方面的工作方式不确定,抱歉。请检查您所指向的toco_from_protos二进制文件编译是否与您正在使用的Tensorflow库兼容。 - goe

2
我曾遇到相同的问题,通过使用官方Docker镜像解决了该问题。主机使用新鲜的Ubuntu 18.04系统。原始答案翻译成“最初的回答”。
docker run --runtime=nvidia -v /path/to/my/project:/mapped/docker/path -it tensorflow/tensorflow:latest-gpu bash

然后在Docker中运行转换脚本:

model = load_model() # keras model
output_names = [node.op.name for node in model.outputs]
input_names = [node.op.name for node in model.inputs]
with tf.keras.backend.get_session() as sess:
    sess.run(tf.global_variables_initializer())
    frozen_def = tf.graph_util.convert_variables_to_constants(sess, sess.graph_def, output_names)
    converter = tf.lite.TFLiteConverter.from_session(sess, model.inputs, model.outputs)
    tflite_model = converter.convert()
    open("converted_model.tflite", "wb").write(tflite_model)

目前写作时,tensorflow/tensorflow:latest-gpu的版本是1.13.1


0
我在tensorflow 1.14中也遇到了相同的错误日志。 对我而言,问题不在转换器中,而是与路径未能解析有关。
在运行Python脚本之前,对我有用的是运行以下命令:
export PATH=$PATH:~/.local/bin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接