前言
代码地址:https://github.com/Vision-CAIR/MiniGPT-4
摘要
摘要写的就很简单了,标黄的是重点,可以看到这个方法很简单,就是拿了一个视觉的encoder(Blip-2)以及拿了一个文本的encoder(Vicuna),最后外加上一个projection层就构成了MiniGPT4,并且在训练的时候视觉和文本的encoder都是冻结参数的,所以相当于只是拿视觉和文本的编码器来用,训练只训外加的projection层。
方法
方法就是说了视觉编码器用的Blip-2,他是由vit+q-former构成的。文本用的是vicuna,基于LLaMA设计的。就当作文本和图像的backbone就好了,具体细节可以不看,基本就是transformer的结构。
然后就介绍了训练的细节,训练分了两个阶段,第一阶段预训练用的是500w的图文对训模型,并且视觉和文本的encoder都是冻结参数的,第二阶段用精修的数据集3500条图文对精调模型参数。
第一阶段预训练
没啥可说的,介绍了下训练的参数,用了4张A100训500w图文对的数据,训了10个小时。第一阶段训练完作者测试模型发现模型生成的文本有很多重复的,不完整的,没有逻辑的句子,对人类来说阅读是十分不友好的,所以有了第二阶段的精调。
第二阶段训练
数据构建
第二阶段的主要目的是用高质量的图文对数据来消除视觉和语言的领域差异,通俗点说就是让模型说的话更加的人类可读。
构建精修数据集的具体做法如下:
- 一:从Conceptual Caption dataset随机选择了5000个数据
- 二:用一阶段训练的模型对这些数据做提问生成答案。
- 提问的prompt:###Human: Describe this image in detail. Give as many details as possible. Say everything you see. ###Assistant:
- 如果回答的内容少于80个单词(论文写的token感觉应该差不多意思),就追问,追问的prompt是:###Human: Continue ###Assistant:
- 然后拼接得到最后的回答,这个回答是详细的图像的描述。
- 三:这样生成的描述还是存在噪声以及错误的回答(重复的回答,不连贯的回答),接下来用chatgpt来修正这些回答:
- 输入给chatgpt的提示词为:Fix the error in the given paragraph. Remove any repeating sentences, meaningless characters, not English sentences, and so on. Remove unnecessary repetition. Rewrite any incomplete sentences. Return directly the results without explanation. Return directly the input paragraph if it is already correct without explanation.
- 四:人工验证图像描述的正确性并且有些chatgpt无法检测的冗余句子也人工修正。最后从5000里面精挑了3500条。
fintune
finetune就比较简单了,拿3500条精修的数据直接finetune就好了,输入的模版是###Human: ###Assistant:
训练的机器是一张A100,batch size12,跑了400个step。
最后
MiNiGPT4安装记录:MiNiGPT4安装记录