API обнаружения объектов Tensorflow в Windows - ошибка "ModuleNotFoundError: нет модуля с именем" utils ""

Я пытаюсь получить API обнаружения объектов TensorFlow

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

работая в Windows, следуя инструкциям по установке

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

Который, кажется, для Linux/Mac. Я могу заставить это работать, только если я помещу скрипт в каталог, в который я клонировал вышеуказанное хранилище. Если я помещаю скрипт в любой другой каталог, я получаю эту ошибку:

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) Установите TensorFlow и связанные инструменты через pip3

2) В командной строке администратора выполните следующее:

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

3) В моем случае клонируйте репозиторий TensorFlow "models" в папку 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 для этого видео 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 в каталог моделей \ исследований, в частности

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) перейдите в каталог object_detection, например:

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

затем введите следующую команду в командной строке, чтобы запустить object_detection_tutorial.ipynb Jupyter Notebook

jupyter notebook

9) В блокноте Jupyter выберите "object_detection_tutorial.ipynb" -> Cell -> Run all, пример должен работать в блокноте

10) В блокноте Jupyter выберите "Файл" -> "Загрузить как" -> "Python" и сохраните версию.py блокнота в тот же каталог, т.е.

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" в любой другой каталог, и он будет работать

4 ответа

Решение

Как уже упоминалось в комментарии, utils это подмодуль, так что вам действительно нужно добавить object_detection в PYTHONPATHне object_detection/utils,

Я рад, что это сработало для вас.

Убедитесь, что у вас есть __init__.py файл в папке исследований /object_detection/protos! __init__.py Файл пуст, но должен существовать для правильного создания модуля protos.

CD Research / Object_Detection

CD..

Исследование

  1. экспорт PATH=~/anaconda3/bin:$PATH

ИССЛЕДОВАНИЕ

  1. git clone https://github.com/tensorflow/models.git

ИССЛЕДОВАНИЕ

3. Экспорт PYTHONPATH = $ PYTHONPATH:pwd:pwd/тонкий

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

CD OBJECT_DETECTION

  1. протокол protos/string_int_label_map.proto --python_out=.

Ноутбук 6.jupyter

Следующая команда не работает в Windows:

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

Вместо этого я следовал указаниям этого урока, который рекомендует устанавливать переменные пути для трех разных каталогов вручную. Я просто добавил путь для каталога utils. Пока что это сработало без ошибок.

Другие вопросы по тегам