YOLO-World
YOLO-World copied to clipboard
微调验证阶段报错:IndexError: list index out of range
我这边随便下载了一份demo数据集:balloons,并根据finetuning.md进行修改和配置,下面是对应的配置文件:
_base_ = (
'../../third_party/mmyolo/configs/yolov8/'
'yolov8_l_syncbn_fast_8xb16-500e_coco.py')
custom_imports = dict(
imports=['yolo_world'],
allow_failed_imports=False)
# hyper-parameters
num_classes = 3
num_training_classes = 3
max_epochs = 80 # Maximum training epochs
close_mosaic_epochs = 10
save_epoch_intervals = 5
text_channels = 512
neck_embed_channels = [128, 256, _base_.last_stage_out_channels // 2]
neck_num_heads = [4, 8, _base_.last_stage_out_channels // 2 // 32]
base_lr = 2e-4
weight_decay = 0.05
train_batch_size_per_gpu = 16
load_from='pretrained/yolo_world_l_clip_base_dual_vlpan_2e-3adamw_32xb16_100e_o365_goldg_train_pretrained-0e566235.pth'
persistent_workers = False
# model settings
model = dict(
type='YOLOWorldDetector',
mm_neck=True,
num_train_classes=num_training_classes,
num_test_classes=num_classes,
data_preprocessor=dict(type='YOLOWDetDataPreprocessor'),
backbone=dict(
_delete_=True,
type='MultiModalYOLOBackbone',
image_model={{_base_.model.backbone}},
text_model=dict(
type='HuggingCLIPLanguageBackbone',
model_name='openai/clip-vit-base-patch32',
frozen_modules=['all'])),
neck=dict(type='YOLOWolrdDualPAFPN',
guide_channels=text_channels,
embed_channels=neck_embed_channels,
num_heads=neck_num_heads,
block_cfg=dict(type='MaxSigmoidCSPLayerWithTwoConv'),
text_enhancder=dict(type='ImagePoolingAttentionModule',
embed_channels=256,
num_heads=8)),
bbox_head=dict(type='YOLOWorldHead',
head_module=dict(type='YOLOWorldHeadModule',
embed_dims=text_channels,
num_classes=num_training_classes)),
train_cfg=dict(assigner=dict(num_classes=num_training_classes)))
# dataset settings
text_transform = [
dict(type='RandomLoadText',
num_neg_samples=(num_classes, num_classes),
max_num_samples=num_training_classes,
padding_to_max=True,
padding_value=''),
dict(type='mmdet.PackDetInputs',
meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip',
'flip_direction', 'texts'))
]
mosaic_affine_transform = [
dict(
type='MultiModalMosaic',
img_scale=_base_.img_scale,
pad_val=114.0,
pre_transform=_base_.pre_transform),
# dict(type='YOLOv5CopyPaste', prob=_base_.copypaste_prob),
dict(
type='YOLOv5RandomAffine',
max_rotate_degree=0.0,
max_shear_degree=0.0,
max_aspect_ratio=100.,
scaling_ratio_range=(1 - _base_.affine_scale,
1 + _base_.affine_scale),
# img_scale is (width, height)
border=(-_base_.img_scale[0] // 2, -_base_.img_scale[1] // 2),
border_val=(114, 114, 114))
# min_area_ratio=_base_.min_area_ratio,
# use_mask_refine=_base_.use_mask2refine)
]
train_pipeline = [
*_base_.pre_transform,
*mosaic_affine_transform,
dict(
type='YOLOv5MultiModalMixUp',
prob=_base_.mixup_prob,
pre_transform=[*_base_.pre_transform,
*mosaic_affine_transform]),
*_base_.last_transform[:-1],
*text_transform
]
train_pipeline_stage2 = [
*_base_.train_pipeline_stage2[:-1],
*text_transform
]
coco_train_dataset = dict(
_delete_=True,
type='MultiModalDataset',
dataset=dict(
type='YOLOv5CocoDataset',
data_root='data/balloons_coco',
ann_file='annotations/instances_train2017.json',
data_prefix=dict(img='train2017/'),
filter_cfg=dict(filter_empty_gt=False, min_size=32)),
class_text_path='data/texts/balloons_coco_class_texts.json',
pipeline=train_pipeline)
train_dataloader = dict(
persistent_workers=persistent_workers,
batch_size=train_batch_size_per_gpu,
collate_fn=dict(type='yolow_collate'),
dataset=coco_train_dataset)
test_pipeline = [
*_base_.test_pipeline[:-1],
dict(type='LoadText'),
dict(
type='mmdet.PackDetInputs',
meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape',
'scale_factor', 'pad_param', 'texts'))
]
coco_val_dataset = dict(
_delete_=True,
type='MultiModalDataset',
dataset=dict(
type='YOLOv5CocoDataset',
data_root='data/balloons_coco',
ann_file='annotations/instances_val2017.json',
data_prefix=dict(img='val2017/'),
filter_cfg=dict(filter_empty_gt=False, min_size=32)),
class_text_path='data/texts/balloons_coco_class_texts.json',
pipeline=test_pipeline)
val_dataloader = dict(dataset=coco_val_dataset)
test_dataloader = val_dataloader
# training settings
default_hooks = dict(
param_scheduler=dict(
scheduler_type='linear',
lr_factor=0.01,
max_epochs=max_epochs),
checkpoint=dict(
max_keep_ckpts=-1,
save_best=None,
interval=save_epoch_intervals))
custom_hooks = [
dict(
type='EMAHook',
ema_type='ExpMomentumEMA',
momentum=0.0001,
update_buffers=True,
strict_load=False,
priority=49),
dict(
type='mmdet.PipelineSwitchHook',
switch_epoch=max_epochs - close_mosaic_epochs,
switch_pipeline=train_pipeline_stage2)
]
train_cfg = dict(
max_epochs=max_epochs,
val_interval=5,
dynamic_intervals=[((max_epochs - close_mosaic_epochs),
_base_.val_interval_stage2)])
optim_wrapper = dict(
optimizer=dict(
_delete_=True,
type='AdamW',
lr=base_lr,
weight_decay=weight_decay,
batch_size_per_gpu=train_batch_size_per_gpu),
paramwise_cfg=dict(
bias_decay_mult=0.0,
norm_decay_mult=0.0,
custom_keys={'backbone.text_model': dict(lr_mult=0.01),
'logit_scale': dict(weight_decay=0.0)}),
constructor='YOLOWv5OptimizerConstructor')
# evaluation settings
val_evaluator = dict(
_delete_=True,
type='mmdet.CocoMetric',
proposal_nums=(100, 1, 10),
ann_file='data/balloons_coco/annotations/instances_val2017.json',
metric='bbox')
目前能正常训练,等到评估的时候报了下面的错误:
Traceback (most recent call last):
File "./tools/train.py", line 120, in <module>
main()
File "./tools/train.py", line 116, in main
runner.train()
File "/home/administrator/miniconda3/envs/yolo-world/lib/python3.8/site-packages/mmengine/runner/runner.py", line 1777, in train
model = self.train_loop.run() # type: ignore
File "/home/administrator/miniconda3/envs/yolo-world/lib/python3.8/site-packages/mmengine/runner/loops.py", line 102, in run
self.runner.val_loop.run()
File "/home/administrator/miniconda3/envs/yolo-world/lib/python3.8/site-packages/mmengine/runner/loops.py", line 374, in run
metrics = self.evaluator.evaluate(len(self.dataloader.dataset))
File "/home/administrator/miniconda3/envs/yolo-world/lib/python3.8/site-packages/mmengine/evaluator/evaluator.py", line 79, in evaluate
_results = metric.evaluate(size)
File "/home/administrator/miniconda3/envs/yolo-world/lib/python3.8/site-packages/mmengine/evaluator/metric.py", line 133, in evaluate
_metrics = self.compute_metrics(results) # type: ignore
File "/home/administrator/miniconda3/envs/yolo-world/lib/python3.8/site-packages/mmdet/evaluation/metrics/coco_metric.py", line 425, in compute_metrics
result_files = self.results2json(preds, outfile_prefix)
File "/home/administrator/miniconda3/envs/yolo-world/lib/python3.8/site-packages/mmdet/evaluation/metrics/coco_metric.py", line 245, in results2json
data['category_id'] = self.cat_ids[label]
IndexError: list index out of range
调试发现 self.cat_ids 的值为空,这是哪里没设置对吗?
@David-19940718 您好,这个问题应该是由于直接使用CocoDataset导致类比不一致,我建议您可以新建一个dataset class,然后指定相应的类别。
@wondervictor,感谢回复。我这边查看了下,使用efficient_neck可以正常训练和验证;可是使用dual_vlpan就会报上面的错误,得到的self.cat_ids有点奇怪,好像不是基于我提供的classes去映射的。我是根据提供的coco_class_texts.json去修改的,如[['cat'], ['dog']]。
请问这两个配置文件有啥区别吗?我以为只是网络结构不同而已,是需要做额外的配置还是? 另外请教下几个问题:
base_lr和weight_decay的值默认是2e-4,如果我是使用1、2或者4卡等,设置不同的batchsize,这些值应该如何调整?num_classes和num_training_classes的区别是什么?我看两个值好像是一样的?
@wondervictor,感谢回复。我这边查看了下,使用efficient_neck可以正常训练和验证;可是使用dual_vlpan就会报上面的错误,得到的self.cat_ids有点奇怪,好像不是基于我提供的classes去映射的。我是根据提供的coco_class_texts.json去修改的,如[['cat'], ['dog']]。
请问这两个配置文件有啥区别吗?我以为只是网络结构不同而已,是需要做额外的配置还是? 另外请教下几个问题:
base_lr和weight_decay的值默认是2e-4,如果我是使用1、2或者4卡等,设置不同的batchsize,这些值应该如何调整?num_classes和num_training_classes的区别是什么?我看两个值好像是一样的?
您好,我遇到了同样的问题,配置文件修改也是一样的,但是,请问为啥我用[efficient_neck]也不可以正常验证呢?
@David-19940718 您好,针对前面cat_ids的问题,目前应该是CocoDataset封装不太灵活,这块我也在更新,目前比较简单的处理方式是重构一个您自己的Dataset。
对于关于配置的问题:
- 我个人建议根据batch size调整learning rate,基本保证batchsize和learning rate正比,可以参考 Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour.
num_classes是inference stage的类别数量(根据不同的dataset会调整),num_training_classes是训练阶段的类别数量(默认为80)。
@David-19940718 @Sally-lxy, 这个cat_ids的问题和PAN没有太多关系,应该都会出现。
@David-19940718 @Sally-lxy, 这个
cat_ids的问题和PAN没有太多关系,应该都会出现。
好的,感谢。
@David-19940718 您好,针对前面
cat_ids的问题,目前应该是CocoDataset封装不太灵活,这块我也在更新,目前比较简单的处理方式是重构一个您自己的Dataset。 对于关于配置的问题:
- 我个人建议根据batch size调整learning rate,基本保证batchsize和learning rate正比,可以参考 Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour.
num_classes是inference stage的类别数量(根据不同的dataset会调整),num_training_classes是训练阶段的类别数量(默认为80)。
请问下说num_training_classes说是训练阶段的类别数量(80),但光object365就有365个类别、flickr数据集没有类别,没有太明白80是怎么来的,谢谢
Hi, Getting same error for custom data finetuning.
data['category_id'] = self.cat_ids[label]
IndexError: list index out of range
Any way to resolve error?
Hi, Getting same error for custom data finetuning.
data['category_id'] = self.cat_ids[label] IndexError: list index out of rangeAny way to resolve error?
implement your own Dataset class, and set your METAINFO instead of COCO's.
Hi, Getting same error for custom data finetuning.
data['category_id'] = self.cat_ids[label] IndexError: list index out of rangeAny way to resolve error? you should do in your config_*.py step 1: new metainfo
metainfo = dict( classes=("classA", "classB"))step 2: add metainfo in all dataset setting likedataset=dict( type='YOLOv5CocoDataset', metainfo=metainfo, data_root='***',
sorry. Could you tell me which path can I find this config? I didn't find it.
Hi, Working on new Dataset class with the help of doc https://mmdetection.readthedocs.io/en/v2.9.0/tutorials/customize_dataset.html. But facing various error related to mmdet.custom module, and _metainfo when BaseDataset used while executing train command .
Dataset has coco json format and using colab for implementation.
I would like to know what missing in the dataset.py.
# custom dataset class
import mmcv
import numpy as np
import json
from mmyolo.registry import DATASETS
# from mmengine.dataset.base_dataset import BaseDataset
from mmdet.custom import CustomDataset
from mmengine.dataset import BaseDataset
# from torch.utils.data import Dataset
@DATASETS.register_module()
class CountDataset(CustomDataset):
def __init__(self,
data_root,
ann_file,
data_prefix):
self.ann_file = ann_file
self.data_root = data_root
self.data_prefix = data_prefix
def load_annotations(self):
with open (self.ann_file, 'r') as f:
data = json.loads(f.read())
data_infos = []
for i in range(len(data['annotations'])):
filename = data['images'][data['annotations'][i]['image_id']]['file_name']
width = data['images'][data['annotations'][i]['image_id']]['width']
height = data['images'][data['annotations'][i]['image_id']]['height']
bboxes = data['annotations'][i]['bbox']
labels = (data['annotations'][i]['category_id']-1)
data_infos.append(
dict(
filename=self.data_root+"/"+self.data_prefix['img']+filename,
width=width,
height=height,
ann=dict(
bboxes=np.array(bboxes).astype(np.float32),
labels=np.array(labels).astype(np.int64))
))
return data_infos
def get_ann_info(self, idx):
return self.data_infos[idx]['ann']
@David-19940718 您好,针对前面
cat_ids的问题,目前应该是CocoDataset封装不太灵活,这块我也在更新,目前比较简单的处理方式是重构一个您自己的Dataset。 对于关于配置的问题:
- 我个人建议根据batch size调整learning rate,基本保证batchsize和learning rate正比,可以参考 Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour.
num_classes是inference stage的类别数量(根据不同的dataset会调整),num_training_classes是训练阶段的类别数量(默认为80)。请问下说num_training_classes说是训练阶段的类别数量(80),但光object365就有365个类别、flickr数据集没有类别,没有太明白80是怎么来的,谢谢
@taofuyu 您好,这个80是一个超参数,是训练过程采样类别的数量,一方面我保持了原来YOLO训练的部分参数 (loss weight这些,80是YOLO默认训练的类别数量);其次,80是一个计算和训练速度的一个trade-off,我们验证过将训练过程的类别采样提高到365,预训练的zero-shot结果会提升。
@David-19940718 您好,针对前面
cat_ids的问题,目前应该是CocoDataset封装不太灵活,这块我也在更新,目前比较简单的处理方式是重构一个您自己的Dataset。 对于关于配置的问题:
- 我个人建议根据batch size调整learning rate,基本保证batchsize和learning rate正比,可以参考 Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour.
num_classes是inference stage的类别数量(根据不同的dataset会调整),num_training_classes是训练阶段的类别数量(默认为80)。请问下说num_training_classes说是训练阶段的类别数量(80),但光object365就有365个类别、flickr数据集没有类别,没有太明白80是怎么来的,谢谢
@taofuyu 您好,这个80是一个超参数,是训练过程采样类别的数量,一方面我保持了原来YOLO训练的部分参数 (loss weight这些,80是YOLO默认训练的类别数量);其次,80是一个计算和训练速度的一个trade-off,我们验证过将训练过程的类别采样提高到365,预训练的zero-shot结果会提升。
谢谢
对于训练中的验证报出该错误:
data['category_id'] = self.cat_ids[label]
IndexError: list index out of range
作者的建议是仿照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中引入YoloWorldBomoDatasetfrom .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
..
到这里我就解决该问题了。
YoloWorldBomoDataset
请问class_text_path='data/texts/coco_class_texts.json' 这个里面的内容 是否需要有对应修改呢?比如新的数据集就10个类名,这里面原本的80个类需要改吗
YoloWorldBomoDataset
请问class_text_path='data/texts/coco_class_texts.json' 这个里面的内容 是否需要有对应修改呢?比如新的数据集就10个类名,这里面原本的80个类需要改吗
要改的
dataset class,然后指定相应的类别。
如何新建类别呢
对于训练中的验证报出该错误:
data['category_id'] = self.cat_ids[label] IndexError: list index out of range作者的建议是仿照创建一个自己的Dataset类。具体地就得自己研究尝试了,思路是先建立和继承前者的(名字自己随便取的),再在各自的中引入。
CocoDataset``BomoDataset``YoloWorldBomoDataset``__init__.py具体步骤如下:
步骤1.在中定义自己的类。
anaconda3/envs/yoloworld/lib/python3.8/site-packages/mmdet/datasets/coco.py``BomoDataset
- 复制并命名为自己的,然后修改变量中的类别名。如:
class CocoDataset``class BomoDataset``METAINFOMETAINFO = { 'classes': ("Big black spot", ..), ..- 在中引入类
anaconda3/envs/yoloworld/lib/python3.8/site-packages/mmdet/datasets/__init__.py``BomoDatasetfrom .coco import BomoDataset __all__ = [.., 'BomoDataset']第2步。在中定义自己的类。
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``YoloWorldBomoDatasetfrom .yolov5_coco import YoloWorldBomoDataset __all__ = [.., 'YoloWorldBomoDataset']第3步。在中,将train和valid的修改为自己新定义的:
configs/finetune_bomo/yolo_world_l_dual_vlpan_2e-4_80e_8gpus_finetune_bomo.py``dataloader``YoloWorldBomoDatasetdataset=dict( .. dataset=dict( type='YoloWorldBomoDataset ..到这里我就解决该问题了 不行呀,会报自定义的数据集没有注册的错误。MYYOLOv5CocoDataset is not in the mmyolo::dataset registry. Please check whether the value of
MYYOLOv5CocoDatasetis correct or it was registered as expected.
@tm924222 init里写进去
或者可考虑
dataset=dict(
type='YOLOv5CocoDataset',
metainfo=dict(classes=your_classes),
.....
或者可考虑
dataset=dict( type='YOLOv5CocoDataset', metainfo=dict(classes=your_classes), .....
这个我也用了,后面两个的损失都是0
关掉mask-refine, 如果开启了 mask-refine 会导致没有物体框作为监督参与loss计算,也就是loss为0.
可以参考以下config:
- https://github.com/AILab-CVC/YOLO-World/blob/master/configs/finetune_coco/yolo_world_v2_l_vlpan_bn_sgd_1e-3_40e_8gpus_finetune_coco.py
另外,建议参考来选择合适的finetune方式: https://github.com/AILab-CVC/YOLO-World/blob/master/README.md#fine-tuning-yolo-world
mask-refine
感谢您的指导,我去修改一下
对于训练中的验证报出该错误:
data['category_id'] = self.cat_ids[label] IndexError: list index out of range作者的建议是仿照
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中引入YoloWorldBomoDatasetfrom .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 ..到这里我就解决该问题了。
我按照这个重写了类,但是还是存在list index out of range的问题。我用的是prompt_tuning_coco的config,不管打开mask-refine还是不打开都是同样的报错。而且我的mmde/dataset/coco.py的class就是我的数据集coco里的数据。长度和类别一样。不知道是什么问题。
@xiyangyang99 单步调试下吧,这种问题找起来很快的
@wondervictor,感谢回复。我这边查看了下,使用efficient_neck可以正常训练和验证;可是使用dual_vlpan就会报上面的错误,得到的self.cat_ids有点奇怪,好像不是基于我提供的classes去映射的。我是根据提供的coco_class_texts.json去修改的,如[['cat'], ['dog']]。 请问这两个配置文件有啥区别吗?我以为只是网络结构不同而已,是需要做额外的配置还是? 另外请教下几个问题:
base_lr和weight_decay的值默认是2e-4,如果我是使用1、2或者4卡等,设置不同的batchsize,这些值应该如何调整?num_classes和num_training_classes的区别是什么?我看两个值好像是一样的?您好,我遇到了同样的问题,配置文件修改也是一样的,但是,请问为啥我用[efficient_neck]也不可以正常验证呢?
请问现在这个问题您解决了吗
init里写进去
mmdet下面的datasets的init和mmyolo下面的datasets的init我都写了。哥们你的成功了吗
哥们,你现在成功了吗?
我按上述方式走通了,但是还是报 File "/home/miniconda3/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 Killing subprocess 5909
对于训练中的验证报出该错误:
data['category_id'] = self.cat_ids[label] IndexError: list index out of range作者的建议是仿照
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中引入YoloWorldBomoDatasetfrom .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 ..到这里我就解决该问题了。
我按照这个重写了类,但是还是存在list index out of range的问题。我用的是prompt_tuning_coco的config,不管打开mask-refine还是不打开都是同样的报错。而且我的mmde/dataset/coco.py的class就是我的数据集coco里的数据。长度和类别一样。不知道是什么问题。
请问你最后找到解决方法了吗?我也是按照上面说的步骤走了一遍但还是报错IndexError: list index out of range