ONNX 模型库
返回模型

说明文档

SpeechT5 文本转语音 (TTS) ONNX 模型

SpeechT5 TTS 的微调版本,已导出为 ONNX 格式。此模型使用 Optimum 库导出为 ONNX。

在 txtai 中使用

txtai 内置了文本转语音 (TTS) 流水线,使该模型的使用变得简单。

注意:以下示例需要 txtai >= 7.5

import soundfile as sf

from txtai.pipeline import TextToSpeech

# 构建流水线
tts = TextToSpeech("NeuML/txtai-speecht5-onnx")

# 生成语音
speech, rate = tts("Say something here")

# 写入文件
sf.write("out.wav", speech, rate)

# 使用自定义说话人生成语音
speech, rate = tts("Say something here", speaker=np.array(...))

模型训练

此模型使用 Hugging Face 文章中的代码和一组自定义 WAV 文件进行微调。

ONNX 导出使用以下代码,需要安装 optimum

import os

from optimum.exporters.onnx import main_export
from optimum.onnx import merge_decoders

# 参数
model = "txtai-speecht5-tts"
output = "txtai-speecht5-onnx"

# ONNX 导出
main_export(
    task="text-to-audio",
    model_name_or_path=model,
    model_kwargs={
        "vocoder": "microsoft/speecht5_hifigan"
    },
    output = output
)

# 合并为单个解码器模型
merge_decoders(
    f"{output}/decoder_model.onnx",
    f"{output}/decoder_with_past_model.onnx",
    save_path=f"{output}/decoder_model_merged.onnx",
    strict=False
)

# 删除不必要的文件
os.remove(f"{output}/decoder_model.onnx")
os.remove(f"{output}/decoder_with_past_model.onnx")

自定义说话人嵌入

当未传入 speaker 参数时,将使用默认的说话人嵌入。默认说话人是 David Mezzetti,txtai 的主要开发者。

可以按照以下方式构建自定义说话人嵌入。使用新声音微调模型可以获得最佳效果,但在某些情况下零样本说话人嵌入也可以接受。

以下代码需要安装 torchaudiospeechbrain

import os

import numpy as np
import torchaudio

from speechbrain.inference import EncoderClassifier

def speaker(path):
    """
    从音频文件中提取说话人嵌入。

    参数:
        path: 文件路径

    返回:
        说话人嵌入
    """

    model = "speechbrain/spkrec-xvect-voxceleb"
    encoder = EncoderClassifier.from_hparams(model,
                                             savedir=os.path.join("/tmp", model),
                                             run_opts={"device": "cuda"})

    samples, sr = torchaudio.load(path)
    samples = encoder.audio_normalizer(samples[0], sr)
    embedding = encoder.encode_batch(samples.unsqueeze(0))

    return embedding[0,0].to("cuda").unsqueeze(0)

embedding = speaker("reference.wav")
np.save("speaker.npy", embedding.cpu().numpy(), allow_pickle=False)

然后按以下方式加载。

speech, rate = tts("Say something here", speaker=np.load("speaker.npy"))

支持来自原始 SpeechT5 TTS 训练集的说话人嵌入。更多信息请参见 README

NeuML/txtai-speecht5-onnx

作者 NeuML

text-to-speech txtai
↓ 0 ♥ 2

创建时间: 2024-10-10 15:16:17+00:00

更新时间: 2024-10-10 15:17:33+00:00

在 Hugging Face 上查看

文件 (11)

.gitattributes
README.md
added_tokens.json
decoder_model_merged.onnx ONNX
decoder_postnet_and_vocoder.onnx ONNX
encoder_model.onnx ONNX
preprocessor_config.json
speaker.npy
special_tokens_map.json
spm_char.model
tokenizer_config.json