Пример #1
0
    def reset_ep(self):
        if hasattr(self.args, 'vae_dist_help') and self.args.vae_dist_help:
            obs = self.env.env._get_obs()
            if self.args.vae_type == 'monet' or self.args.vae_type == 'space' or self.args.vae_type == 'bbox' or self.args.vae_type == 'faster_rcnn':
                self.goals_img_env.env._move_object(
                    position=obs['desired_goal'].copy())
                desired_goal_image = take_image_objects(
                    self,
                    self.args.img_size,
                    direct_env=self.goals_img_env.env)
                achieved_goal_image = take_image_objects(
                    self, self.args.img_size)
                if self.args.vae_type == 'space' or self.args.vae_type == 'bbox' or self.args.vae_type == 'faster_rcnn':
                    lg, lg_s, lo, lo_s = latents_from_images(
                        np.array([desired_goal_image, achieved_goal_image]),
                        self.args)
                    self.desired_goal_latent = lg[0].copy()
                    self.desired_goal_size_latent = lg_s[0].copy()
                    self.achieved_goal_size_latent = lg_s[1].copy()
                    self.achieved_goal_latent = lg[1].copy()
                    self.obstacle_latent = lo[1].copy()
                    self.obstacle_size_latent = lo_s[1].copy()
                else:
                    lg, lo, lo_s = latents_from_images(
                        np.array([desired_goal_image, achieved_goal_image]),
                        self.args)
                    self.desired_goal_latent = lg[0].copy()
                    self.achieved_goal_latent = lg[1].copy()
                    self.obstacle_latent = lo[1].copy()
                    self.obstacle_size_latent = lo_s[1].copy()

            else:
                self.goals_img_env.env._move_object(
                    position=obs['desired_goal'].copy())
                desired_goal_image = take_goal_image(
                    self,
                    self.args.img_size,
                    direct_env=self.goals_img_env.env)
                achieved_goal_image = take_goal_image(self, self.args.img_size)
                latents = goal_latent_from_images(
                    np.array([desired_goal_image, achieved_goal_image]),
                    self.args)
                self.desired_goal_latent = latents[0].copy()
                self.achieved_goal_latent = latents[1].copy()
                #self.achieved_goal_image = achieved_goal_image.copy()

                obstacle_image = take_obstacle_image(self, self.args.img_size)
                latents_obstacle, latents_o_size = obstacle_latent_from_images(
                    np.array([obstacle_image]), self.args)
                self.obstacle_latent = latents_obstacle[0].copy()
                self.obstacle_size_latent = latents_o_size[0].copy()

        self.rewards = 0.0
Пример #2
0
    def goal(self, value):
        self.env.env.goal = value.copy()
        if hasattr(self.args, 'vae_dist_help') and self.args.vae_dist_help:
            obs = self.env.env._get_obs()
            if self.args.vae_type == 'monet' or self.args.vae_type == 'space' or self.args.vae_type == 'bbox' or self.args.vae_type == 'faster_rcnn':
                self.goals_img_env.env._move_object(position=value.copy())
                desired_goal_image = take_goal_image(
                    self,
                    self.args.img_size,
                    direct_env=self.goals_img_env.env)
                '''obs_during = self.env.env._get_obs()  # just to see if set correctly
				im = Image.fromarray(desired_goal_image.copy().astype(np.uint8))
				im.save('it_is_there.png')'''
                if self.args.vae_type == 'space' or self.args.vae_type == 'bbox' or self.args.vae_type == 'faster_rcnn':
                    lg, lg_s, lo, lo_s = latents_from_images(
                        np.array([desired_goal_image]), self.args)
                    '''try:
						assert lg[0][0] != 100.
					except:
						im = Image.fromarray(desired_goal_image.copy().astype(np.uint8))
						im.save('failed_on_this.png')
						print('failed!!!')
						print("these are the coordinates: {}".format(value))
						object_qpos = self.env.env.sim.data.get_joint_qpos('object0:joint')
						assert object_qpos.shape == (7,)
						print('q_pos: {}'.format(object_qpos))
						v_rgba = self.env.env._get_visibility_rgba('object0')
						print('visibility rgba is: {}'.format(v_rgba))

						im = Image.fromarray(take_image_objects(self, self.args.img_size).copy().astype(np.uint8))
						im.save('failed_on_this_take2.png')'''
                    self.desired_goal_size_latent = lg_s[0].copy()
                else:
                    lg, lo, lo_s = latents_from_images(
                        np.array([desired_goal_image]), self.args)
                #reset agent to orginal position
                self.env.env._move_object(position=obs['achieved_goal'].copy())
                '''obs_after = self.env.env._get_obs()#just to see if resert correctly
				im = Image.fromarray(take_image_objects(self, self.args.img_size).copy().astype(np.uint8))
				im.save('it_is_back.png')'''
                #store latent in variable
                self.desired_goal_latent = lg[0].copy()
            else:
                self.goals_img_env.env._move_object(position=value.copy())
                desired_goal_image = take_goal_image(
                    self,
                    self.args.img_size,
                    direct_env=self.goals_img_env.env)
                self.env.env._move_object(position=obs['achieved_goal'].copy())
                latents = goal_latent_from_images(
                    np.array([desired_goal_image]), self.args)
                self.desired_goal_latent = latents[0].copy()
Пример #3
0
def save_center(env, size_to_use, file_corners, img_size, enc_type):
    points = generate_points(range_x=range_x,
                             range_y=range_y,
                             z=z_table_height,
                             total=3,
                             object_x_y_size=[size_to_use, size_to_use])

    # sample images
    data_set = np.empty([1, img_size, img_size, 3])
    # move other objects to plaecs they do not disturb
    if enc_type == 'goal' or (args.enc_type == 'mixed'
                              and args.mix_h == 'goal'):
        env.env.env._set_position(names_list=['obstacle'],
                                  position=[2., 2., 0.4])
    elif enc_type == 'obstacle' or (args.enc_type == 'mixed'
                                    and args.mix_h == 'obstacle'):
        env.env.env._move_object(position=[2., 2., 0.4])
    else:
        raise Exception('Not supported enc_type')

    if enc_type == 'goal' or (args.enc_type == 'mixed'
                              and args.mix_h == 'goal'):
        env.env.env._move_object(position=points[4])
        data_set[0] = take_goal_image(env,
                                      img_size,
                                      make_table_invisible=False)
    elif enc_type == 'obstacle' or (args.enc_type == 'mixed'
                                    and args.mix_h == 'obstacle'):
        env.env.env._set_position(names_list=['obstacle'], position=points[4])
        data_set[0] = take_obstacle_image(env, img_size)
    else:
        raise Exception('Not supported enc_type')
    np.save(file_corners, data_set)
Пример #4
0
def save_corners(env, size_to_use, file_corners, img_size, enc_type):
    points = generate_points(range_x=range_x,
                             range_y=range_y,
                             z=z_table_height,
                             total=2,
                             object_x_y_size=[size_to_use, size_to_use])

    # sample images
    data_set = np.empty([len(points), img_size, img_size, 3])
    # move other objects to plaecs they do not disturb
    if enc_type == 'goal' or (args.enc_type == 'mixed'
                              and args.mix_h == 'goal'):
        env.env.env._set_position(names_list=['obstacle'],
                                  position=[2., 2., 0.4])
    elif enc_type == 'obstacle' or (args.enc_type == 'mixed'
                                    and args.mix_h == 'obstacle'):
        env.env.env._move_object(position=[2., 2., 0.4])
    else:
        raise Exception('Not supported enc_type')
    for i, p in enumerate(points):
        if enc_type == 'goal' or (args.enc_type == 'mixed'
                                  and args.mix_h == 'goal'):
            env.env.env._move_object(position=p)
            data_set[i] = take_goal_image(env, img_size)
        elif enc_type == 'obstacle' or (args.enc_type == 'mixed'
                                        and args.mix_h == 'obstacle'):
            env.env.env._set_position(names_list=['obstacle'], position=p)
            data_set[i] = take_obstacle_image(env, img_size)
        else:
            raise Exception('Not supported enc_type')
    np.save(file_corners, data_set)
    all_array = None
    t = 0
    for r in range(len(points)):
        rcim = data_set[t].copy()
        t += 1
        if all_array is None:
            all_array = rcim
        else:
            all_array = np.concatenate([all_array.copy(), rcim], axis=1)
    all_ims = Image.fromarray(all_array.astype(np.uint8))
    all_ims.show()
    all_ims.close()
Пример #5
0
    def step(self, action):
        # imaginary infinity horizon (without done signal)
        obs, reward, done, info = self.env.step(action)
        if hasattr(self.args, 'vae_dist_help') and self.args.vae_dist_help:
            if self.args.vae_type == 'monet' or self.args.vae_type == 'space' or self.args.vae_type == 'bbox' or self.args.vae_type == 'faster_rcnn':
                achieved_image = take_image_objects(self, self.args.img_size)
                if self.args.vae_type == 'space' or self.args.vae_type == 'bbox' or self.args.vae_type == 'faster_rcnn':
                    lg, lg_s, lo, lo_s = latents_from_images(
                        np.array([achieved_image]), self.args)
                    self.achieved_goal_size_latent = lg_s[0].copy()
                else:
                    lg, lo, lo_s = latents_from_images(
                        np.array([achieved_image]), self.args)
                self.achieved_goal_latent = lg[0].copy()
                self.obstacle_latent = lo[0].copy()

                self.obstacle_size_latent = lo_s[0].copy()
            else:
                achieved_goal_image = take_goal_image(self, self.args.img_size)
                latents_goal = goal_latent_from_images(
                    np.array([achieved_goal_image]), self.args)
                self.achieved_goal_latent = latents_goal[0].copy()

                obstacle_image = take_obstacle_image(self, self.args.img_size)
                latents_obstacle, latents_o_size = obstacle_latent_from_images(
                    np.array([obstacle_image]), self.args)
                self.obstacle_latent = latents_obstacle[0].copy()
                self.obstacle_size_latent = latents_o_size[0].copy()
                #self.achieved_goal_image = achieved_goal_image.copy()

        obs = self.get_obs()

        #The order is important, since a children class migth have a reward dependant from modification in obs
        info = self.process_info(obs, reward, info)
        #for compatibility passing last obs but actually none of the used reward functions use it
        reward = self.compute_reward(obs, self.last_obs, obs['desired_goal'])

        self.last_obs = obs.copy()
        return obs.copy(), reward, False, info
Пример #6
0
def traversal(env,
              model,
              img_size,
              latent_size,
              n,
              enc_type,
              using_sb=True,
              fig_file_name=None):
    cuda = torch.cuda.is_available()
    torch.manual_seed(1)
    device = torch.device("cuda" if cuda else "cpu")
    dist = 0.8

    data_set = np.empty([n * latent_size, img_size, img_size, 3])
    # move other objects to plaecs they do not disturb
    if enc_type == 'goal' or (args.enc_type == 'mixed'
                              and args.mix_h == 'goal'):
        env.env.env._set_position(names_list=['obstacle'],
                                  position=[2., 2., 0.4])
    elif enc_type == 'obstacle' or (args.enc_type == 'mixed'
                                    and args.mix_h == 'obstacle'):
        env.env.env._move_object(position=[2., 2., 0.4])
    elif enc_type == 'all':
        env.env.env._set_position(names_list=['obstacle'],
                                  position=[10., 10., 10.])
        env.env.env._move_object(position=[-10., -10., -10.])
        obj = 'cube'
        p1 = np.array([-20., 20., 20.])
        p2 = np.array([-20., -20., 20.])
        env.env.env._set_position(names_list=['rectangle'], position=p1)
        env.env.env._set_position(names_list=['cylinder'], position=p2)
        s = 0.06
        env.env.env._set_size(names_list=['cube'], size=[s, s, s])
        pos = [1.3, 0.75, 0.4 + s]
        env.env.env._set_position(names_list=[obj], position=pos)
    else:
        raise Exception('Not supported enc type')

    # sample image  central
    if enc_type == 'goal' or (args.enc_type == 'mixed'
                              and args.mix_h == 'goal'):
        env.env.env._move_object(position=[1.3, 0.75, 0.4])
        central_im = take_goal_image(env, img_size, make_table_invisible=True)
    elif enc_type == 'obstacle' or (args.enc_type == 'mixed'
                                    and args.mix_h == 'obstacle'):
        env.env.env._set_position(names_list=['obstacle'],
                                  position=[1.3, 0.75, 0.4])
        # env.env.env._set_size(names_list=['obstacle'], size=np.array([0.15, 0.035, 0.]))
        central_im = take_obstacle_image(env, img_size)
    elif enc_type == 'all':
        central_im = take_objects_image_training(env, img_size)
    else:
        raise Exception('Not supported enc type')

    #trasform to latent
    data = np.expand_dims(central_im.copy(), axis=0)
    data = torch.from_numpy(data).float().to(device)
    data /= 255
    data = data.permute([0, 3, 1, 2])
    model.eval()
    if not using_sb:
        mu, logvar = model.encode(data.reshape(-1, img_size * img_size * 3))
    else:
        mu, logvar = model.encode(data)

    mid = int(n / 2)
    for l in range(latent_size):
        for t in range(n):
            if t == mid:
                data_set[n * l + t] = central_im.copy()
            else:
                v = torch.zeros(latent_size)
                v[l] = 1.
                if t < mid:
                    v = v * -(mid - t) * dist
                else:
                    v = v * (t - mid) * dist
                v = v.to(device)
                z = mu + v

                im = model.decode(z)
                im = im.view(3, img_size, img_size)
                im = im.permute([1, 2, 0])
                im *= 255.
                im = im.type(torch.uint8)
                im = im.detach().cpu().numpy()
                data_set[n * l + t] = im.copy()

    all_array = None
    t = 0
    for r in range(latent_size):
        row = None
        for c in range(n):
            rcim = data_set[t].copy()
            t += 1
            if row is None:
                row = rcim
            else:
                row = np.concatenate([row.copy(), rcim], axis=1)
        if all_array is None:
            all_array = row.copy()
        else:
            all_array = np.concatenate([all_array.copy(), row], axis=0)
    all_ims = Image.fromarray(all_array.astype(np.uint8))
    if fig_file_name is not None:
        all_ims.save('{}_ims.png'.format(fig_file_name))
    else:
        all_ims.show()
    all_ims.close()
Пример #7
0
def visualization_grid_points(env,
                              model,
                              size_to_use,
                              img_size,
                              n,
                              enc_type,
                              ind_1,
                              ind_2,
                              using_sb=True,
                              use_d=False,
                              fig_file_name=None):
    if use_d:
        d = 0.12  #0.32
        points = generate_points(range_x=[range_x[0] - d, range_x[1] + d],
                                 range_y=[range_y[0] - d, range_y[1] + d],
                                 z=z_table_height,
                                 total=n,
                                 object_x_y_size=[size_to_use, size_to_use])
    else:
        points = generate_points(range_x=range_x,
                                 range_y=range_y,
                                 z=z_table_height,
                                 total=n,
                                 object_x_y_size=[size_to_use, size_to_use])

    n_labels = np.arange(len(points))

    points = np.array(points)
    #print_max_and_min(points)

    xs = points[:, 0]
    ys = points[:, 1]
    plt.figure(1)
    plt.subplot(211, )
    plt.scatter(xs, ys)
    plt.title('real')
    for i, en in enumerate(n_labels):
        plt.annotate(en, (xs[i], ys[i]))

    cuda = torch.cuda.is_available()
    torch.manual_seed(1)
    device = torch.device("cuda" if cuda else "cpu")

    # sample images
    data_set = np.empty([len(points), img_size, img_size, 3])
    #move other objects to plaecs they do not disturb
    if enc_type == 'goal' or (args.enc_type == 'mixed'
                              and args.mix_h == 'goal'):
        env.env.env._set_position(names_list=['obstacle'],
                                  position=[2., 2., 0.4])
        pass
    elif enc_type == 'obstacle' or (args.enc_type == 'mixed'
                                    and args.mix_h == 'obstacle'):
        env.env.env._move_object(position=[2., 2., 0.4])
    else:
        raise Exception('Not supported enc type')
    for i, p in enumerate(points):
        if enc_type == 'goal' or (args.enc_type == 'mixed'
                                  and args.mix_h == 'goal'):
            env.env.env._move_object(position=p)
            data_set[i] = take_goal_image(env,
                                          img_size,
                                          make_table_invisible=True)
        elif enc_type == 'obstacle' or (args.enc_type == 'mixed'
                                        and args.mix_h == 'obstacle'):
            env.env.env._set_position(names_list=['obstacle'], position=p)
            data_set[i] = take_obstacle_image(env, img_size)
        else:
            raise Exception('Not supported enc type')
    all_array = None
    t = 0
    for r in range(n):
        row = None
        for c in range(n):
            rcim = data_set[t].copy()
            t += 1
            if row is None:
                row = rcim
            else:
                row = np.concatenate([row.copy(), rcim], axis=1)
        if all_array is None:
            all_array = row.copy()
        else:
            all_array = np.concatenate([all_array.copy(), row], axis=0)
    all_ims = Image.fromarray(all_array.astype(np.uint8))
    if fig_file_name is not None:
        all_ims.save('{}_ims.png'.format(fig_file_name))
        from utils.hindsight_goals_visualizer import show_points
        show_points(points, '{}_vis'.format(fig_file_name), 'real')
    else:
        all_ims.show()
    all_ims.close()
    data = torch.from_numpy(data_set).float().to(device)
    data /= 255
    data = data.permute([0, 3, 1, 2])
    model.eval()
    if not using_sb:
        mu, logvar = model.encode(data.reshape(-1, img_size * img_size * 3))
    else:
        mu, logvar = model.encode(data)
    mu = mu.detach().cpu().numpy()

    assert ind_1 != ind_2
    mu = np.concatenate([
        np.expand_dims(mu[:, ind_1], axis=1),
        np.expand_dims(mu[:, ind_2], axis=1)
    ],
                        axis=1)

    if enc_type == 'goal' or (args.enc_type == 'mixed'
                              and args.mix_h == 'goal'):
        rm = create_rotation_matrix(angle_goal)
        mu = rotate_list_of_points(mu, rm)
        #mu = map_points(mu, goal_map_x, goal_map_y)
        pass
    elif enc_type == 'obstacle' or (args.enc_type == 'mixed'
                                    and args.mix_h == 'obstacle'):
        #for i, p in enumerate(mu):
        #    mu[i] = reflect_obstacle_transformation(p)
        rm = create_rotation_matrix(angle_obstacle)
        mu = rotate_list_of_points(mu, rm)
        #mu = map_points(mu, obstacle_map_x, obstacle_map_y)
        pass
    else:
        raise Exception('Not supported enc type')
    print_max_and_min(mu)

    lxs = mu[:, 0]
    lys = mu[:, 1]
    plt.subplot(212)
    plt.scatter(lxs, lys)
    plt.title('latent')
    for i, en in enumerate(n_labels):
        plt.annotate(en, (lxs[i], lys[i]))

    if fig_file_name is not None:
        plt.savefig(fig_file_name)
    else:
        plt.show()
    plt.close()