def noisy(model_config, dataset): csv_file_name = model_config[ "estimates_path"] + os.path.sep + "noisy" + "_" + dataset + ".csv" with open(csv_file_name, 'w') as csv_file: csv_writer = csv.writer(csv_file, delimiter=',') csv_writer.writerow( ["target_file", "input_file", "pesq", "lsd", "ssnr", "audio_len"]) # Get test set if dataset == "VCTK": _, test = Datasets.get_VCTK( model_config["preprocessed_data_path"] + "/VCTK_8k_DBE", model_config["input"], model_config["target"]) elif dataset == "DAPS": _, test = Datasets.get_DAPS( model_config["preprocessed_data_path"] + "/DAPS_8k_DBE", model_config["input"], model_config["target"]) for sample in test: # Evaluate input_file_name = sample[model_config["input"]] print("Test file " + input_file_name) target_file_name = sample[model_config["target"]] pesq, lsd, ssnr, audio_len = Metrics.Eval( target_file_name, input_file_name, model_config['expected_sr']) csv_writer.writerow([ target_file_name, input_file_name, pesq, lsd, ssnr, audio_len ]) print('PESQ:{:.3f} LSD:{:.3f} SSNR:{:.3f}'.format(pesq, lsd, ssnr)) results_df = pd.read_csv(csv_file_name, usecols=["ssnr", "lsd", "pesq", "audio_len"]) pesq, lsd, ssnr = (results_df[["pesq", "lsd", "ssnr"]].multiply( results_df["audio_len"], axis=0)).sum() / sum(results_df["audio_len"]) print('Results -> PESQ:{:.3f} LSD:{:.3f} SSNR:{:.3f}'.format( pesq, lsd, ssnr))
def evaluate_dataset(model_config, dataset, experiment_id, load_model): ''' For a given input file, saves the prediction made by a given model. :param model_config: Model configuration :param dataset: Dataset to evaluate :param experiment_id: ID of the experiment :param load_model: Model checkpoint path ''' output_path = model_config[ "estimates_path"] + os.path.sep + experiment_id + "_" + dataset csv_file_name = model_config[ "estimates_path"] + os.path.sep + experiment_id + "_" + dataset + ".csv" with open(csv_file_name, 'w') as csv_file: csv_writer = csv.writer(csv_file, delimiter=',') csv_writer.writerow( ["target_file", "output_file", "pesq", "lsd", "ssnr", "audio_len"]) # Get test set if dataset == "VCTK": _, test = Datasets.get_VCTK( model_config["preprocessed_data_path"] + "/VCTK_8k_DBE", model_config["input"], model_config["target"]) elif dataset == "DAPS": _, test = Datasets.get_DAPS( model_config["preprocessed_data_path"] + "/DAPS_8k_DBE", model_config["input"], model_config["target"]) for sample in test: file = sample[model_config["input"]].split("/")[-1] print("Producing estimate for file " + file) track_audio, sr = Utils.load(sample[model_config["input"]], sr=model_config['expected_sr'], mono=True) prediction_audio = predict(track_audio, model_config, load_model) # Get estimate prediction_file_name = os.path.join(output_path, file) + "_prediction.wav" # Save estimate as audio file if not os.path.exists(output_path): os.makedirs(output_path) librosa.output.write_wav(prediction_file_name, prediction_audio, sr) # Evaluate target_file_name = sample[model_config["target"]] pesq, lsd, ssnr, audio_len = Metrics.Eval( target_file_name, prediction_file_name, model_config['expected_sr']) csv_writer.writerow([ target_file_name, prediction_file_name, pesq, lsd, ssnr, audio_len ]) print('PESQ:{:.3f} LSD:{:.3f} SSNR:{:.3f}'.format(pesq, lsd, ssnr)) results_df = pd.read_csv(csv_file_name, usecols=["pesq", "lsd", "ssnr", "audio_len"]) pesq, lsd, ssnr = (results_df[["pesq", "lsd", "ssnr"]].multiply( results_df["audio_len"], axis=0)).sum() / sum(results_df["audio_len"]) print('Results -> PESQ:{:.3f} LSD:{:.3f} SSNR:{:.3f}'.format( pesq, lsd, ssnr))