站点图标 高效码农

Stream-Omni重磅解析:多模态交互技术如何重塑AI交互新纪元?

Stream-Omni:开启多模态交互新时代

在人工智能快速发展的今天,我们正见证着一个全新的多模态交互时代的到来。Stream-Omni,这个融合了语言、视觉和语音的大型模型,正在重新定义我们与机器交互的方式。本文将深入探讨 Stream-Omni 的技术原理、应用场景以及如何搭建和使用这一前沿技术。

一、Stream-Omni 是什么?

Stream-Omni 是一个能够同时支持多种模态组合交互的大型语言 – 视觉 – 语音模型。它就像是一个全能的沟通桥梁,可以处理文本、图像和语音等多种输入形式,并生成相应的文本或语音响应。更重要的是,它能在语音交互过程中同步输出中间文本结果,比如自动语音识别(ASR)转录和模型响应,为我们带来无缝的“边看边听”体验。

二、Stream-Omni 的核心技术原理

(一)模态对齐:让不同数据类型“心意相通”

Stream-Omni 的核心优势在于其高效的模态对齐技术。它采用了两种主要的对齐方式:

  1. 序列维度拼接(Sequence-dimension Concatenation) :对于视觉信息,Stream-Omni 将视觉编码器提取的特征与文本特征进行序列维度上的拼接。这种方式充分利用了文本和图像在语义上的互补性,让模型能够同时理解图片中的视觉元素和相关文本描述。
  2. 层维度映射(Layer-dimension Mapping) :对于语音信息,Stream-Omni 引入了基于连接时序分类(CTC)的层维度映射。它在大型语言模型(LLM)的底层和顶层分别添加了语音层,通过 CTC 解码器实现语音到文本的精准映射。这就像是给语音和文本搭建了一个直通的隧道,使得语音能够高效地借用 LLM 的文本能力,即便在有限的语音数据下也能实现出色的语音交互。

(二)训练策略:用少量数据激发巨大潜力

Stream-Omni 的训练过程采用了三阶段策略:

  1. 第一阶段:视觉 – 文本对齐 :利用视觉导向型多模态模型的训练方法,让模型学会理解图像和相关文本之间的关系。
  2. 第二阶段:语音 – 文本对齐 :通过结合 CTC 损失和交叉熵损失来训练底部和顶部的语音层,使语音能够与文本实现精准对齐。
  3. 第三阶段:文本 – 视觉 – 语音对齐 :使用构造的三模态数据,通过多任务学习来训练 LLM 主干网络,让模型能够灵活支持各种模态组合的交互。

三、Stream-Omni 的应用场景

(一)视觉问答:看图解惑的高手

在视觉问答领域,Stream-Omni 表现出色。它可以准确理解图像内容,并结合文本问题给出恰当回答。例如,当我们上传一张建筑平面图并询问地下室楼梯是否能直达二楼时,Stream-Omni 能基于图像给出准确判断。

(二)语音交互:畅快交流的伙伴

对于语音交互,Stream-Omni 同样展现出强大的能力。无论是将语音转化为文本进行回答,还是直接生成语音回应,它都能出色完成任务。比如,我们可以通过语音询问一个设备的用途,Stream-Omni 能准确识别语音并给出详细解释。

四、如何搭建和使用 Stream-Omni?

(一)环境准备

  1. 创建 Python 环境 :推荐使用 Conda 创建一个 Python 3.10 的环境,确保软件包的一致性和兼容性。


    • conda create -n streamomni python=3.10 -y

    • conda activate streamomni
  2. 安装依赖包 :使用 pip 安装项目所需的依赖包,包括 flash-attn 以及 CosyVoice 的相关依赖。


    • pip install -e .

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

    • pip install -r requirements.txt

    • pip install -r CosyVoice/requirements.txt

(二)模型和工具下载

  1. 下载 Stream-Omni 模型 :从 Huggingface 网站下载 Stream-Omni 模型,并将其放置在指定目录(如${STREAMOMNI_CKPT})。
  2. 下载 CosyVoice(Tokenizer & Flow Model) :从 ModelScope 网站下载 CosyVoice 模型,并将其放置在指定目录(如COSYVOICE_CKPT=./CosyVoice-300M-25Hz)。

(三)启动服务

  1. 启动控制器 :运行控制器脚本,设置主机为0.0.0.0,端口为10000


    • python stream_omni/serve/controller.py --host 0.0.0.0 --port 10000
  2. 启动 CosyVoice 工作进程 :设置 CosyVoice 模型路径和音频保存目录,然后启动工作进程。


    • COSYVOICE_CKPT=path_to_CosyVoice-300M-25Hz

    • WAV_DIR=path_to_save_generated_audio

    • CUDA_VISIBLE_DEVICES=0 PYTHONPATH=CosyVoice/third_party/Matcha-TTS python ./CosyVoice/cosyvoice_worker.py --port 21003 --model ${COSYVOICE_CKPT} --wav_dir ./gen_wavs/
  3. 启动 Stream-Omni 工作进程 :设置 Stream-Omni 模型路径,然后启动工作进程。如果显存小于 32GB,可以添加--load-8bit参数以降低显存占用。


    • STREAMOMNI_CKPT=path_to_stream-omni-8b

    • CUDA_VISIBLE_DEVICES=1 python ./stream_omni/serve/model_worker.py --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path ${STREAMOMNI_CKPT} --model-name stream-omni
  4. 启动交互界面 :运行 Gradio Web 脚本,通过浏览器访问http://localhost:7860进行交互。


    • python stream_omni/serve/gradio_web.py --controller http://localhost:10000 --model-list-mode reload --port 7860

(四)命令行交互示例

以下是一个简单的命令行交互示例,展示如何使用 Stream-Omni 进行视觉导向的语音交互:

export CUDA_VISIBLE_DEVICES=0
export PYTHONPATH=CosyVoice/third_party/Matcha-TTS

STREAMOMNI_CKPT=path_to_stream-omni-8b

# 在 run_stream_omni.py 中替换 CosyVoice 模型路径(例如,cosyvoice = CosyVoiceModel('./CosyVoice-300M-25Hz'))
# 如果显存小于 32GB,添加 --load-8bit 参数
python ./stream_omni/eval/run_stream_omni.py \
    --model-path ${STREAMOMNI_CKPT} \
    --image-file ./stream_omni/serve/examples/cat.jpg --conv-mode stream_omni_llama_3_1 --model-name stream-omni  \
    --query ./stream_omni/serve/examples/cat_color.wav

运行上述脚本后,你将得到以下输出:

ASR 输出:
这只猫是什么颜色的
LLM 输出:
这只猫是灰色和黑色的。
语音令牌:
<Audio_2164><Audio_2247><Audio_671><Audio_246><Audio_2172><Audio_1406><Audio_119><Audio_203><Audio_2858><Audio_2099><Audio_1716><Audio_22><Audio_1736><Audio_1038><Audio_4082><Audio_1655><Audio_2409><Audio_2104><Audio_571><Audio_2255><Audio_73><Audio_760><Audio_822><Audio_701><Audio_2583><Audio_1038><Audio_2203><Audio_1185><Audio_2103><Audio_1718><Audio_2610><Audio_1883><Audio_16><Audio_792><Audio_8><Audio_8><Audio_535><Audio_67>
语音输出:
音频已保存至 ./output_893af1597afe2551d76c37a75c813b16.wav

(五)不同模态组合的交互方式

Stream-Omni 支持多种模态组合的交互,以下是几种常见的交互方式及其对应的脚本:

输入组合 输出类型 中间输出 脚本文件
文本 + 视觉(或无) 文本 / run_stream_omni_t2t.py
文本 + 视觉(或无) 语音 模型输出的文本结果 run_stream_omni_t2s.py
语音 + 视觉(或无) 文本 用户输入的 ASR 转录 run_stream_omni_s2t.py
语音 + 视觉(或无) 语音 模型输出的文本结果,用户输入的 ASR 转录 run_stream_omni_s2s.py

你可以在model.generate()中通过设置inference_type参数(可选值包括text_to_texttext_to_speechspeech_to_textspeech_to_speech)来控制交互模式。

五、Stream-Omni 的性能表现

(一)视觉理解能力

在多个视觉理解基准测试中,Stream-Omni 展现出强大的性能。例如,在 VQA-v2、GQA 等 11 个基准测试中,它与先进的视觉导向型多模态模型(如 LLaVA 系列)相比毫不逊色。这表明 Stream-Omni 能够在处理视觉信息时保持高度的准确性,为用户提供更可靠的视觉问答服务。

(二)语音交互能力

在知识导向型语音交互测试中,Stream-Omni 仅使用 23,000 小时的语音数据,就在 Llama Questions 和 Web Questions 等基准测试中取得了优异的成绩。与依赖大量语音数据预训练的离散语音单元的语音导向型 LMM 模型(如 SpeechGPT、Moshi、GLM-4-Voice 等)相比,Stream-Omni 凭借其基于 CTC 的语音 – 文本映射,更高效地将 LLM 的文本知识转移到语音模态,实现了知识导向型语音交互。

(三)基于视觉的语音交互能力

为了更贴近实际应用场景,研究团队基于 VisIT-Bench 构建了 SpokenVisIT 基准测试,用于评估多模态模型的基于视觉的语音交互能力。在这个测试中,Stream-Omni 凭借其出色的视觉理解和语音生成能力,相较于 VITA-1.5 等模型展现出更强的基于视觉的语音交互能力,为用户带来更丰富的多模态交互体验。

六、Stream-Omni 的优势与局限性

(一)优势

  1. 高效的数据利用 :Stream-Omni 在训练过程中仅使用了 23,000 小时的语音数据,相较于其他模型(如 TWIST 使用 150,000 小时、SpeechGPT 使用 60,000 小时等),在数据效率上具有显著优势。
  2. 卓越的多模态交互能力 :无论是视觉问答还是语音交互,Stream-Omni 都能提供高质量的响应,并且能够同步输出中间文本结果,提升用户体验。
  3. 灵活的模态组合支持 :它支持多种模态组合的交互方式,能够满足不同场景下的需求。

(二)局限性

尽管 Stream-Omni 在多模态交互方面取得了显著的成果,但它也存在一些局限性。例如,它在语音的表现力和类人性方面还有待进一步提升。这些因素对于高质量的多模态交互体验也至关重要,将是未来研究和改进的方向。

七、Stream-Omni 的实际案例分析

(一)视觉细节理解案例

在 SpokenVisIT 基准测试的一个案例中,Stream-Omni 准确理解了图像中楼梯的结构,并给出了与 GPT-4V 相似的回答。而 VITA-1.5 在面对文本和语音不同输入模态时,产生了矛盾的回答。这凸显了 Stream-Omni 在语音 – 文本语义对齐方面的优势,使其无论面对哪种输入模态,都能保持回答的一致性。

(二)长语音生成案例

在另一个案例中,Stream-Omni 展现出了出色的长语音生成能力,生成了长达 30 秒的高质量语音输出。并且,生成的语音与对应的文本输出高度一致,这充分证明了其基于对齐融合模块的有效性,实现了高质量的基于视觉的语音交互。

八、总结与展望

Stream-Omni 作为一款先进的多模态交互模型,通过创新的模态对齐技术和高效的训练策略,在视觉理解、语音交互以及基于视觉的语音交互等多个领域都取得了卓越的成果。它的出现为多模态交互技术的发展注入了新的活力,也为未来更加智能、更加自然的人机交互模式提供了新的思路和方向。随着技术的不断进步和完善,我们有理由相信,Stream-Omni 将在更多的应用场景中发挥其巨大的潜力,为我们的生活和工作带来更多的便利和创新体验。

如果你在使用 Stream-Omni 的过程中有任何问题,或者想了解更多关于 Stream-Omni 的信息,可以通过 GitHub 仓库Huggingface 页面 进一步探索。

退出移动版