改动模型后,加载部分预训练权重文件

article/2025/8/24 23:16:19

加载部分预训练权重文件

最近在做姿态估计相关内容,需要将Hrnet模型修改,Hrnet是基于coco数据集训练的,coco数据集是17个关节点,而我需要的是15个关节点,在将数据集标好训练之后,发现由于数据量比较小,模型能够很快收敛,但是泛化性能极差,于是,就想着把之前的coco预训练权重文件拿出来一部分,对我自己的模型进行训练,果不其然,在使用部分预训练权重文件进行训练后,模型的泛化性有了很大的改善,现在分享给大家。

1首先我们需要明确权重文件的类型是什么:我们在使用pytorch进行模型训练的时候,最后的权重文件实际上是一个字典, 只不过是一个有序字典OrderedDict类 ,关于这个类的各种操作,请参考这篇博客, 里面已经说的很详细了OrderedDict

2在明确权重文件其实就是一个字典类的时候,那么我们就能了解,权重文件其实就是key+value,所谓key就是每一层的关键字,而value就是每一层的矩阵数据,下面以一份权重文件为例:

预训练权重文件

我们在加载预训练权重文件之后,发现就是一个字典,并且是一个有序字典,那么同样,我们可以打印出字典的关键字:

字典关键字

在了解上述操作过程以后,那么如果我们想要加载部分预训练权重文件就很简单啦。

首先,我们需要将我们实例化删改后的模型:

model = YOUR_changed_model(**)

其次,加载你删改后模型的state_dict()

model_state_dict= model.state_dict()

同样,model_state_dict()也是一个字典文件,因为我们已经改变了模型,但是我们改变的只是模型的一部分,换句话说,改变的只是权重文件字典中的某些keys或者values,而我们加载的部分权重文件其实就是在原来权重文件中没有修改的。以我的模型为例,我只是改变了模型的最后的全连接层,本来最后一维是17维,我需要的是15维,那么也就是说出去最后一层的预训练权重文件,我都是可以使用的,并且最后一维我可以使用预训练权重文件的前15维,因此,修改如下:

for i, (k, v) in enumerate(model_state.items()):if i < 1752:model_state[k] = pretrained_weights[k] else:model_state[k] = pretrained_weights[k][:-2]
torch.save(model_state, 'best.pt')  # 保存权重文件

最后由于我的模型修改比较简单,所以,调取预训练权重文件也比较容易,但是核心思想是一致的,就是把权重文件看作是一个字典,在我们新的模型中添加原来权重文件中存在的key以及value。


http://chatgpt.dhexx.cn/article/lnGutYNR.shtml

相关文章

Pointer 0x0, not in getPreloadedDrawables android 系统资源预加载

Android系统在启动的时候&#xff0c;会对一些系统资源进行预加载。这样不仅使得应用程序在需要时可以快速地访问这些资源&#xff0c;还使得这些资源能够在不同应用程序之间进行共享。在硬件加速渲染环境中&#xff0c;这些预加载资源还有进一步优化的空间。Android系统提供了…

OpenCV | 基本矩阵操作

起因 在2013年1月份发行的OpenCV 2.4.4中,对Java的支持也正式发布。同时也有支持Python。 环境配置 这里的环境配置十分简单,在这里,操作系统64位,所以选这个,将里面的opencv_java342.dll负责到你本地下载的JDK的bin目录下,和JDK下的JRE目录下的bin目录下。 我使用的…

Android应用程序UI硬件加速渲染的预加载资源地图集服务(Asset Atlas Service)分析

我们知道&#xff0c;Android系统在启动的时候&#xff0c;会对一些系统资源进行预加载。这样不仅使得应用程序在需要时可以快速地访问这些资源&#xff0c;还使得这些资源能够在不同应用程序之间进行共享。在硬件加速渲染环境中&#xff0c;这些预加载资源还有进一步优化的空间…

预训练词嵌入

作者|ARAVIND PAI 编译|VK 来源|Analytics Vidhya 概述 理解预训练词嵌入的重要性 了解两种流行的预训练词嵌入类型:Word2Vec和GloVe 预训练词嵌入与从头学习嵌入的性能比较 介绍 我们如何让机器理解文本数据?我们知道机器非常擅长处理和处理数字数据,但如果我们向它们提供…

【论文整理】风格迁移中格拉姆矩阵(Gram Matrix)的使用

Gram矩阵在风格迁移中的使用 1、格拉姆矩阵的定义2、风格迁移的任务描述3、格拉姆矩阵的使用方法3、实现过程4、总结5、参考文献 1、格拉姆矩阵的定义 1&#xff09; 什么是格拉姆矩阵&#xff1a; 在内积空间中&#xff0c;一组向量[v1, v2, … , vn]的格拉姆矩阵&#xff0…

Tensorflow加载Vgg预训练模型

很多深度神经网络模型需要加载预训练过的Vgg参数&#xff0c;比如说&#xff1a;风格迁移、目标检测、图像标注等计算机视觉中常见的任务。那么到底如何加载Vgg模型呢&#xff1f;Vgg文件的参数到底有何意义呢&#xff1f;加载后的模型该如何使用呢&#xff1f;本文将以Vgg19为…

混淆矩阵、准确率、F1和召回率的具体实现及混淆矩阵的可视化

utils专栏不会细讲概念性的内容&#xff0c;偏向实际使用&#xff0c;如有问题&#xff0c;欢迎留言。如果对你有帮助就点个赞哈&#xff0c;也不搞什么粉丝可见有的没的&#xff0c;有帮助点个赞就ok 1、混淆矩阵、准确率、F1和召回率的计算 混淆矩阵 对于混淆矩阵的计算…

预编码技术

预编码的基本原理 TD-LTE下行传输采用了MIMO-OFDM的物理层构架&#xff0c;通过最多4个发射天线并行传输多个&#xff08;最多4个&#xff09;数据流&#xff0c;能够有效地提高峰值传输速率。LTE的物理层处理过程中&#xff0c;预编码是其核心功能模块&#xff0c;物理下行共…

pytorch 计算混淆矩阵

混淆矩阵是评估模型结果的一种指标 用来判断分类模型的好坏 预测对了 为对角线 还可以通过矩阵的上下角发现哪些容易出错 从这个 矩阵出发 可以得到 acc &#xff01; precision recall 特异度&#xff1f; 目标检测01笔记AP mAP recall precision是什么 查全率是什么 查准率…

Code::Blocks 相关

文库上的使用教程 http://blog.csdn.net/JGood/article/details/5252119 使用手册 http://blog.csdn.net/liquanhai/article/details/6618300 一&#xff0e;Code::blocks Code::blocks集成开发环境是一个支持编译、链接、调试许多种语言的IDE&#xff0c;支持VS6.0到VS200…

mysql8 sql_mode去掉only_full_group_by

1.查询版本与sqlmode: select version(), sql_mode; 2.修改sqlmode,执行下面两句代码&#xff1a; set global sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION;set session sql_modeSTRICT_TRANS_TABLES,NO_…

- MySQL - 存储过程 Stored Procedure

文章目录 存储过程是什么存储过程的优点存储过程的缺点存储过程分类存储过程的查询语句存储过程的创建和调用语法实例 - IN、OUT、INOUT条件语句循环语句迭代 存储过程是什么 存储过程是一组为了完成特定功能的SQL语句集&#xff0c;存储在数据库中&#xff0c;一次编译多次使…

mysql的delete语句_mysql删除语句

展开全部 mysql删除语句如下&#xff1a; 1、delete删除一行&#xff1a;delete from student where id1。 2、delete删除多行&#xff1a;delete from student where in (1,2,3)3。 3、删62616964757a686964616fe78988e69d8331333433623162除表的所有数据&#xff1a;delete f…

mysql any all some

假设现在有两张表 a &#xff0c; b 如下 SELECT * FROM a WHERE id > ANY(SELECT id FROM b )# any 等价于 some 这里有两个id sql的意思大概是查询a表的所有&#xff0c;在where中a的id > 子表 b的id 这里用到了any(some) 他们的意思是一样的&#xff0c;就是说a表…

mysql 的 sql_mode.only_full_group_by属性解析

文章目录 1. 初始条件2. 现象3. 解决①&#xff1a;关闭sql_mode 的 only_full_group_by模式②&#xff1a;使用 ANY_VALUE() 抑制 ONLY_FULL_GROUP_BY 的影响 mysql8.0官网&#xff1a;处理 group by 1. 初始条件 现在有这样一张表&#xff0c;其中有两条 name 裤子 的数据…

MYSQL 删除语句

删除数据(DELETE) 如果你失忆了&#xff0c;希望你能想起曾经为了追求梦想的你。 数据库存储数据&#xff0c;总会有一些垃圾数据&#xff0c;也会有一些不需要用的数据了&#xff0c;这些情况下&#xff0c;我们就可以删除这些数据&#xff0c;释放出一定的空间&#xff0c;给…

MySql递归RECURSIVE的详解

背景&#xff1a; 在实际开发的过程中&#xff0c;我们会遇到一些数据是层级关系的、要展示数据子父级关系的时候&#xff0c; 第一个解决方案&#xff1a;将数据库中的所有数据都查询出来用Java代码进行处理。 第二个解决方案&#xff1a;可以考虑MySql中的RECURSIVE递归进行…

【MYSQL WITH recursive使用】

MYSQL WITH recursive使用 MYSQL WITH recursive使用语法用法1&#xff1a;输出1~n或者求 1~n的和用法2 父求子创建table&#xff1a;user求张三后代 MYSQL WITH recursive使用 由于在项目中有使用到recursive&#xff0c;因此在此做记录 语法 WITH recursive 表名 AS ( 初始…

U 盘安装 CentOS7 时盘符和安装源不可用问题

记录一次在物理机上安装 CentOS7 遇到的问题及其解决办法&#xff0c;主要有两个问题卡住了很久&#xff0c;一个是盘符问题&#xff0c;一个就是安装源不可用的问题 。 1 No such device 1.1 问题描述 用 U 盘在物理机上安装 CentOS7 的时候&#xff0c;出现 could not ins…

Vmware Workstation17 安装centos7(详细教程)

1、为什么安装Vmware Vmware Workstation可以帮我们他们创建虚拟机&#xff0c;模拟生产环境(linux)&#xff0c;搭建集群等。作为一个开发人员特别是后端开发人员是需要懂一些运维的&#xff0c;不需要精通&#xff0c;遇到问题能定位排查。我自己想做一个自己的项目&#xf…