Kokoro-82M:仅有 8200 万个参数的最佳 TTS 模型
在 TTS Arena 中排名第一的 TTS 模型
不仅仅是文本生成,生成式 AI 在视频生成、图像生成等不同领域都打破了基准。即使是 TTS 也达到了新的高度。最近,发布了一款名为 Kokoro-82M 的革命性模型,它仅有 8200 万个参数,并在 TTS 领域取得了 SOTA 结果。
主要特点
高效率:尽管其相对较小的规模(82M参数),Kokoro-82M在TTS基准测试中的Elo评级表现超过了更大的模型。
低数据需求:训练于少于100小时的音频数据,显著少于许多竞争模型(例如,XTTS v2、MetaVoice、Fish Speech)。
语音包:包括10个独特的语音包(例如,Bella、Sarah、Adam、Michael、Emma等),提供多样的语音选择。
ONNX支持:提供ONNX版本以便于高效部署和推理。
支持的语言:主要为美式英语和英式英语。
架构:基于StyleTTS 2和ISTFTNet,采用仅解码器架构(没有扩散或编码器)。
开源模型
性能
Elo 排名: Kokoro-82M 在 TTS Spaces Arena 中获得了 #1 排名,超越了 XTTS v2 (467M 参数)、MetaVoice (1.2B 参数) 和 Fish Speech (~500M 参数) 等更大模型。
效率: 以更少的参数和更少的训练数据实现高质量的 TTS,表明 TTS 模型的 规模法则 比之前认为的更陡峭。
使用方法
简单集成:Kokoro-82M 可以轻松集成到使用 Hugging Face 生态系统的项目中。
声音选择:用户可以从多个语音包中选择(例如,Bella、Sarah、Adam、Michael),以满足不同的口音和风格。
音素输出:该模型生成 24kHz 音频 并提供 音素输出 以满足高级用例。
5. 训练细节
计算: 在 A100 80GB GPUs 上训练,约 500 GPU 小时,成本约 $400。
数据: 使用 允许使用/非版权音频数据(公共领域或 Apache/MIT 许可)和 IPA 音素标签。
轮次: 训练了 少于 20 轮。
数据集: 主要由 长篇阅读和叙述 组成,没有对话数据。
6. 限制
无语音克隆:由于训练数据集较小(<100小时),缺乏语音克隆能力。
依赖espeak-ng:依赖外部**g2p(图形到音素)**工具,这可能会引入失败模式。
什么是 g2p?
g2p 代表 字素到音素 转换。它是将书写文本(字素或字母)转换为其对应的音位表示(音素或声音)的过程。例如,单词 “cat” 可能被转换为音素 /k/ /æ/ /t/,表示该单词的发音。
为什么Kokoro-82M依赖外部g2p?
Kokoro-82M使用一个名为espeak-ng的外部工具(一个流行的开源语音合成器)来处理g2p转换。Kokoro-82M没有将g2p功能直接构建到模型中,而是将这项任务委托给一个独立的系统espeak-ng。
有限的多语言支持:目前仅支持英语(美式和英式口音),尽管从架构上讲,多语言能力是可行的。
并非在所有任务中都是最先进的:虽然高效,但Kokoro-82M在与更大模型(例如,1B+参数扩散变换器或像GPT-4o这样的MLLM)相比时可能会显得不足。
如何免费使用 Kokoro-82M TTS?
该模型可以在下面免费测试
如果需要,该模型相当轻量,可以在 Google Colab 上使用:
## 1️⃣ Install dependencies silently
!git lfs install
!git clone https://huggingface.co/hexgrad/Kokoro-82M
%cd Kokoro-82M
!apt-get -qq -y install espeak-ng > /dev/null 2>&1
!pip install -q phonemizer torch transformers scipy munch
## 2️⃣ Build the model and load the default voicepack
from models import build_model
import torch
device = 'cuda' if torch.cuda.is_available() else 'cpu'
MODEL = build_model('kokoro-v0_19.pth', device)
VOICE_NAME = [
'af', # Default voice is a 50-50 mix of Bella & Sarah
'af_bella', 'af_sarah', 'am_adam', 'am_michael',
'bf_emma', 'bf_isabella', 'bm_george', 'bm_lewis',
'af_nicole', 'af_sky'][0]
VOICEPACK = torch.load(f'voices/{VOICE_NAME}.pt', weights_only=True).to(device)
print(f'Loaded voice: {VOICE_NAME}')
## 3️⃣ Call generate, which returns 24khz audio and the phonemes used
from kokoro import generate
text = "How could I know? It's an unanswerable question. Like asking an unborn child if they'll lead a good life. They haven't even been born."
audio, out_ps = generate(MODEL, text, VOICEPACK, lang=VOICE_NAME[0])
## Language is determined by the first letter of the VOICE_NAME:
## 🇺🇸 'a' => American English => en-us
## 🇬🇧 'b' => British English => en-gb
## 4️⃣ Display the 24khz audio and print the output phonemes
from IPython.display import display, Audio
display(Audio(data=audio, rate=24000, autoplay=True))
print(out_ps)
总之,Kokoro-82M 是一个高效且有效的 TTS 模型,具有超出其规模的表现,提供高质量的语音合成,所需的计算和数据量极少。它在基准测试中的成功和易用性使其成为 TTS 领域的强有力竞争者。