MMdetection 问题报错 mmdet/evaluation/metrics/coco_metric.py data[‘category_id’] = self.cat_ids[label] IndexError: list index out of range
方案一:有人说 在自己定义的 conifg文件中增加
metainfo = { 'classes': ('class1','class2', 'class2',), 'palette': [ (220, 20, 60), (221, 11, 22),(221, 11, 42), ] }
方案二:修改mmdet/evaluation/metrics 文件的内容,mmdet 是 python/site-package下的 mmdet
1 修改 mmdet/evaluation/functional/class_names.py
def coco_classes() -> list: """Class names of COCO.""" return [ 'clas1','class2','class3', ]
2 修改 mmdet/datasets/coco.py
METAINFO = { 'classes':('class1','class2','class3',), # palette is a list of color tuples, which is used for visualization. 'palette': [ (220, 20, 60), (221, 11, 22),(221, 11, 42),] }
方案三:我试了一下,还是没有用,感觉这是MMdetection的一个BUG,然后分别打印出来 报错中的 label self.cat_ids,
1 在完成方案一和方案二之后 如果label超出了你设置的类数量范围,可以检查config文件中关于model原始的config(一般在_base_文件夹下的model子文件夹下)的 num_classes=3;
2 如果是没有问题的;那肯定就是 self.cat_ids的维度小于你设置的类的数量,那可以选择简单粗暴一些,直接在mmdet/evaluation/metrics/coco_metric.py 中的 def compute_metrics(self, results: list) -> Dict[str, float]:部分,直接修改 self.cat_ids = [0, 1] ;问题肯定就被就解决了
方案四: 【最终】
按照方案一或者方案二修改后(观察方案一会覆盖方案二的部分);重点是model 配置文件中,num_classes 的值,需要设置,或者在最终的配置文件中覆盖;