解决cannot import name ‘_NewEmptyTensorOp‘ from ‘torchvision.ops.misc‘

最近在学习Detectron2项目

遇到这个问题:

ImportError: cannot import name '_NewEmptyTensorOp' from 'torchvision.ops.misc' 
 

ImportError: cannot import name '_NewEmptyTensorOp' from 'torchvision.ops.misc' (C:\Users\****\Anaconda3\envs\torch38\l
ib\site-packages\torchvision\ops\misc.py)

问题原因是在于torchvision版本,在utils/misc.py中有以下代码段:

原来是设计是为了限制torchvision不能太低需要>0.7.0,判定条件为版本号的前三位,但是对于现在0.10.0及以后的高版本不适用,所以解决方法是将这部分注释掉。

if float(torchvision.__version__[:3]) < 0.5:
    import math
    from torchvision.ops.misc import _NewEmptyTensorOp
    def _check_size_scale_factor(dim, size, scale_factor):
        # type: (int, Optional[List[int]], Optional[float]) -> None
        if size is None and scale_factor is None:
            raise ValueError("either size or scale_factor should be defined")
        if size is not None and scale_factor is not None:
            raise ValueError("only one of size or scale_factor should be defined")
        if not (scale_factor is not None and len(scale_factor) != dim):
            raise ValueError(
                "scale_factor shape must match input shape. "
                "Input is {}D, scale_factor size is {}".format(dim, len(scale_factor))
            )
    def _output_size(dim, input, size, scale_factor):
        # type: (int, Tensor, Optional[List[int]], Optional[float]) -> List[int]
        assert dim == 2
        _check_size_scale_factor(dim, size, scale_factor)
        if size is not None:
            return size
        # if dim is not 2 or scale_factor is iterable use _ntuple instead of concat
        assert scale_factor is not None and isinstance(scale_factor, (int, float))
        scale_factors = [scale_factor, scale_factor]
        # math.floor might return float in py2.7
        return [
            int(math.floor(input.size(i + 2) * scale_factors[i])) for i in range(dim)
        ]
elif float(torchvision.__version__[:3]) < 0.7:
    from torchvision.ops import _new_empty_tensor
    from torchvision.ops.misc import _output_size

官方版本也已经更新了

# needed due to empty tensor bug in pytorch and torchvision 0.5
import torchvision
if version.parse(torchvision.__version__) < version.parse('0.7'):
    from torchvision.ops import _new_empty_tensor
    from torchvision.ops.misc import _output_size

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据引用\[1\]和引用\[2\]的报错信息,出现了无法从torchvision.ops中导入_new_empty_tensor和_NewEmptyTensorOp的错误。这可能是因为在torchvisionops模块中找不到这些名称。根据引用\[3\]中的注释,官方版本已经更新了,为了解决pytorchtorchvision 0.5中的空张量错误,需要导入_new_empty_tensor和_output_size。因此,您可能需要检查您的torchvisionpytorch版本是否符合要求。如果您的版本低于0.7,您可以尝试更新torchvisionpytorch到最新版本,或者按照引用\[3\]中的代码进行导入。如果您的版本已经是0.7或更高,那么可能存在其他问题,您可以尝试重新安装torchvision或查看其他可能的解决方案。 #### 引用[.reference_title] - *1* [Python问题: cannot import name ‘_new_empty_tensor‘ from ‘torchvision.ops](https://blog.csdn.net/a1228136188/article/details/118891791)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [解决cannot import name ‘_NewEmptyTensorOp‘ from ‘torchvision.ops.misc](https://blog.csdn.net/y96q1023/article/details/78498894)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值