def test_real_metrics(): _, source = example_file_data_sources_for_acoustic_model() X = FileSourceDataset(source) lengths = [len(x) for x in X] X = X.asarray() mgc = X[:, :, :source.mgc_dim // 3] lf0 = X[:, :, source.lf0_start_idx] vuv = (X[:, :, source.vuv_start_idx] > 0).astype(np.int) bap = X[:, :, source.bap_start_idx] mgc_tgt = mgc + 0.01 lf0_tgt = lf0 + 0.01 vuv_tgt = vuv.copy() bap_tgt = bap + 0.01 mcd = metrics.melcd(mgc, mgc_tgt, lengths) bap_mcd = metrics.melcd(bap, bap_tgt, lengths) lf0_mse = metrics.lf0_mean_squared_error(lf0, vuv, lf0_tgt, vuv_tgt, lengths) vuv_err = metrics.vuv_error(vuv, vuv_tgt) assert mcd > 0 assert bap_mcd > 0 assert lf0_mse > 0 assert vuv_err == 0.0
def test_dtw_frame_length_adjastment(): _, X = example_file_data_sources_for_duration_model() X = FileSourceDataset(X) X_unaligned = X.asarray() # This should trigger frame length adjastment Y_unaligned = np.pad(X_unaligned, [(0, 0), (5, 0), (0, 0)], mode="constant", constant_values=0) Y_unaligned = Y_unaligned[:, :-5, :] for aligner in [DTWAligner(), IterativeDTWAligner( n_iter=1, max_iter_gmm=1, n_components_gmm=1)]: X_aligned, Y_aligned = aligner.transform((X_unaligned, Y_unaligned)) assert X_aligned.shape == Y_aligned.shape
if overwrite: skip_feature_extraction = False if skip_feature_extraction: print("Features seems to be prepared, skipping feature extraction.") sys.exit(0) # Create dirs for speaker, name in [(source_speaker, "X"), (target_speaker, "Y")]: d = join(dst_dir, name) print("Destination dir for {}: {}".format(speaker, d)) if not exists(d): os.makedirs(d) # Convert to arrays print("Convert datasets to arrays") X, Y = X_dataset.asarray(verbose=1), Y_dataset.asarray(verbose=1) # Alignment print("Perform alignment") X, Y = DTWAligner().transform((X, Y)) print("Save features to disk") for idx, (x, y) in tqdm(enumerate(zip(X, Y))): # paths src_name = splitext(basename(X_dataset.collected_files[idx][0]))[0] tgt_name = splitext(basename(Y_dataset.collected_files[idx][0]))[0] src_path = join(dst_dir, "X", src_name) tgt_path = join(dst_dir, "Y", tgt_name) # Trim and ajast frames x = P.trim_zeros_frames(x)