模型简介
模型特点
模型能力
使用案例
🚀 OuteTTS Version 1.0
OuteTTS Version 1.0是一款文本转语音模型,它在语音合成和语音克隆方面带来了显著改进,以紧凑的规模提供了更强大、准确且用户友好的体验。
🚀 快速开始
安装
🔗 安装说明
基础用法
import outetts
# Initialize the interface
interface = outetts.Interface(
config=outetts.ModelConfig.auto_config(
model=outetts.Models.VERSION_1_0_SIZE_1B,
# For llama.cpp backend
backend=outetts.Backend.LLAMACPP,
quantization=outetts.LlamaCppQuantization.FP16
# For transformers backend
# backend=outetts.Backend.HF,
)
)
# Load the default speaker profile
speaker = interface.load_default_speaker("EN-FEMALE-1-NEUTRAL")
# Or create your own speaker profiles in seconds and reuse them instantly
# speaker = interface.create_speaker("path/to/audio.wav")
# interface.save_speaker(speaker, "speaker.json")
# speaker = interface.load_speaker("speaker.json")
# Generate speech
output = interface.generate(
config=outetts.GenerationConfig(
text="Hello, how are you doing?",
generation_type=outetts.GenerationType.CHUNKED,
speaker=speaker,
sampler_config=outetts.SamplerConfig(
temperature=0.4
),
)
)
# Save to file
output.save("output.wav")
更多配置选项
如需高级设置和自定义,请访问官方仓库:
🔗 interface_usage.md
✨ 主要特性
1. 提示改进与依赖移除
- 自动单词对齐:模型现在可以在内部进行单词对齐。只需输入原始文本,无需预处理,模型会处理其余操作,简化了工作流程。为获得最佳效果,请使用无换行符的规范化、易读文本(outetts库会自动进行轻度规范化)。
- 原生多语言文本支持:直接支持多种语言的原生文本,无需罗马化处理。
- 增强的元数据集成:更新后的提示系统在全局和单词级别整合了额外的元数据(时间、能量、频谱质心、音高),改善了说话者的流畅度和合成质量。
- 音频码本特殊标记:新增了c1(码本1)和c2(码本2)的标记。
2. 新的音频编码器模型
- DAC编码器:集成了来自ibm-research/DAC.speech.v1.0的DAC音频编码器,利用两个码本进行高质量音频重建。
- 性能权衡:提高音频保真度使令牌生成速率从每秒75个增加到150个。这种权衡优先考虑了质量,特别是对于多语言应用。
3. 语音克隆
- 单样本语音克隆:为实现单样本克隆,模型通常只需要约10秒的参考音频即可生成准确的语音表示。
- 提高准确性:新的编码器和额外的训练元数据增强了语音克隆的自然度和精度。
4. 自动文本对齐与数字支持
- 自动文本对齐:即使对于没有明显边界的语言(如日语、中文),也能在单词级别对齐原始文本,这得益于预处理训练数据的洞察。
- 直接数字输入:内置的多语言数字支持允许在提示中直接使用数字,无需进行文本转换。(模型通常会选择占主导地位的语言。在单个提示中混合使用多种语言可能会导致错误。)
5. 多语言能力
- 支持的语言:OuteTTS根据训练数据的暴露程度,在不同语言上提供不同的熟练程度。
- 高训练数据语言:这些语言经过了广泛的训练:英语、阿拉伯语、中文、荷兰语、法语、德语、意大利语、日语、韩语、立陶宛语、俄语、西班牙语
- 中等训练数据语言:这些语言接受了中等程度的训练,表现良好,但偶尔会有局限性:葡萄牙语、白俄罗斯语、孟加拉语、格鲁吉亚语、匈牙利语、拉脱维亚语、波斯语/法尔西语、波兰语、斯瓦希里语、泰米尔语、乌克兰语
- 支持语言之外:模型可以在未训练的语言中生成语音,但效果可能不太理想。可以尝试未列出的语言,但结果可能不是最优的。
💻 使用示例
基础用法
import outetts
# Initialize the interface
interface = outetts.Interface(
config=outetts.ModelConfig.auto_config(
model=outetts.Models.VERSION_1_0_SIZE_1B,
# For llama.cpp backend
backend=outetts.Backend.LLAMACPP,
quantization=outetts.LlamaCppQuantization.FP16
# For transformers backend
# backend=outetts.Backend.HF,
)
)
# Load the default speaker profile
speaker = interface.load_default_speaker("EN-FEMALE-1-NEUTRAL")
# Or create your own speaker profiles in seconds and reuse them instantly
# speaker = interface.create_speaker("path/to/audio.wav")
# interface.save_speaker(speaker, "speaker.json")
# speaker = interface.load_speaker("speaker.json")
# Generate speech
output = interface.generate(
config=outetts.GenerationConfig(
text="Hello, how are you doing?",
generation_type=outetts.GenerationType.CHUNKED,
speaker=speaker,
sampler_config=outetts.SamplerConfig(
temperature=0.4
),
)
)
# Save to file
output.save("output.wav")
高级用法
如需高级设置和自定义,请访问官方仓库:
🔗 interface_usage.md
📚 详细文档
使用建议
说话者参考
该模型设计为使用说话者参考。如果没有参考,它会生成随机的语音特征,通常会导致输出质量下降。模型会继承参考说话者的情感、风格和口音。当使用同一说话者转录到其他语言时,可能会观察到模型保留原始口音。
最佳音频长度
- 最佳性能:一次运行生成约42秒的音频(约8192个令牌)。建议在生成时不要接近此窗口的限制。通常,最多7000个令牌能获得最佳效果。
- 使用说话者参考时减少上下文:如果说话者参考为10秒长,则有效上下文将减少到约32秒。
温度设置建议
测试表明,温度设置为0.4是准确性的理想起点(使用以下采样设置)。然而,某些语音参考可能受益于更高的温度以增强表现力,或稍低的温度以实现更精确的语音复制。
验证说话者编码
如果克隆语音质量不佳,请检查编码后的说话者样本。
interface.decode_and_save_speaker(speaker=your_speaker, path="speaker.wav")
DAC音频重建模型是有损的,带有削波、过度响亮或异常语音特征的样本可能会引入编码问题,从而影响输出质量。
采样配置
为了使此TTS模型获得最佳效果,请使用以下采样设置。
参数 | 值 |
---|---|
温度 | 0.4 |
重复惩罚 | 1.1 |
重复范围 | 64 |
Top-k | 40 |
Top-p | 0.9 |
Min-p | 0.05 |
对于生产或高质量需求,强烈建议使用llama.cpp以获得最佳效果。
模型规格
- 训练数据:在约60000小时的音频上进行训练
- 上下文长度:支持最大8192个令牌的上下文窗口
训练参数
预训练
- 优化器:AdamW
- 批量大小:100万个令牌
- 最大学习率:3e-4
- 最小学习率:3e-5
- 上下文长度:8192
微调
- 优化器:AdamW
- 最大学习率:1e-5
- 最小学习率:5e-6
- 数据:10000个多样化、高质量的示例
🔧 技术细节
视频展示
重要提示
⚠️ 重要提示
OuteTTS Version 1.0 支持多种后端;然而,由于每个后端处理采样的方式不同,默认情况下,llama.cpp 提供最可靠和一致的输出质量。为获得最佳效果,建议使用 llama.cpp 后端与该模型配合使用。
还强烈建议使用 此处 指定的设置使用该模型。偏离这些设置可能会导致输出质量低下或损坏。此问题主要源于不同后端实现 重复惩罚 的方式。该模型在 窗口化方法(使用 64 令牌窗口)下表现最佳,其中惩罚仅应用于最近的令牌,而不是整个上下文窗口。
Llama.cpp 和 EXL2 支持此类采样,而 Transformers 不支持。为了解决这个问题,在 OuteTTS 库中为 Hugging Face Transformers 后端实现了 窗口化重复惩罚,这显著提高了输出质量并解决了采样问题,提供了与 llama.cpp 相当的结果。如果不进行此调整,输出质量可能会大幅下降。
如果您发现了可以提高性能的替代采样设置,请通过在 OuteTTS GitHub 上创建一个问题来分享您的发现。
📄 许可证
- 初始Llama3.2组件:Llama 3.2社区许可协议
- 我们的持续预训练、微调及其他组件:CC-BY-NC-SA-4.0
致谢
- 非常感谢 Hugging Face 通过其资助计划持续提供资源支持!
- 音频编码和解码使用了 ibm-research/DAC.speech.v1.0
- OuteTTS基于 Llama3.2-1B 作为基础模型,并进行了持续的预训练和微调。
道德使用指南
此文本转语音模型旨在用于合法应用,以增强可访问性、创造力和通信;禁止的用途包括未经同意的模仿、故意创建误导性内容、生成有害或骚扰性材料、在未适当披露的情况下分发合成音频、未经许可进行语音克隆,以及任何违反适用法律、法规或版权的用途。




