VisCPM
is a family of open-source large multimodal models, which support multimodal conversational capabilities (VisCPM-Chat
model) and text-to-image generation capabilities (VisCPM-Paint
model) in both Chinese and English, achieving state-of-the-art peformance among Chinese open-source multimodal models. VisCPM is trained based on the large language model CPM-Bee with 10B parameters, fusing visual encoder (Q-Former) and visual decoder (Diffusion-UNet) to support visual inputs and outputs. Thanks to the good bilingual capability of CPM-Bee, VisCPM
can be pre-trained with English multimodal data only and well generalize to achieve promising Chinese multimodal capabilities.
VisCPM
是一个开源的多模态大模型系列,支持中英双语的多模态对话能力(VisCPM-Chat
模型)和文到图生成能力(VisCPM-Paint
模型),在中文多模态开源模型中达到最佳水平。VisCPM基于百亿参数量语言大模型CPM-Bee(10B)训练,融合视觉编码器(Q-Former)和视觉解码器(Diffusion-UNet)以支持视觉信号的输入和输出。得益于CPM-Bee基座优秀的双语能力,VisCPM
可以仅通过英文多模态数据预训练,泛化实现优秀的中文多模态能力。
- 👐 开源使用:VisCPM可以自由被用于个人和研究用途。我们希望通过开源VisCPM模型系列,推动多模态大模型开源社区和相关研究的发展。
- 🌟 涵盖图文双向生成:VisCPM模型系列较为全面地支持了图文多模态能力,涵盖多模态对话(图到文生成)能力和文到图生成能力。
- 💫 中英双语性能优异:得益于语言模型基座CPM-Bee优秀的双语能力,VisCPM在中英双语的多模态对话和文到图生成均取得亮眼的效果。
VisCPM-Chat
支持面向图像进行中英双语多模态对话。该模型使用Q-Former
作为视觉编码器,使用CPM-Bee(10B)作为语言基座模型,并通过语言建模训练目标融合视觉和语言模型。模型训练包括预训练和指令精调两阶段:
-
预训练:我们使用约100M高质量英文图文对数据对
VisCPM-Chat
进行了预训练,数据包括CC3M、CC12M、COCO、Visual Genome、Laion等。在预训练阶段,语言模型参数保持固定,仅更新Q-Former
部分参数,以支持大规模视觉-语言表示的高效对齐。 -
指令精调:我们采用LLaVA-150K英文指令精调数据,并混合相应翻译后的中文数据对模型进行指令精调,以对齐模型多模态基础能力和用户使用意图。在指令精调阶段,我们更新全部模型参数,以提升指令精调数据的利用效率。有趣的是,我们发现即使仅采用英文指令数据进行指令精调,模型也可以理解中文问题,但仅能用英文回答。这表明模型的多语言多模态能力已经得到良好的泛化。在指令精调阶段进一步加入少量中文翻译数据,可以将模型回复语言和用户问题语言对齐。
我们在LLaVA标准英文测试集和翻译的中文测试集对模型进行了评测,该评测基准考察模型在开放域对话、图像细节描述、复杂推理方面的表现,并使用GPT-4进行打分。可以观察到,VisCPM-Chat
在中文多模态能力方面取得了最佳的平均性能,在通用域对话和复杂推理表现出色,同时也表现出了不错的英文多模态能力。我们提供了两个模型版本,分别为VisCPM-Chat-balance
和VisCPM-Chat-zhplus
,前者在英文和中文两种语言上的能力较为平衡,后者在中文能力上更加突出。两个模型在指令精调阶段使用的数据相同,VisCPM-Chat-zhplus
在预训练阶段额外加入了20M清洗后的原生中文图文对数据和120M翻译到中文的图文对数据。
模型 | 语言模型 基座 |
英文 | 中文 | |||||||
多模对话 | 细节描述 | 复杂推理 | 平均 | 多模对话 | 细节描述 | 复杂推理 | 平均 | |||
英文模型 | MiniGPT4 | Vicuna-13B | 65.0 | 67.3 | 76.6 | 69.7 | - | - | - | - |
InstructBLIP | Vicuna-13B | 81.9 | 68.0 | 91.2 | 80.5 | - | - | - | - | |
LLaVA | Vicuna-13B | 89.5 | 70.4 | 96.2 | 85.6 | - | - | - | - | |
中英双语 | mPLUG-Owl | LLaMA-7B | 64.6 | 47.7 | 80.1 | 64.2 | 76.3 | 61.2 | 77.8 | 72.0 |
VisualGLM | ChatGLM-6B | 62.4 | 63.0 | 80.6 | 68.7 | 76.6 | 87.8 | 83.6 | 82.7 | |
Ziya-Visual | Ziya-LLaMA-13B-v1 | 82.7 | 69.9 | 92.1 | 81.7 | 85.0 | 74.7 | 82.4 | 80.8 | |
VisCPM-Chat-balance | CPMBee-10B | 83.3 | 68.9 | 90.5 | 81.1 | 92.7 | 76.1 | 89.2 | 86.3 | |
VisCPM-Chat-zhplus | CPMBee-10B | 80.1 | 65.7 | 92.5 | 79.6 | 90.3 | 81.4 | 92.1 | 88.2 |
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翻译到中文的图文对数据进行训练。
模型 | Zero-shot FID↓ | |
英文 | 中文 | |
GLIDE | 12.2 | - |
Make-A-Scene | 11.8 | - |
DALL·E-2 | 10.4 | - |
Unidiffuser | 9.7 | - |
Cogview2 | - | 24.0 |
Stable Diffusion | 8.6 | - |
AltDiffusion | 17.2 | 16.1 |
TaiyiDiffusion | - | 15.6 |
VisCPM-Paint-balance | 9.5 | 10.9 |
VisCPM-Paint-zhplus | 9.9 | 9.6 |
- 克隆仓库并进入源码目录
git clone https://github.com/OpenBMB/VisCPM.git
cd VisCPM
- 创建conda环境
conda create -n viscpm python=3.10 -y
conda activate viscpm
- 安装依赖
pip install torch>=1.10
pip install -r requirements.txt
VisCPM目前需要单卡20GB以上的GPU运行,我们未来会支持更加节省显存的推理方式。
模型 | 描述 | 下载链接 |
---|---|---|
VisCPM-Chat-balance | 中英文能力较为平衡的多模态对话模型 | 链接 |
VisCPM-Chat-zhplus | 中文能力突出的多模态对话模型 | 链接 |
VisCPM-Paint-balance | 中英文能力较为平衡的文生图模型 | 链接 |
VisCPM-Paint-zhplus | 中文能力突出的文生图模型 | 链接 |
在下载模型权重后,可以使用如下代码运行VisCPM-Chat('/path/to/checkpoint'
改为模型存放路径)
VisCPM-Chat可以通过几行代码实现多模态对话,我们在代码中默认开启了对输入图片的安全检查。
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: “明月几时有,把酒问青天。” 这是苏轼的《水调歌头》中的一句诗,用来形容这幅图片再贴切不过了:在中秋之夜,月亮高高地挂在天空中,一座古老的建筑沐浴着月光,营造出一种宁静祥和的气氛。
在下载模型权重后,可以使用如下代码运行VisCPM-Paint('/path/to/checkpoint'
改为模型存放路径)。
生成上面图片的文本输入可参考prompts.txt。
# 如果您单卡显存不足40g,可以引入如下环境变量。引入后显存占用约为22G,但推理所需时间会变长
export CUDA_MEM_SAVE=True
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目前使用中文模型进行重排序打分,如果输入英文生成图片,请关闭重排序机制和输入文本检查模块。
作为多模态模型,VisCPM
通过学习大量的公开图文数据来生成内容,但它无法理解、表达个人观点或价值判断,它所输出的任何内容都不代表模型开发者的观点和立场。因此用户在使用VisCPM生成的内容时,应自行负责对其进行评估和验证。
为了帮助用户防止模型处理或生成不符合普遍社会价值观的内容,我们在VisCPM
中加入了内容安全保障模块。当安全模块检测到模型处理或生成的图像文本内容不符合安全规范时,会对相应内容进行拦截。我们对VisCPM-Chat
接受的图片输入以及VisCPM-Paint
接受的文字输入和图片输出进行了安全检查。VisCPM的安全模块仍然不完美,可能会出现漏判和误判的情况。我们会在未来进一步提升安全模块的性能。
VisCPM系列模型采用协议为"通用模型许可协议-来源说明-宣传限制-非商业化",允许个人使用和研究用途。如需将模型用于商业用途,请联系[email protected]来洽谈商业授权事宜。
CPM-Bee基座采用协议为“通用模型许可协议-来源说明-宣传限制-商业授权”,允许商用,如需将模型用于商业用途,请联系[email protected]来获取书面授权。
VisCPM
仍然在不断完善中,我们将会在以下方面进一步优化:
- 整合到🤗 huggingface代码框架中
- 完善安全模型功能
- 支持快速网页部署功能
- 支持模型量化功能,降低推理成本
- 支持模型微调功能
此项目由以下机构联合研发:
@misc{thu-2023-viscpm,
author = {THUNLP, ModelBest, Zhihu},
title = {VisCPM: Chinese-English Bilingual Multi-modal Large Model Series},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/OpenBMB/VisCPM}}
}