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 ...
最新文章
- 陆奇首批YC中国门徒:包鱼塘、画动漫、搞汽配…都用AI
- JVM 调优系列之图解垃圾回收
- mongoose populate 返回 指定 字段
- Transformer开始往动态路由的方向前进了!厦大华为提出TRAR,在VQA、REC上性能SOTA!(ICCV 2021)...
- RocketMQ如何保证消息顺序消费?又为何不解决消息重复消费问题?
- cad的lisp程序大集合_大数据成神之路-Java高级特性增强(CopyOnWriteArraySet)
- 字符函数、字符串函数、内存函数用法及其模拟实现
- java coroutine类_Coroutines和Rxjava异步编程对比
- UML 统一建模语言Unified Modeling Language (UML)
- 如何使用iMazing为iPad创建配置文件
- Springboot未登录请求拦截器实现
- ug如何复制面_了解了一下内容,让你UG快速入门
- 小学奥数平均数经典问题汇总
- python cryptography key加密_python加密解密库cryptography使用openSSL生成的密匙加密解密...
- CNSD在这里记录自己成长
- 微信分享多个图片和文字到朋友圈
- 加密芯片介绍 加密芯片选择(加密IC) 加密芯片原理
- python简易BMI测体重
- mac外接显示器 竖屏 黑苹果_借人气问一个黑苹果外接显示器的问题
- 国外程序员也都是996么?