《MiniGPT-4:使用高级大语言模型增强视觉语言理解》
阿卜杜拉国王科技大学的几位博士(看名字都是中国人)开发,他们认为GPT-4 先进的多模态生成能力,主要原因在于利用了更先进的大型语言模型。为了验证这一想法,团队成员将一个冻结的视觉编码器(Q-Former&ViT)与一个冻结的文本生成大模型(Vicuna小) 进行对齐,造出了 MiniGPT-4。
⬆️ MiniGPT-4的架构:由一个带有预训练ViT和Q-Former的视觉编码器、一个单一的线性投影层和一个先进的Vicuna大型语言模型组成。MiniGPT-4只需要训练线性投影层,使视觉特征与Vicuna对齐。
在零样本 VQAv2 上,BLIP-2 相较于 80 亿参数的 Flamingo 模型,使用的可训练参数数量少了 54 倍,性能提升了 8.7 %。
四步走:
# Vicuna
llama_model: "chat/vicuna/weight" # 将 "/path/to/vicuna/weights/" 修改为本地 weight 地址
前三步参考【LLMs 入门实战 】第一式:Vicuna模型学习与实战
然后在 MiniGPT-4/eval_configs/minigpt4_eval.yaml 的 第11行 设置 MiniGPT-4 checkpoint 路径
ckpt: '/path/to/pretrained/ckpt/' # 修改为 MiniGPT-4 checkpoint 路径
!pip install -q condacolab
import condacolab
condacolab.install()
!conda --version
!conda env create -f environment.yml # 这一句很费劲,A100跑了8min!我的小钱钱啊!
!source activate minigpt4
python demo.py --cfg-path eval_configs/minigpt4_eval.yaml --gpu-id 0
注:为了节省GPU内存,Vicuna默认加载为8位,波束搜索宽度为1。这种配置对于Vicuna 13B需要大约23G GPU内存,对于Vicuna7B需要大约11.5G GPU内存。对于更强大的GPU,您可以通过在配置文件minigpt4_eval.yaml中将low_resource设置为False以16位运行模型,并使用更大的波束搜索宽度。
效果图⬇️
图中有三片银杏叶,但是没有识别到;给的图片解释有点差强人意。
MiniGPT-4的训练包含两个 alignment stages:
torchrun --nproc-per-node NUM_GPU train.py --cfg-path train_configs/minigpt4_stage1_pretrain.yaml
torchrun --nproc-per-node NUM_GPU train.py --cfg-path train_configs/minigpt4_stage2_finetune.yaml
在第二阶段对齐后,MiniGPT-4能够连贯地谈论图像并且用户友好。
有了第一式做铺垫,再打第二式就不难啦!(▽)
原图奉上⬇️
参考链接:https://github.com/km1994/LLMsNineStoryDemonTower/tree/main/mingpt4