当前位置: 首页 > article >正文

【1024程序员节】Mini-Omni2:实现具有视觉、语音和双工功能的开源 GPT-4o 模型

GPT4o 是一个包罗万象的模型,是多模态大型模型发展的一个里程碑。 它可以理解视觉、听觉和文本模式,直接输出音频,并支持灵活的双工交互。 不过,它的技术框架并未开源。 开源社区的模型通常能实现 GPT4o 的某些功能,如视觉理解和语音对话。 然而,由于多模态数据、复杂的模型架构和训练过程的复杂性,训练一个包含所有模态的统一模型极具挑战性。 在本文中,我们介绍了 Mini-Omni2,它是一种视觉-听觉助手,能够为用户的视频和语音查询提供实时、端到端的语音响应,同时还集成了听觉功能。 通过整合预训练的视觉和听觉编码器,Mini-Omni2 在各种模式下都能保持强大的性能。 我们提出了一个三阶段训练过程来调整模态,使语言模型能够在有限的数据集上训练后处理多模态输入和输出。 在交互方面,我们引入了基于语义的中断机制,使与用户的对话更加灵活。 所有建模方法和数据构建方法都将开源。 据我们所知,Mini-Omni2 是功能上最接近 GPT4o 的模型之一,我们希望它能为后续研究提供有价值的见解。

简介

Mini-Omni2 是一款全方位互动机型。 它能理解图像、音频和文本输入,并能与用户进行端到端的语音对话。 它具有实时语音输出、全方位多模态理解能力和灵活的交互能力,并具有说话时打断机制。

在这里插入图片描述

功能特点

✅ 多模态交互:与 GPT-4o 一样,能够理解图像、语音和文本。
✅ 实时语音到语音对话功能。 与 Mini-Omni 一样,无需额外的 ASR 或 TTS 模型。

安装

conda create -n omni python=3.10
conda activate omni

git clone https://github.com/gpt-omni/mini-omni2.git
cd mini-omni2
pip install -r requirements.txt

互动演示

  • 启动服务器

注意:运行 API_URL 设置为服务器地址的 streamlit 或 gradio 演示之前,需要先启动服务器。

sudo apt-get install ffmpeg
conda activate omni
cd mini-omni2
python3 server.py --ip '0.0.0.0' --port 60808
  • 运行streamlit demo

注意:您需要在本地运行已安装 PyAudio 的 streamlit。

pip install PyAudio==0.2.14
API_URL=http://0.0.0.0:60808/chat streamlit run webui/omni_streamlit.py

本地测试

conda activate omni
cd mini-omni2
# test run the preset audio samples and questions
python inference_vision.py

Mini-Omni2 概览

  1. 多模态建模: 我们使用多个序列作为模型的输入和输出。 在输入部分,我们将串联图像、音频和文本特征来执行一系列综合任务,如下图所示。 在输出部分,我们使用文本引导的延迟并行输出来生成实时语音应答。

    在这里插入图片描述

  2. 多阶段训练: 我们提出了一种高效的对齐训练方法,并在三阶段训练中分别进行编码器适应、模态对齐和多模态微调。
    在这里插入图片描述

该模型支持其他语言吗?

不支持,该模型只针对英语进行训练。 不过,由于我们使用耳语作为音频编码器,该模型可以理解耳语支持的其他语言(如中文),但输出只能是英文。

Acknowledgements

  • Qwen2 as the LLM backbone.
  • litGPT for training and inference.
  • whisper for audio encoding.
  • clip for image encoding.
  • snac for audio decoding.
  • CosyVoice for generating synthetic speech.
  • OpenOrca and MOSS for alignment.

http://www.kler.cn/news/362894.html

相关文章:

  • 后端C++
  • Unity3D 自动化资源打AB包详解
  • 【2024】【字节青训营】:字节青训营入营测试题——Java版本(已提交通过)
  • 使用ceph-csi把ceph-fs做为k8s的storageclass使用
  • gin入门教程(6):全局中间件,自定义中间件
  • sql注入 --二次注入堆叠注入文件读取getshell
  • FPGA实现UDP通信(4)——数据接收实现
  • Hadoop 安装教程——单节点模式和分布式模式配置
  • freeswitch-esl动态控制录制音频(开始、停止)
  • 项目提测质量不高导致延期何解?
  • Rust中的Send特征:线程间安全传输所有权详解
  • shell——正则表达式入门
  • Python知识点:基于Python工具,如何使用Stellar SDK进行金融应用开发
  • Java | Leetcode Java题解之第504题七进制数
  • Godot Zelda教程练习1
  • 基于neo4j的知识图谱展示系统
  • 深度学习 之 模型部署 使用Flask和PyTorch构建图像分类Web服务
  • 使用pyqt创建一个移动的矩形
  • 关于人工智能的一些展望
  • AI冲击,AI程序员-2024程序员危机与机遇并存
  • GO基础(string相关)
  • SQL 中查找重复数据的四种方法
  • 【功能超全】基于OpenCV车牌识别停车场管理系统软件开发【含python源码+PyqtUI界面+功能详解】-车牌识别python 深度学习实战项目
  • VuePress集成到Vue项目的方法
  • 【复旦微FM33 MCU 外设开发指南】外设篇1——硬件除法器
  • 算力的定义、单位、影响因素、提升方法、分类、应用等。附超算排名