解决TypeError: SwinTransformer: __init__() got an unexpected keyword argument ‘embed_dim‘

内容部分转自:原文链接
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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年4月5日
下一篇 2023年4月5日

相关推荐