在YoloWorld的训练中,进行周期验证的时候报出该错误:
File "/xx/xx/anaconda3/envs/yoloworld/lib/python3.8/site-packages/mmdet/evaluation/metrics/coco_metric.py", line 243, in results2json
data['category_id'] = self.cat_ids[label]
IndexError: list index out of range
Issue中作者的建议是仿照CocoDataset创建一个自己的Dataset类。具体地就得自己研究尝试了,思路是先建立BomoDataset
和继承前者的YoloWorldBomoDataset
(名字自己随便取的),再在各自的__init__.py
中引入。
具体步骤如下:
Step1. 在anaconda3/envs/yoloworld/lib/python3.8/site-packages/mmdet/datasets/coco.py
中定义自己的BomoDataset
类。
复制class CocoDataset
并命名为自己的class BomoDataset
,然后修改变量METAINFO
中的类别名。如:
METAINFO = {
'classes':
("Big black spot", ..),
..
在anaconda3/envs/yoloworld/lib/python3.8/site-packages/mmdet/datasets/__init__.py
中引入BomoDataset
类
from .coco import BomoDataset
__all__ = [.., 'BomoDataset']
Step2. 在anaconda3/envs/yoloworld/lib/python3.8/site-packages/mmyolo/datasets/yolov5_coco.py
中定义自己的YoloWorldBomoDataset
类。
复制class YOLOv5CocoDataset
并命名为自己的class YoloWorldBomoDataset(BatchShapePolicyDataset, BomoDataset)
,注意继承。
在anaconda3/envs/yoloworld/lib/python3.8/site-packages/mmyolo/datasets/__init__.py
中引入YoloWorldBomoDataset
from .yolov5_coco import YoloWorldBomoDataset
__all__ = [.., 'YoloWorldBomoDataset']
Step3. 在configs/finetune_bomo/yolo_world_l_dual_vlpan_2e-4_80e_8gpus_finetune_bomo.py
中,将train和valid的dataloader
修改为自己新定义的YoloWorldBomoDataset
:
dataset=dict(
..
dataset=dict(
type='YoloWorldBomoDataset
..
到这里我就解决该问题了。