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

本文介绍了如何在升级到最新版本的PyTorch和MMDetection时,处理旧模型权重加载的问题,包括配置文件调整、权重路径设定、模型初始化及数据集扩展名匹配的技巧。作者提供了入门提示和常见问题的解决方案。
摘要由CSDN通过智能技术生成

文章首发见博客: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']继承现有的,然后在该文件加上数据集的信息即可。
  • 想配置文档里没提到的东西,就在代码搜一下关键词,然后照抄现有配置。
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值