当前位置: 首页 > news >正文

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能力

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 洛谷 P1320 压缩技术(续集版) 题解
  • ROS配置并同时驱动多个UVC相机(含功能包)
  • python文件的读写
  • FFplay介绍及命令使用指南
  • 大数据采集工具——Flume简介安装配置使用教程
  • 【扩散模型思考记录(一)】图像生成的本质是什么?什么是适合采样的复杂分布?
  • Springer旗下中科院2区TOP,国人优势大!
  • C 语言动态链表
  • SSH相关
  • Hive3:一键启动、停止、查看Hive的metastore和hiveserver2两个服务的脚本(好用)
  • C语言关键字
  • 昇思25天学习打卡营第22天|基于MindNLP+MusicGen生成自己的个性化音乐案例
  • 如何在 VitePress 中增加一个全局自定义组件
  • 如果想不明白,那就读书吧
  • windows系统下编译和使用grpc
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 2017-09-12 前端日报
  • Apache的80端口被占用以及访问时报错403
  • C++类中的特殊成员函数
  • Docker容器管理
  • eclipse(luna)创建web工程
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java IO学习笔记一
  • javascript数组去重/查找/插入/删除
  • JS变量作用域
  • linux安装openssl、swoole等扩展的具体步骤
  • linux学习笔记
  • Mac转Windows的拯救指南
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Spark RDD学习: aggregate函数
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • WePY 在小程序性能调优上做出的探究
  • 从0实现一个tiny react(三)生命周期
  • 规范化安全开发 KOA 手脚架
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 你真的知道 == 和 equals 的区别吗?
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 找一份好的前端工作,起点很重要
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​批处理文件中的errorlevel用法
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $().each和$.each的区别
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (一)基于IDEA的JAVA基础12
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。