-
conf
- logging_config.conf
-
scripts
-
prepare_config_files.sh
- 准备当前流程的 时域配置参数文件
- 准备当前流程的 声学配置参数文件
-
prepare_config_files_for_synthesis.sh
- 准备当前流程的语音合成时 时域 配置参数文件
- 准备当前流程的语音合成时 声学 配置参数文件
-
prepare_labels_from_txt.sh
-
将文本转换为lab文件
- 1. 从txt文本使用前端工具生成scheme文件
- 2. 从scheme文件生成 utt文件
- 3. 将 festival utt转换为lab文件
- 4. state_align或phone_align,规范化lab
-
remove_intermediate_files.sh
- 移除中间产生的文件
-
run_phone_aligner.sh
-
执行音素对齐(phone align)
- 1. 使用festvox工具的ehmm clustergen做强制对齐
- 2. 将festival utts转换为lab文件
- 3. 规范化lab
-
run_state_aligner.sh
-
执行状态对齐
- 1. 使用HTK的HVite做强制状态对齐
- 2. 先使用Festival前端工具准备无时间戳的上下文相关lab文件
-
submit.sh
- 将theano训练任务提交到GPU
- test_nan.sh
-
01_setup.sh
-
创建一些目录
-
experiments/mandarin_voice
-
acoustic_model
- data
- bap
- label_phone_align
- lf0
- mgc
- file_id_list.scp
- gen
- feed_forward_6_tanh
- inter_module
- binary_label_467
- nn_mgc_lf0_vuv_bap_187
- nn_norm_mgc_lf0_vuv_bap_187
- nn_no_silence_lab_471
- nn_no_silence_lab_norm_471
- ref_data
- var
- label_norm_HTS_471.dat
- norm_info_mgc_lf0_vuv_bap_187_MVN.dat
- log
- nnets_model
-
duration_model
- data
- dur
- label_phone_align
- file_id_list.scp
- gen
- feed_forward_6_tanh
- inter_module
- binary_label_467
- nn_dur_1
- nn_norm_dur_1
- nn_no_silence_lab_norm_467
- ref_data
- var
- label_norm_HTS_467.dat
- norm_info_dur_1_MVN.dat
- log
- nnets_model
- feed_forward_6_tanh.model
-
test_synthesis
- gen-lab
- prompt-lab
- test_id_list.scp
- wav
-
database
-
feats
- bap
- lf0
- mgc
-
labels
- label_phone_align
-
prompt-lab
- A11_0.lab
-
wav
- A11_0.wav
-
将一些参数写入到global_setting.cfg中
- MerlinDir
- voice_name
-
Label
- phone_align
- QuestionFIle
-
Vocoder
- WORLD
-
SamplingFreq
- 16000或48000
-
SilencePhone
- sil
- FileIdList
- Train
- Valid
- Test
-
ESTDIR
- tools/speech_tools
-
FESTDIR
- tools/festival
-
FESTVOXDIR
- tools/festvox
-
HTKDIR
- tools/bin/htk
- 训练网络
- 工具集路径
-
02_prepare_labels.sh
- 2.1 复制 database目录下的labels和prompt-lab文件到指定目录
- 2.2 生成文件列表
-
03_prepare_acoustic_features.sh
- 3.1 使用声码器world/extract_features_for_merlin.py抽取声码特征
- 3.2 sp,mgc,ap,bap,f0,lf0复制到acoustic_model/data
-
04_prepare_conf_files.sh
-
复制并修改conf/duration_mandarin_voice.conf
-
修改目录值
- MerlinDir
- WorkDir
- TOPLEVEL
- FileIdList
-
【Labels】
-
修改Label相关的配置项
- silence_pattern:修改为 ['*-sil+*']
- label_type : 修改为phone_align
- label_align:音素对齐文件目录mandarin_voice/duration_model/data/label_phone_align
- question_file_name问题集 : /misc/questions/questions-mandarin.hed
-
【Outputs】
-
输出配置
- state_align
- dur=5
- phone_align
- dur=1
-
【architechture】
- 神经网络的架构配置,如果当前声音文件是demo则修改hidden_layer_size
-
【data】
-
修改训练、验证、测试数据数量
- train_file_number: 200
- valid_file_number: 25
- test_file_number: 25
-
复制并修改conf/acoustic_mandarin_voice.conf
-
【Labels】
- 同duration
-
【architechture】
- 同duration
-
【data】
- 同duration
-
【outputs】
- mgc
- dmgc
- bap
- dbap
- lf0
- dlf0
-
【waveform】
- framelength
- minimum_phase_order
- fw_alpha
-
配置测试(或合成)语音相关的参数
scripts/prepare_config_files_for_synthesis.sh
- 需要配置duration和ascoustic参数。新增了【Processes】
-
05_train_duration_model.sh
-
训练时域模型
-
./scripts/submit.sh merlin/src/run_merlin.py conf/duration_mandarin_voice.conf
-
关键参数
- 【paths】
- 中间目录: inter_data
- 训练集文件名列表: file_id_list
- test_id_list
- 输出的时域特征路径: in_dur_dir
- 【Labels】
- silence_pattern: ['*-sil+*']
- label_type: phone_align
- 对齐标注文件路径label_align: label_phone_align
- 问题集question_file_name: question-mandarin.hed
- add_frame_features: False
- subphone_feats: None
- 【output】
- dur : 1
- 【waveform】
- test_synth_dir : None
- 【architercture】
- 默认使用theano,网络层,学习率,epoch次数等
- 【data】
- 训练集,验证集,测试集数目
- 【Process】
- DurationModel: True
- GenTestList: False
- sub-process
- NORMLAB
- MAKEDUR
- MAKECMP
- NORMCMP
- TRAINDNN
- DNNGEN
- CALCMD
-
06_train_acoustic_model.sh
-
训练声学特征模型
-
./scripts/submit.sh merlin/src/run_merlin.py conf/acoustic_mandarin_voice.conf
-
关键参数
- 【paths】
- 其他的与时域模型一样
- 输出的声学特征路径:
- in_mgc_dir
- in_bap_dir
- in_lf0_dir
- 工具路径: SPTK,straight,world,magphase
- 【Labels】
- 其他的与 时域模型一样
- add_frame_features
- True
- subphone_feats:
- coarse_codinig
- 【output】
- mgc
- 60
- dmgc
- 180
- bap
- 1
- dbap
- 3
- lf0
- 1
- dlf0
- 3
- 【waveform】
- vocoder_type
- WORLD
- samplerate
- 16000
- framelength
- 1024
- fw_alpha
- 0.58
- minimum_phase_order
- 511
- use_cep_ap
- True
- 【architercture】
- 同时域模型
- 【streams】那些特征会输出
- output_features
- [mgc,lf0,vuv,bap]
- gen_wav_features
- [mgc, lf0,bap]
- 【data】
- 同时域模型
- 【Process】
- AcousticModel: True
- GenTestList: False
- sub-process
- NORMLAB
- MAKECMP
- NORMCMP
- TRAINDNN
- DNNGEN
- CALCMD
- GENWAV
-
07_run_merlin.sh
-
主要是main_function函数的执行
-
1 准备
- 读取配置文件
- 日志设置,画图
- 获取训练的相关文件列表,网络隐藏层参数
-
路径
- inter_data_dir
- nn_cmp_dir
- nn_cmp_norm_dir
- model_dir
- gen_dir
- nn_cmp_file_list
- nn_cmp_norm_file_list
- norm_info_file
- file_paths相关的路径
- binary_label_dir
- nn_label_dir
- nn_label_norm_dir
- in_label_align_file_list
- binary_label_file_list
- nn_label_file_list
- nn_label_norm_file_list
- label_norm_file
- test_id_list
-
【可选】标注数据的归一化NORMLAB
- label_normaliser对所有输入的HTS格式的标注文件做归一化
- 如果有其他新的特征,则将新特征合并到上面的HTS标注数据中
- 移除标注文件中所有的静音
-
【可选】数据是否最大最小值归一化MinMaxNormalisation
- 使用MinMaxNormalisation将标注数据归一化
-
【可选】是否输出时域文件MAKEDUR
- 为时域模型准备归一化的数据
-
【可选】是否输出声学文件MAKECMP
- 【可选】是否为测试集生成cmp
- 【可选】dur如果在特征关键词中,需要做对齐
-
移除静音
- 如果定义的是用binary_labels,则使用LabelComposer
- 如果定义的是用hts_labels,则使用SilenceRemover
-
【可选】对cmp数据归一化NORMCMP
-
【可选】是否计算MVN(MeanVarianceNorm)
- 计算训练集上的均值和标准差,并应用于整个数据集
-
【可选】是否计算MINMAX
- 计算整个训练集上的MinMAX
-
【可选】如果没有指定测试集
- 保存数据的归一化信息到文件
- 保存数据所有特征项(mgc,bap等)的全局标准差矩阵到文件
- 使用HTSLabelNormalisation获取标注数据的维度,在训练DNN之前需要知道
-
【可选】是否使用keras或者tensorflow
-
重新设置cfg配置项中的值
- 输入/输出维度
- 输入/输出特征路径
-
【可选】是否使用keras
- run_keras_with_merlin_io
-
【可选】是否使用tensorflow
- run_tensorflow_with_merlin_io
-
【可选】是否训练DNN TRAINDNN
- 载入协方差向量var_dict
- 获取cmp的最小最大值 cmp_min_max,均值和标准差向量
-
训练模型
- 使用keras: keras_instance
- 使用tensorflow: tf_instance
- 默认使用theano: train_DNN
-
【可选】是否从DNN中获取bottleneck特征 GENBNFEA
- 获得bottleneck的特征路径,尺寸
- 准备文件列表
- dnn_hidden_generation
- 从DNN中生成参数
- 【可选】是否生成测试列表 GenTestList
-
【可选】是否从DNN中生成预测结果参数 DNNGEN
- 准备要生成的文件列表
-
【3选1】使用keras
- test_keras_model
-
【3选1】使用tensorflow
- test_tensorflow_model
-
【3选1】使用theano
- dnn_generation
- 获取cmp_min_max
-
输出特征的normalisation方法
- MVN
- MINMAX
-
【可选】是否生成声学模型参数AcousticModel
- ParameterGeneration.acoustic_decomposition()
-
【可选】是否生成时域模型参数DurationModel
- 准备要生成的时域文件列表,标注文件列表,输入标注对齐文件列表
- ParameterGeneration.duration_decomposition()
- 修改标注HTSLabelModification.modify_duration_labels()
-
【可选】是否生成wav GENWAV
- generate_wav
-
【可选】是否生成测试列表 GenTestList
- 准备输入标注对齐文件列表,二进制标注文件列表,文件id列表
-
【可选】是否为时域模型评估MCD,CALMCD & DurationModel
- 准备引用文件ref_data和文件列表
- IndividualDistortionComp
-
移除静音
- 【2选1】remove_silence_using_binary_labels
- 【2选1】SilenceRemover.remove_silence
- 使用InvididualDistortionComp.compute_distortion计算rmse,corr
-
【可选】是否为声学模型计算MCD,CALMCD & AcousticModel
- 准备引用数据ref_data,以及引用的lf0文件列表
-
为各个声码器准备文件列表
- straight或者world
- ref_mgc_list
- ref_bap_list
- magphase
- ref_mag_list
- ref_real_list
- ref_imag_list
- GlottDNN
- ref_lsf_list
- ref_slsf_list
- ref_gain_list
- ref_hnr_list
- pulsemodel
- ref_pdd_list
- IndividualDistortionComp
-
【可选】是否使用二进制标注文件移除静音
- LabelComposer
-
根据in_dimension_dict中声码特征计算失真
- mgc
- bap
- lf0
- mag
- real
- imag
- lsf
- slsf
- hnr
- gain
- pdd
- 1. 移除静音(使用binary_labels或者hts_labels或者其他)
2. 使用IndividualDistortionComp计算失真
- 计算时域模型的rmse,corr
- 计算声码模型失真
-
run_demo.sh
- 简单的普通话语音合成示例,只使用了250句
-
run_mandarin_voice.sh
- 完整版的语音合成示例,使用了THSCH30数据集