Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于swin_transformer测试部分的报错解决 #34

Closed
Codingtnl opened this issue Jul 14, 2021 · 8 comments
Closed

关于swin_transformer测试部分的报错解决 #34

Codingtnl opened this issue Jul 14, 2021 · 8 comments

Comments

@Codingtnl
Copy link

No description provided.

@Codingtnl
Copy link
Author

在测试部分会产生如下错误:
Traceback (most recent call last):
File "scripts/eval.py", line 318, in
save_conf=opt.save_conf,
File "scripts/eval.py", line 86, in test
model(torch.zeros(1, 3, imgsz, imgsz).to(device).type_as(next(model.parameters()))) # run once
File "/home/sunyukai/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl
result = self.forward(*input, **kwargs)
File "./od/models/model.py", line 67, in forward
out = self.backbone(x)
File "/home/sunyukai/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl
result = self.forward(*input, **kwargs)
File "./od/models/backbone/swin_transformer.py", line 598, in forward
x_out, H, W, x, Wh, Ww = layer(x, Wh, Ww)
File "/home/sunyukai/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl
result = self.forward(input, **kwargs)
File "./od/models/backbone/swin_transformer.py", line 382, in forward
x = blk(x, attn_mask)
File "/home/sunyukai/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in _call_impl
result = self.forward(input, **kwargs)
File "./od/models/backbone/swin_transformer.py", line 224, in forward
attn_windows = self.attn(x_windows, mask=attn_mask) # nW
B, window_size
window_size, C
File "/home/sunyukai/anaconda3/lib/python3.7/site-packages/torch/nn/modules/module.py", line 727, in call_impl
result = self.forward(*input, **kwargs)
File "./od/models/backbone/swin_transformer.py", line 142, in forward
x = (attn @ v).transpose(1, 2).reshape(B
, N, C)
RuntimeError: Expected object of scalar type Float but got scalar type Half for argument #2 'mat2' in call to _th_bmm_out

我查看参数之后发现是attn部分受到mask的影响数据类型从float16变成了float32,我个人的解决办法是
x = (attn @ v).transpose(1, 2).reshape(B_, N, C)
变成了
x = (attn.type_as(v) @ v).transpose(1, 2).reshape(B_, N, C)
目前可以成功eval,分享一下,期待能收获更好的解决办法

@Codingtnl Codingtnl reopened this Jul 14, 2021
@Codingtnl Codingtnl changed the title 关于swin 关于swin_transformer测试部分的报错解决 Jul 14, 2021
@Bobo-y
Copy link
Owner

Bobo-y commented Jul 14, 2021

@Codingtnl 按照默认脚本测试会采用半精度我估计哈swin 实现上半精度可能有问题,关掉后就没问题了。按照你的方法把他们强制转换成同样类型也可以。

@Bobo-y Bobo-y closed this as completed Jul 14, 2021
@Codingtnl
Copy link
Author

@Codingtnl 按照默认脚本测试会采用半精度我估计哈swin 实现上半精度可能有问题,关掉后就没问题了。按照你的方法把他们强制转换成同样类型也可以。

对了想问一下如果我要加载官方的swin预训练模型我该怎么做比较好呢,自己训swin收敛的有点慢

@Bobo-y
Copy link
Owner

Bobo-y commented Jul 14, 2021

@Codingtnl 我参照的原始仓库里有加载权重的代码,但我没试过呢,不知道直接加上会不会报错

@zxm111222333
Copy link

@Codingtnl 按照默认脚本测试会采用半精度我估计哈swin 实现上半精度可能有问题,关掉后就没问题了。按照你的方法把他们强制转换成同样类型也可以。

对了想问一下如果我要加载官方的swin预训练模型我该怎么做比较好呢,自己训swin收敛的有点慢

想问老哥有办法加载预训练模型了吗?

@yssid
Copy link

yssid commented Dec 18, 2021

Thanks @yl305237731 let me try to change with x = (attn.type_as(v) @ v).transpose(1, 2).reshape(B_, N, C)
Let's see ... and Thanks for the Quick reply.

@wch243294382
Copy link

请问能加载了吗

@Bobo-y
Copy link
Owner

Bobo-y commented Aug 11, 2022

请问能加载了吗

add pretrained:True in backbone of model_swin.yaml
backbone: type: swin version: tiny # tiny small base large pretrained: True

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants