Missing key(s) in state_dict | unexpected_keys | 模型加载 [torch.load] 报错【解决方案】
文章目录
- Missing key(s) in state_dict 报错分析
- 该报错快速直接解决方法
- 额外思路
- 【Unexpected key(s) in state_dict】- 解决思路
Missing key(s) in state_dict 报错分析
在执行 yolov3 pytorch 模型加载时遇到如下报错
类似报错之前其实也遇到过,今天总结一下
- 所运行代码
# Initialize modelmodel = Darknet(opt.cfg, imgsz)# Load weightsattempt_download(weights)if weights.endswith('.pt'): # pytorch formatmodel.load_state_dict(torch.load(weights, map_location=device)['model'])
- 遇到的报错大致如下
RuntimeError: Error(s) in loading state_dict for Darknet:Missing key(s) in state_dict: "total_ops", "total_params", # 或者RuntimeError: Error(s) in loading state_dict for DataParallel:Missing key(s) in state_dict: "module.total_ops", "module.total_params",
- 官方文档链接
该报错快速直接解决方法
model.load_state_dict 方法默认 strict=True
model.load_state_dict 时设置
strict=False
即可解决该报错
这种方式适合,模型本身没有什么问题,只是多了一些推理时不需要的 类似
"module_list.total_ops", "module_list.total_params", "module_list.0.total_ops", "module_list.0.total_params"
相关的统计变量
- 代码修改如下
model.load_state_dict(torch.load(weights, map_location=device)['model'], strict=False)
python3 detect.py --source data/samples/ --device 0,1 --weights weights/yolov3-spp.pt
成功执行输出如下
Namespace(agnostic_nms=False, augment=False, cfg='cfg/yolov3-spp.cfg', classes=None, conf_thres=0.3, device='0,1', fourcc='mp4v', half=False, img_size=512, iou_thres=0.6, names='data/coco.names', output='output', save_txt=False, source='data/samples/', view_img=False, weights='weights/yolov3-spp.pt')Using CUDA device0 _CudaDeviceProperties(name='Quadro RTX 5000', total_memory=16125MB)device1 _CudaDeviceProperties(name='Quadro RTX 5000', total_memory=16125MB)return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)
Model Summary: 225 layers, 6.29987e+07 parameters, 6.29987e+07 gradients, 118.0 GFLOPS
image 1/3 data/samples/bus.jpg: 512x384 4 persons, 1 buss, Done. (0.014s)
image 2/3 data/samples/dog.png: 384x512 1 bicycles, 1 trucks, 1 dogs, Done. (0.013s)
image 3/3 data/samples/zidane.jpg: 288x512 2 persons, 2 ties, Done. (0.012s)Results saved to /home/zql/project/project21Next/yoloDir/yolov3/output
Done. (0.179s)
额外思路
提供这样一个思路,这种方法在该代码中,又遇到其它报错,但理论上它应该是可用的一种思路
相关代码
# Initialize modelmodel = Darknet(opt.cfg, imgsz)# Load weightsattempt_download(weights)if weights.endswith('.pt'): # pytorch formatmodel.load_state_dict(torch.load(weights, map_location=device)['model'], strict=False)torch.save(model, 'weights/yolov3-spp-again.pt')# model.load_state_dict(torch.load(weights, map_location=device)['model'], strict=True)else: # darknet formatload_darknet_weights(model, weights)
【Unexpected key(s) in state_dict】- 解决思路
其它博客资料了解到的报错原因
- 在训练的时候,使用了多卡联合训练,导致 权重 keys 多了一个 前缀【之前有遇到这样的情况】
解决思路:遍历修改 keys ,去掉前缀 【更为通用】 | 或者在 缺少前缀的一方 添加 keys
这种情况,具体示例,下次遇到再做补充
去掉前缀 的代码思路如下
model_resnet101 = get_net()
model_resnet101.cuda()
model_resnet101.load_state_dict({k.replace('module.',''):v for k,v in torch.load("densenet169_rnn_fold_1_model_best_f1.pth.tar")['state_dict'].items()})
Missing key(s) in state_dict | unexpected_keys | 模型加载 [torch.load] 报错【解决方案】相关推荐
- vue 动态加载图片路径报错解决方法
vue 动态加载图片路径报错解决方法 参考文章: (1)vue 动态加载图片路径报错解决方法 (2)https://www.cnblogs.com/qingcui277/p/8930507.html ...
- MTK的Flashtool 加载scatter-loading是报错
Flashtool 加载scatter-loading是报错: Image UBOOT checksum failed! Checksum reference value(0xf6b7)in the ...
- 报错解决:加载数据库驱动报错-Loading class `com.mysql.jdbc.Driver‘. The new driver class is `com.mysql.cj.jdb
Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.D ...
- 深度学习——09模型的保存:torch.save()、加载:torch.load()
两种方式 保存模型主要分为两类: 1.保存整个模型 2.保存模型参数 1.第一种 结构模型+模型参数 保存整个网络模型,加载整个网络模型(可能比较耗时) # 保存方式1 torch.save(vgg1 ...
- Maven 加载ojdbc14.jar报错,解决方法
因为oracle的ojdbc.jar是收费的,所以maven的中央仓库中没有这个资源,只能通过配置本地库才能加载到项目中去. 首先下载 ojdbc14 https://pan.baidu.com/s ...
- Android开发之WebView加载自定义scheme报错net::ERR_UNKNOWN_URL_SCHEME(附带源码标题下面可点击下载)
咱们先看下报错结果图: 我这边是华为荣耀7i手机才出现这个情况,总结得出结论android6.0以上加载自定义scheme会报错如下,6.0以下貌似不会 三星和模拟器没有可以直接加载这个url ,网页 ...
- vue-element-admin动态加载接口和报错解决
需要修改的文件只有两个: 修改文件\src\router\index.js 和 修改文件 src\store\modules\permission.js 接口可以放在user.js里面 1. \s ...
- MindSpore数据集加载-GeneratorDataset数据处理报错:The pointer[cnode] is null
MindSpore可以自定义Python数据源,通过迭代该数据源构造数据集.有点类似PyTorch的DataLoader. 相关的API可以参考:mindspore.dataset.Generator ...
- 加载.node文件报错:no suitable image found. unknown file type, first eight bytes
背景 electron-vue构建的工程在打包的时候报错如下: Uncaught Error: Cannot open /Users/mac/Desktop/file/zl/git_project/n ...
最新文章
- 一次深夜优化,MySQL亿级数据分页的奇妙经历
- 产品经理必了解的3个app技术框架
- SpringBoot+Vue使用Get请求时提示:Error parsing HTTP request header
- 路径总和 III—leetcode437
- 一条SQL语句查询数据库中的所有表、存储过程、触发器
- TableView Within Alert
- 忘记root密码后怎么解决?克隆虚拟机后如何实现两台linux相互登录?
- Oracle事务隔离级别
- 有什么软件可以把视频上下拼接在一起?
- VAX插件、vs2012
- 矩阵的 Jordan 标准型
- db2配置、db和dbm
- tan(x)的四阶麦克劳林级数
- NVIDIA-TLT训练行人检测模型(一)----算法模型的训练(finetuning)
- 转:为什么谷歌越来越牛逼,而百度却...
- 【洛谷】 P1240 诸侯安置(递推)
- EndNote软件使用
- MATLAB MAT文件
- 【流式细胞仪软件】上海道宁为您带来FCS Express,让您轻松缩小流式细胞术和结果之间的差距
- 【毕业设计】基于单片机的智能饮水机系统 - stm32 物联网 嵌入式
热门文章
- Linux常用命令ens33网卡配置
- css伪类与伪元素的区别
- ARFoundation系列讲解 - 34 AR看车一
- 阿里敏捷教练如何优化优酷需求分析流程?
- 面向对象程序设计步骤
- S32K的flexcan组件使用(RxFIFO+中断)
- DONE Build complete. The dist directory is ready to be deployed.
- Vue用localStorage保存搜索历史记录/清空记录
- 【读点论文】Unified Perceptual Parsing for Scene Understanding 整合学习数据集的关系,用图像级标注完成像素级的事
- 经典语录,经常看看感悟人生!