コード例 #1
0
 def __init__(self):
     self.latents = torch.from_numpy(np.random.randn(1, G.latent_size)).to(device=device, dtype=torch.float32)
     self.feature_direction = feature_direction
     self.feature_lock_status = np.zeros(num_feature).astype('bool')
     self.feature_directoion_disentangled = torch.from_numpy(feature_axis.disentangle_feature_axis_by_idx(
         self.feature_direction, idx_base=np.flatnonzero(self.feature_lock_status))).to(device=device,
                                                                                        dtype=torch.float32)
コード例 #2
0
 def set_feature_lock(self, event, idx_feature, set_to=None):
     if set_to is None:
         self.feature_lock_status[idx_feature] = np.logical_not(self.feature_lock_status[idx_feature])
     else:
         self.feature_lock_status[idx_feature] = set_to
     self.feature_directoion_disentangled = feature_axis.disentangle_feature_axis_by_idx(
         self.feature_direction, idx_base=np.flatnonzero(self.feature_lock_status))
コード例 #3
0
def load_tl_gan_model():
    """
    Load the linear model (matrix) which maps the feature space
    to the GAN's latent space.
    """
    with open(FEATURE_DIRECTION_FILE, "rb") as f:
        feature_direction_name = pickle.load(f)

    # Pick apart the feature_direction_name data structure.
    feature_direction = feature_direction_name["direction"]
    feature_names = feature_direction_name["name"]
    num_feature = feature_direction.shape[1]
    feature_lock_status = np.zeros(num_feature).astype("bool")

    # Rearrange feature directions using Shaobo's library function.
    feature_direction_disentangled = feature_axis.disentangle_feature_axis_by_idx(
        feature_direction, idx_base=np.flatnonzero(feature_lock_status))
    return feature_direction_disentangled, feature_names
コード例 #4
0
""" save_regression result to hard disk """
if not os.path.exists(path_feature_direction):
    os.mkdir(path_feature_direction)

pathfile_feature_direction = os.path.join(
    path_feature_direction, 'feature_direction_{}.pkl'.format(gen_time_str()))
dict_to_save = {'direction': feature_direction, 'name': y_name}
with open(pathfile_feature_direction, 'wb') as f:
    pickle.dump(dict_to_save, f)

##
""" disentangle correlated feature axis """
pathfile_feature_direction = glob.glob(
    os.path.join(path_feature_direction, 'feature_direction_*.pkl'))[-1]

with open(pathfile_feature_direction, 'rb') as f:
    feature_direction_name = pickle.load(f)

feature_direction = feature_direction_name['direction']
feature_name = np.array(feature_direction_name['name'])

len_z, len_y = feature_direction.shape

feature_direction_disentangled = feature_axis.disentangle_feature_axis_by_idx(
    feature_direction, idx_base=range(len_y // 4), idx_target=None)

feature_axis.plot_feature_cos_sim(feature_direction_disentangled,
                                  feature_name=feature_name)

##
コード例 #5
0
    with torch.no_grad():
        images = G(latents, labels=labels)
    return torch.from_numpy(
        np.clip((images.permute(0, 2, 3, 1).numpy() + 1.0) / 2.0, a_min=0.0, a_max=1.0))


# img_cur = gen_image(latents)

batch_size = 10

step_size = 0.2

counter = 0

feature_lock_status = np.zeros(num_feature).astype('bool')
feature_directoion_disentangled = feature_axis.disentangle_feature_axis_by_idx(
    feature_direction, idx_base=np.flatnonzero(feature_lock_status))

for i_feature in range(feature_direction.shape[1]):
    latents_0 = latents_c - feature_directoion_disentangled[:, i_feature] * step_size
    latents_1 = latents_c + feature_directoion_disentangled[:, i_feature] * step_size

    print(np.mean(latents_0 - latents_1) ** 2)

    latents = np.zeros([batch_size, latent_size])

    for i_alpha, alpha in enumerate(np.linspace(0, 1, batch_size)):
        latents[i_alpha, :] = latents_0[0] * (1 - alpha) + latents_1[0] * alpha

    latents = torch.from_numpy(latents).to(device=device, dtype=torch.float32)
    # Generate dummy labels (not used by the official networks).
    labels = None