Ucas-HaoranWei / Vary

[ECCV2024] Official code implementation of Vary: Scaling Up the Vision Vocabulary of Large Vision Language Models.
1.65k stars 150 forks source link

Vary tiny训练无法复现,官方代码训练效果无效 #93

Closed lucasjinreal closed 2 months ago

lucasjinreal commented 3 months ago

image

image

用30w数据完全训 不出任何东西,请教一下有哪些地方可能没有对齐?

Ucas-HaoranWei commented 3 months ago

你训练的时候是什么模板?vicuna v1吗?我看你测试用的v1模板,另外loss大概多少?

lucasjinreal commented 3 months ago

这是推理,我不太确定你有没有测试过你的训练脚本,问题很多。推理你应该知道你用的是v1,尽管我看你训练用的是类似于plain的格式。

全部是官方代码,除了bug以外,没有逻辑更改,无法复现。

   conv_mode = "v1"
    conv = conv_templates[conv_mode].copy()
    conv.append_message(conv.roles[0], qs)
    conv.append_message(conv.roles[1], None)
    prompt = conv.get_prompt()

loss 1.8下不来 3 epoch

Ucas-HaoranWei commented 3 months ago

训练还有一个模板,推理我用的v1是因为,开源的vary-opt训练也是用的v1(加了检测数据),另外loss 1.8太大了,Vary-tiny的正常loss在0.2-0.4之间,你可以尝试导入我开源的Vary-tiny在你的数据上continue train,看看初始loss

lucasjinreal commented 3 months ago

问题是我用的就是官方代码,也没有任何修改,根本无法复现整个训练过程啊

zhyj3038 commented 3 months ago

@lucasjinreal 差点以为是我提的问题。 我也用了33w arxiv数据训练tiny,得到的结果也有问题。 无论输入什么图片,输出都是固定的错误内容。

lucasjinreal commented 3 months ago

感觉这篇论文没有把细节说全,基本上可以认为存在某种不严谨甚至是误导性的内容。可以加这个wx拉群复现。如果无法复现,那就问题大了。

bojuebot

XiaoR666 commented 3 months ago

我基于作者的vary-tiny,接着train了50w中文和50w英文arxiv(主要是表格和公式),感觉还可以: image from scratch感觉至少得几M数据?

lucasjinreal commented 3 months ago

@XiaoR666 可以分享一下权重吗

或者一些训练细节?

https://github.com/Ucas-HaoranWei/Vary/issues/96#issuecomment-2026621646

作者自己都复现不了。。。

另外vary tiny 阶段应该是转不了markdown的。。 原版权重我试过了这些prompt均不支持

XiaoR666 commented 3 months ago

@XiaoR666 可以分享一下权重吗

或者一些训练细节?

#96 (comment)

作者自己都复现不了。。。

另外vary tiny 阶段应该是转不了markdown的。。 原版权重我试过了这些prompt均不支持

不能吧,复现不了作者咋给出的weights呢,他们应该还有更强的(sam-l或者h) 我训练的时候load的作者的Vary-tiny,我自己的数据集是markdown的,训练了几个ep,loss到0.05了才达到图上效果

lucasjinreal commented 3 months ago

你仔细看tiny的训练脚本他是没有加instruction的,不太确定你的这个markdown是怎么跟文本混在一起训练tiny的。。。其次论文里面说了markdown格式转换是在ft阶段加的。

再次,我们讨论的并不是同一个问题,作者这个模型是内部的训练框架训练的,开源的版本他现在也在查看原因。。。我用vary tiny推理在transformers < 4.37的时候也是没有问题的,ft vary也是没有问题的。。。。 现在只是想复现tiny的训练过程。。 回复issue最好严谨表达你的环境、方法、以及复述遇到的问题,这其中存在非常多的变量。。。

再次,如果你训练tiny,请告诉我opt你是怎么插值的?作者并没有open 插值的代码。。。咱们最好讲究一下科学。。

XiaoR666 commented 3 months ago

我ft的是tiny,关于tiny instruction怎么加我参考的是作者另外一项目Vary-toy,直接加载作者训练好的Vary-tiny是带作者插值过的opt的,你可以看config.json,里面写的4096

lucasjinreal commented 3 months ago

就像我开头所说的,Vary tiny的权重是没有问题的,我和作者验证过,而且仅仅在transformers < 4.37下work (至少高于4.37均乱码),作者应该也复现了,再高版本输出是乱码的,这个bug作者应该至今没有修复。

因此,你的实验对我来说是没有意义的,你把varytiny 全部加载自己tune了一下不代表当前的代码能复现训练过程。

我和作者想探讨的是想怎么复现从0训练这个过程,还请不要发一些无关话题讨论的内容歪曲时间线。

41passerby commented 3 months ago

我ft的是tiny,关于tiny instruction怎么加我参考的是作者另外一项目Vary-toy,直接加载作者训练好的Vary-tiny是带作者插值过的opt的,你可以看config.json,里面写的4096

如果不加载作者的权重,pretrain 相当耗时间,理论上loss会降下来,只是很慢很慢,我看 detectron2 单纯训练 vit ,11万数据训了 100 epochs。。

lucasjinreal commented 3 months ago

如果我没有记错的话,vary tiny作者训练了3个epoch就可以work。 我测试的结论是,loss即便是下降,推理出来的结果也不像是学到了什么东西,没有办法做到vary tiny 与训练的效果,这当中总感觉缺失了什么。