MMDet加载旧版本代码权重及自定义数据集的问题及解决

2024-02-16 22:04

本文主要是介绍MMDet加载旧版本代码权重及自定义数据集的问题及解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章首发见博客:https://mwhls.top/4881.html。
无图/格式错误/后续更新请见首发页。
更多更新请到mwhls.top查看
欢迎留言提问或批评建议,私信不回。

场景
  • PyTorch说它们2.0很快,那么就安个最新的Torch和MMDet。
  • 打开两年前的顶会文章,复制更早几年的代码文件以及权重。
  • 找个数据集。
  • 按照最新的config进行配置权重路径。
  • 然而,找不到加载权重。
解决
  • config 配置
    # 权重加载为 init_cfg=dict(checkpoint='pretrained/p2t_tiny.pth'),和仓库中其它config一样,区别在于一个是网上链接,一个是本地路径。model = dict(type='RetinaNet',backbone=dict(_delete_=True,type='p2t_tiny',init_cfg=dict(checkpoint='pretrained/p2t_tiny.pth')),neck=dict(in_channels=[48, 96, 240, 384]))# 模型获取预训练路径
  • 模型获取预训练路径
    • 为模型增加一个**kwargs参数,然后获取其中的checkpoint
    • 然后在init_weight()中调用。
    class p2t():def __init__(self, size, **kwargs):self.pretrained = kwargs['init_cfg']['checkpoint']def init_weights(self):logger = MMLogger.get_current_instance()load_checkpoint(self, self.pretrained, map_location='cpu', strict=False, logger=logger)
  • 模型权重不匹配

    • 核对一下缺失的键,和预料之外的键的差别,可能多了一个backbone的前缀。
    • 可以在tools/model_converters里面随便找一个代码改改,把权重加载进来,然后去掉各键的前缀,再保存
  • 数据集加载为空

    • 扩展名对不上。数据集class用的.png后缀,而图片是.jpg后缀,修改一下就好。
    • 额外前缀。config中有个prefix的选项,不应注释,而应留空,省得出现train2017的coco前缀。
    • 数据集类名对不上。有的数据集,表面上用英文提供信息,背地里用按葡萄牙语作为k-fold的测试标注。
一些入门提示
  • 加新模型,直接在mmdet/model目录下的各文件中加就好,然后再修改对应目录的__init__.py
  • 加新数据集,直接复制mmdet/datasets里面coco系列的类,修改里面设置的图片扩展名等差异信息即可,最后修改__init__.py
  • config可以用_base_ = ['../pvt/retinanet_pvt-t_fpn_1x_coco.py']继承现有的,然后在该文件加上数据集的信息即可。
  • 想配置文档里没提到的东西,就在代码搜一下关键词,然后照抄现有配置。

这篇关于MMDet加载旧版本代码权重及自定义数据集的问题及解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/715820

相关文章

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

SpringBoot实现图形验证码的示例代码

《SpringBoot实现图形验证码的示例代码》验证码的实现方式有很多,可以由前端实现,也可以由后端进行实现,也有很多的插件和工具包可以使用,在这里,我们使用Hutool提供的小工具实现,本文介绍Sp... 目录项目创建前端代码实现约定前后端交互接口需求分析接口定义Hutool工具实现服务器端代码引入依赖获

利用Python在万圣节实现比心弹窗告白代码

《利用Python在万圣节实现比心弹窗告白代码》:本文主要介绍关于利用Python在万圣节实现比心弹窗告白代码的相关资料,每个弹窗会显示一条温馨提示,程序通过参数方程绘制爱心形状,并使用多线程技术... 目录前言效果预览要点1. 爱心曲线方程2. 显示温馨弹窗函数(详细拆解)2.1 函数定义和延迟机制2.2