VoiceFlow-TTS 项目介绍
VoiceFlow-TTS 项目为我们展现了一种高效的文本转语音解决方案,它基于校正流匹配技术,致力于在速度与语音质量之间取得最佳平衡。此项目的代码实现与详细的文档用于支持 ICASSP 2024 会议论文《VoiceFlow》。
项目环境准备
在 Linux 系统上,本项目需要 Python 3.9 环境。用户首先需要创建和激活一个新的 conda 环境:
conda create -n vflow python==3.9
conda activate vflow
pip install -r requirements.txt
随后,用户需要配置环境路径,并编译安装 monotonic_align
模块:
source path.sh
cd model/monotonic_align
python setup.py build_ext --inplace
需要特别注意的是,我们在本地直接复制了 torchdyn
1.0.6 版本,以避免安装复杂性。
数据准备
VoiceFlow 项目依赖 Kaldi 风格的数据组织,所有的数据描述文件需放置在 data/
子目录下。以 LJSpeech 数据集为例,需要以下几个基本文本文件:
wav.scp
: 格式为utt /path/to/wav
。utts.list
: 内容每行指定一个语句。utt2spk
: 格式为utt spk_name
。text
和phn_duration
: 指定音素序列及其对应帧数。phones.txt
: 用于指定所有的音素及其在字典中的索引。
对于 LJSpeech 数据集,已经处理好的文件可以在线获取。下载并解压后,用户还需提取用于训练的 Mel 频谱:
bash extract_fbank.sh --stage 0 --stop_stage 2 --nj 16
最后,运行以下命令以便使用 speaker-ID 进行训练:
make_utt2spk_id.py data/ljspeech/train/utt2spk data/ljspeech/val/utt2spk
模型训练
训练的配置存储在 configs/
目录下的 yaml 文件中。用户需要根据自己的数据集修改文件路径,然后进行模型训练:
python train.py -c configs/${your_yaml} -m ${model_name}
训练过程中的注意事项包括:默认启用 EMA 用于权重平均储存,模型会优先从 EMA 检查点恢复;通过将 use_gt_dur
设置为 false
可以启用 MAS 算法。
流校正与数据生成
模型在训练到一定程度后,可以进行流校正过程。流校正需要利用已训练的模型生成数据,然后使用噪声和数据对对模型进行再训练。强烈建议在多 GPU 环境下运行以进行并行解码:
python generate_for_reflow.py -c configs/${your_yaml} -m ${model_name} \
--EMA --max-utt-num 100000000 \
--dataset train \
--solver euler -t 10 \
--gt-dur
完成后,可以通过在新的配置文件中指定 feats.scp
和 noise.scp
路径进行再次训练。
推断
模型的推断与前面的数据生成过程类似,用户可以通过以下命令合成 Mel 频谱:
python inference_dataset.py -c configs/${your_yaml} -m ${model_name} --EMA \
--solver euler -t 10
此外,推断的额外细节请参考 hifigan/
目录下的 README
文件。
特别说明
项目中还包含一些实验性功能,如语音转换和似然估计等,这些功能可能尚未完全稳定。
用户若在研究中使用该项目,欢迎参考并引用此工作。