detectron2报AttributeError: Attribute ‘evaluator_type‘ does not exist in the metadata of dataset

祁晟
2023-12-01

错误分析

AttributeError: Attribute ‘evaluator_type’ does not exist in the metadata of dataset ‘custom_val’. Available keys are dict_keys([‘name’, ‘thing_classes’]).

在使用detectron2训练模型的时候报了上面的错误,错误发生在使用验证集评估模型性能的时候

错误原因

detectron2在计算模型的时候会选择一种评估的方法,如果你在MetadataCatalog中没有设置评估的方法时,就会导致报错。

解决办法

  1. 添加评估指标参数
  • 检查模型用的评估指标
    train_net.py中找到do_test函数,找到下面这样的代码
        if evaluator_type == "lvis":
            evaluator = LVISEvaluator(dataset_name, cfg, True, output_folder)
        elif evaluator_type == 'coco':
            evaluator = COCOEvaluator(dataset_name, cfg, True, output_folder)
        else:
            assert 0, evaluator_type

从上面的代码可以看出支持lviscoco数据集,detectron2不仅仅支持这两种还包括很多其他的评估方法,可以参考detectron2.evaluation里面封装的函数。

  • 修改MetadataCatalog
    在验证集的MetadataCatalog修改成下面的样子
MetadataCatalog.get("custom_" + d).set(thing_classes=class_names,evaluator_type="coco")
  1. 不计算验证集上的评估指标
    修改配置文件,将TEST改为空,代码如下
DATASETS:
  TRAIN: ("custom_train",)
  TEST: ()
 类似资料: