MMdetection 问题报错 mmdet/evaluation/metrics/coco_metric.py data[‘category_id’] = self.cat_ids[label] IndexError: list index out of range
方案一:有人说 在自己定义的 conifg文件中增加
1 2 3 4 5 6 | 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
1 2 3 4 5 6 7 | def coco_classes() - > list : """Class names of COCO.""" return [ 'clas1' , 'class2' , 'class3' , ] |
2 修改 mmdet/datasets/coco.py
1 2 3 4 5 | 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 的值,需要设置,或者在最终的配置文件中覆盖;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~