关于mm_grounding_dino获得伪标签后的训练
首先感谢你们的工作,按照你们提供的方式,在自有数据集上进行微调,获得了超预期的效果。
我有一个疑问关于:mm_grounding_dino获得伪标签后的训练。
在“模型自训练伪标签迭代生成和优化 pipeline”中的第3条:“在得到伪标签后,你可以混合一些预训练数据联合进行继续预训练,提升模型在当前数据集上的性能,然后重新运行 2 步骤,得到更准确的伪标签,如此循环迭代即可”。
这里的“混合一些预训练数据联合进行继续预训练”,是指将伪标签混着预训练数据,每次都要重头开始训练,还是从上一次训练获得的checkpoint迭代着训练?
感谢你的使用。 是基于从上一次训练获得的checkpoint迭代着训练,如果是最开始的话就是加载我们发布的权重进行继续预训练。注意学习率要调小一些,否则会波动很大。
感谢你的使用。 是基于从上一次训练获得的checkpoint迭代着训练,如果是最开始的话就是加载我们发布的权重进行继续预训练。注意学习率要调小一些,否则会波动很大。
感谢您的回答。
我今天在使用的时候仍遇到一些问题:
事情的背景是,由于缺少数据标注(少量标注)及GPU资源,我想依靠你们给出的微调方法及模型自训练伪标签迭代生成和优化方法。通过微调后的模型,对数据集进行推理,获得更多的数据标签。然后在通过更多的数据标签,来进行微调,如此循环。我现在的做法是: 1、使用少量的数据(COCO格式)进行微调(完成); 2、获取微调后的权重,使用该权重对数据集中其他未打标签数据生成伪标签(OD格式)(完成); 3、将所有已有的数据也转为OD格式,加上伪标签一起,并修改微调config文件中的部分参数(适配OD格式),进行微调,这一步并未能完成,程序报错。
我的问题是: 1、”在得到伪标签后,你可以混合一些预训练数据联合进行继续预训练“,我的理解是,在获取了伪标签数据后,使用--resume加载之前的checkpoint继续进行训练,这一步应该和微调并不相同? 2、 ODVG格式的数据,是不是不能进行微调操作? 3、不知道我上述的做法是否有误,您这边是否有更好的建议?
- 你重新混合数据训练的话,不是用 resume,而是应该用 load_from
- 不管是啥数据都支持微调的,ODVG 的微调我们也有例子的,所以是可以的,可以看 LVIS 微调,那个就是 ODVG 格式微调
- 上面做法没有问题的,就是可能有些参数要调,不同 stage 和不同规模的数据,学习率啥的要调一下
- 你重新混合数据训练的话,不是用 resume,而是应该用 load_from
- 不管是啥数据都支持微调的,ODVG 的微调我们也有例子的,所以是可以的,可以看 LVIS 微调,那个就是 ODVG 格式微调
- 上面做法没有问题的,就是可能有些参数要调,不同 stage 和不同规模的数据,学习率啥的要调一下
依旧您说的方法,对照着其他例子,我已经将单个步骤中所有遇到的BUG修复。期待后续整个流程构建好,能有不错的效果。
再次感谢您的耐心解答。
- 你重新混合数据训练的话,不是用 resume,而是应该用 load_from
- 不管是啥数据都支持微调的,ODVG 的微调我们也有例子的,所以是可以的,可以看 LVIS 微调,那个就是 ODVG 格式微调
- 上面做法没有问题的,就是可能有些参数要调,不同 stage 和不同规模的数据,学习率啥的要调一下
您好, 目前,我已经构建了训练的全流程,步骤如下: 1、使用少量的数据66张(od格式)进行微调,已经完成,检出率和置信度都很好,20个epoch,学习率为0.0001; 2、使用微调后的权重对数据集中其他未打标签数据生成伪标签(200张图片,od格式),设置置信度为0.7; 3、将第二步生成的伪标签和第一步的数据进行混合,并load_from第一步生成的微调权重,其余训练参数与第一步相同,进行微调训练。
在完成第三步后,检出率和置信度均有下降。第三步训练的log文件为20240228_192337.log
我这边的疑问在于: 1、生成伪标签后,进行混合训练。从信息论的角度来说,网络训练只是在自我迭代,没有人为的增加任何额外信息,这种循环如何能提高网络精度? 2、混合训练后,网络精度降低,如果我想获得更好的精度,有什么建议吗?
- 你重新混合数据训练的话,不是用 resume,而是应该用 load_from
- 不管是啥数据都支持微调的,ODVG 的微调我们也有例子的,所以是可以的,可以看 LVIS 微调,那个就是 ODVG 格式微调
- 上面做法没有问题的,就是可能有些参数要调,不同 stage 和不同规模的数据,学习率啥的要调一下
您好, 目前,我已经构建了训练的全流程,步骤如下: 1、使用少量的数据66张(od格式)进行微调,已经完成,检出率和置信度都很好,20个epoch,学习率为0.0001; 2、使用微调后的权重对数据集中其他未打标签数据生成伪标签(200张图片,od格式),设置置信度为0.7; 3、将第二步生成的伪标签和第一步的数据进行混合,并load_from第一步生成的微调权重,其余训练参数与第一步相同,进行微调训练。
在完成第三步后,检出率和置信度均有下降。第三步训练的log文件为20240228_192337.log
我这边的疑问在于: 1、生成伪标签后,进行混合训练。从信息论的角度来说,网络训练只是在自我迭代,没有人为的增加任何额外信息,这种循环如何能提高网络精度? 2、混合训练后,网络精度降低,如果我想获得更好的精度,有什么建议吗?
您好,我也对混合训练的问题有疑问,请问这个问题您解决了吗
请用两张RTX3090或者4090能够使用1000张左右的图像进行微调嘛
- 你重新混合数据训练的话,不是用 resume,而是应该用 load_from
- 不管是啥数据都支持微调的,ODVG 的微调我们也有例子的,所以是可以的,可以看 LVIS 微调,那个就是 ODVG 格式微调
- 上面做法没有问题的,就是可能有些参数要调,不同 stage 和不同规模的数据,学习率啥的要调一下
您好, 目前,我已经构建了训练的全流程,步骤如下: 1、使用少量的数据66张(od格式)进行微调,已经完成,检出率和置信度都很好,20个epoch,学习率为0.0001; 2、使用微调后的权重对数据集中其他未打标签数据生成伪标签(200张图片,od格式),设置置信度为0.7; 3、将第二步生成的伪标签和第一步的数据进行混合,并load_from第一步生成的微调权重,其余训练参数与第一步相同,进行微调训练。 在完成第三步后,检出率和置信度均有下降。第三步训练的log文件为20240228_192337.log 我这边的疑问在于: 1、生成伪标签后,进行混合训练。从信息论的角度来说,网络训练只是在自我迭代,没有人为的增加任何额外信息,这种循环如何能提高网络精度? 2、混合训练后,网络精度降低,如果我想获得更好的精度,有什么建议吗?
您好,我也对混合训练的问题有疑问,请问这个问题您解决了吗
还没有,依旧困扰着我,没有想明白为什么
请用两张RTX3090或者4090能够使用1000张左右的图像进行微调嘛
可以,完全够用。
有解决这个问题吗?
有解决这个问题吗?
仍然没有~
有解决这个问题吗?
仍然没有~
你好,大半年过去了不知道你找到好的方法没有
我面临和你差不多的任务需求,我目前是这样做的 1,直接用模型通过--text生成伪标签,这要经过多次尝试不同的text哪种效果最好,可以使用文档上建议的image demo命令,或者用x-labeling这类提供AI自动标注功能的标注工具,直接试出一个比较好适应你目标特殊的文本 2,然后用这个文本,用文档上的方法批量生成伪标签,接下来转换成x-anylabeling的标注文件(或其它标注工具),然后用标注工具打开导入伪标签标注文件,人工复核。为简化后续操作,你可以在转换脚本中进行过滤,比如大小啦,置信度啦,一种类别只留置信度最大的那个(我的目标一张图上只会有一个)
这一步几乎是必须的,不管是你用几十张训练20轮,还是我直接文本进行检测,其实得到的伪标签质量不高的,但至少能框个大概,这样在标注工具中你只要拉一拉修正框框位置就好。这样的人工复核可以做到10秒以内一张,花上个把小时就能人工修正出几百甚至上千张高质量标注
3,用修正过的标注文件进行微调。我发现500张训练几轮就够了,2000张也才训练20轮以内,多了过拟合。常常我得到的best模型都不是设定的最后几轮的
总之伪标签只能起到帮你大海捞针的作用,我的数据来自于数量几乎无限的系统历史积累照片,所以这种方法又快又好。当然如果你的场景复杂,原始数据少,标注成本高,那我只能建议少量多轮复核多轮训练了,但控制学习率和轮数防止过拟合
另外求拉cv炼丹群。我周边就我一人做这个,想聊天都没人……