在SimSwap Colab中遇AttributeError:'SGD'对象无'defaults'属性求助
问题分析与解决方案
这个错误属于PyTorch版本兼容性问题,不是项目代码本身的逻辑错误,你可以自行修复,不需要等项目更新,优先推荐回退PyTorch版本的方案:
错误原因
Colab默认的PyTorch版本更新后,在torch.optim.Optimizer的__setstate__方法里新增了对defaults属性的操作,但你使用的SimSwap模型权重是用旧版本PyTorch保存的,加载时旧的SGD优化器实例没有defaults属性,因此触发了AttributeError。
修复方案(新手友好)
在Colab里执行以下步骤回退到兼容的PyTorch版本:
- 新建一个代码单元格,输入并运行以下命令:
!pip uninstall -y torch torchvision torchaudio !pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113 - 运行完成后,点击顶部菜单栏的
Runtime->Restart runtime,重启运行时环境。 - 重新运行项目的所有代码单元格,错误应该会消失。
备选方案(适合有一定基础的用户)
如果你不想回退PyTorch版本,可以找到加载模型的代码部分(也就是报错的create_model(opt)函数内部),在加载模型权重前添加兼容处理:
在加载优化器状态的代码附近,添加如下逻辑:
# 假设optimizer是加载的SGD实例 if not hasattr(optimizer, 'defaults'): optimizer.defaults = {'lr': 0.01, 'momentum': 0.9, 'dampening': 0, 'weight_decay': 0, 'nesterov': False, 'differentiable': False}
不过这个方案需要你定位到项目中加载优化器的具体代码位置,对新手来说门槛较高,所以优先推荐回退版本的方法。
内容的提问来源于stack exchange,提问作者Gutsman-85
相关产品推荐
相关产品推荐

