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提供的一种事务管理机制,它允许开发者通过声明的方式,而不是通过编程的方式,来管理事务的边界和行为。在声明式事务管理中,你可以通过注解或XML配置来指定方法或类上的事务属性和行为。 在Spring中&#x…

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如何…

JavaEE(入门)

JavaEE (详细注释版) 1. 入门基础 1.1 JavaEE简介 JavaEE(Java Platform, Enterprise Edition)是由Sun Microsystems推出的一套标准,现由Oracle维护。JavaEE平台主要用于开发和运行企业级应用程序,具有高…

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

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

VectorDBBench在windows的调试

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

轻松学EntityFramework Core--Entity Framework Core 简介

一、什么是Entity Framework Core Entity Framework Core(简称EF Core)是一个现代的、跨平台的、开源的ORM(对象关系映射)框架,由微软开发。它允许.NET开发者通过.NET对象与关系型数据库进行交互,而无需编…

putty中的plink.exe功能和用法

plink对于自动化的执行命令和工作非常有好处。plink可以让我们直接在命令行制定好命令,然后执行,完成后自动关闭session。 Plink: command-line connection utility Release 0.81 Usage: plink [options] [user]host [command]("host" can al…

2024年150道高频Java面试题(七十四)

147. 如何在 MyBatis 中实现一对多和多对一的关系映射&#xff1f; 在 MyBatis 中实现一对多&#xff08;One-to-Many&#xff09;和多对一&#xff08;Many-to-One&#xff09;的关系映射&#xff0c;主要是通过 <resultMap> 元素中的 <collection> 和 <assoc…

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

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

在Linux系统上使用Nginx的详解指南

目录 简介 准备工作 安装Nginx 通过包管理器安装 源码编译安装 Nginx基础配置 主配置文件nginx.conf详解 基本服务器块配置 SSL/TLS配置 动静分离 反向代理配置 负载均衡配置 常见问题及解决方法 结论 1. 简介 Nginx是一款高性能HTTP和反向代理服务器&#xff…

上位机图像处理和嵌入式模块部署(f103 mcu唯一的id)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 对于stm32f103系列mcu来说,一般每一颗原厂的mcu,都会对应一个唯一的id。那这个id可以用来做什么用呢?个人认为,可以用来做激活使用。举个例子,第一次mcu模块使用的时候,一般可…

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

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

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

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

前端最新面试题(ES6模块篇)

目录 1 ES5、ES6和ES2015有什么区别? 2 babel是什么,有什么作用? 3 let有什么用,有了var为什么还要用let? 4 举一些ES6对String字符串类型做的常用升级优化? 5 举一些ES6对Array数组类型做的常用升级优化 6 举一些ES6对Number数字类型做的常用升级优化 7 举一些ES…

前端基础入门三大核心之JS篇:JavaScript,不只是咖啡因那么简单!—— 进阶案例集锦篇

前端基础入门三大核心之JS篇&#xff1a;解锁JavaScript的魔法密钥—— 进阶案例集锦 &#x1f9d9; 基础概念与作用&#xff1a;JS&#xff0c;不仅仅是“脚本”&#x1f4da; 变量声明的进化史 &#x1f50d; 多维度功能使用&#xff1a;函数、数组与对象&#x1f916; 函数&…

前后端联调小细节

前端向后端发数据&#xff0c;有时候前端和后端的字段是一样的&#xff0c;字段没有问题&#xff0c;前端发过来的载荷也没有问题&#xff0c;但后端接收到的字段是null的&#xff0c;这时候可以排查前端发过来的数据是不是多嵌套了一层&#xff0c;比如发过来的是。 实例如下…

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

任务&#xff1a;检测舌头上的裂纹和齿痕 已经有了labelme标注的数据集&#xff0c;并且转为了coco格式 参考&#xff1a; 详细&#xff01;正确&#xff01;COCO数据集&#xff08;.json&#xff09;训练格式转换成YOLO格式&#xff08;.txt&#xff09;_coco数据集的train…

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

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

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

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

jpom linux发布前端 ruoyi

前置条件 辅助安装 一键安装maven curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 一键安装node curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 服务下载启动 下载安装 安装服务 安装服…