
Qwen原生多模态开源,浅析一下!
Qwen2.5-Omni 7B开源,Qwen的第一个端到端的多模态模型,可以文本、图像、音频和视频输入,同时以流式方式生成文本和自然语音回复。
提出了 Thinker-Talker 架构。
PR还没合进去,要注意安装方式
评测的榜似乎画的有点赶,看不出信息量。
提出了一种新的位置嵌入,称为 TMRoPE(时间对齐多模态 RoPE),用于同步视频输入的时戳与音频。
资源占用:理论值如下,实际要在高1.2倍,看起来消耗有点大。
瞄下代码,关于输入,每个模态都有专门的处理组件:
视频这里,还计算每个视频时间网格对应的实际秒数,用于TMRoPE中的时间对齐
模型代码的核心由3块构成,Thinker,Talker,Token2Wav
talker是将文本转成语音编码,Token2Wav是将编码转成波形。
里边实现了几个Token2Wav变体:
- Qwen2_5OmniToken2WavDiTModel:基于扩散模型的波形生成
- Qwen2_5OmniToken2WavBigVGANModel:基于GAN的波形生成
- Qwen2_5OmniToken2WavModel:通用基类
文本输出和语音输出是两条并行的路径:
- 文本输出:输入 → Thinker → 文本输出
- 语音输出:输入 → Thinker → Talker → Token2Wav → 语音输出
只有当需要语音输出时,才会激活Talker模块和Token2Wav模块,将Thinker生成的文本内容转换为语音。
细节可以自行看源码,不贴了。
在看看新的位置编码。
对于纯文本,使用常规的1D位置编码。
对于包含视觉(图像/视频)和文本的混合输入,函数分别计算:
- 视觉部分用3D位置编码
- 文本部分用1D位置编码
比如说,一个有3个时间片、2×2空间分辨率的视频示例:
将时间维度映射到位置ID,考虑每秒对应多少个位置单位(position_id_per_seconds)
针对视频中包含音频的情况,还单独处理了,视频和音频交替编码,按时间块组织,每个时间块包含视频帧和对应的音频段,音频有特殊的开始和结束标记(audio_start_token_id和audio_end_token_id)
最后开源地址:https://huggingface.co/Qwen/Qwen2.5-Omni-7B
代码地址:https://github.com/huggingface/transformers/blob/3a1ead0aabed473eafe527915eea8c197d424356/src/transformers/models/qwen2_5_omni/modeling_qwen2_5_omni.py#L1175
本文转载自NLP前沿,作者:NLP前沿
