Skip to content

Latest commit

 

History

History
212 lines (161 loc) · 10.4 KB

README-zh.md

File metadata and controls

212 lines (161 loc) · 10.4 KB

DiffSinger: Singing Voice Synthesis via Shallow Diffusion Mechanism

arXiv GitHub Stars downloads | Hugging Face | English README

本仓库包含了我们的AAAI-2022 论文中提出的DiffSpeech (用于语音合成) 与 DiffSinger (用于歌声合成) 的官方Pytorch实现。

DiffSinger/DiffSpeech训练阶段 DiffSinger/DiffSpeech推理阶段
Training Inference

🎉 🎉 🎉 一些重要更新:

  • Mar.2, 2022: MIDI-新版: 重大更新 ✨
  • Mar.1, 2022: NeuralSVB, 为了歌声美化任务的代码,开源了 ✨ ✨ ✨ .
  • Feb.13, 2022: NATSpeech, 一个升级后的代码框架, 包含了DiffSpeech和我们NeurIPS-2021的工作PortaSpeech 已经开源! ✨ ✨ ✨.
  • Jan.29, 2022: 支持了MIDI-旧版 版本的歌声合成系统.
  • Jan.13, 2022: 支持了歌声合成系统, 开源了PopCS数据集.
  • Dec.19, 2021: 支持了语音合成系统. HuggingFace🤗 Demo

🚀 新闻:

  • Feb.24, 2022: 我们的新工作NeuralSVB 被 ACL-2022 接收 arXiv. 音频演示.
  • Dec.01, 2021: DiffSinger被AAAI-2022接收.
  • Sep.29, 2021: 我们的新工作PortaSpeech: Portable and High-Quality Generative Text-to-Speech 被NeurIPS-2021接收 arXiv .
  • May.06, 2021: 我们把这篇DiffSinger提交到了公开论文网站: Arxiv arXiv.

安装依赖

conda create -n your_env_name python=3.8
source activate your_env_name 
pip install -r requirements_2080.txt   (GPU 2080Ti, CUDA 10.2)
or pip install -r requirements_3090.txt   (GPU 3090, CUDA 11.4)

DiffSpeech (语音合成的版本)

1. 准备工作

数据准备

a) 下载并解压 LJ Speech dataset, 创建软链接: ln -s /xxx/LJSpeech-1.1/ data/raw/

b) 下载并解压 我们用MFA预处理好的对齐: tar -xvf mfa_outputs.tar; mv mfa_outputs data/processed/ljspeech/

c) 按照如下脚本给数据集打包,打包后的二进制文件用于后续的训练和推理.

export PYTHONPATH=.
CUDA_VISIBLE_DEVICES=0 python data_gen/tts/bin/binarize.py --config configs/tts/lj/fs2.yaml

# `data/binary/ljspeech` will be generated.

声码器准备

我们提供了HifiGAN声码器的预训练模型. 请在训练声学模型前,先把声码器文件解压到checkpoints里。

2. 训练样例

首先你需要一个预训练好的FastSpeech2存档点. 你可以用我们预训练好的模型, 或者跑下面这个指令从零开始训练FastSpeech2:

CUDA_VISIBLE_DEVICES=0 python tasks/run.py --config configs/tts/lj/fs2.yaml --exp_name fs2_lj_1 --reset

然后为了训练DiffSpeech, 运行:

CUDA_VISIBLE_DEVICES=0 python tasks/run.py --config usr/configs/lj_ds_beta6.yaml --exp_name lj_ds_beta6_1213 --reset

记得针对你的路径修改usr/configs/lj_ds_beta6.yaml里"fs2_ckpt"这个参数.

3. 推理样例

CUDA_VISIBLE_DEVICES=0 python tasks/run.py --config usr/configs/lj_ds_beta6.yaml --exp_name lj_ds_beta6_1213 --reset --infer

我们也提供了:

记得把预训练模型放在 checkpoints 目录.

DiffSinger (歌声合成的版本)

0. 数据获取

1. Preparation

数据准备

a) 下载并解压PopCS, 创建软链接: ln -s /xxx/popcs/ data/processed/popcs

b) 按照如下脚本给数据集打包,打包后的二进制文件用于后续的训练和推理.

export PYTHONPATH=.
CUDA_VISIBLE_DEVICES=0 python data_gen/tts/bin/binarize.py --config usr/configs/popcs_ds_beta6.yaml
# `data/binary/popcs-pmf0` 会生成出来.

声码器准备

我们提供了HifiGAN-Singing的预训练模型, 它专门为了歌声合成系统设计, 采用了NSF的技术。 请在训练声学模型前,先把声码器文件解压到checkpoints里。

(更新: 你也可以将我们提供的训练更多步数的存档点放到声码器的文件夹里)

这个声码器是在大约70小时的较大数据集上训练的, 可以被认为是一个通用声码器。

2. 训练样例

首先你需要一个预训练好的FFT-Singer. 你可以用我们预训练好的模型, 或者用如下脚本从零训练FFT-Singer:

# First, train fft-singer;
CUDA_VISIBLE_DEVICES=0 python tasks/run.py --config usr/configs/popcs_fs2.yaml --exp_name popcs_fs2_pmf0_1230 --reset
# Then, infer fft-singer;
CUDA_VISIBLE_DEVICES=0 python tasks/run.py --config usr/configs/popcs_fs2.yaml --exp_name popcs_fs2_pmf0_1230 --reset --infer 

然后, 为了训练DiffSinger, 运行:

CUDA_VISIBLE_DEVICES=0 python tasks/run.py --config usr/configs/popcs_ds_beta6_offline.yaml --exp_name popcs_ds_beta6_offline_pmf0_1230 --reset

记得针对你的路径修改usr/configs/popcs_ds_beta6_offline.yaml里"fs2_ckpt"这个参数.

3. 推理样例

CUDA_VISIBLE_DEVICES=0 python tasks/run.py --config usr/configs/popcs_ds_beta6_offline.yaml --exp_name popcs_ds_beta6_offline_pmf0_1230 --reset --infer

我们也提供了:

  • DiffSinger的预训练模型;
  • FFT-Singer的预训练模型, 这是为了DiffSinger里的浅扩散机制;

记得把预训练模型放在 checkpoints 目录.

请注意:

-我们原始论文中的PWG版本声码器已投入商业使用,因此我们提供此HifiGAN版本声码器作为替代品。

-我们这篇论文假设提供真实的F0来进行实验,如[1][2][3]等前作所做的那样,重点在频谱建模上,而非F0曲线的预测。如果你想对MIDI数据进行实验,从MIDI和歌词预测F0曲线(显式或隐式),请查看文档MIDI-old-versionMIDI-new-version。目前已经支持的MIDI数据集有: Opencpop

[1] Adversarially trained multi-singer sequence-to-sequence singing synthesizer. Interspeech 2020.

[2] SEQUENCE-TO-SEQUENCE SINGING SYNTHESIS USING THE FEED-FORWARD TRANSFORMER. ICASSP 2020.

[3] DeepSinger : Singing Voice Synthesis with Data Mined From the Web. KDD 2020.

Tensorboard

tensorboard --logdir_spec exp_name
Tensorboard

Mel 可视化

沿着纵轴, DiffSpeech: [0-80]; FastSpeech2: [80-160].

DiffSpeech vs. FastSpeech 2
DiffSpeech-vs-FastSpeech2
DiffSpeech-vs-FastSpeech2
DiffSpeech-vs-FastSpeech2

Audio Demos

音频样本可以看我们的样例页.

我们也放了部分由DiffSpeech+HifiGAN (标记为[P]) 和 GTmel+HifiGAN (标记为[G]) 生成的测试集音频样例在:resources/demos_1213.

(对应这个预训练参数:DiffSpeech)


🚀 🚀 🚀 更新:

新生成的歌声样例在:resources/demos_0112.

Citation

如果本仓库对你的研究和工作有用,请引用以下论文:

@article{liu2021diffsinger,
  title={Diffsinger: Singing voice synthesis via shallow diffusion mechanism},
  author={Liu, Jinglin and Li, Chengxi and Ren, Yi and Chen, Feiyang and Liu, Peng and Zhao, Zhou},
  journal={arXiv preprint arXiv:2105.02446},
  volume={2},
  year={2021}}

鸣谢

我们的代码基于如下仓库: