def test(): args = cmd.args() if args.load_generated_images: print ("Loading images...") input_images, target_images, generated_images, names = load_generated_images(args.generated_images_dir) else: print ("Generate images...") from keras import backend as K if args.use_dropout_test: K.set_learning_phase(1) dataset = PoseHMDataset(test_phase=True, **vars(args)) generator = make_generator(args.image_size, args.use_input_pose, args.warp_skip, args.disc_type, args.warp_agg, args.use_bg, args.pose_rep_type) assert (args.generator_checkpoint is not None) generator.load_weights(args.generator_checkpoint) input_images, target_images, generated_images, names = generate_images(dataset, generator, args.use_input_pose) print ("Save images to %s..." % (args.generated_images_dir, )) save_images(input_images, target_images, generated_images, names, args.generated_images_dir) print ("Compute inception score...") inception_score = get_inception_score(generated_images) print ("Inception score %s" % inception_score[0]) print ("Compute structured similarity score (SSIM)...") structured_score = ssim_score(generated_images, target_images) print ("SSIM score %s" % structured_score) print ("Compute l1 score...") norm_score = l1_score(generated_images, target_images) print ("L1 score %s" % norm_score) print ("Compute masked inception score...") generated_images_masked = create_masked_image(names, generated_images, args.annotations_file_test) reference_images_masked = create_masked_image(names, target_images, args.annotations_file_test) inception_score_masked = get_inception_score(generated_images_masked) print ("Inception score masked %s" % inception_score_masked[0]) print ("Compute masked SSIM...") structured_score_masked = ssim_score(generated_images_masked, reference_images_masked) print ("SSIM score masked %s" % structured_score_masked) print ("Inception score = %s, masked = %s; SSIM score = %s, masked = %s; l1 score = %s" % (inception_score, inception_score_masked, structured_score, structured_score_masked, norm_score))
def compute_scores(epoch, image_shape, generator, dataset, images_inception=50000, images_fid=10000, log_file=None, cache_file='mnist_fid.npz', additional_info=""): compute_inception = images_inception != 0 compute_fid = images_fid != 0 number_of_images = max(images_inception, images_fid) if not (compute_inception or compute_fid): return images = np.empty((number_of_images, ) + image_shape) labels = np.empty((number_of_images, )) generator_input = generator.get_input_at(0) if type(generator_input) != list: generator_input = [generator_input] predict_fn = K.function(generator_input + [K.learning_phase()], [generator.get_output_at(0)]) bs = dataset._batch_size conditional = False for begin in tqdm(range(0, number_of_images, bs)): end = min(number_of_images, begin + bs) n_images = end - begin g_s = dataset.next_generator_sample_test() if len(g_s) == 2: labels[begin:end] = np.squeeze(g_s[1], axis=1)[:n_images] conditional = True images[begin:end] = predict_fn(g_s + [False])[0][:n_images] images *= 127.5 images += 127.5 def to_rgb(array): if array.shape[-1] != 3: #hack for grayscale mnist return np.concatenate([array, array, array], axis=-1) else: return array #save_images('baseline_16', to_rgb(images), labels) draw_grid(os.path.join(os.path.dirname(log_file), "epoch_%s_imagegrid.png" % epoch), to_rgb(images), labels if conditional else None) if compute_inception: str = "INCEPTION SCORE: %s, %s" % get_inception_score(to_rgb(images[:images_inception])) print (str) if log_file is not None: with open(log_file, 'a') as f: print >>f, ("Epoch %s " % (epoch, )) + str #+ " " + additional_info if compute_fid: true_images = 127.5 * dataset._X_test + 127.5 str = "FID SCORE: %s" % calculate_fid_given_arrays([to_rgb(true_images)[:images_fid], to_rgb(images)[:images_fid]], cache_file=cache_file) print (str) if log_file is not None: with open(log_file, 'a') as f: print >>f, ("Epoch %s " % (epoch, )) + str #+ " " + additional_info
def compute_scores(epoch, image_shape, generator, dataset, number_of_images=50000, compute_inception=True, compute_fid=True, log_file=None, cache_file='mnist_fid.npz', additional_info=""): if not (compute_inception or compute_fid): return images = np.empty((number_of_images, ) + image_shape) generator_input = generator.get_input_at(0) if type(generator_input) != list: generator_input = [generator_input] generator_output = generator.get_output_at(0) if type(generator_output) != list: generator_output = [generator_output] predict_fn = K.function(generator_input + [K.learning_phase()], [generator_output[0]]) for begin in tqdm(range(0, number_of_images, dataset._batch_size)): end = min(number_of_images, begin + dataset._batch_size) n_images = end - begin g_s = dataset.next_generator_sample_test() images[begin:end] = predict_fn(g_s + [False])[0][:n_images] images *= 127.5 images += 127.5 def to_rgb(array): if array.shape[-1] != 3: #hack for grayscale mnist return np.concatenate([array, array, array], axis=-1) else: return array if compute_inception: str = "INCEPTION SCORE: %s, %s" % get_inception_score(to_rgb(images)) print (str) if log_file is not None: with open(log_file, 'a') as f: print >>f, ("Epoch %s " % (epoch, )) + str + " " + additional_info if compute_fid: true_images = 127.5 * dataset._X_test + 127.5 str = "FID SCORE: %s" % calculate_fid_given_arrays([to_rgb(true_images)[:number_of_images], to_rgb(images)[:number_of_images]], cache_file=cache_file) print (str) if log_file is not None: with open(log_file, 'a') as f: print >>f, ("Epoch %s " % (epoch, )) + str + " " + additional_info
def test(): args = cmd.args() if args.load_generated_images: print("Loading images...") input_images, target_images, generated_images, names = load_generated_images( args.generated_images_dir) else: print("Generate images...") from keras import backend as K if args.use_dropout_test: K.set_learning_phase(1) dataset = PoseHMDataset(test_phase=True, **vars(args)) generator = make_generator(args.image_size, args.use_input_pose, args.warp_skip, args.disc_type, args.warp_agg) assert (args.generator_checkpoint is not None) generator.load_weights(args.generator_checkpoint) input_images, target_images, generated_images, names = generate_images( dataset, generator, args.use_input_pose) print("Save images to %s..." % (args.generated_images_dir, )) save_images(input_images, target_images, generated_images, names, args.generated_images_dir) if args.is_test_real_data: generated_images = target_images print('Compute FID score') fid = FID_score() fid_score = fid.calculate_fid_images(generated_images, target_images) print("FID score %s" % fid_score) print("Compute inception score...") inception_score = get_inception_score(generated_images) print("Inception score %s" % inception_score[0]) print("Compute structured similarity score (SSIM)...") structured_score = ssim_score(generated_images, target_images) print("SSIM score %s" % structured_score) print("Compute l1 score...") norm_score = l1_score(generated_images, target_images) print("L1 score %s" % norm_score)
def test(): args = cmd.args() if args.load_generated_images: print("Loading images...") input_images, target_images, generated_images, names = load_generated_images( args.generated_images_dir) else: print("Generate images...") from keras import backend as K if args.use_dropout_test: K.set_learning_phase(1) dataset = PoseHMDataset(test_phase=True, **vars(args)) generator = make_generator(args.image_size, args.use_input_pose, args.warp_agg, args.num_landmarks, args.num_mask) assert (args.generator_checkpoint is not None) generator.load_weights(args.generator_checkpoint) input_images, pose_inp_array, out_pose, pose_out_array, inp_pose, target_images, generated_images, names = generate_images( dataset, generator, args.use_input_pose) print("Save images to %s..." % (args.generated_images_dir, )) save_images(input_images, pose_inp_array, out_pose, pose_out_array, inp_pose, target_images, generated_images, names, args.generated_images_dir) print("Compute inception score...") inception_score = get_inception_score(generated_images) print("Inception score %s" % inception_score[0]) # print ("Compute Frechet distance...") # fid.create_inception_graph('/tmp/imagenet/classify_image_graph_def.pb') # load the graph into the current TF graph # with tf.Session() as sess: # sess.run(tf.global_variables_initializer()) # mu_gen, sigma_gen = fid.calculate_activation_statistics(generated_images, sess, batch_size=100) # mu_real, sigma_real = fid.calculate_activation_statistics(target_images, sess, batch_size=100) # # fid_value = fid.calculate_frechet_distance(mu_gen, sigma_gen, mu_real, sigma_real) # print ("Frechet distance %s" % fid_value) print("Compute structured similarity score (SSIM)...") structured_score = ssim_score(generated_images, target_images) print("SSIM score %s" % structured_score) print("Compute l1 score...") norm_score = l1_score(generated_images, target_images) print("L1 score %s" % norm_score) print("Compute masked inception score...") generated_images_masked = create_masked_image(names, generated_images, args.annotations_file_test) reference_images_masked = create_masked_image(names, target_images, args.annotations_file_test) inception_score_masked = get_inception_score(generated_images_masked) print("Inception score masked %s" % inception_score_masked[0]) # print ("Compute masked Frechet distance...") # fid.create_inception_graph('/tmp/imagenet/classify_image_graph_def.pb') # load the graph into the current TF graph # with tf.Session() as sess: # sess.run(tf.global_variables_initializer()) # mu_gen, sigma_gen = fid.calculate_activation_statistics(generated_images_masked, sess, batch_size=100) # mu_real, sigma_real = fid.calculate_activation_statistics(reference_images_masked, sess, batch_size=100) # # fid_value = fid.calculate_frechet_distance(mu_gen, sigma_gen, mu_real, sigma_real) # print("Frechet distance masked %s" % fid_value) print("Compute masked SSIM...") structured_score_masked = ssim_score(generated_images_masked, reference_images_masked) print("SSIM score masked %s" % structured_score_masked) print( "Inception score = %s, masked = %s; SSIM score = %s, masked = %s; l1 score = %s" % (inception_score, inception_score_masked, structured_score, structured_score_masked, norm_score))