系列篇章💥
一、前言
在数字化浪潮奔涌的当今时代,音视频交互已成为信息传递与沟通交流的核心方式。其凭借丰富多元的表现形式和强大的信息承载能力,为人们构建起沉浸式的交互体验空间。音乐,作为音视频领域里极富感染力与深厚文化价值的关键要素,蕴藏着无尽的情感共鸣、创意灵感与专业知识;而数学,作为一门抽象且严谨的学科,也常借助音视频进行直观呈现与深度讲解。设想一下,在音视频流营造的情境中,能与智能模型围绕音乐、数学等多元知识展开深入探讨,这无疑会为我们开启探索知识宝库的全新视角。Qwen2.5-Omni作为一款引领前沿的多模态大模型,恰恰赋予了我们这般能力。它能够精妙地融合音频与视频信息,精准洞察其中音乐的细腻内涵,清晰解析数学的复杂逻辑,进而与用户展开生动、多元且富有深度的对话。
二、环境准备
如果在此之前,已经成功完成了相关的安装和准备工作,可以直接跳过此章节,快速进入到模型的实战应用环节。
(一)安装相关依赖
首先需要安装一系列关键的依赖库。这些依赖库共同为模型的运行提供支持。以下是具体的安装步骤:
pip uninstall transformers
pip install git+https://github.com/huggingface/transformers@f742a644ca32e65758c3adb36225aef1731bd2a8
pip install accelerate
pip install triton
pip install qwen-omni-utils
pip install -U flash-attn --no-build-isolation
# 用于从魔塔模型库下载模型
pip install modelscope
(二)模型下载准备
为了确保在后续的音频处理任务中能够顺畅地使用Qwen2.5-Omni模型,我们需要提前将模型下载到本地备用。这里,我们借助modelscope
库中的snapshot_download
函数来完成这一重要任务。代码如下:
from modelscope import snapshot_download
model_dir = snapshot_download('Qwen/Qwen2.5-Omni-7B', cache_dir='/root/autodl-tmp', revision='master')
代码中,snapshot_download
函数的第一个参数'Qwen/Qwen2.5-Omni-7B'
明确指定了我们要下载的模型名称,这个名称在modelscope
平台上是唯一标识该模型的。cache_dir='/root/autodl-tmp'
参数则用于指定模型下载后存储的路径,你可以根据自己的实际情况修改这个路径,但务必确保指定的目录具有足够的存储空间来容纳模型文件。因为Qwen2.5-Omni模型文件相对较大,充足的存储空间是保证下载成功的关键。revision='master'
表示我们要下载模型的最新版本,这样可以获取到模型的最新特性和优化,以获得最佳的使用体验。
三、加载模型 & 导入依赖
当环境搭建完毕,模型也成功下载到本地后,接下来的核心步骤便是加载模型并导入相关依赖,为智能信息交互做好最后的准备工作。具体代码如下:
import torch
from transformers import Qwen2_5OmniModel, Qwen2_5OmniProcessor
import librosa
import audioread
from IPython.display import Video
from IPython.display import Audio
model_path = "Qwen/Qwen2.5-Omni-7B"
model = Qwen2_5OmniModel.from_pretrained(
model_path,
torch_dtype=torch.bfloat16,
device_map="auto",
attn_implementation="flash_attention_2",
)
processor = Qwen2_5OmniProcessor.from_pretrained(model_path)
在这段代码中,启用了flash_attention_2
技术,这是一种高效的注意力机制实现方式,能进一步提升模型处理视频数据时的计算效率,使模型在信息交互场景中响应更迅速、准确。
四、定义推理函数
为高效处理视频输入和文本提示,并生成精准的文本输出,我们需定义一个专属推理函数。此函数协调模型与各类工具,确保任务顺利推进。以下是推理函数的详细代码:
from qwen_omni_utils import process_mm_info
# 推理函数,用于处理视频输入,并生成文本和音频输出。
def inference(video_path):
messages = [
{"role": "system", "content": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech."},
{"role": "user", "content": [
{"type": "video", "video": video_path},
]
},
]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
# image_inputs, video_inputs = process_vision_info([messages])
audios, images, videos = process_mm_info(messages, use_audio_in_video=True)
inputs = processor(text=text, audios=audios, images=images, videos=videos, return_tensors="pt", padding=True, use_audio_in_video=True)
inputs = inputs.to(model.device).to(model.dtype)
output = model.generate(**inputs, use_audio_in_video=True, return_audio=True)
text = processor.batch_decode(output[0], skip_special_tokens=True, clean_up_tokenization_spaces=False)
audio = output[1]
return text, audio
五、对话聊天
(一)通过视频与 Qwen2.5-Omni 进行多模态聊天,讨论音乐相关的内容
以下代码通过 Qwen2.5-Omni 对视频文件进行推理,并生成文本和音频输出:
video_path = "files/music.mp4" # 替换为本地视频文件路径
display(Video(video_path, width=640, height=360)) # 显示视频
audio_data, sr = librosa.load(audioread.ffdec.FFmpegAudioFile(video_path), sr=16000)
display(Audio(audio_data, rate=sr)) # 显示音频
response, audio = inference(video_path)
print(response[0]) # 打印生成的文本
display(Audio(audio, rate=24000)) # 显示生成的音频
代码执行打印输出如下:
(二)通过视频与 Qwen2.5-Omni 进行多模态聊天,讨论数学相关的内容
以下代码通过 Qwen2.5-Omni 对视频文件进行推理,并生成文本和音频输出:
video_path = "files/math.mp4" # 替换为本地视频文件路径
display(Video(video_path, width=640, height=360)) # 显示视频
audio_data, sr = librosa.load(audioread.ffdec.FFmpegAudioFile(video_path), sr=16000)
display(Audio(audio_data, rate=sr)) # 显示音频
response, audio = inference(video_path)
print(response[0]) # 打印生成的文本
display(Audio(audio, rate=24000)) # 显示生成的音频
代码执行打印输出如下:
六、总结
通过本文的详细介绍,我们全方位展示了如何运用 Qwen2.5-Omni 模型在音频和视频流中深入讨论音乐和数学等多样化内容。在实际操作过程中,借助灵活定义不同的系统提示和用户提示,我们能够精准调控模型的行为,使其无缝适配各类复杂多样的应用场景。无论是音乐爱好者探索音乐作品背后的故事、分析音乐技巧,还是学生通过音视频学习数学知识、解答数学难题,Qwen2.5-Omni 都能凭借其卓越的多模态处理能力,提供高效、准确且富有深度的交互体验。
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑
😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。
💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!
转载自CSDN-专业IT技术社区
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xiaobing259/article/details/147103195