复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

最近,OpenAI 的视频生成模型 Sora 爆火,生成式 AI 模型在多模态方面的能力再次引起广泛关注。

现实世界本质上是多模态的,生物体通过不同的渠道感知和交换信息,包括视觉、语言、声音和触觉。开发多模态系统的一个有望方向是增强 LLM 的多模态感知能力,主要涉及多模态编码器与语言模型的集成,从而使其能够跨各种模态处理信息,并利用 LLM 的文本处理能力来产生连贯的响应。

然而,这一策略仅仅适用于文本生成,并不涵盖多模态输出。一些开拓性的研究在语言模型中实现了多模态理解和生成,取得了重大进展,但这些模型仅限于单一的非文本模态,比如图像或音频。

为了解决上述问题,复旦大学邱锡鹏团队联合 Multimodal Art Projection(MAP)、上海人工智能实验室的研究者提出了一种名为 AnyGPT 的多模态语言模型,该模型能够以任意的模态组合来理解和推理各种模态的内容。具体来说,AnyGPT 可以理解文本、语音、图像、音乐等多种模态交织的指令,并能熟练地选择合适的多模态组合进行响应。

例如给出一段语音 prompt,AnyGPT 能够生成语音、图像、音乐形式的综合响应:

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

给出文本 + 图像形式的 prompt,AnyGPT 能够按照 prompt 要求生成音乐:

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

论文地址:https://arxiv.org/pdf/2402.12226.pdf项目主页:https://junzhan2000.github.io/AnyGPT.github.io/

方法简介

AnyGPT 利用离散表征来统一处理各种模态,包括语音、文本、图像和音乐。

为了完成任意模态到任意模态的生成任务,该研究提出了一个可以统一训练的综合框架。如下图 1 所示,该框架由三个主要组件组成,包括:

多模态 tokenizer作为主干网络的多模态语言模型多模态 de-tokenizer

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

其中,tokenizer 将连续的非文本模态转换为离散的 token,随后将其排列成多模态交错序列。然后,语言模型使用下一个 token 预测训练目标进行训练。在推理过程中,多模态 token 被相关的 de-tokenizer 解码回其原始表征。为了丰富生成的质量,可以部署多模态增强模块来对生成的结果进行后处理,包括语音克隆或图像超分辨率等应用。

AnyGPT 可以稳定地训练,无需对当前的大型语言模型(LLM)架构或训练范式进行任何改变。相反,它完全依赖于数据级预处理,使得新模态无缝集成到 LLM 中,类似于添加新语言。

这项研究的一个关键挑战是缺乏多模态交错指令跟踪数据。为了完成多模态对齐预训练,研究团队利用生成模型合成了第一个大规模「任意对任意」多模态指令数据集 ——AnyInstruct-108k。它由 108k 多轮对话样本组成,这些对话错综复杂地交织着各种模态,从而使模型能够处理多模态输入和输出的任意组合。

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

这些数据通常需要大量比特才能准确表征,从而导致序列较长,这对语言模型的要求特别高,因为计算复杂度随着序列长度呈指数级增加。为了解决这个问题,该研究采用了两阶段的高保真生成框架,包括语义信息建模和感知信息建模。首先,语言模型的任务是生成在语义层面经过融合和对齐的内容。然后,非自回归模型在感知层面将多模态语义 token 转换为高保真多模态内容,在性能和效率之间取得平衡。

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

实验

实验结果表明,AnyGPT 能够完成任意模态对任意模态的对话任务,同时在所有模态中实现与专用模型相当的性能,证明离散表征可以有效且方便地统一语言模型中的多种模态。

该研究评估了预训练基础 AnyGPT 的基本功能,涵盖所有模态的多模态理解和生成任务。该评估旨在测试预训练过程中不同模态之间的一致性,具体来说是测试了每种模态的 text-to-X 和 X-to-text 任务,其中 X 分别是图像、音乐和语音。

为了模拟真实场景,所有评估均以零样本模式进行。这意味着 AnyGPT 在评估过程中不会对下游训练样本进行微调或预训练。这种具有挑战性的评估设置要求模型泛化到未知的测试分布。

评估结果表明,AnyGPT 作为一种通用的多模态语言模型,在各种多模态理解和生成任务上取得了令人称赞的性能。

图像

该研究评估了 AnyGPT 在图像描述任务上的图像理解能力,结果如表 2 所示。

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

文本到图像生成任务的结果如表 3 所示。

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持语音

该研究通过计算 LibriSpeech 数据集的测试子集上的词错误率 (WER) 来评估 AnyGPT 在自动语音识别 (ASR) 任务上的性能,并使用 Wav2vec 2.0 和 Whisper Large V2 作为基线,评估结果如表 5 所示。

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

音乐

该研究在 MusicCaps 基准上评估了 AnyGPT 在音乐理解和生成任务方面的表现,采用 CLAP_score 分数作为客观指标,衡量生成的音乐和文本描述之间的相似度,评估结果如表 6 所示。

复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持

感兴趣的读者可以阅读论文原文,了解更多研究内容。

以上就是复旦等发布AnyGPT:任意模态输入输出,图像、音乐、文本、语音都支持的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/621156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月11日 06:32:42
下一篇 2025年11月11日 06:33:15

相关推荐

  • 使用 Go 语言动态构建字节切片并获取其切片

    本文介绍了如何在 Go 语言中动态地将未知数量的字节追加到字节集合中,并最终获取一个字节切片。由于 Go 语言标准库中 container/vector 包已经不推荐使用,本文将介绍使用 []byte 切片实现类似功能的更现代、更高效的方法,并展示如何将其应用于可变字节编码。 在 Go 语言中,处理…

    2025年12月15日
    000
  • Go语言:高效获取Map键的有序列表

    在Go语言中,Map是一种内置的哈希表实现,其设计目标是提供高效的键值查找。然而,Go语言规范明确指出,Map的遍历顺序是随机的,并且每次遍历的顺序都可能不同。这意味着我们不能直接对Map的键进行排序操作,因为Map本身不维护任何特定的顺序。为了获取Map键的有序列表,我们必须采取一种间接的方法。 …

    2025年12月15日
    000
  • Go语言中Map键的字母顺序排序方法

    在Go语言中,由于Map本身是无序的数据结构,若要获取按字母顺序排列的Map键,标准且高效的做法是将所有键提取到一个字符串切片(slice)中,然后利用Go标准库中的sort.Strings函数对该切片进行原地排序。这种方法确保了键的有序性,适用于需要按特定顺序遍历或展示Map键的场景。 理解Go语…

    2025年12月15日
    000
  • Go语言中Map键的字母顺序排序指南

    Go语言中的Map是无序的,若需按字母顺序获取其键,标准做法是将所有键提取到一个字符串切片中,然后利用Go标准库sort包的sort.Strings函数对该切片进行原地排序。这种方法高效且符合Go语言的惯用模式,确保了键的有序访问,适用于需要按特定顺序处理Map键的场景。 理解Go语言中Map的无序…

    2025年12月15日
    000
  • Go 语言中指针的作用与意义

    本文旨在阐述 Go 语言中指针存在的必要性和重要性。Go 语言中的指针不仅允许函数修改其参数,更重要的是,它提供了对内存布局的精细控制,使得开发者可以构建更高效的数据结构和算法。通过示例代码,我们将探讨指针在自定义内存分配、数据结构设计以及性能优化方面的应用。 Go 语言中的指针,虽然在某些场景下看…

    2025年12月15日
    000
  • Golang的container/heap如何实现优先级队列 演示自定义堆结构实现

    在go语言中使用container/heap实现优先级队列需定义结构体并实现heap.interface的五个方法。1. 定义包含优先级字段的item结构体和基于切片的priorityqueue;2. 实现len、less、swap用于堆排序逻辑;3. push和pop方法负责添加和移除元素,需使用…

    2025年12月15日 好文分享
    000
  • 输出格式要求:使用 os.Args 获取 Go 命令行参数

    在 Go 语言中,处理命令行参数是构建实用工具和应用程序的常见需求。虽然 Go 提供了 flag 标准库来简化命令行解析,但在某些情况下,开发者可能需要更底层的控制,例如实现 GNU 风格的命令行选项。本文将介绍如何使用 os.Args 切片直接访问命令行参数,从而实现自定义的命令行解析器。 os.…

    2025年12月15日
    000
  • Go语言如何高效拼接多个字符串

    go语言中高效拼接字符串的最佳方法是使用strings.builder。1.直接使用+运算符效率最低,每次拼接都会创建新字符串对象;2.fmt.sprintf虽然稍好,但格式化带来额外开销;3.strings.join适用于slice内字符串拼接,内部一次性分配内存;4.strings.builde…

    2025年12月15日 好文分享
    000
  • Golang如何操作二进制数据 Golang字节处理指南

    golang的encoding/binary包配合切片可用于高效处理二进制数据。1. 使用binary.bigendian或binary.littleendian实现字节序转换,通过binary.write和binary.read指定字节序进行写入与读取;2. 处理变长数据时,先写入/读取长度字段,…

    2025年12月15日 好文分享
    000
  • Go项目使用第三方库出现segmentation fault怎么办

    go项目中使用第三方库出现segmentation fault,通常意味着c++/c++代码层面的内存访问错误。1.首先确认问题是否出在第三方库,检查文档和已知问题;2.创建最小测试用例以复现问题;3.使用go test -race排除并发问题;4.通过gdb或lldb调试定位崩溃位置,并查看调用栈…

    2025年12月15日 好文分享
    000
  • 如何在Debian GIMP中使用图层

    在Debian系统中利用GIMP进行图像处理时,图层功能是十分关键的工具之一,它可以帮助你对图像的不同部分进行独立编辑而不干扰其他内容。下面是关于如何在GIMP中使用图层的具体操作: 创建与打开图层 创建新图层:选择菜单栏中的“图层” > “新建图层”,即可添加一个新的图层。打开已有图层:若你…

    2025年12月15日
    000
  • 如何通过拖动实现商品列表排序并确保跨页生效?

    前端商品列表拖拽排序及跨页生效方案 本文探讨一种高效的前端商品列表拖拽排序方案,该方案支持跨页排序,并尽量避免修改现有商品添加和修改逻辑。数据库中每个商品的sort字段初始值为0,列表默认按时间倒序排列。 首先,我们需要初始化商品的sort字段,为后续排序预留足够空间。 可以使用SQL语句为所有商品…

    2025年12月15日
    000
  • 如何通过拖动实现商品列表的动态排序?

    电商平台商品列表拖拽排序算法设计 电商网站中,用户可拖拽调整商品列表顺序的功能至关重要。本文针对分页前端和初始sort字段值为0的数据库商品列表,设计一种高效的排序算法,尽量避免修改添加和修改商品的现有操作。 我们的算法核心在于巧妙地利用数据库的sort字段,通过合理的数值分配和调整,实现动态排序。…

    2025年12月15日
    000
  • 如何通过拖动实现商品列表的排序,同时最小化对现有系统的改动?

    电商平台商品列表拖拽排序方案 电商平台中,用户常常需要自定义商品排序。本文针对分页商品列表,允许用户跨页拖拽排序,且数据库中商品的sort字段初始值为0,列表按时间倒序排列的情况,提出一种低成本、最小化改动现有系统的排序算法设计方案。 核心策略是利用数据库的sort字段,通过算法动态调整排序值,实现…

    2025年12月15日
    000
  • MongoDB子文档排序:如何高效排序MongoDB文档中的嵌套数组?

    MongoDB子文档排序:高效处理嵌套数组 在MongoDB数据库中,对包含嵌套数组(子文档)的文档进行排序是常见需求。本文将详细介绍如何利用MongoDB聚合框架高效地实现子文档排序,并通过示例进行说明。 假设我们有一个名为customer_sensitiveword的集合,每个文档包含custo…

    2025年12月15日
    000
  • MongoDB子文档排序:如何高效地对嵌套文档进行排序?

    MongoDB子文档排序详解及案例分析 在MongoDB中,对嵌套文档进行排序并非易事。本文将深入探讨如何高效地对MongoDB集合中的子文档进行排序,并结合实际案例进行说明。 假设我们有一个名为customer_sensitiveword的集合,包含如下文档结构: { “_id” : Object…

    2025年12月15日
    000
  • 如何使用MongoDB聚合管道对子文档进行排序?

    MongoDB子文档排序:高效处理嵌套数据 在MongoDB中,对嵌套在文档中的子文档进行排序是数据处理中的常见需求。本文以一个客户敏感词数据为例,演示如何使用MongoDB聚合管道高效地完成子文档排序。假设我们的数据结构包含客户代码和一个名为list的数组,数组中的每个元素代表一个敏感词,包含wo…

    2025年12月15日
    000
  • Kivy应用界面元素堆叠问题解析与GridLayout布局实践

    本文旨在解决kivy应用中界面元素(如按钮和标签)意外堆叠的问题,特别是当使用`gridlayout`时。核心问题在于根布局组件本身未正确配置列或行数,导致其直接子组件无法按预期布局。通过在kv语言中为根`gridlayout`明确设置`cols`或`rows`属性,即可有效解决此问题,确保界面元素…

    2025年12月15日
    000
  • NumPy教程:优化多行依赖操作,查找具有共同特征的最近邻行

    本教程详细介绍了如何使用numpy高效处理复杂的多行依赖操作,以避免性能瓶颈的python循环。文章核心在于演示如何在一个大型数组中,为每行查找满足特定多列(例如,第二列和第四列值相同)条件的n个最近邻行(基于第一列的数值),并返回其原始索引。通过巧妙地结合数组分割、条件过滤和广播计算,实现了高性能…

    2025年12月15日
    000
  • 使用BeautifulSoup查找跨多个子标签的文本元素

    本教程旨在解决使用BeautifulSoup解析HTML时,当目标文本字符串分散在多个子标签中,标准查找方法失效的问题。文章详细介绍了两种主要解决方案:一是利用`:-soup-contains` CSS选择器伪类结合后处理算法来精确识别包含目标文本的最小父元素;二是针对已知特定结构,通过`unwra…

    2025年12月15日
    000

发表回复

登录后才能评论
关注微信