def adaptation(args): if args.feat_type == 'mfcc': datasetlist = ["energy", "cep", "vad"] mask = "[0-12]" features_folder = '/home/zeng/zeng/aishell/af2019-sr-devset-20190312/feature' if args.feat_type == 'fb': datasetlist = ["fb", "vad"] mask = None features_folder = '/home/zeng/zeng/aishell/af2019-sr-devset-20190312/feature' # create feature server for loading feature from disk feature_server = sidekit.FeaturesServer( features_extractor=None, feature_filename_structure=features_folder + "/{}.h5", sources=None, dataset_list=datasetlist, mask=mask, feat_norm="cmvn", global_cmvn=None, dct_pca=False, dct_pca_config=None, sdc=False, sdc_config=None, delta=True if args.delta else False, double_delta=True if args.delta else False, delta_filter=None, context=None, traps_dct_nb=None, rasta=True, keep_all_features=False) enroll_idmap = sidekit.IdMap(os.getcwd() + '/task/idmap.h5') ndx = sidekit.Ndx(os.getcwd() + '/task/dev_ndx.h5') ubm = sidekit.Mixture() ubm.read(os.getcwd() + '/model/ubm.h5') enroll_stat = sidekit.StatServer(enroll_idmap, distrib_nb=ubm.distrib_nb(), feature_size=ubm.dim()) enroll_stat.accumulate_stat(ubm=ubm, feature_server=feature_server, seg_indices=range(enroll_stat.segset.shape[0]), num_thread=args.num_thread) enroll_stat.write(os.getcwd() + '/task/enroll_stat.h5') print('MAP adaptation', end='') regulation_factor = 16 enroll_sv = enroll_stat.adapt_mean_map_multisession(ubm, regulation_factor) enroll_sv.write(os.getcwd() + '/task/enroll_sv.h5') print('\rMAP adaptation done') print('Compute scores', end='') score = sidekit.gmm_scoring(ubm, enroll_sv, ndx, feature_server, num_thread=args.num_thread) score.write(os.getcwd() + '/task/dev_score.h5') print('\rCompute scores done')
def evaluate(self, explain=True): """ This method is used to evaluate the test set. It does so by" - read the test_ndx file that contains the test set - read the trained UBM model, and trained parameters (enroll_stat file) - evaluate the test set using gmm_scoring and write the scores - if explain=True, write the scores in a more readible way Args: explain (boolean): If True, write another text file that contain the same information as the one within ubm_scores file but in a readible way. """ ############################# READING ############################ # Create Feature server server = self.createFeatureServer() # Read the index for the test datas test_ndx = sidekit.Ndx.read( os.path.join(self.BASE_DIR, "task", "test_ndx.h5")) # Read the UBM model ubm = sidekit.Mixture() model_name = "ubm_{}.h5".format(self.NUM_GAUSSIANS) ubm.read(os.path.join(self.BASE_DIR, "ubm", model_name)) filename = "enroll_stat_{}.h5".format(self.NUM_GAUSSIANS) enroll_stat = sidekit.StatServer.read( os.path.join(self.BASE_DIR, "stat", filename)) # MAP adaptation of enrollment speaker models enroll_sv = enroll_stat.adapt_mean_map_multisession( ubm=ubm, r=3 # MAP regulation factor ) ############################ Evaluating ########################### # Compute scores scores_gmm_ubm = sidekit.gmm_scoring(ubm=ubm, enroll=enroll_sv, ndx=test_ndx, feature_server=server, num_thread=self.NUM_THREADS) # Save the model's Score object filename = "ubm_scores_{}.h5".format(self.NUM_GAUSSIANS) scores_gmm_ubm.write(os.path.join(self.BASE_DIR, "result", filename)) # Explain the Analysis by writing more readible text file if explain: filename = "ubm_scores_{}_explained.txt".format(self.NUM_GAUSSIANS) fout = open(os.path.join(self.BASE_DIR, "result", filename), "a") fout.truncate(0) #clear content modelset = list(scores_gmm_ubm.modelset) segset = list(scores_gmm_ubm.segset) scores = np.array(scores_gmm_ubm.scoremat) for seg_idx, seg in enumerate(segset): fout.write("Wav: {}\n".format(seg)) for speaker_idx, speaker in enumerate(modelset): fout.write("\tSpeaker {}:\t{}\n"\ .format(speaker, scores[speaker_idx, seg_idx])) fout.write("\n") fout.close()
def evaluate(self, explain=True): ############################# READING ############################ # Create Feature server server = self.createFeatureServer() # Read the index for the test datas test_ndx = sidekit.Ndx.read( os.path.join(self.BASE_DIR, "task", "test_ndx.h5")) # Read the UBM model ubm = sidekit.Mixture() model_name = "ubm_{}.h5".format(self.NUM_GUASSIANS) ubm.read(os.path.join(self.BASE_DIR, "ubm", model_name)) ############################ Evaluating ########################### filename = "enroll_stat_{}.h5".format(self.NUM_GUASSIANS) enroll_stat = sidekit.StatServer.read( os.path.join(self.BASE_DIR, "ubm", filename)) # MAP adaptation of enrollment speaker models enroll_sv = enroll_stat.adapt_mean_map_multisession( ubm=ubm, r=3 # MAP regulation factor ) # Compute scores scores_gmm_ubm = sidekit.gmm_scoring(ubm=ubm, enroll=enroll_sv, ndx=test_ndx, feature_server=server, num_thread=self.NUM_THREADS) # Save the model's Score object filename = "ubm_scores_{}.h5".format(self.NUM_GUASSIANS) scores_gmm_ubm.write(os.path.join(self.BASE_DIR, "result", filename)) #write Analysis if explain: filename = "ubm_scores_explained_{}.txt".format(self.NUM_GUASSIANS) fout = open(os.path.join(self.BASE_DIR, "result", filename), "a") fout.truncate(0) #clear content modelset = list(scores_gmm_ubm.modelset) segset = list(scores_gmm_ubm.segset) scores = np.array(scores_gmm_ubm.scoremat) for seg_idx, seg in enumerate(segset): fout.write("Wav: {}\n".format(seg)) for speaker_idx, speaker in enumerate(modelset): fout.write("\tSpeaker {}:\t{}\n".format( speaker, scores[speaker_idx, seg_idx])) fout.write("\n") fout.close()
num_thread=nbThread) enroll_stat.write('data/stat_rsr2015_male_enroll.h5') # Adapt the GMM speaker models from the UBM via a MAP adaptation print('MAP adaptation of the speaker models') regulation_factor = 3 # MAP regulation factor enroll_sv = enroll_stat.adapt_mean_map_multisession(ubm, regulation_factor) enroll_sv.write('data/sv_rsr2015_male_enroll.h5') # Compute all trials and save scores in HDF5 format print('Compute trial scores') scores_gmm_ubm = sidekit.gmm_scoring(ubm, enroll_sv, test_ndx, features_server, num_thread=nbThread) scores_gmm_ubm.write('scores/scores_gmm-ubm_rsr2015_male.h5') # Plot DET curve and compute minDCF and EER print('Plot the DET curve') # Set the prior following NIST-SRE 2008 settings prior = sidekit.logit_effective_prior(0.01, 10, 1) # Initialize the DET plot to 2008 settings dp = sidekit.DetPlot(window_style='sre10', plot_title='GMM-UBM_RSR2015_male') dp.set_system_from_scores(scores_gmm_ubm, key, sys_name='GMM-UBM') dp.create_figure() dp.plot_rocch_det(0)