前言
在之前OpenAI推出的GPT-4中,我们可以OpenAI的Greg Brockman给GPT-4导入手绘的一张网页图纸,它就能自动生成网站的代码,引起新一轮轰动。由此可见,GPT-4的已经具备多模态的能力,但众所周知,OpenAI已经是CloseAI,GPT-4的多模态架构一直都是秘密。最近一款开源的MiniGPT-4横空出世,让我们可以一窥大语言模型多模态能力是如何构建,短短几天Github已经有17.4K🌟
介绍
MiniGPT-4由来自King Abdullah University of Science and Technology(阿卜杜拉国王科技大学)的Deyao Zhu* , Jun Chen*, Xiaoqian Shen, Xiang Li, Mohamed Elhoseiny 共同完成
他们的研究结果表明,MiniGPT-4具有许多与GPT-4类似的功能,如通过手写草稿生成详细的图像描述和创建网站。此外,他们还观察到MiniGPT-4中的其他新功能,包括根据给定的图像创作故事和诗歌,为图像中显示的问题提供解决方案,教用户如何根据食物照片烹饪等。
MiniGPT-4 官方网站:minigpt-4.github.io/
MiniGPT-4 GitHub地址:github.com/Vision-CAIR…
MiniGPT-4 论文地址:arxiv.org/pdf/2304.10…
原理
MiniGPT-4的原理是通一个投影层(Linear Layer)对齐BLIP-2模型中的冻结的视频编码器和冻结的LLM Vicuna,如下图所示:
图中包含了一个预训练的BLIP-2模型的ViT和Q-Former、一个线性投影层、一个先进的大语言模型Vicuna。BLIP-2模型和Vicuna都是开源。
为了方便理解,这里首先简单介绍一下BLIP-2模型和Vicuna的基本信息
BLIP-2模型:
Q-Former 是一个 transformer 模型,它由两个子模块组成,这两个子模块共享相同的自注意力层:
- 与冻结的图像编码器交互的图像 transformer,用于视觉特征提取
- 文本 transformer,用作文本编码器和解码器
图像 transformer 从图像编码器中提取固定数量的输出特征,这里特征的个数与输入图像分辨率无关。同时,图像 transformer 接收若干查询嵌入作为输入,这些查询嵌入是可训练的。这些查询还可以通过相同的自注意力层与文本进行交互 (译者注: 这里的相同是指图像 transformer 和文本 transformer 对应的自注意力层是共享的)
LLM Vicuna
Vicuna-13B是通过使用ShareGPT收集的用户对话数据对LLaMA进行微调得到的模型,和GPT-4做对比可以达到90%的GPT-4的水平。关键Vicuna的代码和权重都是开源的,可以用于非商业用途
训练
MiniGPT-4模型架构是基于BLIP-2,大语言模型采用Vicuna,唯一需要训练的是中间的投影层(linear layer),MiniGPT-4的需要练包含两个阶段
1.预训练阶段
第一阶段,通过使用来自Laion和CC数据集(下载)中的图像-文本对(image-text pairs)去训练MiniGPT-4,达到图像和语言模型的对齐。在整个训练过程中,基于BLIP-2的视觉编码器和LLM Vicuna都保持不变,整个训练过程,只有投影层被训练。MiniGPT-4模型经过20000次训练,batch size为256,使用4A100GPU,约使用了500万图像-文本对,耗时约10个小时训练完成。
经过第一阶段的训练,MiniGPT-4展示了丰富的知识和对人类输入做出回应的能力,但是也能观察到它生成语言还是存在不合理的地方,比如生成重复的单词或句子、片断的句子或不相关的内容,阻碍了与人进行顺畅沟通对话。
针对这些问题,研究人员也注意到当时GPT-3也面临过类似问题,尽管GPT-3接受过庞大的数据训练,但是GPT-3还是无法生产符合人类意图的文本输出。通过从人类反馈中进一步微调和进行强化学习,GPT-3最终进化成GPT-3.5,能够产生出更多人性化的文本输出。
GPT-3的现象与当前MiniGPT-4类似,所以MiniGPT-4在第一阶段训练完无法产生流畅自然的人类语言,也不足为奇了。
2.微调阶段
针对第一段出现的问题,MiniGPT-4研究人员首先准备一份高质量的图像-文本对数据集,用于微调对齐图形和语言模型。
首先他们设计一种Prompt,该格式遵循Vicuna的对话格式,如下所示:
###Human: <Img><ImageFeature></Img> Describe this image in detail. Give as many details as
possible. Say everything you see. ###Assistant:
在这个Prompt,表示由投影层生成的视觉特征。为了识别生成的不完整句子,会检查生成的句子是否超过80个Token,如果没有达到,会进步使用额外的Prompt,让MiniGPT-4补充完成图像描述。
###Human: Continue ###Assistant:
通过前面两个步骤,我们就能得到全面的图像描述。这种方法能够生成更多的详细信息丰富的图像-文本对。
研究人员从CC数据集,随机选择了5000个图像,使用对每个图像都上述方法得到每个图像的详细描述信息。但是生成出来的图像描述,还是有很多噪声和错误,例如重复的单词和句子等。为了去校准这些错误,研究人员还使用了ChatGPT去修改这些图像描述,通过如下的prompt:
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个符合要求。
接下来就开始真正的第二阶段微调训练
在整个第二阶段,研究人员使用下列的Prompt模板
###Human: <Img><ImageFeature></Img> <Instruction> ###Assistant:
表示从预先定义的描述集合中随机选择,这个描述集合包含各种形式指令,例如
“Describe this image in detail” or “Could
you describe the contents of this image for me”
...
通过第二阶段的训练,MiniGPT-4能够产生更自然更可靠的回复,并且研究人员发现
模型的微调过程非常有效,只需要400个训练步骤,batch size 为12,7分钟即可在单个A100
GPU完成训练。
至此训练完成投影层(linear layer)后,MiniGPT-4就准备好可以用了,接下来我们说一下如何本地部署MiniGPT-4
部署
所需资源
MiniGPT-4目前提供了两个模型分别是对齐 Vicuna 7B 和 对齐 Vicuna 13B
采用Vicuna13B模型的,需要GPU23G左右,采用Vicuna7B需要12GB左右,消费级PC就能满足部署要求或者租用GPU云服务器,2块钱一小时。
克隆项目
git clone <https://github.com/Vision-CAIR/MiniGPT-4.git>
Cloning into 'MiniGPT-4'...
remote: Enumerating objects: 266, done.
remote: Counting objects: 100% (93/93), done.
remote: Compressing objects: 100% (50/50), done.
remote: Total 266 (delta 63), reused 43 (delta 43), pack-reused 173
Receiving objects: 100% (266/266), 57.53 MiB | 16.54 MiB/s, done.
Resolving deltas: 100% (105/105), done.
下载依赖
ls
MiniGPT-4/ sample_data/
cd MiniGPT-4/
#获取依赖文件
wget <https://github.com/WangRongsheng/Use-LLMs-in-Colab/blob/main/MiniGPT-4/requirements.txt>
pip install -qr requirements.txt
pip install -q salesforce-lavis
pip install -q bitsandbytes
pip install -q accelerate
pip install -q gradio==3.27.0
pip install -q h5py
pip install -q typing-extensions
pip install -q wheel
pip install -q git+https://github.com/huggingface/transformers.git -U
下载模型
# if you run 13B , Download Checkpoint Aligned with Vicuna 13B
wget <https://huggingface.co/wangrongsheng/MiniGPT4/blob/main/pretrained_minigpt4.pth>
# if you run 7B , Download Checkpoint Aligned with Vicuna 7B
wget <https://huggingface.co/wangrongsheng/MiniGPT4-7B/resolve/main/prerained_minigpt4_7b.pth>
--2023-04-23 01:19:12-- <https://huggingface.co/wangrongsheng/MiniGPT4-7B/resolve/main/prerained_minigpt4_7b.pth>
Resolving huggingface.co (huggingface.co)... 18.155.68.44, 18.155.68.116, 18.155.68.38, ...
Connecting to huggingface.co (huggingface.co)|18.155.68.44|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: <https://cdn-lfs.huggingface.co/repos/25/fa/25fa880e116eda3d82c5c87b32eb0a7fa8f76b139d70ce756851215ce7a76179/017a9ed588a11ed383711003cf50cf675191420a04689f682fb56fa9bbb8dcbb?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27prerained_minigpt4_7b.pth%3B+filename%3D%22prerained_minigpt4_7b.pth%22%3B&Expires=1682471952&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jZG4tbGZzLmh1Z2dpbmdmYWNlLmNvL3JlcG9zLzI1L2ZhLzI1ZmE4ODBlMTE2ZWRhM2Q4MmM1Yzg3YjMyZWIwYTdmYThmNzZiMTM5ZDcwY2U3NTY4NTEyMTVjZTdhNzYxNzkvMDE3YTllZDU4OGExMWVkMzgzNzExMDAzY2Y1MGNmNjc1MTkxNDIwYTA0Njg5ZjY4MmZiNTZmYTliYmI4ZGNiYj9yZXNwb25zZS1jb250ZW50LWRpc3Bvc2l0aW9uPSoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2ODI0NzE5NTJ9fX1dfQ__&Signature=DsRDra5GigHPHD0B7R3oxr2ciPbwmw4y-3-n3vxekAeoqSzjsbCpWoQnvCjzaLCkngwVN7wnQe0c9KBJ%7ERPjvSDsWwdIuO4VC5Q4TRCpentePf3FEcKG3EwyuZI1qCUFGkEwR8%7EnejKfhR9FMjIxbB49ybzxJ-2qrxlTb3BmnyQn2wfQ9ONtO5yqpQNXA2R5R4b8C0JuKKWSCN5A5EqLkfayDOC6FNrN-BbNp0lOs%7ExZE1T418C5HWAyfYgevdsIRUhx-PZaFBdZCn7i6MM9D4MTilYdsJku%7EBPdhLTP5gun1LHvuEf9bk7NZzANUCciTpU4UHXmohzuILzsmSiv-g__&Key-Pair-Id=KVTP0A1DKRTAX> [following]
--2023-04-23 01:19:12-- <https://cdn-lfs.huggingface.co/repos/25/fa/25fa880e116eda3d82c5c87b32eb0a7fa8f76b139d70ce756851215ce7a76179/017a9ed588a11ed383711003cf50cf675191420a04689f682fb56fa9bbb8dcbb?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27prerained_minigpt4_7b.pth%3B+filename%3D%22prerained_minigpt4_7b.pth%22%3B&Expires=1682471952&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jZG4tbGZzLmh1Z2dpbmdmYWNlLmNvL3JlcG9zLzI1L2ZhLzI1ZmE4ODBlMTE2ZWRhM2Q4MmM1Yzg3YjMyZWIwYTdmYThmNzZiMTM5ZDcwY2U3NTY4NTEyMTVjZTdhNzYxNzkvMDE3YTllZDU4OGExMWVkMzgzNzExMDAzY2Y1MGNmNjc1MTkxNDIwYTA0Njg5ZjY4MmZiNTZmYTliYmI4ZGNiYj9yZXNwb25zZS1jb250ZW50LWRpc3Bvc2l0aW9uPSoiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2ODI0NzE5NTJ9fX1dfQ__&Signature=DsRDra5GigHPHD0B7R3oxr2ciPbwmw4y-3-n3vxekAeoqSzjsbCpWoQnvCjzaLCkngwVN7wnQe0c9KBJ%7ERPjvSDsWwdIuO4VC5Q4TRCpentePf3FEcKG3EwyuZI1qCUFGkEwR8%7EnejKfhR9FMjIxbB49ybzxJ-2qrxlTb3BmnyQn2wfQ9ONtO5yqpQNXA2R5R4b8C0JuKKWSCN5A5EqLkfayDOC6FNrN-BbNp0lOs%7ExZE1T418C5HWAyfYgevdsIRUhx-PZaFBdZCn7i6MM9D4MTilYdsJku%7EBPdhLTP5gun1LHvuEf9bk7NZzANUCciTpU4UHXmohzuILzsmSiv-g__&Key-Pair-Id=KVTP0A1DKRTAX>
Resolving cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)... 54.192.150.84, 54.192.150.19, 54.192.150.69, ...
Connecting to cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)|54.192.150.84|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 37907201 (36M) [binary/octet-stream]
Saving to: ‘prerained_minigpt4_7b.pth’
prerained_minigpt4_ 100%[===================>] 36.15M 10.6MB/s in 3.4s
2023-04-23 01:19:16 (10.6 MB/s) - ‘prerained_minigpt4_7b.pth’ saved [37907201/37907201]
# 下载Vicuna模型
# 13B
<https://huggingface.co/wangrongsheng/MiniGPT-4-LLaMA/tree/main>
# 7B
<https://huggingface.co/wangrongsheng/MiniGPT-4-LLaMA-7B/tree/main>
修改配置文件
修改加载Vicuna模型
文件:minigpt4/configs/models/minigpt4.yaml
将llama_model参数设置为下载好的MiniGPT-4-LLaMA目录路径
修改加载的MiniGPT-4模型:
文件:eval_configs/minigpt4_eval.yaml
将ckpt参数设置为pretrained_minigpt4.pth
运行MiniGPT-4
python demo.py --cfg-path eval_configs/minigpt4_eval.yaml --gpu-id 0
欢迎持续订阅我的源见Source Scope专栏,我会持续更新AI世界的最新资讯和个人总结分享~