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

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之后发生报错。

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

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类型。修改如下:

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

至此,问题得到解决。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值