多模态实时交互大模型浦语·灵笔 2.5 OmniLive开源:能看、能听、会记、会说!

简介: 2024年12月12日,多模态实时交互大模型书生·浦语灵笔2.5-OL(InternLM-XComposer2.5-OmniLive)开源,该模型可以通过视觉和听觉实时观察和理解外部世界,自动形成对观察到内容的长期记忆,并可通过语音与人类用户进行对话交谈,提供更自然的大模型交互体验。

01.前言

2024年12月12日,多模态实时交互大模型书生·浦语灵笔2.5-OL(InternLM-XComposer2.5-OmniLive)开源,该模型可以通过视觉和听觉实时观察和理解外部世界,自动形成对观察到内容的长期记忆,并可通过语音与人类用户进行对话交谈,提供更自然的大模型交互体验。

书生·浦语灵笔首发于2023年10月,经过历次迭代,已具备图文理解、图文混合创作、超高分辨率图像分析、超长多模态上下文等多项能力,获得了开源社区的广泛关注和好评,全系列模型累计下载量超过200万次。

书生·浦语灵笔2.5-OL基于书生·浦语2.5大语言模型(InternLM 2.5)研发,采用了多模块通专融合的架构方案,通过多模态实时感知及记忆编码的快系统和多模态复杂推理大模型的慢系统协同,实现多模态实时交互功能。

技术报告地址:

https://github.com/InternLM/InternLM-XComposer/blob/main/InternLM-XComposer-2.5-OmniLive/IXC2.5-OL.pdf

开源模型地址:

https://modelscope.cn/models/Shanghai_AI_Laboratory/internlm-xcomposer2d5-ol-7b

代码仓库地址:

https://github.com/InternLM/InternLM-XComposer/tree/main/InternLM-XComposer-2.5-OmniLive

在科幻电影畅想的未来世界中,AI助手发挥着辅助人类的重要作用,例如:《流浪地球》中的MOSS、《钢铁侠》中的J.A.R.V.I.S.等。这些AI助手不仅具有强大的知识和思考能力,还可以实时感知外部环境变化,记住观察到的事物细节,与人类自然对话交流,并适时地为人类提供实际帮助。

在现实应用中,具有实时视频语音交互功能的多模态大模型,可以让具身机器人、可穿戴智能硬件、移动设备更好地感知世界进而服务人类,具有广阔的应用前景。



添加图片注释,不超过 140 字(可选)

书生·浦语灵笔2.5-OL支持实时视觉感知和语音对话,还创新地提出了多模态长期记忆的功能。通过分别设计多模态实时交互大模型中的感知、记忆和思考功能模块,可实现并发的世界感知、长短期记忆、多模态思考三项核心功能,并提供了完整的系统协同和集成方案。

目前,书生·浦语灵笔2.5-OL已完全开源了模型参数、系统集成推理和前后端应用部署的全套方案,支持免费商用申请。

书生·浦语灵笔2.5-OL的整体架构和三个核心模块的具体设计如下:



添加图片注释,不超过 140 字(可选)

感知模块:

实时感知音频、视频输入,对音频信号进行语音识别和音频分类,对视觉信号抽取视觉特征:

  • 音频感知:研究人员训练了一个轻量的音频多模态大模型,实时监听输入的音频流,同时进行语音识别和音频分类,理解人类语音内容和识别背景声音。
  • 视觉感知:通过视觉编码器实时抽取视觉特征。

记忆模块

持续对输入的视觉特征进行多层级的记忆压缩,不断进行视觉记忆编码压缩,支持根据指令对视觉记忆的高效检索。

  • 短时记忆压缩:对短期视频片段内进行记忆压缩,形成精确的短期记忆。
  • 长期记忆压缩:对短期记忆进一步压缩,形成高压缩比的长期记忆。
  • 记忆查询:根据指令查询长期记忆,召回指令相关的短期记忆片段,用于思考模块的多模态理解。

思考模块

判断语音输入是否为需要响应的用户指令,避免误触发影响使用体验。对于需要影响的用户需求,结合指令查询视觉记忆,并回答问题。

  • 判断用户指令是否需要响应。
  • 调用记忆模块查询历史视觉记忆,用于多模态理解和推理, 并回答用户问题。
  • 调用外部语音合成模块合成最终语音输出。

书生·浦语灵笔2.5-OL 的系统流程设计如下:



添加图片注释,不超过 140 字(可选)

前端

  • 前端使用JavaScript开发,可启用摄像头和麦克风捕捉视频和音频流输入,并将其推送到SRS服务器,同时与后端建立WebSocket连接,监听音频输出和中断信号。
  • 前端在接收到音频输出时播放音频,接收到中断信号时暂停音频播放并丢弃待处理的音频。

SRS服务器

  • SRS(Simple Realtime Server)是一款简单高效的实时音视频服务器,负责接收和传输音频流、视频流数据。

后端服务器

  • 后端与前端建立WebSocket连接后,将从SRS服务器拉取流媒体,并启动独立进程分别读取音频和视频。
  • 音频进程持续读取音频流并检测语音的开始和结束:
  • 检测到语音活动开始时,后端向前端发送中断信号以暂停当前播放的音频,同时向视频进程发送备份信号保存当前记忆状态(记忆快照)。
  • 检测到语音活动结束时,语音分类和识别进程对音频进行背景音分类和语音识别,并将结果送入到大语言模型待处理队列。
  • 视频进程读取视频帧并保存到视频帧队列。记忆进程负责识别、提取并存储记忆,并在收到语音检测进程的备份信号后保存当前记忆状态以便后续检索。
  • 大语言模型进程判断待处理的指令是否需要模型响应,并根据检索到的记忆对于需要响应的指令进行文字回复。
  • 语音合成进程将把文字回复结果转换为音频输出并发送到前端。

02.模型推理

安装ms-swift

!pip install git+https://github.com/modelscope/ms-swift.git

音频理解推理代码

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
from swift.llm import PtEngine, InferRequest, RequestConfig
import torch
engine = PtEngine('Shanghai_AI_Laboratory/internlm-xcomposer2d5-ol-7b:audio', torch_dtype=torch.float16)
request_config = RequestConfig(max_tokens=512)
resp_list = engine.infer([InferRequest(messages=[{'role': 'user', 'content': '<audio>Detect the language and recognize the speech.'}],
                                       audios=['https://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/chinese.mp3'])])
print(f'response: {resp_list[0].choices[0].message.content}')

视觉理解推理代码

import torch
from modelscope import AutoModel, AutoTokenizer
import os
torch.set_grad_enabled(False)
from modelscope import snapshot_download
model_dir = snapshot_download('Shanghai_AI_Laboratory/internlm-xcomposer2d5-ol-7b')
model_dir = os.path.join(model_dir, 'base')
# init model and tokenizer
model = AutoModel.from_pretrained(model_dir, torch_dtype=torch.bfloat16, trust_remote_code=True).cuda().eval().half()
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
model.tokenizer = tokenizer
query = 'Analyze the given image in a detail manner'
image = ['cat.png']
with torch.autocast(device_type='cuda', dtype=torch.float16):
    response, _ = model.chat(tokenizer, query, image, do_sample=False, num_beams=3, use_meta=True)
print(response)

显存占用



添加图片注释,不超过 140 字(可选)

03.模型微调

我们使用ms-swift对internlm-xcomposer2d5-ol-7b进行微调。ms-swift是魔搭社区官方提供的大模型与多模态大模型微调部署框架,支持400+大模型和100+多模态大模型。

ms-swift开源地址:

https://github.com/modelscope/ms-swift

在这里,我们将展示可直接运行的demo,并给出自定义数据集的格式。

在开始微调之前,请确保您的环境已准备妥当。

git clone https://github.com/modelscope/ms-swift.git
cd ms-swift
pip install -e .

base微调脚本:

CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Shanghai_AI_Laboratory/internlm-xcomposer2d5-ol-7b:base \
    --train_type lora \
    --dataset modelscope/coco_2014_caption:validation#20000 \
    --num_train_epochs 1 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --learning_rate 1e-4 \
    --lora_rank 8 \
    --lora_alpha 32 \
    --target_modules attention.wqkv attention.wo feed_forward.w1 feed_forward.w2 feed_forward.w3 \
    --gradient_accumulation_steps 16 \
    --eval_steps 50 \
    --save_steps 50 \
    --save_total_limit 5 \
    --logging_steps 5 \
    --max_length 2048 \
    --output_dir output \
    --warmup_ratio 0.05 \
    --dataloader_num_workers 4

自定义数据集格式如下(system字段可选),只需要指定`--dataset `即可:

{"messages": [{"role": "system", "content": "你是个有用无害的助手"}, {"role": "user", "content": "<image>图片中是什么"}, {"role": "assistant", "content": "一个可爱的小猫"}], "images": ["/xxx/x.jpg"]}
{"messages": [{"role": "system", "content": "你是个有用无害的助手"}, {"role": "user", "content": "<video>视频中是什么"}, {"role": "assistant", "content": "一只可爱的狗狗在草地上奔跑"}], "videos": ["/xxx/x.mp4"]}

训练显存资源:



添加图片注释,不超过 140 字(可选)

audio微调脚本:

CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model Shanghai_AI_Laboratory/internlm-xcomposer2d5-ol-7b:audio \
    --train_type lora \
    --dataset speech_asr/speech_asr_aishell1_trainsets:validation#20000 \
    --num_train_epochs 1 \
    --per_device_train_batch_size 1 \
    --per_device_eval_batch_size 1 \
    --learning_rate 1e-4 \
    --lora_rank 8 \
    --lora_alpha 32 \
    --target_modules all-linear \
    --freeze_vit true \
    --gradient_accumulation_steps 16 \
    --eval_steps 50 \
    --save_steps 50 \
    --save_total_limit 5 \
    --logging_steps 5 \
    --max_length 2048 \
    --output_dir output \
    --warmup_ratio 0.05 \
    --dataloader_num_workers 4

自定义数据集格式如下(system字段可选),只需要指定`--dataset `即可:

{"messages": [{"role": "system", "content": "你是个有用无害的助手"}, {"role": "user", "content": "<audio>语音说了什么"}, {"role": "assistant", "content": "今天天气真好呀"}], "images": ["/xxx/x.wav"]}

训练显存资源:



添加图片注释,不超过 140 字(可选)

训练完成后,使用以下命令对训练后的权重进行推理。这里`--adapters`需要替换成训练生成的last checkpoint文件夹. 由于adapters文件夹中包含了训练的参数文件,因此不需要额外指定`--model`:

# 使用训练时的验证集进行推理
CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --adapters output/vx-xxx/checkpoint-xxx \
    --stream true \
    --load_data_args true

点击链接跳转:浦语·灵笔 2.5 OmniLive

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
目录
相关文章
|
6月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
7月前
|
分布式计算 测试技术 Spark
科大讯飞开源星火化学大模型、文生音效模型
近期,科大讯飞在魔搭社区(ModelScope)和Gitcode上开源两款模型:讯飞星火化学大模型Spark Chemistry-X1-13B、讯飞文生音频模型AudioFly,助力前沿化学技术研究,以及声音生成技术和应用的探索。
628 2
|
7月前
|
机器学习/深度学习 数据采集 人工智能
通义实验室Mobile-Agent-v3开源,全平台SOTA的GUI智能体,支持手机电脑等多平台交互
近日,通义实验室MobileAgent团队正式开源全新图形界面交互基础模型 GUI-Owl,并同步推出支持多智能体协同的自动化框架 Mobile-Agent-v3。该模型基于Qwen2.5-VL打造,在手机端与电脑端共8个GUI任务榜单中全面刷新开源模型性能纪录,达成全平台SOTA。
2212 2
|
6月前
|
机器学习/深度学习 人工智能 人机交互
当AI学会“看”和“听”:多模态大模型如何重塑人机交互
当AI学会“看”和“听”:多模态大模型如何重塑人机交互
519 121
|
6月前
|
数据采集 人工智能 搜索推荐
智能新纪元:多模态大模型如何重塑人机交互
智能新纪元:多模态大模型如何重塑人机交互
343 113
|
6月前
|
人工智能 人机交互 知识图谱
当AI学会“融会贯通”:多模态大模型如何重塑未来
当AI学会“融会贯通”:多模态大模型如何重塑未来
405 114
|
6月前
|
人工智能 安全 搜索推荐
当AI学会“看”和“听”:多模态大模型如何重塑人机交互
当AI学会“看”和“听”:多模态大模型如何重塑人机交互
538 117

热门文章

最新文章