ModuleNotFoundError: нет модуля с именем «losses.loss»; «потери» не являются ошибкой пакета при обучении модели MAT (PyTPython

Программы на Python
Anonymous
 ModuleNotFoundError: нет модуля с именем «losses.loss»; «потери» не являются ошибкой пакета при обучении модели MAT (PyT

Сообщение Anonymous »

Я пытаюсь точно настроить модель MAT (трансформатор маскированного внимания) из официального репозитория:
https://github.com/fenglinglwb/MAT
Однако во время обучения я постоянно получаю следующую ошибку:

Код: Выделить всё

Traceback (most recent call last):
File "train.py", line 658, in 
main() # pylint: disable=no-value-for-parameter
File "/opt/conda/envs/py37/lib/python3.7/site-packages/click/core.py", line 1161, in __call__
return self.main(*args, **kwargs)
File "/opt/conda/envs/py37/lib/python3.7/site-packages/click/core.py", line 1082, in main
rv = self.invoke(ctx)
File "/opt/conda/envs/py37/lib/python3.7/site-packages/click/core.py", line 1443, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/opt/conda/envs/py37/lib/python3.7/site-packages/click/core.py", line 788, in invoke
return __callback(*args, **kwargs)
File "/opt/conda/envs/py37/lib/python3.7/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context(), *args, **kwargs)
File "train.py", line 651, in main
subprocess_fn(rank=0, args=args, temp_dir=temp_dir)
File "train.py", line 481, in subprocess_fn
training_loop.training_loop(rank=rank, **args)
File "/workspace/data/dayeon/MAT/training/training_loop.py", line 203, in training_loop
loss = dnnlib.util.construct_class_by_name(device=device, **ddp_modules, **loss_kwargs) # subclass of training.loss.Loss
File "/workspace/data/dayeon/MAT/dnnlib/util.py", line 289, in construct_class_by_name
return call_func_by_name(*args, func_name=class_name, **kwargs)
File "/workspace/data/dayeon/MAT/dnnlib/util.py", line 282, in call_func_by_name
func_obj = get_obj_by_name(func_name)
File "/workspace/data/dayeon/MAT/dnnlib/util.py", line 275, in get_obj_by_name
module, obj_name = get_module_from_obj_name(name)
File "/workspace/data/dayeon/MAT/dnnlib/util.py", line 246, in get_module_from_obj_name
importlib.import_module(module_name) # may raise ImportError
File "/opt/conda/envs/py37/lib/python3.7/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1006, in _gcd_import
File "", line 983, in _find_and_load
File "", line 953, in _find_and_load_unlocked
File "", line 219, in _call_with_frames_removed
File "", line 1006, in _gcd_import
File "", line 983, in _find_and_load
File "", line 962, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'losses.loss'; 'losses' is not a package
1. моя среда
Я использую VS Code Remote SSH для подключения к контейнеру разработки на удаленном сервере.
Внутри контейнера я создал виртуальную среду conda и установил зависимости вручную.
Вот основные версии:

Код: Выделить всё

python version:  3.7.16 (default, Jan 17 2023, 22:20:44)
[GCC 11.2.0]
numpy version:  1.21.6
torch version:  1.13.1+cu117
CUDA available:  True
CUDA version:  11.7
cuDNN version:  8500
opencv version:  4.5.5
2. Что я пробовал
**1) Добавлено

Код: Выделить всё

__init__.py
внутри папки loss/.**
(Существование подтверждено с помощью ls loss/, поэтому папка является действительным пакетом Python.)
2) Добавлен каталог MAT в sys.path внутри train.py.
3) Проверено наличие любых других модулей «потери» во всей conda окружающая среда:

Код: Выделить всё

find /opt/conda/envs/py37 -type d -name "losses"
→ другой конфликтующей папки не существует.
4) Подтверждено, что путь импорта разрешен правильно:

Код: Выделить всё

python -c "import losses; print(losses.__file__)"
5) В начало файла train.py добавлен следующий код:

Код: Выделить всё

import os, sys
current_dir = os.path.dirname(os.path.abspath(__file__))
if current_dir not in sys.path:
sys.path.insert(0, current_dir)
print(">>> PYTHONPATH:", sys.path[0])
6) Подтверждено, что я запускаю сценарий в корневом каталоге MAT:

Код: Выделить всё

cd /workspace/data/myname/MAT
python train.py
3. Дополнительная информация
Несмотря на все это, та же ошибка сохраняется:

Код: Выделить всё

ModuleNotFoundError: No module named 'losses.loss'; 'losses' is not a package
И моя структура папок выглядит так:

Код: Выделить всё

MAT/
├── train.py
├── training/
│   └── training_loop.py
├── dnnlib/
├── metrics/
├── losses/
│   ├── __init__.py
│   ├── loss.py
│   └── ...
Я подозреваю, что это может быть:
циклический импорт или
неправильная строка имени класса, переданная в dnnlib.util.construct_class_by_name() в Training_loop.py.
Кто-нибудь успешно настроил MAT или разрешил этот вид импорта ошибка?
Будем признательны за любые рекомендации 🙏

Подробнее здесь: https://stackoverflow.com/questions/797 ... package-er

Вернуться в «Python»