Stable Diffusion文生图之VisCPM篇: 今天给大家带来的是 Stable Diffusion文生图之 VisCPM 篇。VisCPM 是基于 CPM 基础模型的中英双语多模态大模型,能够实现多模态对……
哈喽!伙伴们,我是小智,你们的AI向导。欢迎来到每日的AI学习时间。今天,我们将一起深入AI的奇妙世界,探索“Stable Diffusion文生图之VisCPM篇”,并学会本篇文章中所讲的全部知识点。还是那句话“不必远征未知,只需唤醒你的潜能!”跟着小智的步伐,我们终将学有所成,学以致用,并发现自身的更多可能性。话不多说,现在就让我们开始这场激发潜能的AI学习之旅吧。
Stable Diffusion文生图之VisCPM篇:
今天给大家带来的是 Stable Diffusion文生图之 VisCPM 篇。VisCPM 是基于 CPM 基础模型的中英双语多模态大模型,能够实现多模态对话和图像生成,功能非常强大。
一、前言
1.1 VisCPM 介绍
VisCPM 是一个开源的多模态大模型系列,支持中英双语的多模态对话能力(VisCPM-Chat模型)和文到图生成能力(VisCPM-Paint模型),在中文多模态开源模型中达到最佳水平。VisCPM 基于百亿参数量语言大模型 CPM-Bee(10B)训练,融合视觉编码器 Muffin和视觉解码器 Diffusion-UNet 以支持视觉信号的输入和输出。得益于 CPM-Bee 基座优秀的双语能力,VisCPM 可以仅通过英文多模态数据预训练,泛化实现优秀的中文多模态能力。
• 开源使用:VisCPM 可以自由被用于个人和研究用途。我们希望通过开源 VisCPM 模型系列,推动多模态大模型开源社区和相关研究的发展。
• 涵盖图文双向生成:VisCPM 模型系列较为全面地支持了图文多模态能力,涵盖多模态对话(图到文生成)能力和文到图生成能力。
• 中英双语性能优异:得益于语言模型基座CPM-Bee 优秀的双语能力,VisCPM 在中英双语的多模态对话和文到图生成均取得亮眼的效果。
1.1.1 VisCPM-Chat 介绍
VisCPM-Chat 支持面向图像进行中英双语多模态对话。该模型使用Muffin 视觉编码架构,使用 CPM-Bee(10B)作为语言基座模型,并通过语言建模训练目标融合视觉和语言模型。模型训练包括预训练和指令精调两阶段:
• 预训练:我们使用约100M高质量英文图文对数据对VisCPM-Chat进行了预训练,数据包括CC3M,CC12M、COCOVisual Genome、Laion等。在预训练阶段,语言模型参数保持固定,仅更新视觉编码器的参数,以支持大规模视觉-语言表示的高效对齐。
• 指令精调:我们采用 LLaVA-150K英文指令精调数据,并混合相应翻译后的中文数据对模型进行指令精调,以对齐模型多模态基础能力和用户使用意图。在指令精调阶段,我们更新全部模型参数,以提升指令精调数据的利用效率。有趣的是,我们发现即使仅采用英文指令数据进行指令精调,模型也可以理解中文问题,但仅能用英文回答。这表明模型的多语言多模态能力已经得到良好的泛化。在指令精调阶段进一步加入少量中文翻译数据,可以将模型回复语言和用户问题语言对齐。
1.1.2 VisCPM-Chat 介绍
VisCPM-Paint 支持中英双语的文到图生成。该模型使用 CPM-Bee(10B)作为文本编码器,使用UNet 作为图像解码器,并通过扩散模型训练目标融合语言和视觉模型。在训练过程中,语言模型参数始终保持固定。我们使用 Stable Diffusion 2.1 的 UNet 参数初始化视觉解码器,并通过逐步解冻其中关键的桥接参数将其与语言模型融合。该模型在 LAION 2B 英文图文对数据上进行了训练。
与 VisCPM-Chat 类似,我们发现得益于 CPM-Bee 的双语能力,VisCPM-Paint 可以仅通过英文图文对训练,泛化实现良好的中文文到图生成能力,达到中文开源模型的最佳效果。通过进一步加入20M清洗后的原生中文图文对数据,以及 120M 翻译到中文的图文对数据,模型的中文文到图生成能力可以获得进一步提升。我们在标准图像生成测试集 MSCOCO上采样了3万张图片,计算了常用评估图像生成指标 FID (Fréchet Inception Distance)评估生成图片的质量。我们同样提供了两个模型版本,分别为VisCPM-Paint-balance和 VisCPM-Paint-zhplus,前者在英文和中文两种语言上的能力较为平衡,后者在中文能力上更加突出。VisCPM-Paint-balance 只使用了英文图文对进行训练,VisCPM-Paint-zhplus 在VisCPM-Paint-balance 基础上增加了 20M 原生中文图文对数据和120M 翻译到中文的图文对数据进行训练。
1.2 VisCPM 环境介绍
• python 3.8 及以上版本+
• pytorch 1.12 及以上版本,推荐2.0 及以上版本s
• 建议使用 CUDA 11.4 及以上(GPU 用户需考虑此选项)
二、环境搭建
2.1 下载代码
git clone https://github.com/OpenBMB/VisCPM.git
cd VisCPM
2.2 构建环境
conda create -n py310 python=3.10
source activate py310
2.3 安装依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple –ignore-installed
python setup.py install
2.4 大模型下载
• 下载方式一:使用 huggingface 下载
[!NOTE]
需要魔法
!git lfs install
!git clone https://hf-mirror.com/openbmb/VisCPM-Paint
三、快速实战
3.1 VisCPM-Chat 初体验
在下载模型权重后,可以使用如下代码运行VisCPM-Chat(’/path/to/checkpoint’改为模型存放路径)
• 单轮对话
VisCPM-Chat可以通过几行代码实现多模态对话,我们在代码中默认开启了对输入图片的安全检查。
# 如果您单卡显存不足40G,可以引入如下环境变量并将安全模块开关关闭。引入后显存占用约为5G,但推理所需时
间会变长。此选项依赖BMInf,需要安装BMInf依赖库。
export CUDA_MEMORY_CPMBEE_MAX=1g
from VisCPM import VisCPMChat
from PIL import Image
model_path = ‘/path/to/checkpoint’
viscpm_chat = VisCPMChat(model_path, image_safety_checker=True)
# 默认开启对输入图片的安全检查
image_path = ‘figures/vlu_case1.png’
image = Image.open(image_path).convert(“RGB”)
question = ‘如果用一句中国唐代的著名诗人”李白”的古诗来描述这幅图像,你能想到什么?’
answer, _, _ = viscpm_chat.chat(image, question)
print(answer)
可得到如下结果
“黄河之水天上来,奔流到海不复回。” 李白的这句诗可以用来形容这幅图片中汹涌澎湃、波涛汹涌的景象:一条湍急的河流从山上奔腾而下,形成了一幅令人叹为观止的画面,展示出大自然的力量和雄伟壮丽。
• 多轮对话
from VisCPM import VisCPMChat
from PIL import Image
model_path = ‘/path/to/checkpoint’
viscpm_chat = VisCPMChat(model_path, image_safety_checker=True)
# 默认开启对输入图片的安全检查
image_path = ‘figures/vlu_case2.jpeg’
image = Image.open(image_path).convert(“RGB”)
question = ‘这幅图像是在哪个节日拍摄的?’
answer, context, vision_hidden_states = viscpm_chat.chat(image, question)
# 多轮对话传入历史 context
question = ‘你能用什么古诗描述这幅画?’
answer, context, _ = viscpm_chat.chat(image, question, context,
vision_hidden_states=vision_hidden_states)
print(context)
可得到如下结果
User: 这幅图像是在哪个节日拍摄的?
AI: 这幅图像是在中秋节拍摄的, 也就是中国传统节日中的月圆之夜。
User: 你能用什么古诗描述这幅画?
AI: “明月几时有,把酒问青天。” 这是苏轼的《水调歌头》中的一句诗,用来形容这幅图片再贴切不过了:在中
秋之夜,月亮高高地挂在天空中,一座古老的建筑沐浴着月光,营造出一种宁静祥和的气氛。
• API使用指南
我们提供了API接口,可以通过如下代码轻松体验VisCPM-Chat。API接口支持的输入格式和使用方式如下:
import requests
import base64
url = “http://34.143.180.202:3389/viscpm”
resp = requests.post(url, json={
# need to modify
“image”: base64.b64encode(open(“path/to/image”, “rb”).read()).decode(),
“question”: “描述一下这张图片”,
})
resp = resp.json()
print(resp)
3.2 VisCPM-Paint 初体验
在下载模型权重后,可以使用如下代码运行VisCPM-Paint(’/path/to/checkpoint’改为模型存放路径)。
生成上面图片的文本输入可参考prompts.txt。
# 如果您单卡显存不足40G,可以引入如下环境变量并将安全模块开关关闭。引入后显存占用约为17G,但推理所需时间会变长。此选项依赖BMInf,需要安装BMInf依赖库。
export CUDA_MEMORY_CPMBEE_MAX=1g
from VisCPM import VisCPMPaint
painter = VisCPMPaint(‘/path/to/checkpoint’, image_safety_checker=True, prompt_safety_checker=True,
add_ranker=True)
# 默认对输入的文本和输出的图片进行安全检查,默认开启重排序
image = painter.generate(‘人闲桂花落,月静春山空’) # 对应上图第一行第二张图片
image.save(‘/data/test.png’)
我们在代码中默认开启了对输入文本和输出图片的安全检查。
同时,我们默认对生成的图像使用重排序,即对同一个输入,同时生成4张图片,返回与输入相关性最高的1张图片,相关性通过Chinese-Clip进行打分。重排序可以提升生成图片质量的稳定性,但也会降低模型的生成速度,如希望快速得到生成结果,可以关闭重排序机制。
VisCPM-Paint目前使用中文模型进行重排序打分,如果输入英文生成图片,请关闭重排序机制和输入文本检查模块。
四、低资源推理
为了支持更加高效的低资源推理场景,我们借助BMInf工具支持更低的显存需求。首先安装BMInf依赖pip install bminf,然后在命令行中指定export CUDA_MEMORY_CPMBEE_MAX=1g(具体数值可以根据个人需求设定),然后
按照上述步骤进行推理,VisCPM-Chat最低显存占用可以降至5G,VisCPM-Paint最低显存占用可以降至17G。
五、网页部署
我们提供简易的基于gradio的网页版Demo,首先安装gradio:pip install gradio,然后执行如下命令
git clone https://github.com/OpenBMB/VisCPM.git
cd VisCPM
python demo_chat.py # viscpm_chat demo, or
python demo_paint.py # viscpm_paint demo
六、模型微调
为适应特定场景下的需求, 我们提供了VisCPM-Chat模型的微调代码,用户可以在私有数据上进行微调。微调代码位于./finetune/ft_viscpm_chat目录下,具体的微调代码使用方法如下:
# 获取数据集
bash ./finetune/ft_viscpm_chat/get_llava150k_zh.sh
# 模型微调, 注意修改其中的数据集与模型checkpoint路径
bash ./finetune/ft_viscpm_chat/run_viscpm_chat_ft.sh
# node: 8
# batch_size: 8 * 1
# 其他配置可参考’
./finetune/ft_viscpm_chat/config/viscpm_chat_ft.json’与’./finetune/ft_viscpm_chat/run_viscpm_chat_ft.sh’
注:
微调代码中使用了deepspeed-0.9.1配置训练环境,配置方法可以参考此链接。
目前微调代码仅在linux系统下测试,如果您在其他系统配置下进行微调,可能需要修改部分代码。
通过以上步骤,我们成功搭建了 VisCPM 的运行环境,并进行了简单的实战操作。希望这篇教程能帮助你快速上手 VisCPM,实现多模态对话和图像生成。如果你有任何问题,欢迎在评论区留言讨论
嘿,伙伴们,今天我们的AI探索之旅已经圆满结束。关于“Stable Diffusion文生图之VisCPM篇”的内容已经分享给大家了。感谢你们的陪伴,希望这次旅程让你对AI能够更了解、更喜欢。谨记,精准提问是解锁AI潜能的钥匙哦!如果有小伙伴想要了解学习更多的AI知识,请关注我们的官网“AI智研社”,保证让你收获满满呦!
还没有评论呢,快来抢沙发~