解决 mmseg/models/decode_heads/mask2former_head.py 中__init__()关键字参数错误

目录

【1 - 问题描述】

【2 - 报错位置检查】

【3 - 问题解决】

【4 - 解决的过程】

【1 - 问题描述】

在mmsegmentation中运行mask2former模型的分割任务遇到报错缺少关键字的错误:

TypeError: class `Mask2FormerHead` in mmseg/models/decode_heads/mask2former_head.py: __init__() got an unexpected keyword argument 'in_channels'

【2 - 报错位置检查】

 在我运行train.py命令中对应的--config 文件中确实有in_channels和strides等参数(我在查看了Mask2Former的源码Mask2Former/mask2former/modeling/transformer_decoder/mask2former_transformer_decoder.py at main · facebookresearch/Mask2Former (github.com)中,网络结构确实需要这些参数的输入)

而在模型库的".../mmsegmentation/mmseg/models/decode_heads/maskformer_head.py"(下文中 maskformer_head.py 都说的是这个文件)的head模块定义中,只有如下简单的几个参数报错,导致了__init__() got an unexpected keyword argument 'in_channels'。

【3 - 问题解决】

根本原因在于没有安装mmdet这一图像检测的库,maskformer这一实例分割网络依赖目标检测的结果,故会调用mmdetection的类和模块!!

参考 快速入门 — MMDetection 3.3.0 文档

由于我只是将 mmdet 用作依赖项或第三方包,故使用 MIM 安装它:

mim install mmdet

 到这里 ,我的__init__() got an unexpected keyword argument 'in_channels'的报错就解决了!!

【4 - 解决的过程】

(可选读)在这里只是简单记录一下我的解决过程:

通过搜索  ‘maskformer head定义in_channel’ ,发现一篇很详细的博文:mmdetection源码阅读--MaskFormer(三) - 知乎 (zhihu.com)

对比博文中的代码发现我的mmseg(分割)工作的MaskFormer Head的定义(maskformer_head.py)为:

看到“class Mask2FormerHead(MMDET_Mask2FormerHead):”,意识到是继承了mmdet的类。并且在该(maskformer_head.py)的import中有这么一句:

try:
    from mmdet.models.dense_heads

    import Mask2FormerHead as MMDET_Mask2FormerHead

except ModuleNotFoundError:
    MMDET_Mask2FormerHead = BaseModule          # BaseModule即 mmseg.models,而mmseg中没有in_channels等参数的定义

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,出现了TypeError: __init__() got an unexpected keyword argument 'date'和TypeError: __init__() got an unexpected keyword argument ‘encoding’的问题。这两个错误通常是由于使用了不支持的参数导致的。 对于第一个错误,TypeError: __init__() got an unexpected keyword argument 'date',这个错误通常发生在调用某个函数或方法时传递了不支持的参数。要解决这个问题,你需要检查你的代码,确保你传递的参数是正确的,并且与函数或方法的定义相匹配。 对于第二个错误,TypeError: __init__() got an unexpected keyword argument ‘encoding’,这个错误通常发生在使用json模块读取json文件时传递了不支持的参数。要解决这个问题,你需要检查你的代码,确保你传递的参数是正确的,并且与json模块的函数或方法的定义相匹配。 以下是两个示例来演示如何解决这两个错误: 1. 解决TypeError: __init__() got an unexpected keyword argument 'date'错误的示例: ```python class Person: def __init__(self, name): self.name = name person = Person(name='John', date='2021-01-01') # 错误的调用,传递了不支持的参数'date' ``` 在上面的示例,我们在实例化Person类时传递了一个不支持的参数'date',导致了TypeError: __init__() got an unexpected keyword argument 'date'错误。要解决这个错误,我们需要检查代码并删除不支持的参数'date'。 2. 解决TypeError: __init__() got an unexpected keyword argument ‘encoding’错误的示例: ```python import json with open('data.json', 'r', encoding='utf-8') as file: # 错误的调用,传递了不支持的参数'encoding' data = json.load(file) ``` 在上面的示例,我们在使用json模块读取json文件时传递了一个不支持的参数'encoding',导致了TypeError: __init__() got an unexpected keyword argument ‘encoding’错误。要解决这个错误,我们需要检查代码并删除不支持的参数'encoding'。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锅小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值