From 8c6d7b052560022a8b10ca5ca0d1f832d9af791e Mon Sep 17 00:00:00 2001 From: Oleksandr Maksymets <maksymets@gmail.com> Date: Tue, 11 Feb 2020 01:41:14 -0800 Subject: [PATCH] added noises --- configs/tasks/objectnav_mp3d.yaml | 11 +++++++++-- examples/shortest_path_follower_example.py | 11 +++++++++-- habitat/config/default.py | 4 +++- habitat/core/dataset.py | 7 +++++++ habitat/core/env.py | 7 +++++++ .../datasets/object_nav/object_nav_dataset.py | 5 +++++ .../habitat_simulator/habitat_simulator.py | 8 +++++++- habitat/tasks/nav/nav.py | 3 +++ habitat_baselines/common/env_utils.py | 5 ++++- habitat_baselines/common/utils.py | 6 +++++- .../config/objectnav/ddppo_objectnav.yaml | 17 ++++++++++------- .../config/pointnav/ddppo_pointnav.yaml | 2 +- .../rl/ddppo/single_node_obj_nav.sh | 12 ++++++++++++ ...out.tfevents.1580768898.devfair0194.69437.0 | Bin 0 -> 130 bytes ...out.tfevents.1580943506.devfair0194.30021.0 | Bin 0 -> 40 bytes ...out.tfevents.1580946428.devfair0194.34988.0 | Bin 0 -> 6371 bytes ...out.tfevents.1580768902.devfair0194.69437.2 | Bin 0 -> 130 bytes ...out.tfevents.1580946531.devfair0194.34988.2 | Bin 0 -> 6371 bytes ...out.tfevents.1580768902.devfair0194.69437.1 | Bin 0 -> 130 bytes ...out.tfevents.1580946531.devfair0194.34988.1 | Bin 0 -> 6371 bytes 20 files changed, 82 insertions(+), 16 deletions(-) create mode 100644 habitat_baselines/rl/ddppo/single_node_obj_nav.sh create mode 100644 tb/events.out.tfevents.1580768898.devfair0194.69437.0 create mode 100644 tb/events.out.tfevents.1580943506.devfair0194.30021.0 create mode 100644 tb/events.out.tfevents.1580946428.devfair0194.34988.0 create mode 100644 tb/losses/policy/events.out.tfevents.1580768902.devfair0194.69437.2 create mode 100644 tb/losses/policy/events.out.tfevents.1580946531.devfair0194.34988.2 create mode 100644 tb/losses/value/events.out.tfevents.1580768902.devfair0194.69437.1 create mode 100644 tb/losses/value/events.out.tfevents.1580946531.devfair0194.34988.1 diff --git a/configs/tasks/objectnav_mp3d.yaml b/configs/tasks/objectnav_mp3d.yaml index 8811ba838..2f5dd4b0a 100644 --- a/configs/tasks/objectnav_mp3d.yaml +++ b/configs/tasks/objectnav_mp3d.yaml @@ -1,5 +1,8 @@ ENVIRONMENT: MAX_EPISODE_STEPS: 500 + ITERATOR_OPTIONS: + CYCLE: True + NUM_EPISODE_SAMPLE: 4 SIMULATOR: TURN_ANGLE: 30 TILT_ANGLE: 30 @@ -20,6 +23,9 @@ SIMULATOR: HEIGHT: 480 HFOV: 79 POSITION: [0, 0.88, 0] + NOISE_MODEL: "GaussianNoiseModel" + NOISE_MODEL_KWARGS: + intensity_constant: 0.1 DEPTH_SENSOR: WIDTH: 640 HEIGHT: 480 @@ -27,6 +33,7 @@ SIMULATOR: MIN_DEPTH: 0.5 MAX_DEPTH: 5.0 POSITION: [0, 0.88, 0] + NOISE_MODEL: "RedwoodDepthNoiseModel" TASK: TYPE: ObjectNav-v1 POSSIBLE_ACTIONS: ["STOP", "MOVE_FORWARD", "TURN_LEFT", "TURN_RIGHT", "LOOK_UP", "LOOK_DOWN"] @@ -45,7 +52,7 @@ TASK: DATASET: TYPE: ObjectNav-v1 - SPLIT: val - CONTENT_SCENES: [] + SPLIT: train + CONTENT_SCENES: ["GdvgFV5R1Z5", "GdvgFV5R1Z5", "GdvgFV5R1Z5", "GdvgFV5R1Z5"] # ["YmJkqBEsHnH", "YmJkqBEsHnH", "YmJkqBEsHnH", "YmJkqBEsHnH"] # ["*"] # DATA_PATH: "data/datasets/objectnav/mp3d/v0/{split}/{split}.json.gz" SCENES_DIR: "data/scene_datasets/" diff --git a/examples/shortest_path_follower_example.py b/examples/shortest_path_follower_example.py index 7b2262aed..2d0e39719 100644 --- a/examples/shortest_path_follower_example.py +++ b/examples/shortest_path_follower_example.py @@ -62,7 +62,9 @@ def draw_top_down_map(info, heading, output_size): def shortest_path_example(mode): - config = habitat.get_config(config_paths="configs/tasks/pointnav.yaml") + config = habitat.get_config( + config_paths="configs/tasks/objectnav_mp3d.yaml" + ) config.defrost() config.TASK.MEASUREMENTS.append("TOP_DOWN_MAP") config.TASK.SENSORS.append("HEADING_SENSOR") @@ -97,8 +99,13 @@ def shortest_path_example(mode): top_down_map = draw_top_down_map( info, observations["heading"][0], im.shape[0] ) + from habitat.utils.visualizations.utils import ( + observations_to_image, + ) + output_im = np.concatenate((im, top_down_map), axis=1) - images.append(output_im) + + images.append(observations_to_image(observations, info)) images_to_video(images, dirname, "trajectory") print("Episode finished") diff --git a/habitat/config/default.py b/habitat/config/default.py index 1182a03e8..1031ef26b 100644 --- a/habitat/config/default.py +++ b/habitat/config/default.py @@ -212,6 +212,8 @@ SIMULATOR_SENSOR.HEIGHT = 480 SIMULATOR_SENSOR.WIDTH = 640 SIMULATOR_SENSOR.HFOV = 90 # horizontal field of view in degrees SIMULATOR_SENSOR.POSITION = [0, 1.25, 0] +SIMULATOR_SENSOR.ORIENTATION = [0.0, 0.0, 0.0] +SIMULATOR_SENSOR.NOISE_MODEL = "None" # ----------------------------------------------------------------------------- # RGB SENSOR # ----------------------------------------------------------------------------- @@ -242,7 +244,7 @@ _C.SIMULATOR.AGENT_0.ANGULAR_ACCELERATION = 4 * 3.14 _C.SIMULATOR.AGENT_0.LINEAR_FRICTION = 0.5 _C.SIMULATOR.AGENT_0.ANGULAR_FRICTION = 1.0 _C.SIMULATOR.AGENT_0.COEFFICIENT_OF_RESTITUTION = 0.0 -_C.SIMULATOR.AGENT_0.SENSORS = ["RGB_SENSOR"] +_C.SIMULATOR.AGENT_0.SENSORS = ["RGB_SENSOR", "DEPTH_SENSOR"] _C.SIMULATOR.AGENT_0.IS_SET_START_STATE = False _C.SIMULATOR.AGENT_0.START_POSITION = [0, 0, 0] _C.SIMULATOR.AGENT_0.START_ROTATION = [0, 0, 0, 1] diff --git a/habitat/core/dataset.py b/habitat/core/dataset.py index 00e70f5ad..3b74acdf5 100644 --- a/habitat/core/dataset.py +++ b/habitat/core/dataset.py @@ -309,6 +309,13 @@ class EpisodeIterator(Iterator): # sample episodes if num_episode_sample >= 0: + np.random.seed(100) + print(f"np.random.state {np.random.get_state()[0]}") + episodes = [ + episode + for episode in episodes + if episode.episode_id in ["7", "77", "774", "10"] + ] episodes = np.random.choice( episodes, num_episode_sample, replace=False ) diff --git a/habitat/core/env.py b/habitat/core/env.py index 273a9775e..f79ef247a 100644 --- a/habitat/core/env.py +++ b/habitat/core/env.py @@ -4,6 +4,7 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. +import random import time from typing import Any, Dict, Iterator, List, Optional, Tuple, Type, Union @@ -91,6 +92,9 @@ class Env: self._config.defrost() self._config.SIMULATOR.SCENE = self._dataset.episodes[0].scene_id self._config.freeze() + print( + f"scenes{self._dataset.scene_ids}len(self._dataset.episodes) = {len(self._dataset.episodes)}" + ) self._sim = make_sim( id_sim=self._config.SIMULATOR.TYPE, config=self._config.SIMULATOR @@ -198,6 +202,7 @@ class Env: assert len(self.episodes) > 0, "Episodes list is empty" self._current_episode = next(self._episode_iterator) + # print(f"self._current_episode: {self._current_episode.episode_id} {self._current_episode.scene_id}") self.reconfigure(self._config) observations = self.task.reset(episode=self.current_episode) @@ -254,6 +259,8 @@ class Env: return observations def seed(self, seed: int) -> None: + np.random.seed(seed) + random.seed(seed) self._sim.seed(seed) self._task.seed(seed) diff --git a/habitat/datasets/object_nav/object_nav_dataset.py b/habitat/datasets/object_nav/object_nav_dataset.py index a595b26bd..c0437346a 100644 --- a/habitat/datasets/object_nav/object_nav_dataset.py +++ b/habitat/datasets/object_nav/object_nav_dataset.py @@ -36,7 +36,11 @@ class ObjectNavDatasetV1(PointNavDatasetV1): def from_json( self, json_str: str, scenes_dir: Optional[str] = None ) -> None: + from habitat.core.logging import logger + + logger.info(f"deserializing") deserialized = json.loads(json_str) + logger.info("unpacking") if CONTENT_SCENES_PATH_FIELD in deserialized: self.content_scenes_path = deserialized[CONTENT_SCENES_PATH_FIELD] @@ -98,3 +102,4 @@ class ObjectNavDatasetV1(PointNavDatasetV1): for i, ep in enumerate(self.episodes): ep.episode_id = str(i) + logger.info("unpacked.") diff --git a/habitat/sims/habitat_simulator/habitat_simulator.py b/habitat/sims/habitat_simulator/habitat_simulator.py index 244258270..2c2eab0df 100644 --- a/habitat/sims/habitat_simulator/habitat_simulator.py +++ b/habitat/sims/habitat_simulator/habitat_simulator.py @@ -186,12 +186,18 @@ class HabitatSim(Simulator): sensor_specifications = [] for sensor in _sensor_suite.sensors.values(): sim_sensor_cfg = habitat_sim.SensorSpec() + overwrite_config( + config_from=sensor.config, config_to=sim_sensor_cfg + ) sim_sensor_cfg.uuid = sensor.uuid sim_sensor_cfg.resolution = list( sensor.observation_space.shape[:2] ) sim_sensor_cfg.parameters["hfov"] = str(sensor.config.HFOV) - sim_sensor_cfg.position = sensor.config.POSITION + # sim_sensor_cfg.position = sensor.config.POSITION + # sim_sensor_cfg.orientation = np.array(sensor.config.ORIENTATION, dtype=np.float32) + # sim_sensor_cfg.noise_model = sensor.config.NOISE_MODEL + # TODO(maksymets): Add configure method to Sensor API to avoid # accessing child attributes through parent interface sim_sensor_cfg.sensor_type = sensor.sim_sensor_type # type: ignore diff --git a/habitat/tasks/nav/nav.py b/habitat/tasks/nav/nav.py index 49d835d2d..62159d8dd 100644 --- a/habitat/tasks/nav/nav.py +++ b/habitat/tasks/nav/nav.py @@ -817,6 +817,9 @@ class DistanceToGoal(Measure): for goal in episode.goals for view_point in goal.view_points ] + # logger.info( + # f"episode: {episode.episode_id}, {episode.goals[0].object_category} self._episode_view_points { len(self._episode_view_points)}." + # ) self.update_metric(*args, episode=episode, **kwargs) def _euclidean_distance(self, position_a, position_b): diff --git a/habitat_baselines/common/env_utils.py b/habitat_baselines/common/env_utils.py index 1c87463e6..0e8d350e6 100644 --- a/habitat_baselines/common/env_utils.py +++ b/habitat_baselines/common/env_utils.py @@ -54,8 +54,11 @@ def construct_envs( configs = [] env_classes = [env_class for _ in range(num_processes)] dataset = make_dataset(config.TASK_CONFIG.DATASET.TYPE) - scenes = dataset.get_scenes_to_load(config.TASK_CONFIG.DATASET) + scenes = config.TASK_CONFIG.DATASET.CONTENT_SCENES + if "*" in config.TASK_CONFIG.DATASET.CONTENT_SCENES: + scenes = dataset.get_scenes_to_load(config.TASK_CONFIG.DATASET) + print(f"len(scenes): {len(scenes)}") if len(scenes) > 0: random.shuffle(scenes) diff --git a/habitat_baselines/common/utils.py b/habitat_baselines/common/utils.py index d9b976765..8ddb184f6 100644 --- a/habitat_baselines/common/utils.py +++ b/habitat_baselines/common/utils.py @@ -165,5 +165,9 @@ def generate_video( images_to_video(images, video_dir, video_name) if "tensorboard" in video_option: tb_writer.add_video_from_np_images( - f"episode{episode_id}", checkpoint_idx, images, fps=fps + # f"episode{episode_id}", + video_name, + checkpoint_idx, + images, + fps=fps, ) diff --git a/habitat_baselines/config/objectnav/ddppo_objectnav.yaml b/habitat_baselines/config/objectnav/ddppo_objectnav.yaml index 1e759ad89..1881ceb16 100644 --- a/habitat_baselines/config/objectnav/ddppo_objectnav.yaml +++ b/habitat_baselines/config/objectnav/ddppo_objectnav.yaml @@ -4,23 +4,26 @@ ENV_NAME: "NavRLEnv" SIMULATOR_GPU_ID: 0 TORCH_GPU_ID: 1 VIDEO_OPTION: ["disk", "tensorboard"] -TENSORBOARD_DIR: "/checkpoint/maksymets/logs/habitat_baselines/ddppo/obj_nav_mp3d" +TENSORBOARD_DIR: "/checkpoint/maksymets/logs/habitat_baselines/ddppo/obj_nav_mp3d_4_ep_slack-1e3" VIDEO_DIR: "data/video_dir" -TEST_EPISODE_COUNT: 2184 -EVAL_CKPT_PATH_DIR: "data/new_checkpoints" -NUM_PROCESSES: 2 +TEST_EPISODE_COUNT: 1 +EVAL_CKPT_PATH_DIR: "data/new_checkpoints/obj_nav_mp3d_4_ep_slack-1e3" +NUM_PROCESSES: 4 SENSORS: ["DEPTH_SENSOR", "RGB_SENSOR"] -CHECKPOINT_FOLDER: "data/new_checkpoints" -NUM_UPDATES: 10000 +CHECKPOINT_FOLDER: "data/new_checkpoints/obj_nav_mp3d_4_ep_slack-1e3" +NUM_UPDATES: 270000 LOG_INTERVAL: 10 CHECKPOINT_INTERVAL: 50 +EVAL: + SPLIT: "train" RL: SUCCESS_REWARD: 2.5 + SLACK_REWARD: -1e-3 PPO: # ppo params clip_param: 0.2 - ppo_epoch: 2 + ppo_epoch: 4 num_mini_batch: 2 value_loss_coef: 0.5 entropy_coef: 0.01 diff --git a/habitat_baselines/config/pointnav/ddppo_pointnav.yaml b/habitat_baselines/config/pointnav/ddppo_pointnav.yaml index b6f56c62d..6558e350e 100644 --- a/habitat_baselines/config/pointnav/ddppo_pointnav.yaml +++ b/habitat_baselines/config/pointnav/ddppo_pointnav.yaml @@ -8,7 +8,7 @@ TENSORBOARD_DIR: "tb" VIDEO_DIR: "video_dir" TEST_EPISODE_COUNT: 994 EVAL_CKPT_PATH_DIR: "data/new_checkpoints" -NUM_PROCESSES: 4 +NUM_PROCESSES: 2 SENSORS: ["DEPTH_SENSOR"] CHECKPOINT_FOLDER: "data/new_checkpoints" NUM_UPDATES: 10000 diff --git a/habitat_baselines/rl/ddppo/single_node_obj_nav.sh b/habitat_baselines/rl/ddppo/single_node_obj_nav.sh new file mode 100644 index 000000000..df389cd3d --- /dev/null +++ b/habitat_baselines/rl/ddppo/single_node_obj_nav.sh @@ -0,0 +1,12 @@ +#/bin/bash + +export GLOG_minloglevel=2 +export MAGNUM_LOG=quiet + +set -x +python -u -m torch.distributed.launch \ + --use_env \ + --nproc_per_node 1 \ + habitat_baselines/run.py \ + --exp-config habitat_baselines/config/objectnav/ddppo_objectnav.yaml \ + --run-type train diff --git a/tb/events.out.tfevents.1580768898.devfair0194.69437.0 b/tb/events.out.tfevents.1580768898.devfair0194.69437.0 new file mode 100644 index 0000000000000000000000000000000000000000..b954c8a63fb6be701f80cb65d12fcb361d9cf340 GIT binary patch literal 130 zcmb1OfPlsI-b$P~hbAph@4N0O#hX-=n3<>NT9%quVr8VC{^q|dL>WVZ{(WUmhweoS zLFxn=ShV=Lc)8e$Qp*#IQbeEj3+xq0;^9D1EXliR5kxTuisDPY3-*SZmj(j>VZ9}F literal 0 HcmV?d00001 diff --git a/tb/events.out.tfevents.1580943506.devfair0194.30021.0 b/tb/events.out.tfevents.1580943506.devfair0194.30021.0 new file mode 100644 index 0000000000000000000000000000000000000000..98ae3d4bfd6d18f265bf43c7bd9431c1713aad10 GIT binary patch literal 40 rcmb1OfPlsI-b$RNVM|pm^<8(A;!P?_%*@ksElbTSu`-h9%CQ0f#zhMo literal 0 HcmV?d00001 diff --git a/tb/events.out.tfevents.1580946428.devfair0194.34988.0 b/tb/events.out.tfevents.1580946428.devfair0194.34988.0 new file mode 100644 index 0000000000000000000000000000000000000000..796eb3e24f753fb9861cd5924de125b2845aa9d3 GIT binary patch literal 6371 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 R)zeT_f8F0}cc5tgNdV3oz+(Ua literal 0 HcmV?d00001 diff --git a/tb/losses/policy/events.out.tfevents.1580768902.devfair0194.69437.2 b/tb/losses/policy/events.out.tfevents.1580768902.devfair0194.69437.2 new file mode 100644 index 0000000000000000000000000000000000000000..769bf65661095cb8c6215c35c1a76face53e8dd6 GIT binary patch literal 130 zcmb1OfPlsI-b$Po#TGAA@4N0O#hX-=n3<>NT9%quVrBI1@=-Tgh%$x*{rk$Cu04yu z>I52CwD`Grx!7{@i;Gi>MU&r_*gju1#~DTOI=)SdK!yr5aG)smk(p*|x$(wE0Lm68 A*8l(j literal 0 HcmV?d00001 diff --git a/tb/losses/policy/events.out.tfevents.1580946531.devfair0194.34988.2 b/tb/losses/policy/events.out.tfevents.1580946531.devfair0194.34988.2 new file mode 100644 index 0000000000000000000000000000000000000000..372a4b19d3613bac5f5ea87f1173ea0f9846b246 GIT binary patch literal 6371 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 UK3D`%Jq=ZLa{NTQ#5~Dv0A*y(tpET3 literal 0 HcmV?d00001 diff --git a/tb/losses/value/events.out.tfevents.1580768902.devfair0194.69437.1 b/tb/losses/value/events.out.tfevents.1580768902.devfair0194.69437.1 new file mode 100644 index 0000000000000000000000000000000000000000..b5416a2f96807e103601adb623ce68e42d77ebef GIT binary patch literal 130 zcmb1OfPlsI-b$QomlrKm@4N0O#hX-=n3<>NT9%quVrBH)A}mW5qKqLy|GqM(YY#-7 zKm&^wKNl|-TTXs)acZ&XpA(%nzodVEMNzztZ_^@>p#lvYD2i|Xmb10V<K+bar>7@9 literal 0 HcmV?d00001 diff --git a/tb/losses/value/events.out.tfevents.1580946531.devfair0194.34988.1 b/tb/losses/value/events.out.tfevents.1580946531.devfair0194.34988.1 new file mode 100644 index 0000000000000000000000000000000000000000..43dd6f5345f9e0b8f8e85e9617d13d17c7d424a4 GIT binary patch literal 6371 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 JZAH^^cK}f7s=)vN literal 0 HcmV?d00001 -- GitLab