内容部分转自:原文链接
Swin transformer复现遇到的问题及解决方法
1)问题:TypeError: SwinTransformer: init() got an unexpected keyword argument ‘embed_dim’
分析全部报错:
Traceback (most recent call last):
File "/opt/conda/envs/py38/lib/python3.8/site-packages/mmcv/utils/registry.py", line 66, in build_from_cfg
return obj_cls(**args)
TypeError: __init__() got an unexpected keyword argument 'embed_dim'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/conda/envs/py38/lib/python3.8/site-packages/mmcv/utils/registry.py", line 66, in build_from_cfg
return obj_cls(**args)
File "/opt/conda/envs/py38/lib/python3.8/site-packages/mmdet/models/detectors/cascade_rcnn.py", line 20, in __init__
super(CascadeRCNN, self).__init__(
File "/opt/conda/envs/py38/lib/python3.8/site-packages/mmdet/models/detectors/two_stage.py", line 32, in __init__
self.backbone = build_backbone(backbone)
File "/opt/conda/envs/py38/lib/python3.8/site-packages/mmdet/models/builder.py", line 20, in build_backbone
return BACKBONES.build(cfg)
File "/opt/conda/envs/py38/lib/python3.8/site-packages/mmcv/utils/registry.py", line 234, in build
return self.build_func(*args, **kwargs, registry=self)
File "/opt/conda/envs/py38/lib/python3.8/site-packages/mmcv/cnn/builder.py", line 27, in build_model_from_cfg
return build_from_cfg(cfg, registry, default_args)
File "/opt/conda/envs/py38/lib/python3.8/site-packages/mmcv/utils/registry.py", line 69, in build_from_cfg
raise type(e)(f'{obj_cls.__name__}: {e}')
TypeError: SwinTransformer: __init__() got an unexpected keyword argument 'embed_dim'
我的目的是调用本地包的方法,但是从报错中我们看出,实际调用的是安装的同名外部包的方法。python包的法则不是如果模块名称冲突, 当前目录的模块优先于标准库导入. 因为 sys.path 中当前目录在最前面.吗?大部分情况下确实是这样,有两种情况下不是:
1、Python3 中有些特殊的库, 即使本地目录中有同名文件, 在导入时也不会被覆盖.比如 site, sys, os, builtins 等.原因是: 一些 内建模块(built-in) 以及 和Python运行时相关 的库名不会被覆盖
2、你的程序运行目录,并不包含你的本地包,而你单纯的认为包含,例如:
-A
–a
–b
–b.py
python b.py 此时你的工作目录在b下,所以找不到a,只能从安装的外部模块找
2)出现原因
本地包和安装的外部包重名,此处想调用的是本地包中的方法,借用原作一张图,就讲清楚了表现。
在不同目录下它寻找的mmdet包不同
在swin_master/(你的项目)目录下它会寻找该项目内本来包含的mmdet文件夹
但是在swin_master/tools文件夹下,它会寻找openmmlab环境中的mmdet
3)解决方法
1:
在终端输入
export PYTHONPATH=/home/techart/xyz/swin/swin_master
# (包含mmdet文件夹的你的项目路径)
设置环境变量
指定它去该目录下寻找mmdet包
最好本地包命名 xxx_custom
2:
还有一种解决方法,将configs/base/models/cascade_mask_rcnn_swin_fpn.py中embed_dim改成embed_dims,因为在swin mask-rcnn中引用了上述基础配置
3(推荐):
如果觉得需要改动的点太多,更推荐运行作者的setup.py
python setup.py develop