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
中没有设置评估的方法时,就会导致报错。
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
从上面的代码可以看出支持lvis
和coco
数据集,detectron2不仅仅支持这两种还包括很多其他的评估方法,可以参考detectron2.evaluation
里面封装的函数。
MetadataCatalog
修改成下面的样子MetadataCatalog.get("custom_" + d).set(thing_classes=class_names,evaluator_type="coco")
TEST
改为空,代码如下DATASETS:
TRAIN: ("custom_train",)
TEST: ()