多模态大模型(MLLM)之VisCPM:支持中文对话文图双向生成

news2024/11/15 13:59:56

       2020 年 12 月发布的 CPM-1 是国内首个中文大模型 ;2022 年 9 月发布的 CPM-Ant 仅微调 0.06% 参数就能超越全参数微调效果;2023 年 5 月发布的 WebCPM 是 中文首个基于搜索的问答开源模型。CPM-Bee 百亿大模型是团队最新发布的基座模型,中文能力登顶权威榜单 ZeroCLUE,英文能力打平 LLaMA。VisCPM是清华系面壁智能开源的多语言多模态大模型。它基于百亿参数基座模型 CPM-Bee 训练(CPM-Bee官方教程),融合视觉编码器(Q-Former 和视觉解码器(Diffusion-UNet)以支持视觉信号的输入和输出。得益于 CPM-Bee 底座优秀的双语能力,VisCPM 可以仅通过英文多模态数据预训练,泛化实现优秀的中文多模态能力。

👐 开源使用:VisCPM 可以自由被用于个人和研究用途。

🌟 涵盖图文双向生成:VisCPM 模型系列较为全面地支持了图文多模态能力,涵盖多模态对话(图到文生成)能力和文到图生成能力。

💫 中英双语性能优异:得益于语言模型基座 CPM-Bee 优秀的双语能力,VisCPM 在中英双语的多模态对话和文到图生成均取得亮眼的效果。

VisCPM-Chat在线体验地址:https://huggingface.co/spaces/openbmb/viscpm-chat

VisCPM-Paint在线体验地址:https://huggingface.co/spaces/openbmb/viscpm-paint

VisCPM-Chat:支持图像双语多模态对话

       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 翻译到中文的图文对数据。

下面是VisCPM-Chat 的多模态对话效果展示:

VisCPM-Paint :支持双语文到图生成

      VisCPM-Paint 支持中英双语的文到图生成。该模型使用 CPM-Bee(10B)作为文本编码器,使用 UNet 作为图像解码器,并通过扩散模型训练目标融合语言和视觉模型。在训练过程中,语言模型参数始终保持固定。使用 Stable Diffusion 2.1 的 UNet 参数初始化视觉解码器,并通过逐步解冻其中关键的桥接参数将其与语言模型融合。该模型在 LAION 2B 英文图文对数据上进行了训练。

      与 VisCPM-Chat 一样,得益于 CPM-Bee 的双语能力,VisCPM-Paint 可以仅通过英文图文对训练,泛化实现良好的中文文到图生成能力,达到中文开源模型的最佳效果。通过进一步加入 20M 清洗后的原生中文图文对数据,以及 120M 翻译到中文的图文对数据,模型的中文文到图生成能力可以获得进一步提升。

      同样,VisCPM-Paint 有 balance和 zhplus 两个不同的版本。在标准图像生成测试集 MSCOCO 上采样了 3万张图片,计算了常用评估图像生成指标 FID (Fréchet Inception Distance) 评估生成图片的质量。

下面是 VisCPM-Paint 的图片生成效果展示:

VisCPM多模态大模型安装&使用

安装

  1. 克隆仓库并进入源码目录

git clone https://github.com/OpenBMB/VisCPM.gitcd VisCPM
  1. 创建conda环境

conda create -n viscpm python=3.10 -yconda activate viscpm
  1. 安装依赖

pip install torch>=1.10pip install -r requirements.txt

        VisCPM目前需要单卡20GB以上的GPU运行,后续会支持更加节省显存的推理方式。

VisCPM-Chat

    在下载模型权重后,可以使用如下代码运行VisCPM-Chat('/path/to/checkpoint'改为模型存放路径)

单轮对话

        VisCPM-Chat可以通过几行代码实现多模态对话,在代码中默认开启了对输入图片的安全检查

# 如果您单卡显存不足40g,可以引入如下环境变量并将安全模块开关关闭。引入后显存占用约为5G,但推理所需时间会变长。此选项依赖bminf,需要安装bminf依赖库。export CUDA_MEMERY_CPMBEE_MAX=1g
from VisCPM import VisCPMChatfrom PIL import Imagemodel_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 VisCPMChatfrom PIL import Imagemodel_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)# 多轮对话传入历史 contextquestion = '你能用什么古诗描述这幅画?'answer, context, _ = viscpm_chat.chat(image, question, context, vision_hidden_states=vision_hidden_states)print(context)

得到的结果如下:

User: 这幅图像是在哪个节日拍摄的?AI: 这幅图像是在中秋节拍摄的, 也就是中国传统节日中的月圆之夜。User: 你能用什么古诗描述这幅画?AI: “明月几时有,把酒问青天。” 这是苏轼的《水调歌头》中的一句诗,用来形容这幅图片再贴切不过了:在中秋之夜,月亮高高地挂在天空中,一座古老的建筑沐浴着月光,营造出一种宁静祥和的气氛。

VisCPM-Paint

     在下载模型权重后,可以使用如下代码运行VisCPM-Paint('/path/to/checkpoint'改为模型存放路径)。

# 如果您单卡显存不足40g,可以引入如下环境变量并将安全模块开关关闭。引入后显存占用约为17G,但推理所需时间会变长。此选项依赖bminf,需要安装bminf依赖库。export CUDA_MEMERY_CPMBEE_MAX=1g
from VisCPM import VisCPMPaintpainter = VisCPMPaint('/path/to/checkpoint', image_safety_checker=True, prompt_safety_checker=True, add_ranker=True) # 默认对输入的文本和输出的图片进行安全检查,默认开启重排序image = painter.generate('人闲桂花落,月静春山空') # 对应上图第一行第二张图片image.save('/data/test.png')

参考文献:

[1] https://github.com/OpenBMB/VisCPM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/806604.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+mybatis+vue进销存管理信息系统

基于springbootmybatisvue进销存管理信息系统 一、系统介绍二、功能展示1.个人中心2.企业信息管理3.商品信息管理4.客户信息管理5.入库记录管理6.出库记录管理7.出库记录管理8.操作日志管理9.库存盘点管理 四、获取源码 一、系统介绍 系统主要功能: 普通用户&#…

为啥运营商现在严格规范网购流量卡的年龄了呢?20岁以下难了

本期知识点只讲流量卡,葫芦弟今天分享给大家手机流量卡开卡安全的问题。 很多朋友可能觉得电信诈骗离自己很远,但实际上现在已经出现大量收购电话卡用于诈骗的现象,而我们很可能在不知不觉中掉进犯罪分子的陷阱,触犯法律&#xff…

关于element ui 安装失败的问题解决方法、查看是否安装成功及如何引入

Vue2引入 执行npm i element-ui -S报错 原因:npm版本太高 报错信息: 解决办法: 使用命令: npm install --legacy-peer-deps element-ui --save 引入: 在main.js文件中引入 //引入Vue import Vue from vue; //引入…

C# Solidworks二次开发:自动创建虚拟零件及使用注意事项

今天要讲的是关于在solidworks中如何自动创建虚拟零件的功能,也就是solidworks中插入新零件这个功能。 实现这个功能需要使用的API如下所示: InsertNewVirtualPart(swFaceOrPlane1, out swcomp2); 其中这个方法中使…

【动态规划part11】| 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

目录 🎈LeetCode123.买卖股票的最佳时机III 🎈LeetCode188.买卖股票的最佳时机IV 🎈LeetCode123.买卖股票的最佳时机III 链接:123.买卖股票的最佳时机III 给定一个数组,它的第 i 个元素是一支给定的股票在第 i…

X99双路主机28核56线程电脑配置选购与系统装机详细流程(附带资源)

文章目录 前期调研(包含配件详细信息)装机过程推荐学习视频实践过程 系统装机(含资源详细过程)提前准备(制作系统盘工具以及ISO系统镜像)实践过程步骤一:使用Rufsus工具,选择ISO文件…

记一次 .NET 某设备监控系统 死锁分析

一:背景 1. 讲故事 上周看了一位训练营朋友的dump,据朋友说他的程序卡死了,看完之后发现是一例经典的死锁问题,蛮有意思,这个案例算是学习 .NET高级调试 入门级的案例,这里和大家分享一下。 二&#xff…

【原理图专题】OrCAD Capture原理图设计差异对比

在我们进行硬件设计时,往往会遇到项目上的变更。比如更换了替代料、电路错误、新需求等等,这些有的需要动用到原理图,而动到原理图往往很容易出错,特别是已经量产的产品,我们可以通过BOM对比等方式来查看变更。那是否有一种其他方式能直接进行原理图对比呢? 其中对比功能…

桥接模式——处理多维度变化

1、简介 1.1、概述 桥接模式是一种很实用的结构型设计模式。如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合单一职责原则。与多层继承方案不同,它将两个独…

【Linux】更换jdk版本

目录 一、前言二、查看jdk版本号1、项目中的版本号(pom.xml)2、服务器中的版本号 三、更换jdk版本1、创建java文件夹2、下载并解压JDK安装包①、下载jdk安装包②、移动到创建好的/usr/local/java路径下③、解压jdk安装包 四、删除原来的jdk版本1、删除原…

Java虚拟机——线程安全与锁优化

1 线程安全 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作。调用这个对象的行为都可以获得安全的结果,就称这个对象是线程安全…

从零开始理解Linux中断架构(23)中断运行临界区和占先调度

Linux在内核中定义了6种运行临界区。 in_interrupt in_interrupt在驱动中使用频率最高的函数了,in_interrupt()就是指示Core是否正在中断处理中,包含了硬中断,软中断运行临界区。如果在中断处理中,则不能调用__do_softirq执行软中断处理。硬中断中不可调度不可中断,所有…

智慧园区安保人员巡更巡检解决方案,蓝牙信标主动式蓝牙定位导航系统

一、需求分析 目前,大部分写字楼,工厂,学校,银行,车站等场景对安保人员的管理依然靠手填单子记录作业情况,在缺乏信息化手段的情况下,靠人员自觉性或者RFID巡更棒,在这些传统方式下…

2023 年牛客多校第四场题解

A Bobo String Construction 题意:给定一个 01 01 01 字符串 t t t,构造一个长度为 n n n 的 01 01 01 串 s s s,使得 t t t 在 c o n c a t ( t , s , t ) {\rm concat}(t, s, t) concat(t,s,t) 中仅出现两次。多测, 1 ≤…

Android杂录 语音转文字功能 python混合开发环境搭建 priv-app开机赋予麦克风权限 HDMI与麦克风同时工作配置

专栏目录: 高质量文章导航-持续更新中_GZVIMMY的博客-CSDN博客 一.语音转文字功能 软件架构 硬件架构: 耳机接口 报错类型: AudioFlinger could not create record track, status: -1 Androi

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块7

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

FreeRTOS之互斥量

什么是互斥量? 在多数情况下,互斥型信号量和二值型信号量非常相似,但是从功能上二值型信号量用于同步, 而互斥型信号量用于资源保护。 互斥型信号量和二值型信号量还有一个最大的区别,互斥型信号量可以有效解决优先级…

Python(四十八)列表的特点

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

基于SpringBoot+Vue的藏区特产销售平台设计与实现(源码+LW+部署文档等)

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

python调用百度ai将图片/pdf识别为表格excel

python调用百度ai将图片识别为表格excel 表格文字识别(异步接口)图片转excel 表格文字识别V2图片/pdf转excel通用 表格文字识别(异步接口) 图片转excel 百度ai官方文档:https://ai.baidu.com/ai-doc/OCR/Ik3h7y238 使用的是表格文字识别(异步接口),同步…