1. main_function
    1. 1 准备
      1. 读取配置文件
      2. 日志设置,画图
      3. 获取训练的相关文件列表,网络隐藏层参数
      4. 路径
        1. inter_data_dir
        2. nn_cmp_dir
        3. nn_cmp_norm_dir
        4. model_dir
        5. gen_dir
        6. nn_cmp_file_list
        7. nn_cmp_norm_file_list
        8. norm_info_file
        9. file_paths相关的路径
          1. binary_label_dir
          2. nn_label_dir
          3. nn_label_norm_dir
          4. in_label_align_file_list
          5. binary_label_file_list
          6. nn_label_file_list
          7. nn_label_norm_file_list
          8. label_norm_file
          9. test_id_list
    2. 2. 【可选】标注数据的归一化NORMLAB
      1. label_normaliser对所有输入的HTS格式的标注文件做归一化
      2. 如果有其他新的特征,则将新特征合并到上面的HTS标注数据中
      3. 移除标注文件中所有的静音
    3. 3. 【可选】数据是否最大最小值归一化MinMaxNormalisation
      1. 使用MinMaxNormalisation将标注数据归一化
    4. 4. 【可选】是否输出时域文件MAKEDUR
      1. 为时域模型准备归一化的数据
    5. 5. 【可选】是否输出声学文件MAKECMP
      1. 【可选】是否为测试集生成cmp
      2. 【可选】dur如果在特征关键词中,需要做对齐
      3. 移除静音
        1. 如果定义的是用binary_labels,则使用LabelComposer
        2. 如果定义的是用hts_labels,则使用SilenceRemover
    6. 6. 【可选】对cmp数据归一化NORMCMP
      1. 【可选】是否计算MVN(MeanVarianceNorm)
        1. 计算训练集上的均值和标准差,并应用于整个数据集
      2. 【可选】是否计算MINMAX
        1. 计算整个训练集上的MinMAX
      3. 【可选】如果没有指定测试集
        1. 保存数据的归一化信息到文件
        2. 保存数据所有特征项(mgc,bap等)的全局标准差矩阵到文件
    7. 7. 使用HTSLabelNormalisation获取标注数据的维度,在训练DNN之前需要知道
    8. 8. 【可选】是否使用keras或者tensorflow
      1. 重新设置cfg配置项中的值
        1. 输入/输出维度
        2. 输入/输出特征路径
    9. 9. 【可选】是否使用keras
      1. run_keras_with_merlin_io
    10. 10. 【可选】是否使用tensorflow
      1. run_tensorflow_with_merlin_io
    11. 11. 【可选】是否训练DNN TRAINDNN
      1. 载入协方差向量var_dict
      2. 获取cmp的最小最大值 cmp_min_max,均值和标准差向量
      3. 训练模型
        1. 使用keras: keras_instance
        2. 使用tensorflow: tf_instance
        3. 默认使用theano: train_DNN
    12. 12. 【可选】是否从DNN中获取bottleneck特征 GENBNFEA
      1. 获得bottleneck的特征路径,尺寸
      2. 准备文件列表
      3. dnn_hidden_generation
    13. 13. 从DNN中生成参数
    14. 14. 【可选】是否生成测试列表 GenTestList
    15. 15.【可选】是否从DNN中生成预测结果参数 DNNGEN
      1. 准备要生成的文件列表
      2. 【3选1】使用keras
        1. test_keras_model
      3. 【3选1】使用tensorflow
        1. test_tensorflow_model
      4. 【3选1】使用theano
        1. dnn_generation
      5. 获取cmp_min_max
      6. 输出特征的normalisation方法
        1. MVN
        2. MINMAX
      7. 【可选】是否生成声学模型参数AcousticModel
        1. ParameterGeneration.acoustic_decomposition()
      8. 【可选】是否生成时域模型参数DurationModel
        1. 准备要生成的时域文件列表,标注文件列表,输入标注对齐文件列表
        2. ParameterGeneration.duration_decomposition()
        3. 修改标注HTSLabelModification.modify_duration_labels()
    16. 16. 【可选】是否生成wav GENWAV
      1. generate_wav
    17. 17. 【可选】是否生成测试列表 GenTestList
      1. 准备输入标注对齐文件列表,二进制标注文件列表,文件id列表
    18. 18. 【可选】是否为时域模型评估MCD,CALMCD & DurationModel
      1. 准备引用文件ref_data和文件列表
      2. IndividualDistortionComp
      3. 移除静音
        1. 【2选1】remove_silence_using_binary_labels
        2. 【2选1】SilenceRemover.remove_silence
      4. 使用InvididualDistortionComp.compute_distortion计算rmse,corr
    19. 19. 【可选】是否为声学模型计算MCD,CALMCD & AcousticModel
      1. 准备引用数据ref_data,以及引用的lf0文件列表
      2. 为各个声码器准备文件列表
        1. straight或者world
          1. ref_mgc_list
          2. ref_bap_list
        2. magphase
          1. ref_mag_list
          2. ref_real_list
          3. ref_imag_list
        3. GlottDNN
          1. ref_lsf_list
          2. ref_slsf_list
          3. ref_gain_list
          4. ref_hnr_list
        4. pulsemodel
          1. ref_pdd_list
      3. IndividualDistortionComp
      4. 【可选】是否使用二进制标注文件移除静音
        1. LabelComposer
      5. 根据in_dimension_dict中声码特征计算失真
        1. mgc
        2. bap
        3. lf0
        4. mag
        5. real
        6. imag
        7. lsf
        8. slsf
        9. hnr
        10. gain
        11. pdd
      6. 1. 移除静音(使用binary_labels或者hts_labels或者其他) 2. 使用IndividualDistortionComp计算失真
    20. 计算时域模型的rmse,corr
    21. 计算声码模型失真
  2. train_DNN
    1. 1. 初始化网络训练的各种超参数
    2. 2. 准备训练集,验证集数据
    3. 3. 当前只支持DNN
      1. 初始化一个DeepRecurrentNetwork 的dnn模型
    4. 4. 如果存在与训练模型
      1. 使用pickle.load 载入模型
      2. 遍历模型所有参数,主要是为了LHUC层,只学习部分参数
    5. 5. 微调模型 build_finetune_functions
    6. 6. epoch中设置学习率,获取训练集批次,训练模型
      1. 此步骤才更新数据
  3. dnn_generation
    1. 1. 载入DNN模型
    2. 2. 读入验证集的标注数据特征
    3. 3. 使用dnn_model.parameter_prediction预测参数
    4. 4. 将预测参数写入cmp文件
  4. dnn_hidden_generation
    1. 1. 载入DNN中间模型文件
    2. 2. 读入验证集的标注数据特征
    3. 3. 使用dnn_model.generate_hidden_layer预测隐藏层的参数
    4. 4. 将预测参数写入cmp文件
  5. perform_acoustic_composition_on_split
    1. 为并行处理声学特征做好准备
  6. perform_acoustic_composition
    1. 并行处理声学特征