使用 detectron2 如何更改我的数据集有多少 类

Using detectron2 how do I change how many classes my dataset has

尽管将 classes 行更改为

cfg.MODEL.ROI_HEADS.NUM_CLASSES = 2

在我的 detectron2 训练的配置部分 python 脚本我不断返回

Got an invalid category_id=1 for a dataset of 1 classes

我是否需要对数据集本身做一些特别的事情来让检测器知道我有多个 class?

我也试过了

cfg.MODEL.SEM_SEG_HEAD.NUM_CLASSES = 2
cfg.MODEL.RETINANET.NUM_CLASSES = 2

以防万一,但我使用的是 mask_rcnn_R_101_FPN_3x 模型,所以我认为第一个模型应该可以解决问题

我也尝试将我的 class id # 导入 thing_dataset_id_to_contiguous_id metadeta 属性

edit:我试过其他几个有同样错误的模型,当我调用

时触发
trainer = DefaultTrainer(cfg)

我还打印了我的(目前非常简单,因为我仍然只是原型)数据集字典,看不到任何明显的东西。

除了配置部分,我找不到任何地方它甚至似乎关心 classes

的数量

编辑 2:通过 wsl 安装了 ubuntu 的实例并尝试了 运行 脚本和同样的错误

编辑 3:尝试了 python 3.8 和 3.9 venv

我想通了,是我傻

因此,让我的愚蠢为困在这条小溪上的其他人提供答案。

所以除了添加

cfg.MODEL.ROI_HEADS.NUM_CLASSES = 2

进入您的配置部分,Detectron 还使用您的元数据来计算集合应该有多少 类

我正在使用

MetadataCatalog.get("my_dataset").thing_classes=thing_list

出于某种原因,我认为我正在获取一个对象的引用并设置一个属性(并且没有收到错误提示)

当我应该使用的是

MetadataCatalog.get("my_dataset").set(thing_classes=thing_list)

我不确定我在哪里交叉了我的电线,但此时它似乎正在工作