Error 汇总
1. CUDA out of memory
原因: GPU内存溢出
解决: 减小 BATCH_SIZE
2. CUDA error: device-side assert triggered
原因: 实际输入的label类别或Mask图像的像素类别超过了设定的类别数 NUM_CLASSES
解决: 检查label值或mask图像的像素值, 如二值图像则令mask[mask>1]=1
3. RuntimeError: Can’t call numpy() on Variable that requires grad. Use var.detach().numpy() instead.
原因: 带梯度变量不能直接转为numpy类型
解决: 采用建议的增加var.detach().numpy()
或者使用with torch.no_grad():
或者 @torch.no_grad()
4. OSError: [Errno 22] Invalid argument \u202a
'\u202aD:/coco2017/annotations/instances_val2017.json
原因: 在win下,文件属性页安全选项卡中复制得到的路径中存在其他字符 \u202aD
解决: 手动输入出错位置 D:/
5. ImportError: DLL load failed: 页面文件太小,无法完成操作。
原因: 多线程问题, 虚拟内存不足
解决: 减小num_workers
或扩大虚拟内存
6. BrokenPipeError: [Errno 32] Broken pipe
原因: windows下多线程的问题,和DataLoader类有关
解决: 减小num_workers
模型加载错误汇总
本文中描述不清的地方,请参考:
最完整、最全面:https://blog.youkuaiyun.com/LXYTSOS/article/details/90639524
无法加载问题:https://blog.youkuaiyun.com/m0_37518259/article/details/106050327
加载键值可匹配的权重:https://blog.youkuaiyun.com/qq_36523492/article/details/108769572
只想训练个别层:https://blog.youkuaiyun.com/qq_34351621/article/details/79967463
又一篇汇总:https://blog.youkuaiyun.com/hungryof/article/details/81364487
1. size mismatch
RuntimeError: Error(s) in loading state_dict for Yolact: size mismatch for prediction_layers.0.conf_layer.weight: copying a param with shape torch.Size([243, 256, 3, 3]) from checkpoint, the shape in current model is torch.Size([21, 256, 3, 3]).
原因: 构造模型与导入模型的参数Size不一致, 是由于微调模型改变了输出层的形状
解决: 先导入可以匹配的模型参数, 再另外将输出层权重初始化
2. Missing key(s)
RuntimeError: Error(s) in loading state_dict for Yolact: Missing key(s) in state_dict: "backbone.layers.2.6.conv1.weight", ...
原因: 权重文件中的参数不匹配
解决: 将权重读出来, 对比报错信息, 更换权重文件或适配模型代码
import torch
path = "yolact_base_54_800000.pth"
state_dict = torch.load(path)
print(list(state_dict.keys()))
3. Missing key(s) 并行训练
RuntimeError: Error(s) in loading state_dict: Missing key(s) in state_dict: "module..."; Unexpected key(s) in state_dict
原因: 模型训练时使用了 torch.nn.DataParallel()
,而此时加载模型参数后没有使用
解决:
法① 添加 net = nn.DataParallel(net)
法② 替换导入
net.load_state_dict({k.replace('module.',''):v for k,v in torch.load(参数路径).items()})
4. ModuleNotFoundError: No module named ‘model’
result = unpickler.load() ModuleNotFoundError: No module named 'models.yolo'
原因: 原始模型保存不规范,导致在加载时依赖工程目录
解决: 在原始工程下将权重resume之后,重新保存model.state_dict
即可