(hydra_cfg: DictConfig)
| 15 | |
| 16 | @hydra.main(version_base="1.2", config_path="../configs", config_name="eval") |
| 17 | def main(hydra_cfg: DictConfig): |
| 18 | # setup_debug(hydra_cfg.debug) |
| 19 | np.random.seed(hydra_cfg.seed) |
| 20 | initial_state = np.random.get_state() |
| 21 | |
| 22 | all_eval_datasets: DictConfig = hydra_cfg.eval_datasets |
| 23 | all_data_info: DictConfig = hydra_cfg.data |
| 24 | |
| 25 | for dataset_idx, dataset_name in enumerate(all_eval_datasets, start=1): |
| 26 | dataset_logger = logging.getLogger(f"relpose-sampling-{dataset_name}") |
| 27 | if dataset_name not in all_data_info: |
| 28 | raise ValueError(f"Unknown dataset in global data information: {dataset_name}") |
| 29 | dataset_info = all_data_info[dataset_name] |
| 30 | if osp.exists(dataset_info.seq_id_map): |
| 31 | dataset_logger.info(f"[{dataset_idx}/{len(all_eval_datasets)}] {dataset_name} has already sampled seq-id-map: {dataset_info.seq_id_map}, skip...") |
| 32 | continue |
| 33 | |
| 34 | dataset_logger.info(f"[{dataset_idx}/{len(all_eval_datasets)}] Creating dataset {dataset_name}...") |
| 35 | dataset = hydra.utils.instantiate(dataset_info.cfg) |
| 36 | |
| 37 | sample_config: DictConfig = dataset_info.sampling |
| 38 | seq_id_map = {} |
| 39 | np.random.set_state(initial_state) |
| 40 | |
| 41 | dataset_logger.info(f"Start sampling ids for {len(dataset.sequence_list)} sequences, Sampling strategy: {sample_config.strategy}") |
| 42 | dataset_logger.info(f"Sampling strategy full config: {sample_config}") |
| 43 | for seq_name in tqdm(dataset.sequence_list): |
| 44 | seq_num_frames = dataset.get_seq_framenum(sequence_name=seq_name) |
| 45 | if sample_config.strategy == "all": |
| 46 | num_frames = seq_num_frames |
| 47 | ids = np.arange(seq_num_frames).tolist() |
| 48 | elif sample_config.strategy == "random_order": |
| 49 | num_frames = sample_config.num_frames |
| 50 | if seq_num_frames < num_frames: |
| 51 | dataset_logger.warning(f"[{dataset_name}] sequence {seq_name} has only {seq_num_frames} frames < {num_frames}, skip...") |
| 52 | continue |
| 53 | ids = np.random.choice(seq_num_frames, sample_config.num_frames, replace=False).tolist() |
| 54 | else: |
| 55 | raise ValueError(f"Sampling strategy {sample_config.strategy} is not implemented yet.") |
| 56 | seq_id_map[seq_name] = ids |
| 57 | |
| 58 | os.makedirs(osp.dirname(dataset_info.seq_id_map), exist_ok=True) |
| 59 | with open(dataset_info.seq_id_map, "w") as f: |
| 60 | json.dump(seq_id_map, f, indent=4) |
| 61 | |
| 62 | if __name__ == "__main__": |
| 63 | set_default_arg("evaluation", "relpose-angular") |
no test coverage detected