예제 #1
0
    def render(self, mode='rgb_array', *args, **kwargs):
        """
        @brief      Parallel rendering of the current state of each environment.

        @param[in]  mode    Display mode. For now, only 'rgb_array' is supported.
        @param[in]  args    Extra arguments passed to `render` method of each Gym environment
        @param[in]  kwargs  Extra keyword arguments passed to `render` method of each Gym environment

        @return     None or iterator of RGB images if mode == 'rgb_array'.
        """

        # gather images from subprocesses. `mode` will be taken into account later
        for pipe in self.remotes:
            # gather images from subprocesses
            # `mode` will be taken into account later
            pipe.send(('render', (args, {'mode': 'rgb_array', **kwargs})))
        imgs = [pipe.recv() for pipe in self.remotes]

        # Create a big image by tiling images from subprocesses
        bigimg = tile_images(imgs)

        if mode == 'rgb_array':
            return bigimg
        else:
            raise NotImplementedError
예제 #2
0
def attention_render(model_name, env_name, num_cpu, log_dir):
    if not os.path.exists(log_dir):
        raise ('log_dir not Exists')

    env_id = env_name + 'NoFrameskip-v4'
    env = SubprocVecEnv([make_env(env_id, i, log_dir) for i in range(num_cpu)])
    # env = Monitor(env, log_dir, allow_early_resets=True)

    if model_name == 'A2C_Attention':
        model = A2C(AttentionPolicy,
                    env,
                    verbose=1,
                    tensorboard_log=log_dir + 'tensorboard/')
    elif model_name == 'A2C_Attention2':
        model = A2C(Attention2Policy,
                    env,
                    verbose=1,
                    tensorboard_log=log_dir + 'tensorboard/')
    elif model_name == 'A2C':
        model = A2C(LstmPolicy,
                    env,
                    verbose=1,
                    tensorboard_log=log_dir + 'tensorboard/')
    else:
        model = None
    model = model.load(log_dir + model_name + '_' + env_name, env=env)

    obs = env.reset()
    # print(env.observation_space)
    # cv2.imshow('test', RGB2BGR(obs[0]))
    # cv2.waitKey(0)
    while True:
        action, _states = model.predict(obs)
        obs, rewards, done, info = env.step(action)
        attentions = model.get_attention(obs, _states, done)[0]
        attentions_img = []
        # print('attention', np.array(attention).shape)
        for i, attention in enumerate(attentions):
            attention = np.array(attention)
            attention = np.reshape(attention, [
                env.observation_space.shape[0] // 10,
                env.observation_space.shape[1] // 10, 1
            ])
            attention = np.repeat(attention, [10] * attention.shape[0], axis=0)
            attention = np.repeat(attention, [10] * attention.shape[1], axis=1)
            attention = attention * 255
            attentions_img.append(attention)
            # print(np.sum(attention))
        attentions = tile_images(attentions_img)
        cv2.imshow('attention', attentions)
        cv2.waitKey(1)
        # break
        env.render()
    return model
예제 #3
0
 def render(self, mode='human'):
     for pipe in self.remotes:
         pipe.send(('render', None))
     imgs = [pipe.recv() for pipe in self.remotes]
     bigimg = tile_images(imgs)
     if mode == 'human':
         import cv2
         cv2.imshow('vecenv', bigimg[:, :, ::-1])
         cv2.waitKey(1)
     elif mode == 'rgb_array':
         return bigimg
     else:
         raise NotImplementedError
예제 #4
0
 def render(self, mode='human', *args, **kwargs):
     # gather images from subprocesses
     # `mode` will be taken into account later
     imgs = self.get_images(*args, **kwargs)
     # Create a big image by tiling images from subprocesses
     bigimg = tile_images(imgs)
     if mode == 'human':
         import cv2
         cv2.imshow('vecenv', bigimg[:, :, ::-1])
         cv2.waitKey(1)
     elif mode == 'rgb_array':
         return bigimg
     else:
         raise NotImplementedError
예제 #5
0
 def render(self, mode='human', *args, **kwargs):
     for pipe in self.remotes:
         # gather images from subprocesses
         # `mode` will be taken into account later
         pipe.send(('render', (args, {'mode': 'rgb_array', **kwargs})))
     imgs = [pipe.recv() for pipe in self.remotes]
     # Create a big image by tiling images from subprocesses
     bigimg = tile_images(imgs)
     if mode == 'human':
         import cv2
         cv2.imshow('vecenv', bigimg[:, :, ::-1])
         cv2.waitKey(1)
     elif mode == 'rgb_array':
         return bigimg
     else:
         raise NotImplementedError
예제 #6
0
    def render(self, indices=None, *args, **kwargs):
        for pipe in self._get_target_remotes(indices):
            # gather images from subprocesses
            # `mode` will be taken into account later
            pipe.send(('render', (args, {**kwargs})))
        figs = [pipe.recv() for pipe in self._get_target_remotes(indices)]
        if isinstance(indices, int):
            figs = figs[0]

        return figs
        # Create a big image by tiling images from subprocesses
        bigimg = tile_images(imgs)
        if mode == 'human':
            import cv2
            cv2.imshow('vecenv', bigimg[:, :, ::-1])
            cv2.waitKey(1)
        elif mode == 'rgb_array':
            return bigimg
        else:
            raise NotImplementedError
예제 #7
0
    def _record(self, obs):
        self.last += 1
        if self.last - self.reduction < 0:
            return
        else:
            self.last = 0

        if self.record_obs:
            if self.unvec:
                for i, recorder in enumerate(self.recorders):
                    recorder.record(obs[i])
            else:
                self.recorders[0].record(tile_images(obs))
        else:
            if self.unvec:
                images = self.venv.env_method("render", mode="rgb_array")
                for i, recorder in enumerate(self.recorders):
                    recorder.record(images[i])
            else:
                self.recorders[0].record(self.venv.render(mode="rgb_array"))
예제 #8
0
    def render(self, mode: str, *args, **kwargs):
        """
        Gym environment rendering

        :param mode: the rendering type
        """
        try:
            imgs = self.get_images(*args, **kwargs)
        except NotImplementedError:
            logger.warn('Render not defined for {}'.format(self))
            return

        # Create a big image by tiling images from subprocesses
        bigimg = tile_images(imgs)
        if mode == 'human':
            import cv2  # pytype:disable=import-error
            cv2.imshow('vecenv', bigimg[:, :, ::-1])
            cv2.waitKey(1)
        elif mode == 'rgb_array':
            return bigimg
        else:
            raise NotImplementedError