Pytorch中的torch.save()文件保存格式探索以及mmdetection加载预训练模型参数对不齐和收到意外参数报错解决方案

使用mmdetection时遇到的问题比较多,首先要对自己要使用的预训练模型有一定的了解,并且懂得使用各种分类模型时不同的模型不同任务执行阶段需要参数上的对其。(比如mask-rcnn和它的三个头之间的参数)。

首先,谈谈torch.save()方法保存和加载的.ph文件的格式:

import torch
pretrained_weights = torch.load("C:\\Users\\username\\Downloads\\mask_rcnn_x101_32x8d_fpn_mstrain-poly_1x_coco_20220630_170346-b4637974.pth")
# 11 是指 数据类别 + 1
print(pretrained_weights)

如上可以得到:

这个meta所保存的是各种类别名、mmdet版本

巴拉巴拉,往下翻还有一个键值对

这里保存的是各个层的参数。

然后,谈一下遇到的两个问题:

1.

The model and loaded state dict do not match exactly

size mismatch for roi_head.bbox_head.fc_cls.weight: copying a param with shape torch.Size([81, 1024]) from checkpoint, the shape in current model is torch.Size([2, 1024]).

还有五个这种参数,笔者较为仔细地看了mask-rcnn文章和另一位博主使用这个商汤的框架去跑DETR时候遇到的类似的问题,得出解决方案。

先说原因:预训练模型在coco上预训练,而coco本身类别是80,所以它的主干网络送到其他的三个头(分类头、mask回归头、bbox头的参数种类对不上),我这个是个1个类别,加上背景。六个错误维数对不上,刚好对应w、b和三个头。(几个头之间权重是不共享的)

解决方案:把load_from中的权重下载下来,resize然后重新保存,即可。

import torch
pretrained_weights = torch.load("C:\\Users\\user\\Downloads\\mask_rcnn_x101_32x8d_fpn_mstrain-poly_1x_coco_20220630_170346-b4637974.pth")pretrained_weights['state_dict']['roi_head.bbox_head.fc_cls.weight'].resize_(2, 1024)
pretrained_weights['state_dict']['roi_head.bbox_head.fc_cls.bias'].resize_(2)
pretrained_weights['state_dict']['roi_head.bbox_head.fc_reg.weight'].resize_(4, 1024)
pretrained_weights['state_dict']['roi_head.bbox_head.fc_reg.bias'].resize_(4)
pretrained_weights['state_dict']['roi_head.mask_head.conv_logits.weight'].resize_(1, 256, 1, 1)
pretrained_weights['state_dict']['roi_head.mask_head.conv_logits.bias'].resize_(1)
torch.save(pretrained_weights, "mask_rcnn_x101_32x8d_fpn_mstrain-poly_1x_coco_20220630_170346-b4637974_changed.pth")

笔者做的是一个实例分割任务,加载的权重是从mask-rcnn官方提供的微软在coco数据集预训练的以resnext101为主干网络,权重调整策略是1x。

遇到的问题:unexpectde argument:times

显示多传了一个参数times,我没搜到这个issue

解决方案:

然后把继承的配置文件的训练策略改成一样的然后就可以了,有大佬对训练了解的深一些的可以在评论区讲解一下这个框架中的学习率sheduler策略有什么差别:在1x、2x、3x直接,我还在配置文件中看到一个20e.

参考博客:

1.加载并修改权重https://zhuanlan.zhihu.com/p/465657162

2.相似问题的分析:MMdetection3.0 训练DETR问题分析_mmdetection 训练detr-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot集成六大常用中间件,附集成源码,亲测有效

目录 万字论文,从0到1,只需1小时获取途径1、Spring Boot如何集成Spring Data JPA?2、Spring Boot如何集成Spring Security?3、Spring Boot如何集成Redis?4、Spring Boot如何集成RabbitMQ?5、Spring Boot如何…

11 Goroutine-并发与并行、阻塞与非阻塞

并发 顺序执行:按照事先计划好的顺序,执行完一个操作后,再执行下一个操作。 顺序执行效率不高的原因: 每个操作由多个步骤组成,每个步骤所需要的时间长短不一,有些步骤可能相当耗时。顾客点菜需要时间&a…

VectorDBBench在windows的调试

VectorDBBench在windows的调试 VectorDBBench是一款向量数据库基准测试工具,支持milvus、Zilliz Cloud、Elastic Search、Qdrant Cloud、Weaviate Cloud 、 PgVector、PgVectorRS等,可以测试其QPS、时延、recall。 VectorDBBench是一款使用python编写的…

深度学习模型在OCR中的可解释性问题与提升探讨

摘要: 随着深度学习技术在光学字符识别(OCR)领域的广泛应用,人们对深度学习模型的可解释性问题日益关注。本文将探讨OCR中深度学习模型的可解释性概念及其作用,以及如何提高可解释性,使其在实际应用中更可…

Java 零基础入门学习(小白也能看懂!)

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

第16篇:JTAG UART IP应用<三>

Q:如何通过HAL API函数库访问JTAG UART? A:Quartus硬件工程以及Platform Designer系统也和第一个Nios II工程--Hello_World的Quartus硬件工程一样。 Nios II软件工程对应的C程序调用HAL API函数,如open用于打开和创建文件&#…

使用YOLOv9训练和测试自己的数据集

任务:检测舌头上的裂纹和齿痕 已经有了labelme标注的数据集,并且转为了coco格式 参考: 详细!正确!COCO数据集(.json)训练格式转换成YOLO格式(.txt)_coco数据集的train…

服务器数据恢复—服务器raid常见故障表现原因解决方案

RAID(磁盘阵列)是一种将多块物理硬盘整合成一个虚拟存储的技术,raid模块相当于一个存储管理的中间层,上层接收并执行操作系统及文件系统的数据读写指令,下层管理数据在各个物理硬盘上的存储及读写。相对于单独的物理硬…

2023年全国青少年人工智能创新挑战赛真题

为了大家备考2024年第七届全国青少年人工智能创新挑战赛,今天分享2023年第6届全国青少年人工智能创新挑战赛C信息学专项真题,图形化编程及Python编程基本大同小异,参考6547网的Python及图形化编程题库。 一、单项选择题(共 15 题,每题 2 分,共…

vscode中使用conda虚拟环境

每一次配置环境,真的巨烦,网上的资料一堆还得一个个尝试,遂进行整理 1.准备安装好Anaconda 附带一篇测试教程,安装anaconda 2.准备安装vscode 安装地址:Visual Studio Code 3.创建Conda环境 搜索框搜索Anaconda…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及液态空气储能与综合需求响应的综合能源系统低碳经济调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

HTML静态网页成品作业(HTML+CSS)——游戏阴阳师介绍网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…

JAVASE2

封装的步骤: 1、所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问 2、对外提供简单入口:比如说被private修饰的成员变量,在其他类中只能通过getXxx/setXxx方法…

网络风暴:揭秘DDoS攻击的幕后黑手

在数字化时代的浪潮中,网络攻击已成为一种新型的战争手段。其中,分布式拒绝服务攻击(DDoS)以其强大的破坏力和隐蔽性,成为网络安全领域的一大挑战。DDoS攻击通过发动海量的恶意流量,如同狂风暴雨般席卷目标…

如何设置远程桌面连接?

远程桌面连接是一种方便快捷的远程访问工具,可以帮助用户在不同地区间快速组建局域网,解决复杂网络环境下的远程连接问题。本文将针对使用远程桌面连接的操作步骤进行详细介绍,以帮助大家快速上手。 步骤一:下载并安装远程桌面连接…

各种情况下的线缆大小选择

开口线鼻子和导线对应大小 开口铜鼻子对应线径大小 变压器容量对应高压侧电流大小 开关电流线缆功率对照表 家庭/工业最常用电线铜线电流承载功率 电工常用名词对应符号 导线面积承载的安全载流量及允许负荷对照表 漏电保护器选择参考表 电动机功率换算电流 电机功…

代码随想录——最大二叉树(Leetcode654)

题目链接 递归 二叉树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode rig…

.NET 轻量级、高效任务调度器:ScheduleTask

前言 至于任务调度这个基础功能,重要性不言而喻,大多数业务系统都会用到,世面上有很多成熟的三方库比如Quartz,Hangfire,Coravel 这里我们不讨论三方的库如何使用 而是从0开始自己制作一个简易的任务调度,如果只是到分钟级别的粒…

全能集成开发平台Team·IDE

三甲医院的床位太难等了。反正也是小手术,老苏周五在附近找了家二甲医院,幸运的是,门诊迅速为我开具了入院证。周六早晨就接受了手术,周日挂了一天水,周一下午就出院了。准备在家先休息两天。 2~4 周之后把支架取出来…

阿里云海外视频安全的DRM加密

随着科技的进步,视频以直播或录播的形式陆续开展海外市场,从而也衍生出内容安全的问题,阿里云在这方面提供了完善的内容安全保护机制,适用于不同的场景,如在视频安全提供DRM加 由图可以了解到阿里云保护直播安全的方法…