def _generate_fn(scene): cfg = habitat.get_config() cfg.defrost() cfg.SIMULATOR.SCENE = scene cfg.SIMULATOR.AGENT_0.SENSORS = [] cfg.freeze() sim = habitat.sims.make_sim("Sim-v0", config=cfg.SIMULATOR) dset = habitat.datasets.make_dataset("PointNav-v1") dset.episodes = list( generate_pointnav_episode( sim, NUM_EPISODES_PER_SCENE, is_gen_shortest_path=False ) ) for ep in dset.episodes: ep.scene_id = ep.scene_id[len("./data/scene_datasets/") :] scene_key = scene.split("/")[-1].split(".")[0] out_file = ( f"./data/datasets/pointnav/gibson/v2/train_large/content/" f"{scene_key}.json.gz" ) os.makedirs(osp.dirname(out_file), exist_ok=True) with gzip.open(out_file, "wt") as f: f.write(dset.to_json())
def test_pointnav_episode_generator(): config = get_config(CFG_TEST) config.defrost() config.DATASET.SPLIT = "val" config.ENVIRONMENT.MAX_EPISODE_STEPS = 500 config.freeze() if not PointNavDatasetV1.check_config_paths_exist(config.DATASET): pytest.skip("Test skipped as dataset files are missing.") with habitat.Env(config) as env: env.seed(config.SEED) random.seed(config.SEED) generator = pointnav_generator.generate_pointnav_episode( sim=env.sim, shortest_path_success_distance=config.TASK.SUCCESS_DISTANCE, shortest_path_max_steps=config.ENVIRONMENT.MAX_EPISODE_STEPS, ) episodes = [] for i in range(NUM_EPISODES): episode = next(generator) episodes.append(episode) for episode in pointnav_generator.generate_pointnav_episode( sim=env.sim, num_episodes=NUM_EPISODES, shortest_path_success_distance=config.TASK.SUCCESS_DISTANCE, shortest_path_max_steps=config.ENVIRONMENT.MAX_EPISODE_STEPS, geodesic_to_euclid_min_ratio=0, ): episodes.append(episode) assert len(episodes) == 2 * NUM_EPISODES env.episode_iterator = iter(episodes) for episode in episodes: check_shortest_path(env, episode) dataset = habitat.Dataset() dataset.episodes = episodes assert ( dataset.to_json() ), "Generated episodes aren't json serializable."
def generate_pointnav_dataset(config, num_episodes): sim = make_sim(id_sim=config.SIMULATOR.TYPE, config=config.SIMULATOR) sim.seed(config.SEED) random.seed(config.SEED) generator = pointnav_generator.generate_pointnav_episode( sim=sim, shortest_path_success_distance=config.TASK.SUCCESS_DISTANCE, shortest_path_max_steps=config.ENVIRONMENT.MAX_EPISODE_STEPS, ) episodes = [] for i in range(num_episodes): print(f"Generating episode {i+1}/{num_episodes}") episode = next(generator) episodes.append(episode) dataset = habitat.Dataset() dataset.episodes = episodes return dataset
def _generate_fn(scene): cfg = habitat.get_config() cfg.defrost() cfg.SIMULATOR.SCENE = scene cfg.SIMULATOR.AGENT_0.SENSORS = [] cfg.freeze() sim = habitat.sims.make_sim("Sim-v0", config=cfg.SIMULATOR) dset = habitat.datasets.make_dataset("PointNav-v1") print(vars(dset)) dset.episodes = list( generate_pointnav_episode(sim, num_episodes_per_scene, is_gen_shortest_path=False)) for ep in dset.episodes: ep.scene_id = ep.scene_id[len("./data/scene_datasets/"):] scene_key = osp.basename(osp.dirname(osp.dirname(scene))) out_file = f"./data/datasets/pointnav/gibson/v1/all/content/{scene_key}.json.gz" os.makedirs(osp.dirname(out_file), exist_ok=True) with gzip.open(out_file, "wt") as f: f.write(dset.to_json())