import os import sys p = os.path.split(os.path.dirname(os.path.abspath(__file__)))[0] sys.path.append(p) import logging import argparse import pickle import numpy as np import tensorflow as tf from pprint import pformat import matplotlib.pyplot as plt import glob import tensorflow as tf from utils.hparams import HParams from models import get_model from datasets.speech import Dataset from sklearn.manifold import TSNE import seaborn as sns clrs = sns.color_palette("husl", 5) parser = argparse.ArgumentParser() parser.add_argument('--cfg_file', type=str) parser.add_argument('--seed', type=int, default=1234) parser.add_argument('--gpu', type=str, default='0') args = parser.parse_args() params = HParams(args.cfg_file) # modify config params.mask_type = 'det_expand' os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu #np.random.seed(args.seed) #tf.set_random_seed(args.seed) # data testset = Dataset("test", batch_size=100, set_size=200, mask_type=params.mask_type) testset.initialize() # model model = get_model(params) model.load() # run save_dir = f'{params.exp_dir}/evaluate/speech_expansion/' os.makedirs(save_dir, exist_ok=True) log_file = open(f'{save_dir}/log.txt', 'w') def evaluate(batch): sample = model.execute(model.sample, batch) return sample def visualize(input, mask, sample, save_path): #with open(f'{save_path}data.pkl', 'wb') as f: # pickle.dump((batch, sample), f) sample = sample mask = mask input = input expanded = input * mask + sample * (1 - mask) N = sample.shape[0] D = sample.shape[1] C = sample.shape[2] if True: cdict = {1: 'red', 2: 'blue', 3: 'green'} for i in range(N): expanded_embedded = TSNE(n_components=2, learning_rate=100, init='random', perplexity=60).fit_transform(expanded[i]) plt.figure(figsize=(9,9)) plt.tight_layout() idx = np.where(mask[i,:,0]==0) plt.scatter(expanded_embedded[idx, 0], expanded_embedded[idx,1], c = "#1A85FF", label="Synthesized", alpha=0.2) idx = np.where(mask[i,:,0]==1) plt.scatter(expanded_embedded[idx, 0], expanded_embedded[idx,1], c = "#D41159", label="Real") plt.legend(fontsize="20", loc ="upper left") plt.tick_params(left = False, right = False , labelleft = False , labelbottom = False, bottom = False) plt.savefig(f"{save_path}embed_{i}.png", dpi=200) plt.close() if False: D_id_color = {'0': u'orchid', '1': u'darkcyan', '2': u'grey', '3': u'dodgerblue', '4': u'turquoise', '5': u'darkviolet'} sample = sample.reshape(N * D, C) mask = mask.reshape(N * D, C) input = input.reshape(N * D, C) expanded = expanded.reshape(N * D, C) expanded_embedded = TSNE(n_components=2, learning_rate=1, init='random', perplexity=50).fit_transform(expanded) expanded_embedded = expanded_embedded.reshape(N, D, 2) plt.figure(figsize=(10,10)) plt.tight_layout() for i in range(N): plt.scatter(expanded_embedded[i, :, 0], expanded_embedded[i, :,1], c = D_id_color[str(i % 6)]) plt.savefig(f"{save_path}embed.png", dpi=200) plt.close() # test save_path = f'{save_dir}/test/' os.makedirs(save_path, exist_ok=True) samples = [] inputs = [] masks = [] filenames = [] num_sample_step = 20 batch = testset.next_batch() for s in range(num_sample_step): sample = evaluate(batch) samples.append(sample) samples = np.concatenate(samples, axis=1) inputs = np.tile(batch['x'], (1, num_sample_step, 1)) masks = np.tile(batch['b'], (1, num_sample_step, 1)) visualize(inputs, masks, samples, save_path) log_file.close()