detectron2报AttributeError: Attribute ‘evaluator_type‘ does not exist in the metadata of dataset(代码片段

Posted 修炼之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了detectron2报AttributeError: Attribute ‘evaluator_type‘ does not exist in the metadata of dataset(代码片段相关的知识,希望对你有一定的参考价值。

错误分析

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: ()

以上是关于detectron2报AttributeError: Attribute ‘evaluator_type‘ does not exist in the metadata of dataset(代码片段的主要内容,如果未能解决你的问题,请参考以下文章

win10 detectron2 安装报错解决

win10 detectron2 安装报错解决

[深度学习][原创]detectron2报错RuntimeError: CUDA error: device-side assert triggered

pymysql报AttributeError: module 'pymysql' has no attribute 'connect'

Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法

Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法