Windows 上的 Tensorflow 对象检测 API - 错误“ModuleNotFoundError: No module named 'utils'”

Posted

技术标签:

【中文标题】Windows 上的 Tensorflow 对象检测 API - 错误“ModuleNotFoundError: No module named \'utils\'”【英文标题】:Tensorflow Object Detection API on Windows - error "ModuleNotFoundError: No module named 'utils'"Windows 上的 Tensorflow 对象检测 API - 错误“ModuleNotFoundError: No module named 'utils'” 【发布时间】:2018-06-23 04:40:05 【问题描述】:

我正在尝试获取 TensorFlow 对象检测 API

https://github.com/tensorflow/models/tree/master/research/object_detection

按照安装说明在 Windows 上工作

https://github.com/tensorflow/models/tree/master/research/object_detection

这似乎适用于 Linux/Mac。如果我将脚本放在我将上述 repo 克隆到的目录中,我只能让它工作。如果我将脚本放在任何其他目录中,我会收到此错误:

ModuleNotFoundError: No module named 'utils'

我怀疑原因是没有正确执行上面安装说明中列出的此命令的 Windows 等效项:

# From tensorflow/models/research/
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

如果重要的话,我正在使用 Windows 10、Python 3.6 和 TensorFlow 1.4.0。当然,我在谷歌上搜索过这个问题并找到了各种链接,例如,这个:

https://github.com/tensorflow/models/issues/1747

但这并没有解决这个问题。有关如何解决此问题的任何建议?

以下是我到目前为止具体完成的步骤:


编辑:这些步骤在更新以合并 RecencyEffect 的答案后现在可以工作

1) 通过 pip3 安装 TensorFlow 及相关工具

2) 在管理命令提示符下,运行以下命令:

pip3 install pillow
pip3 install lxml
pip3 install jupyter
pip3 install matplotlib

3) 在我的例子中,将 TensorFlow“模型”存储库克隆到 Documents 文件夹中

C:\Users\cdahms\Documents\models

4) 已下载 Google Protobuf https://github.com/google/protobuf Windows v3.4.0 版本“protoc-3.4.0-win32.zip”(我尝试了最新的 3.5.1 并在后续步骤中出错,所以我尝试了 3.4.0根据这个 vid https://www.youtube.com/watch?v=COlbP62-B-U&list=PLQVvvaa0QuDcNK5GeCQnxYnSSaar2tpku&index=1 和 protobuf 编译工作)

5) 将下载的 Protobuf 解压到 Program Files,具体来说

"C:\Program Files\protoc-3.4.0-win32"

6) 将 CD 放入 models\research 目录,具体

cd C:\Users\cdahms\Documents\models\research

7) 执行了protobuf编译,具体

“C:\Program Files\protoc-3.4.0-win32\bin\protoc.exe” object_detection/protos/*.proto --python_out=.

导航到:

C:\Users\cdahms\Documents\models\research\object_detection\protos

并验证编译后是否成功创建了 .py 文件(开始时只有 .proto 文件)

8) cd 到 object_detection 目录,例如:

cd C:\Users\cdahms\Documents\models\research\object_detection

然后在命令提示符下输入以下内容以启动 object_detection_tutorial.ipynb Jupyter Notebook

jupyter notebook

9) 在 Jupyter Notebook 中,选择“object_detection_tutorial.ipynb” -> Cell -> Run all,示例应该在 notebook 中运行

10)在Jupyter Notebook中,选择“文件”->“下载为”->“Python”,将.py版本的notebook保存到同一目录下,即

C:\Users\cdahms\Documents\models\research\object_detection\object_detection_tutorial.py

您现在可以在您选择的 Python 编辑器(例如 PyCharm)中打开脚本并运行它。


根据 RecencyEffect 在下面的回答进行编辑,如果您遵循这些额外步骤,您将能够从任何目录运行 object_detection_tutorial.py 脚本

11) 将脚本移动到任何其他目录,然后尝试运行它,你会发现你会得到错误:

ModuleNotFoundError: No module named 'utils'

因为我们还没有告知 Python 如何找到这些行使用的 utils 目录:

from utils import label_map_util
from utils import visualization_utils as vis_util

要解决这个问题。 . .

12) 进入系统 -> 高级系统设置 -> 环境变量。 . . -> 新建,并添加一个名为 PYTHONPATH 的变量和这些值:

13) 同样在环境变量下,编辑 PATH 并添加 %PYTHONPATH%,如下所示:

14) 重启以确保这些路径更改生效

15) 打开命令提示符并运行命令“set”,验证 PYTHONPATH 是否存在,并且 PYTHONPATH 和 PATH 包含前面步骤中的值。

16) 现在您可以将“object_detection_tutorial.py”复制到任何其他目录,它会运行

【问题讨论】:

您是否尝试将object_detection 添加到PYTHONPATH 而不是object_detection/utils?另外,导入是在您的代码中还是在 object_detection 代码中? ??天哪,我在那上面在哪里??是的,我刚刚也将“C:\Users\cdahms\Documents\models\research\object_detection\utils”添加到了 PYTHONPATH,现在它可以工作了。如果您发布与答案相同的评论,我会接受它,以便您获得信用,谢谢。 感谢您的解决方案...困扰我好几个小时了。 【参考方案1】:

确保你的 research/object_detection/protos 文件夹中有一个__init__.py 文件! __init__.py 文件为空,但需要存在才能正确创建 protos 模块。

【讨论】:

【参考方案2】:

以下命令在 Windows 上不起作用:

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

相反,我遵循了tutorial 的指示,它建议手动为三个不同的目录设置路径变量。我也简单地为 utils 目录添加了一个路径。到目前为止,它工作正常。

【讨论】:

【参考方案3】:

cd 研究/Object_Detection

cd ..

研究

    导出 PATH=~/anaconda3/bin:$PATH

研究

    git 克隆https://github.com/tensorflow/models.git

研究

3.export PYTHONPATH=$PYTHONPATH:pwd:pwd/slim

4.protoc object_detection/protos/string_int_label_map.proto --python_out=.

CD OBJECT_DETECTION

    protoc protos/string_int_label_map.proto --python_out=.

6.jupyter 笔记本

【讨论】:

【参考方案4】:

正如评论中提到的,utils 是一个子模块,因此您实际上需要将object_detection 添加到PYTHONPATH,而不是object_detection/utils

很高兴它对你有用。

【讨论】:

以上是关于Windows 上的 Tensorflow 对象检测 API - 错误“ModuleNotFoundError: No module named 'utils'”的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow是否支持Windows上的Python 3.6.4?

python [DEPRECATED] Windows上的TensorFlow自检

如何在 Windows 上的 Python 2.7 上安装 Tensorflow?

Windows 上的 TensorFlow:“无法打开 CUDA 库 cudnn64_5.dll”

Tensorflow-gpu在windows10上的安装(anaconda)

无法加载原生 TensorFlow 运行时。 Windows 10 上的 Python 3.6