ONNX部署vits_chinese:非流式与流式推理的实现方法

【免费下载链接】vits_chinese vits_chinese - 一个基于 BERT 和 VITS 的文本到语音(TTS)算法学习项目,提供自然语音特征,适合对自然语言处理和语音合成领域感兴趣的开发者。 【免费下载链接】vits_chinese 项目地址: https://gitcode.com/gh_mirrors/vit/vits_chinese

vits_chinese是一个基于BERT和VITS的文本到语音(TTS)算法学习项目,提供自然语音特征,适合对自然语言处理和语音合成领域感兴趣的开发者。本文将详细介绍如何使用ONNX部署vits_chinese,实现非流式与流式推理,帮助开发者快速掌握模型部署技巧。

准备工作:环境配置与依赖安装

在开始ONNX部署之前,需要确保环境中已安装必要的依赖库。项目根目录下的requirements.txt文件列出了所有依赖项,可通过以下命令安装:

pip install -r requirements.txt

此外,ONNX部署还需要安装onnxruntime库,可使用以下命令安装:

pip install onnxruntime

非流式推理实现:vits_infer_onnx.py详解

非流式推理是指一次性输入完整文本,生成完整语音输出。项目中的vits_infer_onnx.py文件实现了这一功能。

初始化模型

vits_infer_onnx.py中,通过__init__方法初始化ONNX模型:

def __init__(
    self,
    model_path,
    config_path,
    speakers_path=None,
    device=None,
    session_opts=None,
):
    session_opts = onnxruntime.SessionOptions()
    self.model = onnxruntime.InferenceSession(
        model_path,
        sess_options=session_opts,
        providers=["CPUExecutionProvider"],
    )

执行推理

模型初始化后,调用推理方法生成语音。生成的语音文件默认保存到vits_infer_out/目录下,如:

f"./vits_infer_out/onnx_{n}.wav", y, model.sample_rate

流式推理实现:vits_infer_onnx_stream.py解析

流式推理允许边输入文本边生成语音,适用于实时交互场景。项目中的vits_infer_onnx_stream.py文件实现了流式推理功能。

编码器与解码器初始化

流式推理需要分别初始化编码器和解码器:

# 编码器初始化
def __init__(
    self,
    encoder_model_path,
    config_path,
    speakers_path=None,
    device=None,
    session_opts=None,
):
    session_opts = onnxruntime.SessionOptions()
    self.model = onnxruntime.InferenceSession(
        encoder_model_path,
        sess_options=session_opts,
        providers=["CPUExecutionProvider"],
    )

# 解码器初始化
def __init__(
    self,
    decoder_model_path,
    config_path,
    session_opts=None,
):
    session_opts = onnxruntime.SessionOptions()
    self.model = onnxruntime.InferenceSession(
        decoder_model_path,
        sess_options=session_opts,
        providers=["CPUExecutionProvider"],
    )

流式语音生成

流式推理过程中,语音片段会逐步生成并保存到vits_infer_out/目录,如:

f"./vits_infer_out/onnx_stream_{n}.wav", stream_out_wav, encoder.sample_rate

ONNX模型导出:model_onnx.py与model_onnx_stream.py

项目提供了模型导出脚本,可将PyTorch模型转换为ONNX格式。

非流式模型导出

model_onnx.py用于导出非流式ONNX模型:

filename = "vits-chinese.onnx"
torch.onnx.export(
    model,
    (x, x_lengths, sid),
    filename,
    opset_version=13,
    do_constant_folding=True,
)

流式模型导出

model_onnx_stream.py用于导出流式ONNX模型,分别导出编码器和解码器:

# 编码器导出
filename = "vits-chinese-encoder.onnx"
torch.onnx.export(
    model.encoder,
    (x, x_lengths, sid),
    filename,
    opset_version=13,
    do_constant_folding=True,
)

# 解码器导出
filename = "vits-chinese-decoder.onnx"
torch.onnx.export(
    model.decoder,
    (z, z_lengths, sid, max_len),
    filename,
    opset_version=13,
    do_constant_folding=True,
)

总结:选择合适的推理方式

  • 非流式推理:适合一次性生成完整语音,如语音合成文件生成,对应脚本vits_infer_onnx.py
  • 流式推理:适合实时交互场景,如语音助手,对应脚本vits_infer_onnx_stream.py

通过本文介绍的方法,开发者可以轻松实现vits_chinese的ONNX部署,根据实际需求选择合适的推理方式,享受高效、自然的语音合成体验。

【免费下载链接】vits_chinese vits_chinese - 一个基于 BERT 和 VITS 的文本到语音(TTS)算法学习项目,提供自然语音特征,适合对自然语言处理和语音合成领域感兴趣的开发者。 【免费下载链接】vits_chinese 项目地址: https://gitcode.com/gh_mirrors/vit/vits_chinese

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐