MMRotate写自己的模型运行时出现“xxxxx is not in the model registry”

利用MMRotate编写自己的模型,运行时出现了本篇文章题目中的错误,通过搜集解决方案,发现该问题存在着多种可能的原因,不同原因对应的解决方案也不相同,因此用本篇文章记录一下解决思路。

error:“xxxxx is not in the model registry”

该error的意思时xxxxx模型未在已注册模型中

解决方案

1、检查是否按照要求进行了模型的注册

在MMRotate或MMDetection项目中正常注册一个模型时,通常需要注意以下两点(以模型RefineSingleStageDetector为例):

①. 检查模型前是否有@MODELS.register_module(), 没有注册的要进行添加
在这里插入图片描述
②. 检查__init__.py文件中是否进行导入,如下图所示(注意红线对应的代码)
在这里插入图片描述

2、更新完代码后是否重新进行了本地安装

在利用configs创建模型时,调用的是环境里面的mmrotate,如果更新代码与环境中的不会自动同步,那么在更新完代码后就需要重新进行本地安装,操作起来也相当简单:
①win+r,输入cmd进入windows控制台命令窗口并激活你所用的虚拟环境;
②cd到你更改代码后的mmrotate项目文件夹下,输入python setup.py install重新进行安装。
在这里插入图片描述
我这里安装成功的界面如下:
在这里插入图片描述

3、检查config文件中所写的模型与注册时的模型是否一致

这个问题看起来比较奇怪,这里举一个例子就理解了。比如我在MMRotate项目文件夹的config文件中所用model的type为RTMDet,但是实际注册是在mmdet中,此时我应该使用mmdet.RTMDet而不是RTMDet,如下图
在这里插入图片描述
在这里插入图片描述
此处的例子仅为解释问题,可能与代码的实际情况不相符,酌情参考。
解决方法有两种:
①直接在config文件中修改model的type,根据模型的实际注册情况决定采用mmdet.xxx还是xxx
②根据config文件去修改模型注册信息,比如config中采用的是mmdet.xxx,那么注册模型时所用的MODELS就必须是从mmdet中导入的,即:

from mmdet.registry import MODELS
@MODELS.register_module()
class xxx():
......

如果config中采用的是xxx,那么注册模型时所用的MODELS必须时从mmrotate中导入:

from mmrotate.registry import MODELS
@MODELS.register_module()
class xxx():
......

一句话概括就是config中model的type要与模型注册时所用的基准库保持一致。

4、非常有用但还没彻底搞清楚的解决方法

在运行的代码中,比如运行train.py可以直接在main函数中添加下列代码:

from mmrotate.utils import register_all_modules
register_all_modules(init_default_scope=True)

该方法亲测好用有效,放心食用。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Samuel Young

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

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

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

打赏作者

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

抵扣说明:

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

余额充值