[Question]
Required prerequisites
- [x] I have read the documentation https://align-anything.readthedocs.io.
- [x] I have searched the Issue Tracker and Discussions that this hasn't already been reported. (+1 or comment there if it has.)
- [ ] Consider asking first in a Discussion.
Questions
https://github.com/PKU-Alignment/align-anything/issues/179#issuecomment-2777852542 我们使用janus想要进行sft的过程中,需要先运行supervised_tokenize.sh,然后在运行janus_sft.sh,但我观察到supervised_tokenize.sh这个脚本是基于text2image任务进行tokenize的,但是如果我想利用数据集(如下)进行微调的时候,这是否还有效?我看到我们format_dataset.py文件中有着很多的数据集格式化方法,是否会比supervised_tokenize.sh更加有效?如果使用的话,需要协同修改哪里呢?
(这是ShareGPT4V数据集)
感谢你的提问!
但是如果我想利用数据集(如下)进行微调的时候,这是否还有效?
使用text_image_to_text数据(如ShareGPT4V)时,不需要进行pre-tokenize,可以直接仿照其他训练脚本(如LLaVA训练脚本scripts/llava/llava_sft.sh)修改format_dataset.py启动训练。其原因是Janus模型对input image和output image使用了不同的tokenizer,input image可以直接进行类似LLaVA的处理方式,而output image由于使用了不同的tokenizer,需要进行额外的pre-tokenize再进行训练。
我看到我们format_dataset.py文件中有着很多的数据集格式化方法,是否会比supervised_tokenize.sh更加有效?
这并非有效和无效的区分,而是不同类型数据的不同处理方式,正如在上一个问题中所说的,Janus系列模型的image output需要额外的pre-tokenize,而一般模型和Janus的image input则不需要。(特别地,Janus的这个架构使其不支持image同时出现在input和output中)
如果使用的话,需要协同修改哪里呢?
如果你使用ShareGPT4V数据集,则你可以直接使用ShareGPT4o(align_anything/configs/format_dataset.py #L1329)作为template,如果你使用其他数据集,你可以仿造ShareGPT4o自行定义新template。
感谢你的提问!
但是如果我想利用数据集(如下)进行微调的时候,这是否还有效?
使用text_image_to_text数据(如ShareGPT4V)时,不需要进行pre-tokenize,可以直接仿照其他训练脚本(如LLaVA训练脚本
scripts/llava/llava_sft.sh)修改format_dataset.py启动训练。其原因是Janus模型对input image和output image使用了不同的tokenizer,input image可以直接进行类似LLaVA的处理方式,而output image由于使用了不同的tokenizer,需要进行额外的pre-tokenize再进行训练。我看到我们format_dataset.py文件中有着很多的数据集格式化方法,是否会比supervised_tokenize.sh更加有效?
这并非有效和无效的区分,而是不同类型数据的不同处理方式,正如在上一个问题中所说的,Janus系列模型的image output需要额外的pre-tokenize,而一般模型和Janus的image input则不需要。(特别地,Janus的这个架构使其不支持image同时出现在input和output中)
如果使用的话,需要协同修改哪里呢?
如果你使用ShareGPT4V数据集,则你可以直接使用
ShareGPT4o(align_anything/configs/format_dataset.py #L1329)作为template,如果你使用其他数据集,你可以仿造ShareGPT4o自行定义新template。
为什么image不能同时出现在input和output两侧呢?不是很理解,input的用siglip编码,output的用vq编码是否就可以?感谢
为什么image不能同时出现在input和output两侧呢?不是很理解,input的用siglip编码,output的用vq编码是否就可以?感谢
这一点确实很make sense,不过至少在Janus的官方实现中并没有提及这一点,因此本仓库将优先实现Janus已经明确支持的image understanding与generation两个任务;)