Yolo-World在基于自己的数据集训练后zero-shot能力显著下降甚至消失的问题

项目场景:

  前段时间做了基于自己的数据集进行yolo-world模型训练的实验,虽然历经周折但是模型都训练成功了,在我的数据集上通过yolo-world训练的模型map显著高于通过yolov8训练的模型,而且yolo-world模型支持自定义类别检测。


问题描述

  但是问题也就出现了,经过微调训练之后的发现模型的zero-shot能力几乎消失了,也就是说通过官方发布的预训练模型可以检测任意类别,但是经过微调之后只能检测在训练过程中预定的类别,其他类别尽管调低阈值也没法检测到。
  想要使用yolo-world训练模型本来就是想在保留zero-shot能力的基础之上对自己的数据集达到更好的检测效果,在yolo-world的issue上查看了很多办法都进行了尝试但是效果并没有很明显。


原因分析:

官方也在找具体原因,目前还不清楚,希望有知道原因的大佬在评论区解释一下,感谢!


解决方案:

根据issue中提出的解决方案做了以下整理,大家感兴趣可以试试:
(1)在自定义数据集中添加GQA数据集,添加 GQA 将保持包含丰富语义的zero-shot能力。目前,这是避免灾难性遗忘的有效方法。首先需要下载GQA数据集以及对应的json文件(官网都有下载链接),然后使用configs\pretrain下的配置文件修改自己数据集的路径等相关信息,比如使用

configs\pretrain\VisDrone_yolo_world_v2_l_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_1280ft_lvis_minival.py

#放自己的数据集,和之前配置的时候一样,
#具体细节可以参考前边训练yolo-world的文章
obj365v1_train_dataset = dict(
    type='MultiModalDataset',
    dataset=dict(
        type='YOLOv5Objects365V1Dataset',
        data_root='data/objects365v1/',
        ann_file='annotations/objects365_train.json',
        data_prefix=dict(img='train/'),
        filter_cfg=dict(filter_empty_gt=False, min_size=32)),
    class_text_path='data/texts/custom_class_text.json',
    pipeline=train_pipeline)
#GQA数据集
mg_train_dataset = dict(type='YOLOv5MixedGroundingDataset',
                        data_root='data/mixed_grounding/',
                        ann_file='annotations/final_mixed_train_no_coco.json',
                        data_prefix=dict(img='gqa/images/'),
                        filter_cfg=dict(filter_empty_gt=False, min_size=32),
                        pipeline=train_pipeline)
#flickr数据集
flickr_train_dataset = dict(
    type='YOLOv5MixedGroundingDataset',
    data_root='data/flickr/',
    ann_file='annotations/final_flickr_separateGT_train.json',
    data_prefix=dict(img='full_images/'),
    filter_cfg=dict(filter_empty_gt=True, min_size=32),
    pipeline=train_pipeline)

这个方法也许有效但是GQA数据集太大(21G),我只有一块显卡,训练时间太长了成本太大,我没办法实现。参考链接
(2)使用Prompt YOLO-World
a.首先需要下载clip_vit_b32_coco_80_embeddings.npy下载链接在这
b.打开配置文件:比如

configs\prompt_tuning_coco\yolo_world_v2_l_vlpan_bn_2e-4_80e_8gpus_prompt_tuning_coco.py

c.下载配置文件中需要的checkpoint权重文件,但是镜像网站上提供的权重文件好像和配置文件中给出的不是很一样,只能找一个类似的替代一下。
下载链接在这

d.修改配置文件的内容,比如权重文件或者数据集的路径以及clip_vit_b32_coco_80_embeddings.npy的路径
e.像之前一样训练这个配置文件就可以了

configs\prompt_tuning_coco\yolo_world_v2_l_vlpan_bn_2e-4_80e_8gpus_prompt_tuning_coco.py

ps:除了训练prompt_tuning_coco.py这个配置文件还可以试一下yolo_world_v2_l_vlpan_bn_sgd_1e-3_80e_8gpus_all_finetuning_coco.py这个配置文件。参考链接

在训练过程中显示这个问题:The testing results of the whole dataset is empty
训练完使用模型做检测的时候发现这个问题:AttributeError: ‘SimpleYOLOWorldDetector’ object has no attribute ‘reparameterize’

(3)调整以 threshold 查看是否检测到目标对象
(4)减少训练轮数,比如训练10个epoch就停止,看是否具有zero-shot能力

### 使用YOLOv5训练自定义数据集 #### 准备工作 为了成功使用YOLOv5训练自定义数据集,需完成一系列准备工作。这包括但不限于收集适合的数据集并确保其质量[^1]。 #### 环境搭建 环境配置是启动任何机器学习项目的关键一步。对于YOLOv5而言,这意味着安装必要的依赖库以及设置好Python虚拟环境等前置条件[^2]。 #### 数据预处理 当环境准备好之后,下一步就是准备用于训练数据集。此过程涉及将原始图像及其标注转换成YOLOv5能够理解的形式。具体来说,可能涉及到创建特定结构的文件夹来存储图片和标签,并按照一定格式编写`.txt`文件记录每张图上的物体位置信息。此外,还需构建一个描述整个数据集特性的`.yaml`文件以便于框架读取[^3]。 #### 修改配置文件 在一切就绪后,需要调整两处重要的配置文件以适应新的数据源: - **Data Configuration File**: 位于`data/`路径下,主要用于指定类别名称、训练集与测试集的位置以及其他一些选项。 - **Model Configuration File**: 存在于`models/`目录内,这里可以设定网络架构细节比如输入尺寸大小、锚框数量等参数[^4]. ```yaml # Example of a data configuration file (data.yaml) train: ./datasets/train/images/ val: ./datasets/validation/images/ nc: 80 names: ['person', 'bicycle', ... ] ``` ```yaml # Example snippet from model configuration file (model.yaml) depth_multiple: 0.33 width_multiple: 0.50 ... anchors: - [10,13, 16,30, 33,23] ... ``` #### 开始训练 一旦上述所有步骤均已完成,则可以通过命令行工具轻松发起训练流程。通常情况下只需执行如下指令即可让YOLOv5基于现有资源自动优化权重直至达到预期性能水平: ```bash python train.py --img 640 --batch 16 --epochs 50 --data path/to/data.yaml --cfg yolov5s.yaml --weights yolov5s.pt ``` 以上命令假设读者已经下载了一个预训练好的基础模型(`yolov5s.pt`)作为起点,并指定了适当的学习率和其他超参值以加速收敛速度或提高最终精度。 #### 结果评估 训练结束后应当对所得模型进行全面评测,确认其泛化能力和实际应用价值。这部分操作同样简单明了——利用内置脚本加载保存下来的checkpoint并对验证集中未见过样本做预测分析;必要时还可以借助可视化手段辅助观察边界框绘制效果及分类准确性等方面的表现情况。
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值