您的位置:首页 > 移动开发 > Objective-C

解决PyTorch报错:RuntimeError: Expected object of type torch.cuda.FloatTensor but found type torch.FloatT

2020-07-20 04:21 369 查看

1. 问题描述

1.1 在使用pytorch0.4.1推理pyramidbox 或者SSD时,发生以下报错:

RuntimeError: Expected object of type torch.cuda.FloatTensor but found type torch.FloatTensor for argument #2 'other'

在pytorch0.3上面应该时不报错的,改成0.4之后发生报错。

[code]Traceback (most recent call last):
File "test.py", line 241, in <module>
det0 = detect_face(image, shrink)
File "test.py", line 60, in detect_face
y = net(x)
File "....../lib/python3.6/site-packages/torch/nn/modules/module.py", line 477, in __call__
result = self.forward(*input, **kwargs)
File "....../pyramidbox/pyramid.py", line 452, in forward
self.priors.type(type(x.data))   # default boxes
File "....../pyramidbox/layers/functions/detection.py", line 46, in forward
decoded_boxes = decode(loc_data[i], prior_data, self.variance)
File "....../pyramidbox/layers/box_utils.py", line 231, in decode
priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:],
RuntimeError: Expected object of type torch.cuda.FloatTensor but found type torch.FloatTensor for argument #2 'other'

1.2 找到报错的box_utils.py

[code]def decode(loc, priors, variances):
boxes = torch.cat((
priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:],
priors[:, 2:] * torch.exp(loc[:, 2:] * variances[1])), 1)
boxes[:, :2] -= boxes[:, 2:] / 2
boxes[:, 2:] += boxes[:, :2]
return boxes

2. 解决问题

修改了的变量应该是torch.cuda.FloatTensor,CUDA类型才对,因为版本问题,在0.4上被指派到了CPU上,所以要强行修改回cuda类型。修改如下:

[code]def decode(loc, priors, variances):
boxes = torch.cat((
priors[:, :2].cuda() + loc[:, :2].cuda() * variances[0] * priors[:, 2:].cuda(),
priors[:, 2:].cuda() * torch.exp(loc[:, 2:].cuda() * variances[1])), 1)
boxes[:, :2] -= boxes[:, 2:] / 2
boxes[:, 2:] += boxes[:, :2]
return boxes

至此,问题得到解决。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐