DiffWave
我们在招聘! 如果你喜欢我们正在构建的内容,加入我们。
DiffWave 是一个快速、高质量的神经声码器和波形合成器。它从高斯噪声开始,通过迭代优化将其转换为语音。可以通过提供条件信号(例如对数缩放的 Mel 频谱图)来控制语音生成。模型和架构详情在 DiffWave: A Versatile Diffusion Model for Audio Synthesis 中描述。
新功能 (2021-11-09)
- 无条件波形合成(感谢 Andrechang!)
新功能 (2021-04-01)
- 基于 DiffWave 论文第 3 版的快速采样算法
新功能 (2020-10-14)
- 新的预训练模型,训练了 100 万步
- 更新了使用新模型输出的音频样本
状态 (2021-11-09)
- 快速推理过程
- 稳定训练
- 高质量合成
- 混合精度训练
- 多 GPU 训练
- 命令行推理
- 编程推理 API
- PyPI 包
- 音频样本
- 预训练模型
- 无条件波形合成
特别感谢 Zhifeng Kong(DiffWave 的首席作者)提供的指导和错误修复。
音频样本
预训练模型
22.05 kHz 预训练模型 (31 MB, SHA256: d415d2117bb0bba3999afabdd67ed11d9e43400af26193a451d112e2560821a8
)
这个预训练模型能够以 0.87 的实时因数合成语音(值越小越快)。
预训练模型详情
- 使用 4 个 1080Ti 进行训练
- 默认参数
- 单精度浮点数(FP32)
- 使用 LJSpeech 数据集进行训练,但不包括 LJ001* 和 LJ002*
- 训练了 1000578 步(1273 个周期)
安装
使用 pip 安装:
pip install diffwave
或者从 GitHub 安装:
git clone https://github.com/lmnt-com/diffwave.git
cd diffwave
pip install .
训练
在开始训练之前,你需要准备一个训练数据集。数据集可以有任何目录结构,只要包含的 .wav 文件是 16-bit 单声道(例如 LJSpeech, VCTK)。默认情况下,此实现假定采样率为 22.05 kHz。如果需要更改此值,请编辑 params.py。
python -m diffwave.preprocess /path/to/dir/containing/wavs
python -m diffwave /path/to/model/dir /path/to/dir/containing/wavs
# 在另一个 shell 中监控训练进度:
tensorboard --logdir /path/to/model/dir --bind_all
你应该期望在约 8000 步(约 1.5 小时在 2080 Ti 上)听到易识别(但有噪音)的语音。
多 GPU 训练
默认情况下,此实现使用并行返回的所有 GPU 数量 torch.cuda.device_count()
。你可以通过设置 CUDA_DEVICES_AVAILABLE
环境变量来指定要使用的 GPU,然后运行训练模块。
推理 API
基本用法:
from diffwave.inference import predict as diffwave_predict
model_dir = '/path/to/model/dir'
spectrogram = # 获取一个 [N,C,W] 格式的频谱图
audio, sample_rate = diffwave_predict(spectrogram, model_dir, fast_sampling=True)
# audio 是一个 [N,T] 格式的 GPU 张量。
推理命令行界面
python -m diffwave.inference --fast /path/to/model /path/to/spectrogram -o output.wav