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

【多模态大模型】《Qwen2.5-Omni》 论文解读

《Qwen2.5-Omni:重新定义端到端全模态大模型的技术范式》 论文解读

  • 论文: https://arxiv.org/abs/2503.20215 (2025.03.26)
  • 代码: https://github.com/QwenLM/Qwen2.5-Omni
  • News: https://mp.weixin.qq.com/s/L7R3PaIDuX5zY7FNNCgXQQ
  • 体验
    • Qwen Chat:https://chat.qwenlm.ai
    • Demo体验:https://modelscope.cn/studios/Qwen/Qwen2.5-Omni-Demo
  • 模型
    • Hugging Face:https://huggingface.co/Qwen/Qwen2.5-Omni-7B
    • ModelScope:https://modelscope.cn/models/Qwen/Qwen2.5-Omni-7B
    • DashScope:https://help.aliyun.com/zh/model-studio/user-guide/qwen-omni

3月26号,阿里的Qwen系列大模型又发布了新的多模态模型Qwen2.5-Omni。本文将详细介绍这篇论文,如果对之前论文 Qwen2.5 和Qwen2.5 VL 感兴趣的,请点解之前论文解读博客 《QWen2.5 论文解读》 和 《QWen2.5 VL 论文解读》 。

在开始阅读之前,我们先直观的看看 Qwen2.5 Qmni的体验,还是很惊艳的,然后论文在了解其具体原理: Qwen2.5 Qmni的体验视频


文章目录

  • 《Qwen2.5-Omni:重新定义端到端全模态大模型的技术范式》 论文解读
    • @[toc]
    • 0. 摘要:全模态交互的端到端解决方案
    • 1. 引言:从割裂到融合的多模态革命
      • 1.1 传统多模态模型的痛点
      • 1.2 核心创新点
    • 2. 架构设计
      • 2.1 架构:Thinker-Talker双核协同系统
      • 2.2 感知 (Perceivation):从信号到语义的统一建模
        • 2.2.1 模态输入处理
        • 2.2.2 TMRoPE:时间对齐的跨模态位置编码
      • 2.3 生成 (Generation):从语义到多形式输出
      • 2.4 流式设计:
    • 3. 预训练(Pre-training)
    • 4. 后训练(Post-training)
        • 4.1 Data Format
        • 4.2 Thinker
        • 4.3 Talker
    • 5. 评估
      • 5.1 Evaluation of X→Text
        • 5.1.1 Text→Text
        • 5.1.2 Audio→Text
        • 5.1.3 Image→Text
        • 5.1.4 Video→Text
        • 5.1.5 Multimodality→Text
      • 5.2 Evaluation of X→Speech
        • 5.2.1 零样本语音生成 (Zero-Shot Speech Generation)
        • 5.2.2 单说话人语音生成 (Single-Speaker Speech Generation)

0. 摘要:全模态交互的端到端解决方案

"F1"

Qwen2.5-Omni是首个支持文本、图像、音频、视频全模态输入流式文本/语音输出的端到端多模态大模型。通过块处理音视频编码器将长序列多模态数据解耦,利用TMRoPE时间对齐位置编码实现音视频时序同步,创新提出Thinker-Talker架构

  • Thinker作为多模态推理核心,处理跨模态语义融合;
  • Talker作为双轨生成引擎,并行输出文本与自然语音,通过滑动窗口DiT模型降低流式生成延迟。

针对多模态交互中的时序错位与模态干扰问题,通过时间交织输入结构共享注意力机制,实现跨模态信息的深度耦合。在训练阶段,采用三阶段优化策略:

  1. 单模态编码器预训练(视觉ViT、音频梅尔频谱处理);
  2. 跨模态对齐训练(时序匹配、模态补全任务);
  3. 流式生成微调(语音自然度优化、首 token 延迟控制)。

实验表明,Qwen2.5-Omni在OmniBench多模态基准上得分137.2(SOTA),语音生成自然度MOS评分4.8(接近人类水平),端到端语音指令准确率达89.3%(媲美文本输入)。模型支持消费级硬件部署(4080显卡可用),并通过开源代码与模型推动多模态技术普惠,为智能对话、视频分析、无障碍辅助等场景提供了通用解决方案。

1. 引言:从割裂到融合的多模态革命

1.1 传统多模态模型的痛点

传统多模态模型面临三大痛点:

  1. 模态割裂:文本、图像、音频需分阶段处理(如语音转文字→模型推理→文字转语音),信息损耗率超30%;
  2. 实时性差:处理10分钟视频需30秒以上延迟,无法满足对话场景需求;
  3. 算力门槛高:百亿参数模型依赖千卡集群,中小企业难以落地。

Qwen2.5-Omni通过端到端全模态架构打破瓶颈,实现「多模态感知-推理-生成」的无缝衔接,在7B参数规模下达到商用级性能,成为首个能在消费级显卡(如RTX 4080)上运行的全模态大模型。 这也是相对于 Qwen2.5-VL的优势。

1.2 核心创新点

  1. Thinker-Talker双核架构:实现多模态输入与流式输出的深度协同,延迟降低70%;
  2. TMRoPE时间对齐编码:解决音视频时序同步难题,跨模态时间错位率从18%降至3%;
  3. 三阶段训练体系:通过预训练、多模态对齐、指令微调,在OmniBench等5个基准刷新SOTA;
  4. 轻量化设计:模型体积压缩40%,边缘设备部署成本下降50%,支持手机端实时交互。

2. 架构设计

Qwen2.5-Omni的架构设计突破了传统多模态模型的拼接式架构,通过Thinker-Talker双核协同跨模态时序对齐技术,实现了从感知到生成的全流程端到端处理。本章详细解析其核心架构与关键技术。

2.1 架构:Thinker-Talker双核协同系统

Qwen2.5-Omni采用 “感知-推理-生成”一体化架构,核心由两大模块组成:

  1. Thinker(多模态推理核心)

    • 负责处理文本、图像、音频、视频等多模态输入,将其转化为统一的语义表征;
    • 内置跨模态注意力机制,动态融合不同模态信息(如视频中的画面与同期声的时序关联);
    • 输出结构化语义指令(含时序标记),指导Talker生成响应。
  2. Talker(流式生成引擎)

    • 基于Thinker的语义指令,并行生成文本与自然语音,支持实时流式输出(边接收指令边生成);
    • 包含专用声码器与口型同步模块,确保语音语调、文本内容与视频画面(如有)完全对齐;
    • 通过滑动窗口技术,将首token生成延迟控制在150ms以内,满足实时交互需求。

其存在两个关键优势:首先,模态零割裂,输入无需预处理(如语音转文字),输出无需后处理(如文字转语音),端到端延迟降低70%。其次,资源高效利用,Thinker与Talker共享70%的底层特征提取层,模型参数减少35%,推理速度提升40%。

"F2"

上图展示了 Qwen2.5-Omni的整体结构,论文这里对比之前的 Qwen2.5-VL(下图),会发现两者存在相似之处比如视觉编码器(Vision Encoder):两张图中的模型都包含视觉编码器,用于处理视觉输入(如图像、视频画面),是多模态处理的基础组件,而且都使用 Qwen2.5作为基座模型。同时,也存在不同的地方,比如:

  • 处理模态
    • Qwen2.5-VL:侧重处理图像和视频,通过视觉编码器提取视觉特征,再输入语言模型解码器(Qwen2.5 LM Decoder),整合视觉与语言模态。
    • Qwen2.5-Omni:除视觉外,增加了音频处理能力(通过音频编码器),支持视觉、音频、语言的多模态融合,处理更复杂的跨模态任务(如带音频的视频描述)。
  • 架构设计
    • Qwen2.5-VL:采用视觉编码器与语言模型解码器直接集成的框架,专注于视觉 - 语言任务。
    • Qwen2.5-Omni:采用 “Thinker - Talker” 架构,其中 Thinker 负责文本生成,Talker 通过 Streaming Codec Decoder 生成流式语音令牌,架构更侧重语音流生成与多模态协同。
  • 功能扩展
    • Qwen2.5-VL:强调视觉输入的动态分辨率处理与时间建模(如 MRoPE 对齐时间 ID)。
    • Qwen2.5-Omni:增加音频处理路径,支持音频 - 视觉 - 语言的联合处理,拓展了语音生成能力。

"Qwen2.5VL"

2.2 感知 (Perceivation):从信号到语义的统一建模

"F3"

2.2.1 模态输入处理
  • 文本:采用字节级BPE分词(词表151,643 tokens),支持中英日等多语言混合输入,保留表情符号、LaTeX公式等特殊符号。位置编码复用Qwen2.5的旋转位置嵌入(RoPE),支持最长32k tokens上下文。
  • 音频:原始波形(16kHz采样率)转换为128维梅尔频谱(窗口25ms,步长10ms),每帧对应40ms音频段。音频编码器基于Qwen2-Audio优化,提取包含音高、节奏、情感的特征向量,支持30分钟以上长音频处理。
  • 图像/视频:图像:ViT-based编码器(675M参数),支持任意分辨率(自动缩放至224x224),输出1024维视觉特征。视频:动态帧率采样(复杂场景60fps,静态场景15fps),通过3D卷积提取时空特征,每2秒生成一个视频块特征。
2.2.2 TMRoPE:时间对齐的跨模态位置编码

针对音视频时序同步难题,提出Time-aligned Multimodal RoPE(TMRoPE),(Qwen2.5 VL 中是 M-RoPE),将位置编码扩展至三维空间。实验验证:相比传统RoPE,跨模态时序错位率从18%降至3%,视频动作与同期声的语义关联度提升45%:
TMRoPE ( t , h , w ) = RoPE ( t ) ⊕ RoPE ( h ) ⊕ RoPE ( w ) \text{TMRoPE}(t, h, w) = \text{RoPE}(t) \oplus \text{RoPE}(h) \oplus \text{RoPE}(w) TMRoPE(t,h,w)=RoPE(t)RoPE(h)RoPE(w)

  • 时间维度(t):音频以40ms为单位,视频以帧为单位(1帧=16ms,根据帧率动态调整);
  • 空间维度(h/w):图像/视频的像素坐标,支持2D空间定位(如画面中人物位置);
  • 跨模态同步: 视频帧与音频段通过时间戳关联(如第5帧对应第80ms音频)。自注意力计算时,引入时间偏移权重:
    α i , j = softmax ( Q K T d + TMRoPE ( ∣ t i − t j ∣ ) ) \alpha_{i,j} = \text{softmax}\left(\frac{QK^T}{\sqrt{d}} + \text{TMRoPE}(|t_i - t_j|)\right) αi,j=softmax(d QKT+TMRoPE(titj))

2.3 生成 (Generation):从语义到多形式输出

文本(Text):文本由 Thinker 直接生成。文本生成的逻辑与广泛使用的 LLM 基本相同,后者通过基于词汇概率分布的自回归采样来生成文本。生成过程可能采用重复惩罚和 Top-p 采样等技术来增强文本的多样性。

语音(Speech)Talker 接收 Thinker 采样的文本标记的高级表示和嵌入,就是embeddings。作为一种流式算法,语音生成必须在完整生成文本之前预测内容的语气和态度。Thinker 提供的高维表示隐式地传达了这些信息,从而实现了更自然的流式生成过程。此外,Thinker 的表示主要表达表示空间中的语义相似性,而不是语音相似性。因此,即使是语音不同的单词也可能具有非常相似的高级表示,因此需要输入采样的离散标记来消除这种不确定性。

论文设计了一个名为 qwen-tts-tokenizer高效语音编解码器qwen-tts-tokenizer 能够高效地表示语音的关键信息,并可通过因果音频解码器以流式方式解码为语音。接收到信息后,Talker 开始自回归生成音频标记和文本标记。由于语音生成不需要与文本进行词级和时间戳级对齐,这也显著简化了对训练数据和推理过程的要求。

2.4 流式设计:

为了实现实时交互,需要流式设计作为关键技术支撑。在流式音频和视频交互的背景下,初始数据包延迟是系统流式传输性能的关键指标。该延迟受多种因素影响:

  • 1)处理多模态信息输入造成的延迟;
  • 2)从接收到第一个文本输入到输出第一个语音标记的延迟;
  • 3)将第一段语音转换为音频的延迟;
  • 4)架构本身的固有延迟,这与模型大小、计算FLOP(浮点运算次数)和其他因素有关。

首先,支持预填充(Support Prefilling)。分块预填充是现代推理框架中广泛使用的一种机制。为了在模态交互中支持该机制,论文修改了音频和视觉编码器,使其支持沿时间维度的分块注意力机制。具体而言,音频编码器从对整个音频的完全注意力机制更改为以每2秒为一个块的注意力机制进行视觉编码器利用 FlashAttention 机制进行高效的训练和推理,其简单的多层感知器 (MLP) 层将相邻的 2×2 标记合并为单个标记,块大小设置为 14,允许将不同分辨率的图像打包成一个序列。其实就是将音视频分成一个一个小包处理。

其次,流式编解码器生成(Streaming Codec Generation)。为了方便音频流式传输,尤其是对于扩展序列,论文提出了一种滑动窗口块注意力机制,(是不是和Swin Transfomer中的shuffle 有点像),该机制将当前标记的访问限制在有限的上下文中。具体来说,论文利用了流匹配 (Flow-Matching)DiT 模型。输入代码先使用流匹配转换为梅尔谱图,然后使用改进的 BigVGAN 将生成的梅尔谱图重建为波形。

"F4"

Figure 4:DiT 中用于编解码器到 wav 生成的滑动窗口块注意力机制示意图。

如 Figure 4 所示,为了从代码生成波形,论文将相邻的代码分组为块,并将其用作注意力掩码。将 DiT 的感受野限制为 4 个块,包括 2 个块的回溯和 1 个块的前瞻。在解码过程中,论文使用流匹配以块为单位生成梅尔谱,确保每个代码块都能访问必要的上下文块。这种方法通过维护上下文信息来提高流输出的质量。论文还将这种逐块方法应用于 BigVGAN 的固定感受野,以促进流波形的生成。


3. 预训练(Pre-training)

Qwen2.5-Omni 包含三个训练阶段。

  • 第一阶段,锁定 LLM 参数,专注于训练视觉编码器和音频编码器,利用大量的 “音频-文本” 和 “图像-文本” 对语料库来增强 LLM 中的语义理解。
  • 第二阶段,解冻所有参数,并使用更广泛的多模态数据进行训练,以实现更全面的学习。
  • 第三阶段,使用序列长度为 32k 的数据来增强模型理解复杂长序列数据的能力。

该模型在包含 “图像-文本”、“视频-文本”、“视频-音频”、“音频-文本” 和 “文本语料库” 等各种类型的数据集上进行了预训练。Qwen2.5-Omni用 Qwen2-Audio 中的自然语言提示替换了层级标签,从而提高了泛化能力和指令遵循能力。

在第一阶段,预训练Qwen2.5-Omni 的 LLM 组件使用 Qwen2.5 的参数进行初始化,视觉编码器Qwen2.5-VL 相同,音频编码器则使用OpenAI的 Whisper-large-v3 进行初始化。两个编码器在固定的 LLM 上分别进行训练,在训练编码器之前,它们都首先专注于训练各自的适配器。

在第二阶段,标志着预训练重大进展,新增了 8000 亿个图像和视频相关数据3000 亿个音频相关数据以及 1000 亿个带有音频相关数据的视频。此阶段引入了更大规模的混合多模态数据和更广泛的任务,从而增强了交互性,并加深了听觉、视觉和文本信息之间的理解。引入多模态、多任务数据集对于提升模型同时处理多任务和多模态的能力至关重要,而这正是管理复杂现实世界数据集的关键。此外,纯文本数据在维持和提高语言能力方面发挥着至关重要的作用。

在第三阶段,为了提高训练效率,在前两个阶段将最大标记长度限制为 8k 。之后,引入了长音频和长视频数据,并将原始文本、音频、图像和视频数据扩展至 32k 进行训练。实验结果表明,论文的数据在支持长序列数据方面取得了显著的提升。


4. 后训练(Post-training)

4.1 Data Format

如下图所示,论文采用ChatML格式的数据集进行指令微调,涵盖纯文本对话、视觉模态对话、音频模态对话及混合模态对话数据。通过自然语言提示替换分层标签,提升模型的泛化能力和指令遵循能力。下面图中示例,展示了用户输入(包含视频和文本)与模型生成的多模态响应,体现了对复杂交互场景的支持。

"D1"

4.2 Thinker

在微调阶段,Thinker模块基于ChatML格式的多模态对话数据进行训练,融合不同模态的输入(如文本、图像、音频),优化其对跨模态信息的理解和生成能力。数据集中的混合模态对话数据帮助模型学习如何协调视觉、听觉与语言信号,提升多任务处理的一致性。

4.3 Talker

Talker的训练分为三个阶段:

  1. 上下文延续学习:通过下一令牌预测任务,基于大规模多模态对话数据集,建立语义表示到语音的单调映射,学习语境相关的语音属性(如韵律、情感、口音)。
  2. DPO优化:引入直接偏好优化(DPO)算法,通过对比生成语音与参考语音的概率分布,增强生成稳定性,减少注意力错位、发音错误等问题。
  3. 多说话人指令微调:通过强化学习和说话人细调,提升语音生成的自然度和可控性,支持多样化的说话人风格,并通过音色解耦避免罕见文本模式与特定声音的不当关联。

通过上述训练,Talker能够基于Thinker的语义表示,生成流畅自然的流式语音,实现文本与语音响应的协同输出。

文中的公式(1)是直接偏好优化(DPO, Direct Preference Optimization)的损失函数,用于增强语音生成的稳定性,其具体形式及含义如下:

L D P O ( P θ ; P r e f ) = − E ( x , y w , y l ) ∼ D [ log ⁡ σ ( β log ⁡ P θ ( y w ∣ x ) P r e f ( y w ∣ x ) − β log ⁡ P θ ( y l ∣ x ) P r e f ( y l ∣ x ) ) ] \mathcal{L}_{DPO}\left(\mathcal{P}_{\theta} ; \mathcal{P}_{ref }\right)=-\mathbb{E}_{\left(x, y_{w}, y_{l}\right) \sim \mathcal{D}}\left[\log \sigma\left(\beta \log \frac{\mathcal{P}_{\theta}\left(y_{w} | x\right)}{\mathcal{P}_{ref }\left(y_{w} | x\right)}-\beta \log \frac{\mathcal{P}_{\theta}\left(y_{l} | x\right)}{\mathcal{P}_{ref }\left(y_{l} | x\right)}\right)\right] LDPO(Pθ;Pref)=E(x,yw,yl)D[logσ(βlogPref(ywx)Pθ(ywx)βlogPref(ylx)Pθ(ylx))]

  • 符号定义

    • P θ \mathcal{P}_{\theta} Pθ:当前模型在给定输入 x x x时生成输出的概率分布。
    • P r e f \mathcal{P}_{ref} Pref:参考模型(如预训练好的基线模型)的概率分布。
    • y w y_w yw:高质量的生成语音序列(“好”样本)。
    • y l y_l yl:低质量的生成语音序列(“坏”样本)。
    • D \mathcal{D} D:由输入 x x x、好样本 y w y_w yw、坏样本 y l y_l yl组成的三元组数据集。
    • β \beta β:温度参数,用于调整概率比的敏感度。
    • σ \sigma σ:sigmoid函数,将数值映射到(0,1)区间,计算样本对的偏好概率。
  • 核心思想
    通过对比当前模型与参考模型在好坏样本上的对数概率比,迫使模型学习参考模型的偏好,从而减少生成中的注意力错位、发音错误、不恰当停顿等问题。具体而言,公式通过最小化损失 L D P O \mathcal{L}_{DPO} LDPO,使得模型生成好样本 y w y_w yw的概率相对于参考模型更高,生成坏样本 y l y_l yl的概率相对于参考模型更低,最终提升语音生成的稳定性和质量。

该公式应用于Talker训练的第二阶段,针对预训练数据中可能存在的标签噪声和发音错误导致的模型幻觉问题,通过强化学习优化模型对语音序列的概率分布建模能力,确保生成的语音在内容一致性、自然度上更接近人类预期。


5. 评估

论文从理解能力(X→Text)语音生成能力(X→Speech) 两方面对Qwen2.5-Omni进行评估,结合具体数据集和对比实验,验证模型在多模态任务中的性能。

5.1 Evaluation of X→Text

5.1.1 Text→Text

"T1"

如上图表示,评估模型**纯文本输入到文本输出(Text→Text)**的能力,涵盖通用任务、数学与科学、编码能力。 对比模型包括: Gemma2-9B Llama3.1-8B Qwen2-7B Qwen2.5-7B Qwen2.5-Omni-7B 。

  • Qwen2.5-Omni在通用任务上效果介于Qwen2-7B和Qwen2.5-7B之间。 和 Gemma2-9B、Llama3.1-8B 互有高低。
  • 数学任务编码任务中,模型性能接近或高于除了Qwen2.5-7B的纯文本模型。
5.1.2 Audio→Text

"T2"

"T3"

上图评估的是音频输入到文本输出(Audio→Text):包括ASR、语音翻译、音频推理、语音对话。 其中,使用了很多数据集,且两个Table为同一张表。有别于Text→Text的表现,Qwen2.5-Omni 在 Audio→Text任务中表现大部分都是SORT。

如下 Table 4 所示,与 Qwen2-Audio 相比,Qwen2.5-Omni 显著缩小了与使用文本指令的 Qwen2-7B 之间的差距,体现了模型在多样化端到端语音交互方面取得了实质性的进步。

"T4"

5.1.3 Image→Text

"T5"

论文将 Qwen2.5-Omni 与最新最先进的大型视觉语言模型 Qwen2.5-VL-7B 以及其他性能最佳的 Omni 模型进行了比较。如Table 5 所示,Qwen2.5-Omni 的性能与 Qwen2.5-VL-7B 相当,并且在 MMMU、MathVision、MMBench-V1.1-EN、TextVQA、DocVQA 和 ChartQA 上取得了优于任何其他开源 Omni 模型的结果。此外,Qwen2.5-Omni 在大多数基准测试中也超越了 GPT-4o-mini

"T6"

在**视觉定位(visual grounding)**方面,论文将 Qwen2.5-Omni 与 Qwen2.5-VL-7B 以及其他领先的 LVLM(包括 Gemini 和 Grounding-DINO)进行了比较。如Table 6 所示,模型在从框定位到特征点定位的大多数基准测试中均优于其他模型,并且在开放词汇目标检测中取得了 42.2mAP 的良好性能,这体现了模型强大的视觉定位能力。

5.1.4 Video→Text

"T7"

Image→Text类似,论文将 Qwen2.5-Omni 与 Qwen2.5-VL-7B 及其他 Omni 模型在Video→Text上进行比较。如 Table 7 所示,Qwen2.5-Omni 的表现优于所有其他最先进的开源 Omni 模型和 GPT-4o-Mini,并且与 Qwen2.5-VL-7B 相比取得了更佳或更具竞争力的结果,这体现了其在视频理解方面的卓越性能。

5.1.5 Multimodality→Text

"T8"

如Table 8 所示,Qwen2.5-Omni 在 OmniBench 上取得了最佳性能,大幅超越其他 Omni 模型,这证明了模型在多模态理解方面的优势

5.2 Evaluation of X→Speech

5.2.1 零样本语音生成 (Zero-Shot Speech Generation)

"T9"

本小节将 Qwen2.5-Omni 与最先进的零样本语音合成 (TTS) 系统进行了比较。如上面的 Table 9 所示,Qwen2.5-Omni 展现出极具竞争力的性能,突显了其通过情境学习 (ICL) 开发的强大的语音理解和生成能力。此外,经过强化学习 (RL) 优化后,Qwen2.5-Omni 在生成稳定性方面表现出显著提升,在具有挑战性的测试数据集上,注意力错位、发音错误和不恰当停顿的现象显著减少。

5.2.2 单说话人语音生成 (Single-Speaker Speech Generation)

"T10"

本小节比较了说话人微调前后的 Qwen2.5-Omni 模型,并与人工录音进行了比较。如 Table 10 所示,经过说话人微调的 Qwen2.5-Omni 能够更精确地捕捉目标说话人细微的韵律风格,同时保留基础模型提供的基础稳定性,在主观和客观指标上均实现了接近人类水平的性能。

最后总结一下,Qwen2.5-Omni的诞生,标志着多模态AI从「功能堆砌」走向「原生融合」。其端到端架构、时序对齐技术、轻量化设计,为行业提供了可复用的工程范式。随着模型开源与生态完善,这场始于技术实验室的「全模态革命」,正以惊人速度渗透至千行百业——未来的人机交互,或将不再需要「选择输入模态」,因为AI已能像人类一样,自然地「看、听、说、想」。一篇很惊艳的工作。

相关文章:

【多模态大模型】《Qwen2.5-Omni》 论文解读

《Qwen2.5-Omni:重新定义端到端全模态大模型的技术范式》 论文解读 论文: https://arxiv.org/abs/2503.20215 (2025.03.26)代码: https://github.com/QwenLM/Qwen2.5-OmniNews: https://mp.weixin.qq.com/…...

go 通过汇编分析函数传参与返回值机制

文章目录 概要一、前置知识二、汇编分析2.1、示例2.2、汇编2.2.1、 寄存器传值的汇编2.2.2、 栈内存传值的汇编 三、拓展3.1 了解go中的Duff’s Device3.2 go tool compile3.2 call 0x46dc70 & call 0x46dfda 概要 在上一篇文章中,我们研究了go函数调用时的栈布…...

蓝桥杯C/C++省赛/国赛注意事项及运行环境配置

大佬的蓝桥杯考前急救指南 对拍&#xff08;手动生成测试数据&#xff09;代码&#xff1a; #include <bits/stdc.h> // 包含所有标准库的头文件 using namespace std; // 使用标准命名空间int main() {srand(time(0)); // 设置随机数种子为当前时间&#xff0c;确保每次…...

CSS高度坍塌?如何解决?

一、什么是高度坍塌&#xff1f; 高度坍塌&#xff08;Collapsing Margins&#xff09;是指当父元素没有设置边框&#xff08;border&#xff09;、内边距&#xff08;padding&#xff09;、内容&#xff08;content&#xff09;或清除浮动时&#xff0c;其子元素的 margin 会…...

redis的基本使用

简介 redis&#xff0c;Remote Dictionary Server&#xff0c;远程字典服务&#xff0c;一个基于内存的、存储键值对的数据库。redis是开源的&#xff0c;使用C语言编写。因为redis的数据是存储在内存中的&#xff0c;所以redis通常被用来做数据库的缓存 优点&#xff1a; re…...

【蓝桥杯】单片机设计与开发,第十二届

/*头文件声明区*/ #include <STC15F2K60S2.H>//单片机寄存器头文件 #include <init.h>//初始化底层驱动头文件 #include <led.h>//led,蜂鸣器,继电器底层驱动头文件 #include <key.h>//按键底层驱动头文件 #include <seg.h>//数码管底层驱动头…...

主流时序数据库深度对比:TDengine、InfluxDB与IoTDB的技术特性、性能及选型考量

目录 引言 一、 核心架构与技术特性对比 1.1、 TDengine&#xff1a;面向物联网的特定优化 1.2. InfluxDB&#xff1a;成熟的通用时序平台 1.3. Apache IoTDB&#xff1a;面向工业场景的精细化设计 二、 核心性能指标对比分析 2.1、写入性能 2.2、查询性能 三、 关键技…...

使用人工智能大模型腾讯元宝,如何免费快速做高质量的新闻稿?

今天我们学习使用人工智能大模型腾讯元宝&#xff0c;如何免费快速做高质量的新闻稿&#xff1f; 手把手学习视频地址&#xff1a;https://edu.csdn.net/learn/40402/666431 第一步在腾讯元宝对话框中输入如何协助老师做新闻稿&#xff0c;通过提问&#xff0c;我们了解了老师…...

国产Linux系统统信安装redis教程步骤

系统环境 uname -a Linux FlencherHU-PC 6.12.9-amd64-desktop-rolling #23.01.01.18 SMP PREEMPT_DYNAMIC Fri Jan 10 18:29:31 CST 2025 x86_64 GNU/Linux官网下载源码包并解压 下载链接 https://download.redis.io/releases/redis-7.0.15.tar.gz?_gl11h424d3_gcl_au*ODQ5…...

leetcode590 N叉树的后序遍历

前序遍历 的顺序是&#xff1a;根 → 子节点1 → 子节点2 → ... → 子节点N 后序遍历 的顺序是&#xff1a;子节点1 → 子节点2 → ... → 子节点N → 根 首先一个办法就是前序遍历结果进行翻转 在 迭代法 实现 后序遍历 时&#xff0c;如果采用 前序遍历 反转 的方式&…...

docker desktop 的安装和使用

一、Docker Desktop 是什么&#xff1f; Docker Desktop 是一款专为开发者设计的工具&#xff0c;可以在本地计算机&#xff08;Windows/macOS&#xff09;上快速运行和管理容器&#xff08;Container&#xff09;环境。以下是核心功能&#xff1a; 核心特点说明容器化开发基于…...

QCustomPlot频谱图

使用QCutomPlot做的读取txt文件显示频谱图的demo,帮助大家了解QCustomPlot的基本使用 1.运行结果 demo比较简单,用于文件读取,鼠标放大缩小,右键截图等基础功能. 2.绘图详解 绘图核心是将类提升为QCustomPlot之后进行重绘,重绘之前设计图表曲线,图标标题,坐标轴,坐标轴范围,背…...

Python 和 JavaScript两种语言的相似部分-由DeepSeek产生

Python 和 JavaScript 作为两种流行的编程语言&#xff0c;虽然在设计目标和应用场景上有差异&#xff08;Python 偏向后端和脚本&#xff0c;JavaScript 偏向前端和动态交互&#xff09;&#xff0c;但它们的语法存在许多相似之处。以下是两者在语法上的主要共同点及对比&…...

记一次 .NET某云HIS系统 CPU爆高分析

一&#xff1a;背景 1. 讲故事 年前有位朋友找到我&#xff0c;说他们的系统会偶发性的CPU爆高&#xff0c;有时候是爆高几十秒&#xff0c;有时候高达一分多钟&#xff0c;自己有一点分析基础&#xff0c;但还是没找到原因&#xff0c;让我帮忙看下怎么回事&#xff1f; 二&…...

ESP32开发入门:基于VSCode+PlatformIO环境搭建指南

前言 ESP32作为一款功能强大的物联网开发芯片&#xff0c;结合PlatformIO这一现代化嵌入式开发平台&#xff0c;可以大幅提升开发效率。本文将详细介绍如何在VSCode中搭建ESP32开发环境&#xff0c;并分享实用开发技巧。 一、环境安装&#xff08;Windows/macOS/Linux&#xf…...

在 macOS 上设置来电自启动

在 macOS 中&#xff0c;系统本身并不支持直接通过“接上电源适配器”自动开机&#xff08;此功能涉及硬件底层控制&#xff09;。但针对 Intel 处理器的 Mac 机型&#xff0c;可以通过以下方法间接实现类似效果。对于 Apple Silicon&#xff08;M1/M2/M3&#xff09;芯片的 Ma…...

【技术】Ruby 生态概念速查表,通过对比nodejs生态(入门)

以下是 Ruby 生态 对应概念的速查表&#xff0c;并使用与 Node.js 生态 对比的方式来参照&#xff0c;涵盖名称、作用&#xff08;或解释&#xff09;、简单用法、可能的替代方案&#xff0c;以及 Node.js 中最相似或可类比的工具&#xff08;如果有的话&#xff09;。有些工具…...

入门级宏基因组数据分析教程,从实验到分析与应用

宏基因组学彻底改变了研究人员对微生物群落的认识&#xff0c;微生物组不仅是环境组分&#xff0c;更作为共生体深刻影响着宿主的健康与功能。 鉴于微生物群落固有的复杂性及其所处环境的多样性&#xff0c;研究者进行一些宏基因组学研究时必须精心设计以获取能真实反映目标群体…...

解决 Vue 中 input 输入框被赋值后,无法再修改和编辑的问题

目录 需求&#xff1a; 出现 BUG&#xff1a; Bug 代码复现 解决问题&#xff1a; 解决方法1&#xff1a; 解决方法2 关于 $set() 的补充&#xff1a; 需求&#xff1a; 前段时间&#xff0c;接到了一个需求&#xff1a;在选择框中选中某个下拉菜单时&#xff0c;对应的…...

聚划算!CNN-GRU、CNN、GRU三模型多变量回归预测

聚划算&#xff01;CNN-GRU、CNN、GRU三模型多变量回归预测 目录 聚划算&#xff01;CNN-GRU、CNN、GRU三模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 聚划算&#xff01;CNN-GRU、CNN、GRU三模型多变量回归预测 (Matlab2023b 多输入单输出) 1.程…...

list的常见接口使用

今天&#xff0c;我们来讲解一下C关于STL标准库中的一个容器list的常见接口。 在我们之前c语言数据结构中&#xff0c;我们已经了解过了关于链表的知识点了&#xff0c;那么对于现在理解它也是相对来说比较容易的了。 数据结构--双向循环链表-CSDN博客 1. 定义与包含头文件 …...

5. 蓝桥公园

题目描述 小明喜欢观景&#xff0c;于是今天他来到了蓝桥公园。 已知公园有 N 个景点&#xff0c;景点和景点之间一共有 M 条道路。小明有 Q 个观景计划&#xff0c;每个计划包含一个起点 stst 和一个终点 eded&#xff0c;表示他想从 stst 去到 eded。但是小明的体力有限&am…...

零基础开始学习鸿蒙开发-智能家居APP离线版介绍

目录 1.我的小屋 2.查找设备 3.个人主页 前言 好久不发博文了&#xff0c;最近都忙于面试&#xff0c;忙于找工作&#xff0c;这段时间终于找到工作了。我对鸿蒙开发的激情依然没有减退&#xff0c;前几天做了一个鸿蒙的APP&#xff0c;现在给大家分享一下&#xff01; 具体…...

你的 Linux 服务器连不上网?10 分钟入门网络故障排查

问题现象&#xff1a;服务器突然失去网络连接 当你兴冲冲地打开终端&#xff0c;准备开始一天的开发工作时&#xff0c;却发现服务器无法连接网络&#xff0c;ifconfig命令只能看到本地环回接口(lo)。这种突如其来的网络中断可能会让很多Linux新手感到手足无措。 别担心&…...

《Vue Router实战教程》20.路由懒加载

欢迎观看《Vue Router 实战&#xff08;第4版&#xff09;》视频课程 路由懒加载 当打包构建应用时&#xff0c;JavaScript 包会变得非常大&#xff0c;影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块&#xff0c;然后当路由被访问的时候才加载对应组件&am…...

JVM 之 String 引用机制解析:常量池、堆内存与 intern 方法

案例一&#xff1a; String s1 new String("1"); String s2 "1"; System.out.println(s1 s2);s1: 执行 new String("1")&#xff0c;JVM 首先在字符串常量池中查找或添加字面量 "1"&#xff0c;然后在堆内存中新建一个内容为 &quo…...

如何在 Mac 上安装 Python

所有最新的 MacOS&#xff08;从 macOS 12.3 开始&#xff09;都预装了 Python 版本&#xff08;通常是 Python 2.x&#xff09;&#xff0c;但它已经过时并且不再受支持。要充分利用 Python 的功能&#xff0c;您需要安装最新版本的 Python。 本文提供了分步教程&#xff0c;展…...

无锡东亭无人机培训机构电话

无锡东亭无人机培训机构电话&#xff0c;随着科技的迅猛发展&#xff0c;无人机逐渐走入我们的生活和工作领域&#xff0c;成为多种行业中不可或缺的工具。而在其广泛的应用中&#xff0c;如何正确、熟练地操控无人机成为了关键。因此&#xff0c;找到一家专业的无人机培训机构…...

WPS复制粘贴错误 ,文件未找到 mathpage.wll

文章目录 1.错误提示图片2.解决方案1.找到MathType.wll文件和MathType Commands 2016.dotm文件并复制2.找到wps安装地址并拷贝上述两个文件到指定目录 3.重启WPS 1.错误提示图片 2.解决方案 1.找到MathType.wll文件和MathType Commands 2016.dotm文件并复制 MathType.wll地址如…...

蓝桥杯单片机刷题——按键设置当前采集距离为距离参数

设计要求 驱动超声波传感器&#xff0c;启动距离测量功能,并将其结果显示到数码管上。 按键“S5”定义为参数按键&#xff0c;按下S5按键&#xff0c;设备自动将当前采集的距离数据作为距离参数&#xff1b; 若测量的距离数据超过距离参数&#xff0c;指示灯L1点亮&#xff…...

mybaties plus 更新null值进入数据库

&#xff08;数据库一定要支持字段为null值&#xff09; 问题&#xff1a; 假设我现在数据库里有一个值是1&#xff0c;这个字段允许为null。 目前我使用的是的mybaties plus&#xff0c;我希望将这个值更新weinull&#xff0c;如何操作&#xff1f; 提示&#xff1a;如果直接…...

VSCode优雅的使用debug

原始用法&#xff1a;(这里不使用) 配置launch.json&#xff0c;里面传入参数然后debug&#xff0c;这里我们通常需要传入的参数比较多&#xff0c;而且经常修改参数&#xff0c;直接去修改launch.json会比较麻烦&#xff0c;所以使用sh脚本比较方便。 {// Use IntelliSense to…...

优化你的 REST Assured 测试:设置默认主机与端口、GET 请求与断言

REST Assured 是一个功能强大的 Java 库&#xff0c;用于测试 RESTful Web 服务。它简化了 API 测试流程&#xff0c;提供了一整套用于高效验证响应的工具。在本篇博客中&#xff0c;我们将深入探讨几个核心概念&#xff0c;包括如何设置默认主机和端口、如何发起 GET 请求以及…...

JVM之String创建、拼接

一、字符串创建的两种方式 1. 字面量直接赋值 String s1 "a"; 过程&#xff1a; JVM 检查字符串常量池中是否存在 "a"。若存在&#xff0c;直接返回常量池中的引用。若不存在&#xff0c;在常量池中创建 "a"&#xff0c;返回其引用。 特点&a…...

UE5 模仿生存建造类游戏创建的过程

一、大概流程如下 点击界面按钮生成Actor->移动鼠标Actor的位置随着鼠标移动移动->点击鼠标左键确定Actor的位置 使用了盒体检测GetWorld()->SweepSingleByChannel()函数检测是否发生碰撞通过 FCollisionQueryParams CollisionParams;CollisionParams.AddIgnoredAc…...

大模型在慢性髓细胞白血病(CML)初治成人患者诊疗中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与内容 二、大模型技术与 CML 相关知识 2.1 大模型技术原理与特点 2.2 CML 的病理生理与诊疗现状 三、术前风险预测与手术方案制定 3.1 术前数据收集与预处理 3.2 大模型预测术前风险 3.3 根据预测…...

汽车性能的幕后保障:慧通测控电动尾翼综合力学测试浅析

在汽车性能不断追求极致的当下&#xff0c;电动尾翼已成为众多高性能车型以及部分新能源汽车提升空气动力学表现与操控稳定性的关键配置。从炫酷的超跑到注重续航与驾驶体验的新能源车&#xff0c;电动尾翼正逐渐崭露头角。它绝非仅仅是外观上的装饰&#xff0c;而是能在车辆行…...

动力电池自动点焊机:新能源汽车制造的智能焊接利器

在新能源汽车产业蓬勃发展的今天&#xff0c;动力电池作为其核心部件&#xff0c;其性能与安全性直接关系到整车的续航里程和使用寿命。而动力电池的制造过程中&#xff0c;焊接工艺是至关重要的一环。这时&#xff0c;动力电池自动点焊机便以其高效、精准、智能的特点&#xf…...

arm64架构的copy_from_user分析

文章目录 前言代码实现内核c代码copy_from_user_copy_from_userraw_copy_from_user 内核汇编代码copy_from_user.Scopy_template.S 汇编代码分析汇编简介标签.req伪指令.macro伪指令tbz指令neg指令str指令 copy_template.S分析 小结 前言 一谈到内核-用户空间的数据拷贝&#…...

【远程工具】1.1 时间处理设计与实现(datetime库lib.rs)

一、设计原理与决策 时间单位选择 采用**秒&#xff08;s&#xff09;**作为基准单位&#xff0c;基于以下考虑&#xff1a; 国际单位制&#xff08;SI&#xff09;基本时间单位 整数秒&#xff08;i64&#xff09;方案优势&#xff1a; 精确无误差&#xff08;相比浮点数&am…...

【STM32】解读启动文件startup_stm32f10x_md.s

栈空间 栈&#xff08;Stack&#xff09;&#xff1a;栈是一种后进先出&#xff08;LIFO&#xff09;的数据结构&#xff0c;用于存储函数调用时的局部变量、返回地址和寄存器的值。启动文件会定义栈的大小&#xff0c;并将栈指针初始化为栈顶地址。在函数调用时&#xff0c;…...

Redis下载稳定版本5.0.4

https://www.redis.net.cn/download/ Redis下载 Redis 版本号采用标准惯例:主版本号.副版本号.补丁级别,一个副版本号就标记为一个标准发行版本,例如 1.2,2.0,2.2,2.4,2.6,2.8,奇数的副版本号用来表示非标准版本,例如2.9.x发行版本是Redis 3.0标准版本的非标准发行版本…...

阿里云服务迁移实战: 02-服务器迁移

ECS 迁移 最简单的方式是 ECS 过户&#xff0c;不过这里有一些限制&#xff0c;如果原账号是个人账号&#xff0c;那么目标账号无限制。如果原账号是企业账号&#xff0c;则指定过户给相同实名认证的企业账号。 具体操作步骤可以参考官方文档 ECS过户 进行操作。 本文重点介绍…...

怎么解决CentOS上Zookeeper启动失败的问题

在 CentOS 上启动 Zookeeper 失败通常是由于配置错误、端口冲突、权限问题或 Java 环境配置问题导致的。我们可以逐步排查&#xff1a; 一、查看错误日志 Zookeeper 的日志目录一般在&#xff1a; /your-zookeeper-path/logs/zookeeper.out 或者&#xff1a; /your-zookeeper-p…...

《Vue3学习手记》

下面进入Vue3的学习&#xff0c;以下代码中都有很详细的注释&#xff0c;代码也比较清晰易懂&#xff1a; Vue3 index.html是入口文件 Vue3通过createApp函数创建一个应用实例 main.ts: // Vue3中通过createApp函数创建应用实例 // 引入createApp用于创建应用 import { crea…...

【Ubutun】 在Linux Yocto的基础上去适配4G模块

1&#xff09;、完整解决流程总结 一. 固定4G模块的网络接口名 usb0&#xff08;基于物理路径&#xff09; # 创建UDEV规则文件 sudo vi /etc/udev/rules.d/10-4g-rename.rules添加内容&#xff1a; SUBSYSTEM"net", ACTION"add", ATTRS{busnum}"2&…...

达梦数据库-学习-15-大内存SQL相关视图介绍

目录 一、环境信息 二、介绍 三、数据字典表 1、V$MEM_POOL 2、V$SQL_STAT 3、V$SQL_STAT_HISTORY 4、V$LARGE_MEM_SQLS 5、V$SYSTEM_LARGE_MEM_SQLS 四、总结 一、环境信息 名称值CPU12th Gen Intel(R) Core(TM) i7-12700H操作系统CentOS Linux release 7.9.2009 (Co…...

分治-归并系列一>翻转对

目录 题目&#xff1a;解析&#xff1a;策略一&#xff1a; 代码&#xff1a;策略二&#xff1a; 代码&#xff1a; 题目&#xff1a; 链接: link 这题和逆序对区别点就是&#xff0c;要找到前一个元素是后一个元素的2倍 先找到目标值再&#xff0c;继续堆排序 解析&#xff1…...

微服务面试题

五大组件 注册中心/配置中心 nacos 服务注册 服务启动时 将自己的id等信息发送给nacos 完成注册 服务发现 服务需要调用其他服务时 从nacos获取服务列表 交给负载均衡选择 服务监控 临时实例 由服务每隔一段时间注册中心发送信息 表示自己存活 若注册中心超过一定时间没有…...

高级java每日一道面试题-2025年3月31日-微服务篇[Nacos篇]-Nacos集群模式下的部署方案有哪些?

如果有遗漏,评论区告诉我进行补充 面试官: Nacos集群模式下的部署方案有哪些&#xff1f; 我回答: Nacos 集群模式下的部署方案详解 在 Java 高级面试中&#xff0c;Nacos 集群部署是考察候选人对分布式系统高可用性和扩展性理解的重要议题。以下是几种常见的 Nacos 集群部…...