这是我们的ICASSP 2024纸张语音流的官方实现。

该仓库在Linux上的Python 3.9上进行了测试。您可以使用Conda设置环境
# Install required packages
conda create -n vflow python==3.9 # or any name you like
conda activate vflow
pip install -r requirements.txt
# Then, set PATH
source path.sh # change the env name in it if you don't use "vflow"
# Install monotonic_align for MAS
cd model/monotonic_align
python setup.py build_ext --inplace请注意,为了避免安装Torchdyn的麻烦,我们直接在torchdyn/在此处本地复制Torchdyn 1.0.6版本。
以下过程也可能需要在您的环境中进行bash和perl命令。
此存储库依赖于Kaldi风格的数据组织。所有数据说明文件均应在data/中的子目录中放置。有关基本示例,请参见data/ljspeech/example 。在此示例中,需要以下纯文本文件:
wav.scp :组织为utt /path/to/wav 。utts.list :每行都指定了话语。这可以通过cut -d ' ' -f 1 wav.scp > utts.list获得。utt2spk :组织为utt spk_name 。text和phn_duration :指定音素序列和相应的整数持续时间(以框架为单位)。此外,还有一个data/ljspeech/phones.txt文件,用于指定所有手机及其词典中的索引。对于LJSpeech,我们在线提供处理的文件。您可以下载并解压缩到data/ljspeech/{train,val} 。如果您想在自己的数据集上训练,则可能必须自己创建这些文件(或更改数据加载策略)。
在拥有这些清单文件后,请执行以下操作以提取MEL-SPECTROGRAM进行培训:
bash extract_fbank.sh --stage 0 --stop_stage 2 --nj 16
# nj: number of parallel jobs.
# Have a look into the script if you need to change something
# Bash variables before "parse_options.sh" can be passed by CLI, e.g. "--key value".请注意,我们默认在此处使用16KHz数据。这将创建feats/fbank和feats/normed_fbank ,其中Kaldi风格的SCP和ARK文件存储MEL-SPECTROGRAM数据。规范功能将用于培训。
如果您想使用扬声器-IDS(例如ljspeech,而不是使用预位的扬声器嵌入者(例如XVECTORS)进行培训,请运行:
make_utt2spk_id.py data/ljspeech/train/utt2spk data/ljspeech/val/utt2spk
# You can add more files in CLI. Will write utt2num_frames in the same directory to these files. 培训的配置存储在configs/中。这些YAML文件中将指定用于培训和验证集的数据表现和功能。如果您需要对自己的数据进行训练,则需要在此更改双引用的文件路径。
然后,培训由
python train.py -c configs/ ${your_yaml} -m ${model_name}
# e.g. python train.py -c configs/lj_16k_gt_dur.yaml -m lj_16k_gt_dur它将创建logs/${model_name}用于记录和检查点。
几个注释:
use_gt_dur设置为false以打开MAS算法。在这种情况下,最好将add_blank设置为true 。 在一定程度上训练模型后,它可以准备好进行流动整流过程。流纠正需要使用训练有素的模型生成数据,并使用(噪声,数据)对再次训练模型。由于此过程应始终涉及整个培训数据集,因此建议在多个GPU上运行以进行并行解码。我们提供了一个脚本来执行此操作:
# Set CUDA_VISIBLE_DEVICES, or the program will use all available GPUs.
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
# --EMA specifies to load EMA checkpoint (latest)
# --max-utt-num sets the number of utterances to decode (in this case, arbitrarily high)
# --solver euler -t 10 specifies the solver and timesteps. Could be adaptive solvers like dopri5.
# --gt-dur forces the model to use ground truth duration for decoding.这将创建synthetic_wav/${model_name}/generate_for_reflow/train用于存储。 noise.scp和feats.scp将存储。解码训练集后,您还可以通过--dataset val设置验证验证。
然后,在新lj_16k_gt_dur_reflow.yaml yaml中指定这些feats.scp noise.scp路径。
perform_reflow : true
...
data :
train :
feats_scp : " synthetic_wav/lj_16k_gt_dur/train/feats.scp "
noise_scp : " synthetic_wav/lj_16k_gt_dur/train/noise.scp "
...现在,它可以在反流中再次培训,并在培训中使用相同的脚本,但新的YAML配置文件。可以随意将经过训练的模型复制到新的日志DIR进行恢复。同样,可以在反流数据上更改模型结构并从头开始训练。
类似于“为反流生成数据”,模型推断可以通过
python inference_dataset.py -c configs/ ${your_yaml} -m ${model_name} --EMA
--solver euler -t 10这将合成配置中验证设置的MEL-SPECTROGRAM,并将其存储在synthetic_wav/${model_name}/tts_gt_spk/feats.scp中。可以指定扬声器,速度和温度;请参阅tools.get_hparams_decode()函数以获取完整的选项集。
然后可以在hifigan/ Directory中进行推理。请参阅那里的读书文件。
在开发过程中,提到以下存储库:
utils/中的大多数实用程序脚本。该存储库还包含一些实验功能。
语音转换。由于Glowtts可以通过归一化流的解开属性执行语音转换,因此流量匹配也可以执行它是合理的。方法model.tts.GradTTS.voice_conversion进行了初步尝试。
可能性估计。基于微分方程的生成模型具有通过瞬时变化公式来估计数据可能性的能力
实际上,积分被总和取代,而差异被技能 - hutchinson痕量估计器取代。请参阅《歌曲》中的附录D.2。有关理论细节。我在model.tts.GradTTS.compute_likelihood中实现了此功能。
model.cfm.OTCFM中尝试了此操作,尽管目前DOE的效果不佳。GradLogPEstimator2d配置指定估算器model.fm_net_type目前,还支持DIFFSINGER的估算仪体系结构。您可以添加更多,例如在Matcha-TTS中引入的。model.tts.GradTTS.forward现在支持对齐地图的Beta二项式先验;而且,如果需要,可以将变量MAS_target更改为其他东西,例如流量转换的噪声!如果有帮助,请随时引用这项工作吗?
@INPROCEEDINGS{guo2024voiceflow,
author={Guo, Yiwei and Du, Chenpeng and Ma, Ziyang and Chen, Xie and Yu, Kai},
booktitle={ICASSP 2024 - 2024 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP)},
title={{VoiceFlow}: Efficient Text-To-Speech with Rectified Flow Matching},
year={2024},
volume={},
number={},
pages={11121-11125},
keywords={Signal processing algorithms;Signal processing;Acoustics;Mathematical models;Vectors;Trajectory;Speech processing;Text-to-speech;flow matching;rectified flow;efficiency;speed-quality tradeoff},
doi={10.1109/ICASSP48485.2024.10445948}
}