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
Я использую 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
**1) Добавлено
Код: Выделить всё
__init__.py
(Существование подтверждено с помощью 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__)"
Код: Выделить всё
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])
Код: Выделить всё
cd /workspace/data/myname/MAT
python train.py
Несмотря на все это, та же ошибка сохраняется:
Код: Выделить всё
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