def load_augmented_dataset(cfg, dset, augmentation_data_dir, keep_dims=None, standardize=False): save_dir = os.path.join(WORK_DIR, cfg['experiment_name'], cfg['dataset'], 'data_cache') os.makedirs(save_dir, exist_ok=True) save_name = os.path.join(save_dir, get_kaldi_cache_name(cfg, dset)) scaler_name = os.path.join(save_dir, get_kaldi_cache_name(cfg, dset=None).split('.')[0] + '_scaler.pkl') dataset = AugmentedSpeechDataset(cfg=cfg, dset=dset, augmentation_data_dir=augmentation_data_dir, keep_dims=keep_dims) if not os.path.isfile(scaler_name): print('Saving scaler to cache...') if dset == 'train': # Standardizer scaler = StandardScaler(copy=False) mean_ = dataset.feats.mean(0) std_ = dataset.feats.std(0) scaler.mean_ = mean_ scaler.scale_ = std_ with open(scaler_name, 'wb') as f: pickle.dump(scaler, f) if standardize and not os.path.isfile(scaler_name): print('Standardize selected but there is no scaler!') raise FileNotFoundError if standardize: with open(scaler_name, 'rb') as f: scaler = pickle.load(f) dataset.feats = scaler.transform(dataset.feats) return dataset
def load_inverse_mapping_dataset(cfg, dset, augmentation_data_dir, keep_dims=None, cut_silence=True, smooth_first=True, standardize=False): save_dir = os.path.join(WORK_DIR, cfg['experiment_name'], cfg['dataset'], 'data_cache') os.makedirs(save_dir, exist_ok=True) save_name = os.path.join(save_dir, get_kaldi_cache_name(cfg, dset)) feat_scaler_name = os.path.join(save_dir, get_kaldi_cache_name(cfg, dset=None).split('.')[0] + '_scaler.pkl') lab_scaler_name = os.path.join(save_dir, get_kaldi_cache_name(cfg, dset=None).split('.')[0] + '_label_scaler.pkl') if not os.path.isfile(save_name): print('Saving to cache...') dataset = InverseMappingDataset(cfg=cfg, dset=dset, augmentation_data_dir=augmentation_data_dir, keep_dims=keep_dims, cut_silence=cut_silence, smooth_first=smooth_first) if dset == 'train': # Standardizer feat_scaler = StandardScaler() feat_scaler.fit(dataset.feats) lab_scaler = StandardScaler() lab_scaler.fit(dataset.labels) with open(feat_scaler_name, 'wb') as f: pickle.dump(feat_scaler, f) with open(lab_scaler_name, 'wb') as f: pickle.dump(lab_scaler, f) # Save the dataset with open(save_name, 'wb') as f: pickle.dump(dataset, f) else: print('Cache exists...Reading...') with open(save_name, 'rb') as f: dataset = pickle.load(f) if standardize and not os.path.isfile(feat_scaler_name): print('Standardize selected but there is no scaler!') raise FileNotFoundError if standardize: with open(feat_scaler_name, 'rb') as f: feat_scaler = pickle.load(f) with open(lab_scaler_name, 'rb') as f: lab_scaler = pickle.load(f) dataset.feats = feat_scaler.transform(dataset.feats) dataset.labels = lab_scaler.transform(dataset.labels) return dataset
def load_kaldi_dataset(cfg, dset, smooth_first=False, standardize=False): save_dir = os.path.join(WORK_DIR, cfg['experiment_name'], cfg['dataset'], 'data_cache') os.makedirs(save_dir, exist_ok=True) save_name = os.path.join(save_dir, get_kaldi_cache_name(cfg, dset)) scaler_name = os.path.join(save_dir, get_kaldi_cache_name(cfg, dset=None).split('.')[0] + '_scaler.pkl') if smooth_first: save_name += '_smoothed_acoustic' scaler_name += '_smoothed_acoustic' if not os.path.isfile(save_name): print('Saving to cache...') dataset = SpeechDataset(cfg=cfg, dset=dset, smooth_first=smooth_first) if dset == 'train': # Standardizer scaler = StandardScaler() scaler.fit(dataset.feats) with open(scaler_name, 'wb') as f: pickle.dump(scaler, f) # Save the dataset with open(save_name, 'wb') as f: pickle.dump(dataset, f) else: print('Cache exists...Reading...') with open(save_name, 'rb') as f: dataset = pickle.load(f) if standardize and not os.path.isfile(scaler_name): print('Standardize selected but there is no scaler!') raise FileNotFoundError if standardize: with open(scaler_name, 'rb') as f: scaler = pickle.load(f) dataset.feats = scaler.transform(dataset.feats) return dataset
def save_regression_predictions_to_pickle(cfg, dataset, model, file, unscale=True): save_dir = os.path.join(WORK_DIR, cfg['experiment_name'], cfg['dataset'], 'data_cache') lab_scaler_name = os.path.join(save_dir, get_kaldi_cache_name(cfg, dset=None).split('.')[0] + '_label_scaler.pkl') if unscale: with open(lab_scaler_name, 'rb') as f: lab_scaler = pickle.load(f) tosave = {} start_index = 0 dataset.end_indexes[-1] += 1 for i, name in enumerate(dataset.uttids): tmp = model.predict(x=dataset.feats[start_index:dataset.end_indexes[i]]) if unscale: tosave[name] = lab_scaler.inverse_transform(tmp) else: tosave[name] = tmp start_index = dataset.end_indexes[i] with open(file, 'wb') as f: pickle.dump(tosave, f)
def prepare_reconstructed_articulatory(cfg, dset, augmentation_cfg): # LOAD SPEECH DATASET cfg['experiment_name'] = 'asr_per' dataset = load_kaldi_dataset(cfg, dset, smooth_first=True, standardize=True) cfg['experiment_name'] = 'articulatory_asr' task_dirs = get_task_dirs(cfg=augmentation_cfg) # LOAD BEST MODEL AND PREDICT ARTICULATORY print('Predicting articulatory...') model = load_model(task_dirs['model'], custom_objects={'rmse_avg': rmse_avg}) if augmentation_cfg['network_type'] == 'DNN': pred = model.predict(x=dataset.feats) elif augmentation_cfg['network_type'] == 'LSTM': pred = lstm_regression_results(cfg=augmentation_cfg, feats=dataset.feats, model=model) elif augmentation_cfg['network_type'] == 'CNN': feats = prepare_cnn_input(cfg=augmentation_cfg, feats=dataset.feats) pred = model.predict(x=feats) else: raise NotImplementedError # DENORMALIZE RECONSTRUCTED ARTICULATORY save_dir = os.path.join(WORK_DIR, augmentation_cfg['experiment_name'], augmentation_cfg['dataset'], 'data_cache') lab_scaler_name = os.path.join(save_dir, get_kaldi_cache_name(augmentation_cfg, dset=None).split('.')[ 0] + '_label_scaler.pkl') with open(lab_scaler_name, 'rb') as f: lab_scaler = pickle.load(f) rec = lab_scaler.inverse_transform(pred) # SAVE RECONSTRUCTED ARTICULATORY TO PICKLE BY UTTERANCE print('Saving articulatory to kaldi_format...') art_path = os.path.join(WORK_DIR, cfg['experiment_name'], cfg['dataset'], 'data_cache', 'articulatory') save_file_path = os.path.join(art_path, dset + '_' + augmentation_cfg['network_type'] + '_reconstructed_articulatory.ark') if not os.path.exists(art_path): os.makedirs(art_path, exist_ok=True) save_file = kaldi_io.open_or_fd(save_file_path, 'wb') start_index = 0 dataset.end_indexes[-1] += 1 for i, name in enumerate(dataset.uttids): out = rec[start_index:dataset.end_indexes[i]] start_index = dataset.end_indexes[i] kaldi_io.write_mat(save_file, out, dataset.uttids[i])
def __init__(self, cfg, dset): self.cfg = cfg self.readdir = os.path.join(MNGU0_LSF_DIR) save_dir = os.path.join(WORK_DIR, cfg['experiment_name'], cfg['dataset'], 'data_cache') os.makedirs(save_dir, exist_ok=True) save_name = os.path.join(save_dir, get_kaldi_cache_name(cfg, dset)) if not os.path.isfile(save_name): self.feats = np.loadtxt( os.path.join(self.readdir, 'lsf_norm', dset, dset + '.txt')) self.labels = np.loadtxt( os.path.join(self.readdir, 'ema_norm_traj', dset, dset + '.txt')) self.feats = 4 * self.feats self.labels = 4 * self.labels # Save the dataset with open(save_name, 'wb') as f: pickle.dump((self.feats, self.labels), f) else: print('Cache exists...Reading...') with open(save_name, 'rb') as f: self.feats, self.labels = pickle.load(f)