def embedding_computation_loop(split, set_loader, stat_file): """Extracts embeddings for a given dataset loader """ # Extract embeddings (skip if already done) if not os.path.isfile(stat_file): logger.debug("Extracting deep embeddings and diarizing") embeddings = np.empty(shape=[0, params["emb_dim"]], dtype=np.float64) modelset = [] segset = [] # Different data may have different statistics params["mean_var_norm_emb"].count = 0 for batch in set_loader: # t: ids = batch.id wavs, lens = batch.sig mod = [x for x in ids] seg = [x for x in ids] modelset = modelset + mod segset = segset + seg # Embedding computation emb = ( compute_embeddings(wavs, lens) .contiguous() .squeeze(1) .cpu() .numpy() ) embeddings = np.concatenate((embeddings, emb), axis=0) modelset = np.array(modelset, dtype="|O") segset = np.array(segset, dtype="|O") # Intialize variables for start, stop and stat0 s = np.array([None] * embeddings.shape[0]) b = np.array([[1.0]] * embeddings.shape[0]) stat_obj = StatObject_SB( modelset=modelset, segset=segset, start=s, stop=s, stat0=b, stat1=embeddings, ) logger.debug("Saving Embeddings...") stat_obj.save_stat_object(stat_file) else: logger.debug("Skipping embedding extraction (as already present)") logger.debug("Loading previously saved embeddings") with open(stat_file, "rb") as in_file: stat_obj = pickle.load(in_file) return stat_obj
def emb_computation_loop(split, set_loader, stat_file): """Computes the embeddings and saves the in a stat file""" # Extract embeddings (skip if already done) if not os.path.isfile(stat_file): embeddings = numpy.empty(shape=[0, params["emb_dim"]], dtype=numpy.float64) modelset = [] segset = [] with tqdm(set_loader, dynamic_ncols=True) as t: for batch in t: ids = batch.id wavs, lens = batch.sig mod = [x for x in ids] seg = [x for x in ids] modelset = modelset + mod segset = segset + seg # Enrolment and test embeddings embs = compute_embeddings(wavs, lens) xv = embs.squeeze().cpu().numpy() embeddings = numpy.concatenate((embeddings, xv), axis=0) modelset = numpy.array(modelset, dtype="|O") segset = numpy.array(segset, dtype="|O") # Intialize variables for start, stop and stat0 s = numpy.array([None] * embeddings.shape[0]) b = numpy.array([[1.0]] * embeddings.shape[0]) # Stat object (used to collect embeddings) stat_obj = StatObject_SB( modelset=modelset, segset=segset, start=s, stop=s, stat0=b, stat1=embeddings, ) logger.info(f"Saving stat obj for {split}") stat_obj.save_stat_object(stat_file) else: logger.info(f"Skipping embedding Extraction for {split}") logger.info(f"Loading previously saved stat_object for {split}") with open(stat_file, "rb") as input: stat_obj = pickle.load(input) return stat_obj
emb = compute_embeddings(wav, lens) xv = emb.squeeze(1).cpu().numpy() embeddings = numpy.concatenate((embeddings, xv), axis=0) # Speaker IDs and utterance IDs modelset = numpy.array(modelset, dtype="|O") segset = numpy.array(segset, dtype="|O") # Intialize variables for start, stop and stat0 s = numpy.array([None] * embeddings.shape[0]) b = numpy.array([[1.0]] * embeddings.shape[0]) embeddings_stat = StatObject_SB( modelset=modelset, segset=segset, start=s, stop=s, stat0=b, stat1=embeddings, ) del embeddings # Save TRAINING embeddings in StatObject_SB object embeddings_stat.save_stat_object(xv_file) else: # Load the saved stat object for train embedding logger.info("Skipping embedding Extraction for training set") logger.info( "Loading previously saved stat_object for train embeddings..") with open(xv_file, "rb") as input: