align-anything icon indicating copy to clipboard operation
align-anything copied to clipboard

[Question]

Open 125jx opened this issue 9 months ago • 3 comments

Required prerequisites

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更加有效?如果使用的话,需要协同修改哪里呢?

Image(这是ShareGPT4V数据集)

125jx avatar Apr 18 '25 09:04 125jx

感谢你的提问!

但是如果我想利用数据集(如下)进行微调的时候,这是否还有效?

使用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数据集,则你可以直接使用ShareGPT4oalign_anything/configs/format_dataset.py #L1329)作为template,如果你使用其他数据集,你可以仿造ShareGPT4o自行定义新template。

htlou avatar Apr 19 '25 02:04 htlou

感谢你的提问!

但是如果我想利用数据集(如下)进行微调的时候,这是否还有效?

使用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数据集,则你可以直接使用ShareGPT4oalign_anything/configs/format_dataset.py #L1329)作为template,如果你使用其他数据集,你可以仿造ShareGPT4o自行定义新template。

为什么image不能同时出现在input和output两侧呢?不是很理解,input的用siglip编码,output的用vq编码是否就可以?感谢

hl0737 avatar Apr 21 '25 13:04 hl0737

为什么image不能同时出现在input和output两侧呢?不是很理解,input的用siglip编码,output的用vq编码是否就可以?感谢

这一点确实很make sense,不过至少在Janus的官方实现中并没有提及这一点,因此本仓库将优先实现Janus已经明确支持的image understanding与generation两个任务;)

htlou avatar May 27 '25 11:05 htlou