Qwen2.5-Omni - 端到端多模态模型


一、关于 Qwen2.5-Omni

Qwen2.5-Omni 是一个端到端的多模态模型,旨在感知包括文本、图像、音频和视频在内的多种模态,同时以流式方式生成文本和自然语音响应。


Qwen2.5-Omni架构图


相关链接


核心特性

  • 全能新颖的架构:我们提出了Thinker-Talker架构,这是一个端到端多模态模型,能够感知文本、图像、音频和视频等多种模态,同时以流式方式生成文本和自然语音响应。我们还提出了一种名为TMRoPE(时间对齐多模态RoPE)的新型位置嵌入方法,用于同步视频输入与音频的时间戳。
  • 实时语音视频聊天:专为完全实时交互设计的架构,支持分块输入和即时输出。
  • 自然且鲁棒的语音生成:超越了许多现有的流式和非流式方案,在语音生成方面展现出卓越的鲁棒性和自然度。
  • 跨模态的强劲性能:在与同规模单模态模型的基准测试中,Qwen2.5-Omni在所有模态上都表现出色。其音频能力超越了同规模的Qwen2-Audio,并与Qwen2.5-VL-7B达到了相当的性能水平。
  • 出色的端到端语音指令跟随:Qwen2.5-Omni在端到端语音指令跟随方面的表现与文本输入相当,MMLU和GSM8K等基准测试结果印证了这一点。

模型架构


架构概览图


二、快速入门

1、安装依赖

以下我们提供简单示例,展示如何通过🤗 Transformers使用Qwen2.5-Omni。

Qwen2.5-Omni的代码已集成至最新版Hugging Face transformers库,建议您通过以下命令从源码构建:


pip uninstall transformers
pip install git+https://github.com/huggingface/transformers@v4.51.3-Qwen2.5-Omni-preview
pip install accelerate


或者您可能会遇到以下错误:

KeyError: 'qwen2_5_omni'

我们提供了一套工具包,帮助您像调用API一样便捷地处理各类音视频输入,包括base64编码、URL链接以及交错的音频、图像和视频数据。您可以通过以下命令安装,并确保系统中已安装ffmpeg

# It's highly recommended to use `[decord]` feature for faster video loading.
pip install qwen-omni-utils[decord] -U


如果你没有使用 Linux 系统,可能无法通过 PyPI 安装 decord。这种情况下,可以使用 pip install qwen-omni-utils -U 命令回退到 torchvision 进行视频处理。不过,你仍然可以从源码安装 decord 来确保加载视频时使用 decord。


2、🤗 Transformers 使用指南

以下代码片段展示了如何结合 transformersqwen_omni_utils 使用聊天模型:


import soundfile as sf

from transformers import Qwen2_5OmniForConditionalGeneration, Qwen2_5OmniProcessor
from qwen_omni_utils import process_mm_info

# default: Load the model on the available device(s)
model = Qwen2_5OmniForConditionalGeneration.from_pretrained("Qwen/Qwen2.5-Omni-3B", torch_dtype="auto", device_map="auto")

# We recommend enabling flash_attention_2 for better acceleration and memory saving.
# model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
#     "Qwen/Qwen2.5-Omni-3B",
#     torch_dtype="auto",
#     device_map="auto",
#     attn_implementation="flash_attention_2",
# )

processor = Qwen2_5OmniProcessor.from_pretrained("Qwen/Qwen2.5-Omni-3B")

conversation = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "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": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/draw.mp4"},
        ],
    },
]

# set use audio in video
USE_AUDIO_IN_VIDEO = True

# Preparation for inference
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(conversation, use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = processor(text=text, audio=audios, images=images, videos=videos, return_tensors="pt", padding=True, use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = inputs.to(model.device).to(model.dtype)

# Inference: Generation of the output text and audio
text_ids, audio = model.generate(**inputs, use_audio_in_video=USE_AUDIO_IN_VIDEO)

text = processor.batch_decode(text_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(text)
sf.write(
    "output.wav",
    audio.reshape(-1).detach().cpu().numpy(),
    samplerate=24000,
)


3、最低GPU显存需求

模型精度15秒视频30秒视频60秒视频
Qwen-Omni-3BFP3289.10 GB不推荐不推荐
Qwen-Omni-3BBF1618.38 GB22.43 GB28.22 GB
Qwen-Omni-7BFP3293.56 GB不推荐不推荐
Qwen-Omni-7BBF1631.11 GB41.85 GB60.19 GB

注:上表展示了使用transformers进行推理时的理论最低显存需求,其中BF16测试时启用了attn_implementation="flash_attention_2";但实际应用中,显存占用通常至少是理论值的1.2倍。更多信息请参阅此链接资源

4、视频URL资源使用

视频URL的兼容性主要取决于第三方库版本,具体如下表所示。若需更改默认后端,可通过设置环境变量FORCE_QWENVL_VIDEO_READER=torchvisionFORCE_QWENVL_VIDEO_READER=decord实现。

后端HTTPHTTPS
torchvision >= 0.19.0
torchvision < 0.19.0
decord

5、批量推理

当设置 return_audio=False 时,该模型能够将文本、图像、音频和视频等多种类型的混合样本组合成批量输入。以下是一个示例。


# Sample messages for batch inference

# Conversation with video only
conversation1 = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "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": "/path/to/video.mp4"},
        ]
    }
]

# Conversation with audio only
conversation2 = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "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": "audio", "audio": "/path/to/audio.wav"},
        ]
    }
]

# Conversation with pure text
conversation3 = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "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": "who are you?"
    }
]

# Conversation with mixed media
conversation4 = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "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": "image", "image": "/path/to/image.jpg"},
            {"type": "video", "video": "/path/to/video.mp4"},
            {"type": "audio", "audio": "/path/to/audio.wav"},
            {"type": "text", "text": "What are the elements can you see and hear in these medias?"},
        ],
    }
]

# Combine messages for batch processing
conversations = [conversation1, conversation2, conversation3, conversation4]

# set use audio in video
USE_AUDIO_IN_VIDEO = True

# Preparation for batch inference
text = processor.apply_chat_template(conversations, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(conversations, use_audio_in_video=USE_AUDIO_IN_VIDEO)

inputs = processor(text=text, audio=audios, images=images, videos=videos, return_tensors="pt", padding=True, use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = inputs.to(model.device).to(model.dtype)

# Batch Inference
text_ids = model.generate(**inputs, use_audio_in_video=USE_AUDIO_IN_VIDEO, return_audio=False)
text = processor.batch_decode(text_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(text)


三、使用技巧


1、音频输出提示

若用户需要音频输出,必须将系统提示设置为:"你是由阿里巴巴集团Qwen团队开发的虚拟人类Qwen,能够感知听觉和视觉输入,并生成文本和语音。"否则音频输出可能无法正常工作。


{
    "role": "system",
    "content": [
        {"type": "text", "text": "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."}
    ],
}


2、在视频中使用音频

在多模态交互过程中,用户提供的视频通常包含音频(例如对视频内容的提问,或视频中某些事件产生的声音)。这些信息有助于模型提供更好的交互体验。因此我们为用户提供以下选项,来决定是否在视频中使用音频。


# first place, in data preprocessing
audios, images, videos = process_mm_info(conversations, use_audio_in_video=True)


# second place, in model processor
inputs = processor(text=text, audio=audios, images=images, videos=videos, return_tensors="pt", 
                   padding=True, use_audio_in_video=True)

#  third place, in model inference
text_ids, audio = model.generate(**inputs, use_audio_in_video=True)

值得注意的是,在多轮对话过程中,这些地方的use_audio_in_video参数必须设置为相同值,否则会出现意外结果。


3、是否启用音频输出

该模型同时支持文本和音频输出。如果用户不需要音频输出,可以在初始化模型后调用 model.disable_talker() 方法。此选项将节省约 ~2GB 的 GPU 显存,但会导致 generate 函数的 return_audio 参数只能设置为 False

model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2.5-Omni-3B",
    torch_dtype="auto",
    device_map="auto"
)
model.disable_talker()


为了获得更灵活的体验,我们建议用户可以在调用 generate 函数时自行决定是否返回音频。如果将 return_audio 参数设为 False,模型将仅返回文本输出,从而更快地获取文本响应。

model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2.5-Omni-3B",
    torch_dtype="auto",
    device_map="auto"
)
...
text_ids = model.generate(**inputs, return_audio=False)


4、更改输出音频的语音类型

Qwen2.5-Omni 支持修改输出音频的语音风格。"Qwen/Qwen2.5-Omni-3B" 模型检查点目前支持以下两种语音类型:

语音类型性别描述
Chelsie女声如蜜般丝滑的声线,带着温柔的暖意和通透的清澈感
Ethan男声明亮活泼的声调,充满感染力,传递温暖亲切的氛围

用户可通过 generate 函数的 speaker 参数指定语音类型。若未指定该参数,系统默认使用 Chelsie 语音类型。

text_ids, audio = model.generate(**inputs, speaker="Chelsie")

text_ids, audio = model.generate(**inputs, speaker="Ethan")

5、使用 Flash-Attention 2 加速生成

首先,请确保安装最新版本的 Flash Attention 2:

pip install -U flash-attn --no-build-isolation

此外,您的硬件需要兼容 FlashAttention 2。更多详情请参阅 flash attention 代码库 的官方文档。FlashAttention-2 仅当模型以 torch.float16torch.bfloat16 精度加载时才能使用。

要使用 FlashAttention-2 加载并运行模型,请在加载模型时添加参数 attn_implementation="flash_attention_2"

from transformers import Qwen2_5OmniForConditionalGeneration

model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2.5-Omni-3B",
    device_map="auto",
    torch_dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
)

四、性能表现

我们对Qwen2.5-Omni进行了全面评估,结果显示其在所有模态上都展现出强劲性能,优于同规模单模态模型及Qwen2.5-VL-7B、Qwen2-Audio、Gemini-1.5-pro等闭源模型。

在多模态融合任务(如OmniBench)中,Qwen2.5-Omni实现了业界领先水平。

即使在单模态任务中,它也在语音识别(Common Voice)、翻译(CoVoST2)、音频理解(MMAU)、图像推理(MMMU/MMStar)、视频理解(MVBench)及语音生成(Seed-tts-eval与主观自然度评估)等领域表现卓越。


性能对比图


多模态转文本

数据集模型性能
OmniBenchSpeech声音事件音乐
MIO-Instruct36.96%33.58%
AnyGPT (7B)17.77%20.75%
video-SALMONN34.11%31.70%
UnifiedIO2-xlarge39.56%36.98%
UnifiedIO2-xxlarge34.24%36.98%
MiniCPM-o--
Baichuan-Omni-1.5--
Qwen2.5-Omni-3B52.14%52.08%
Qwen2.5-Omni-7B55.25%60.00%

音频转文本

数据集模型性能
自动语音识别(ASR)
Librispeechdev-cleandev othertest-clean
SpeechVerse--
Whisper-large-v3--
Llama-3-8B--
Llama-3-70B--
Seed-ASR-Multilingual--
MiniCPM-o--
MinMo--
Qwen-Audio1.84.0
Qwen2-Audio1.33.4
Qwen2.5-Omni-3B2.04.1
Qwen2.5-Omni-7B1.63.5
Common Voice 15enzhyue
MinMo7.96.3
Qwen2-Audio8.66.9
Qwen2.5-Omni-3B9.16.0
Qwen2.5-Omni-7B7.65.2
FleurszhenWhisper-large-v3
Seed-ASR-Multilingual-3.4
Megrez-3B-Omni10.8-
MiniCPM-o4.4-
MinMo3.03.8
Qwen2-Audio7.5-
Qwen2.5-Omni-3B3.25.4
Qwen2.5-Omni-7B3.04.1
Wenetspeechtest-nettest-meetingSeed-ASR-Chinese
Megrez-3B-Omni-16.4
MiniCPM-o6.9-
MinMo6.87.4
Qwen2.5-Omni-3B6.38.1
Qwen2.5-Omni-7B5.97.7
Voxpopuli-V1.0-enLlama-3-8B6.2
Llama-3-70B5.7
Qwen2.5-Omni-3B6.6
Qwen2.5-Omni-7B5.8
语音到文本翻译(S2TT)
CoVoST2en-dede-enen-zh
SpeechLLaMA-27.1
BLSP14.1-
MiniCPM-o--
MinMo-39.9
Qwen-Audio25.133.9
Qwen2-Audio29.935.2
Qwen2.5-Omni-3B28.338.1
Qwen2.5-Omni-7B30.237.7
语音情感识别(SER)
MeldWavLM-large0.542
MiniCPM-o0.524
Qwen-Audio0.557
Qwen2-Audio0.553
Qwen2.5-Omni-3B0.558
Qwen2.5-Omni-7B0.570
声音场景分类(VSC)
VocalSoundCLAP0.495
Pengi0.604
Qwen-Audio0.929
Qwen2-Audio0.939
Qwen2.5-Omni-3B0.936
Qwen2.5-Omni-7B0.939
音乐
GiantSteps TempoLlark-7B0.86
Qwen2.5-Omni-3B0.88
Qwen2.5-Omni-7B0.88
MusicCapsLP-MusicCaps0.291
Qwen2.5-Omni-3B0.3250.163
Qwen2.5-Omni-7B0.3280.162
音频推理
MMAUSoundMusicSpeech
Qwen2-Audio54.9550.98
Qwen2.5-Omni-3B70.2760.48
Qwen2.5-Omni-7B67.87**69.16
语音对话
VoiceBenchAlpacaEvalCommonEvalSD-QA
MERaLiON4.503.77
Megrez-3B-Omni3.502.95
Lyra-Base3.853.50
MiniCPM-o4.424.15
Baichuan-Omni-1.54.504.05
Qwen2-Audio3.743.43
Qwen2.5-Omni-3B4.324.00
Qwen2.5-Omni-7B4.493.93
VoiceBenchOpenBookQAIFEvalAdvBench
MERaLiON27.2362.93
Megrez-3B-Omni28.3525.71
Lyra-Base72.7536.28
MiniCPM-o78.0249.25
Baichuan-Omni-1.574.5154.54
Qwen2-Audio49.4526.33
Qwen2.5-Omni-3B74.7342.10
Qwen2.5-Omni-7B81.1052.87

图像转文本

数据集Qwen2.5-Omni-7BQwen2.5-Omni-3B其他最佳Qwen2.5-VL-7BGPT-4o-mini
MMMU验证集59.253.153.958.660.0
MMMU-Proof总体36.629.7-38.337.6
MathVista测试精简版67.959.471.968.252.5
MathVision完整版25.020.823.125.1-
MMBench-V1.1-EN测试81.877.880.582.676.0
MMVet加速版66.862.167.567.166.9
MMStar64.055.764.063.954.8
MME总和23402117237223472003
MuirBench59.248.0-59.2-
CRPE关系76.573.7-76.4-
RealWorldQA平均70.362.671.968.5-
MME-RealWorld英文61.655.6-57.4-
MM-MT-Bench6.05.0-6.3-
AI2D83.279.585.883.9-
TextVQA验证集84.479.883.284.9-
DocVQA测试集95.293.393.595.7-
ChartQA测试平均85.382.884.987.3-
OCRBench_V2英文57.851.7-56.3-
数据集Qwen2.5-Omni-7BQwen2.5-Omni-3BQwen2.5-VL-7BGrounding DINOGemini 1.5 Pro
Refcoco验证集90.588.790.090.673.2
RefcocotextA93.591.892.593.272.9
RefcocotextB86.684.085.488.274.6
Refcoco+验证集85.481.184.288.262.5
Refcoco+textA91.087.589.189.063.9
Refcoco+textB79.373.276.975.965.0
Refcocog+验证集87.485.087.286.175.2
Refcocog+测试集87.985.187.287.076.2
ODinW42.439.237.355.036.7
PointGrounding66.546.267.3--

视频(无音频)转文本

数据集Qwen2.5-Omni-7BQwen2.5-Omni-3B其他最佳Qwen2.5-VL-7BGPT-4o-mini
Video-MME(无字幕)64.362.063.965.164.8
Video-MME(带字幕)72.468.667.971.6-
MVBench70.368.767.269.6-
EgoSchema测试集68.661.463.265.0-

零样本语音生成

数据集模型性能
内容一致性
SEEDtest-zhtest-entest-hard
Seed-TTS_RL1.001.94
MaskGCT2.272.62
E2_TTS1.972.19
F5-TTS1.561.83
CosyVoice 21.452.57
CosyVoice 2-S1.452.38
Qwen2.5-Omni-3B_ICL1.952.87
Qwen2.5-Omni-3B_RL1.582.51
Qwen2.5-Omni-7B_ICL1.702.72
Qwen2.5-Omni-7B_RL1.422.32
说话人相似度
SEEDtest-zhtest-entest-hard
Seed-TTS_RL0.8010.766
MaskGCT0.7740.714
E2_TTS0.7300.710
F5-TTS0.7410.647
CosyVoice 20.7480.652
CosyVoice 2-S0.7530.654
Qwen2.5-Omni-3B_ICL0.7410.635
Qwen2.5-Omni-3B_RL0.7440.635
Qwen2.5-Omni-7B_ICL0.7520.632
Qwen2.5-Omni-7B_RL0.7540.641

文本到文本性能对比

数据集Qwen2.5-Omni-7BQwen2.5-Omni-3BQwen2.5-7BQwen2.5-3BQwen2-7BLlama3.1-8BGemma2-9B
MMLU-Pro47.040.456.343.744.148.352.1
MMLU-redux71.060.975.464.467.367.272.8
LiveBench083129.622.335.926.829.226.730.6
GPQA30.834.336.430.334.332.832.8
MATH71.563.675.565.952.951.944.3
GSM8K88.782.691.686.785.784.576.7
HumanEval78.770.784.874.479.972.668.9
MBPP73.270.479.272.767.269.674.9
MultiPL-E65.857.670.460.259.150.753.4
LiveCodeBench2305-240924.616.528.719.923.98.318.9

2025-05-06(二)

### Qwen2.5-Omni-7B 模型介绍 Qwen2.5-Omni-7B 是通义千问系列中的多模态模型之一,具有强大的跨领域理解和生成能力。该模型支持多种任务场景,包括但不限于文本生成、图像理解、语音处理以及复杂逻辑推理等[^1]。 #### 主要特性 1. **大规模参数量**:Qwen2.5-Omni-7B 的参数规模达到 70亿级别,能够更好地捕捉复杂的模式并提供高质量的结果。 2. **多模态融合**:除了传统的自然语言处理外,还集成了视觉和音频等多种感知技术,使得它可以应对更加丰富的应用场景。 3. **高效推理性能**:针对实际应用需求优化后的架构设计,在保持高精度的同时降低了计算资源消耗,适合部署于不同硬件环境之中。 4. **广泛的适配性**:无论是云端服务器还是边缘设备上都能实现良好运行效果;同时也提供了灵活易用接口供开发者快速集成到各自项目当中去[^2]。 #### 下载方式 对于希望获取此版本模型文件的用户来说,可以通过以下两种途径完成下载操作: ##### 方法一 使用 ModelScope 平台命令行工具 通过 pip 安装 modelscope 工具包之后执行如下指令即可获得对应权重数据: ```bash pip install modelscope modelscope download --model Qwen/Qwen2.5-Omni-7B ``` ##### 方法二 利用 Ollama 实现本地化加载 如果倾向于采用更轻量化解决方案,则可以考虑借助开源框架 Ollama 来管理整个流程。具体而言只需访问其官网页面找到名为 `qwen2.5-omni` 的选项(注意区分大小写),接着按照提示完成必要的配置步骤便能顺利取得目标资产了。需要注意的是,由于此类大型预训练模型通常占据较多存储空间,因此提前确认剩余容量是否充足显得尤为重要——以当前为例大约需要预留至少 8GB 可用磁盘位置来容纳全部组件[^3]。 ```python import torch from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-Omni-7B") model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-Omni-7B", device_map="auto", torch_dtype=torch.float16) input_text = "请介绍一下量子计算机的工作原理" inputs = tokenizer(input_text, return_tensors="pt").to('cuda') outputs = model.generate(**inputs, max_new_tokens=50) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐园

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值