MMDet3D——报错解决:KeyError: ‘XXX is not in the models registry‘

报错截图

MMDet3D——报错解决:KeyError: ‘XXX is not in the models registry‘_第1张图片

一般报错原因

  • 常见出错原因有三点:
    1. 该报错的Module没有使用register_module()进行注册;
    2. 没有在_init_.py__all__中注册;
    3. 该模块所在的mmdet/mmdet3d/mmseg没有被正确引用(意味着可能安装了其他版本的库,而没有调该库)。

非常少见的巨型BUG报错原因

这个报错非常恶心,因为问题并没有出现在以上三点中,下面将详说。

  • 配置如下所示:

MMDet3D——报错解决:KeyError: ‘XXX is not in the models registry‘_第2张图片

  • 我在mmdet3d的pulgin中加入了该类,并用mmseg进行了SEGMENTORS的注册,但是依旧在报register的错误,苦思冥想了很久时间,突然想,是否mmdet3d有区别于mmdet和mmseg的build类型(例如SEGMENTORS)?

  • 于是我尝试将mmseg的SEGMENTORS更换为mmdet3d的SEGMENTORS

MMDet3D——报错解决:KeyError: ‘XXX is not in the models registry‘_第3张图片

  • 果然,不报错了!(变成了ChannelMapper这个module的问题,说明MultiViewEncoderDecoder被正常build了)
    MMDet3D——报错解决:KeyError: ‘XXX is not in the models registry‘_第4张图片

  • 于是,我直接连后边的ChannelMapper也改成了mmdet3d的NECKS,但是,关于ChannelMapper又有了诡异的情况,ChannelMapper默认又从mmseg中build,就意味着,其实,NECKS还是要从mmseg里import。。。

MMDet3D——报错解决:KeyError: ‘XXX is not in the models registry‘_第5张图片

结语

  • 大无语,以后看报错使用build的类型就行。

  • 但是,这也说明了mmdet3d中build的类型与mmdetmmseg并不通用!!以后务必需要注意!

你可能感兴趣的:(OpenMMLab,pytorch)