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
中没有设置评估的方法时,就会导致报错。
解决办法
- 添加评估指标参数
- 检查模型用的评估指标
在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
修改成下面的样子
MetadataCatalog.get("custom_" + d).set(thing_classes=class_names,evaluator_type="coco")
- 不计算验证集上的评估指标
修改配置文件,将TEST
改为空,代码如下
DATASETS:
TRAIN: ("custom_train",)
TEST: ()
以上是关于detectron2报AttributeError: Attribute ‘evaluator_type‘ does not exist in the metadata of dataset(代码片段的主要内容,如果未能解决你的问题,请参考以下文章
[深度学习][原创]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’解决方法