xfu314's picture
Add phantom project with submodules and dependencies
96da58e
"""
Config for Goal Learning (sub-algorithm used by hierarchical models like HBC and IRIS).
This class of model predicts (or samples) subgoal observations given a current observation.
"""
from robomimic.config.base_config import BaseConfig
class GLConfig(BaseConfig):
ALGO_NAME = "gl"
def algo_config(self):
"""
This function populates the `config.algo` attribute of the config, and is given to the
`Algo` subclass (see `algo/algo.py`) for each algorithm through the `algo_config`
argument to the constructor. Any parameter that an algorithm needs to determine its
training and test-time behavior should be populated here.
"""
# optimization parameters
self.algo.optim_params.goal_network.learning_rate.initial = 1e-4 # goal network learning rate
self.algo.optim_params.goal_network.learning_rate.decay_factor = 0.1 # factor to decay LR by (if epoch schedule non-empty)
self.algo.optim_params.goal_network.learning_rate.epoch_schedule = [] # epochs where LR decay occurs
self.algo.optim_params.goal_network.regularization.L2 = 0.00
# subgoal definition: observation that is @subgoal_horizon number of timesteps in future from current observation
self.algo.subgoal_horizon = 10
# MLP size for deterministic goal network (unused if VAE is enabled)
self.algo.ae.planner_layer_dims = (300, 400)
# ================== VAE config ==================
self.algo.vae.enabled = True # set to true to use VAE network
self.algo.vae.latent_dim = 16 # VAE latent dimension
self.algo.vae.latent_clip = None # clip latent space when decoding (set to None to disable)
self.algo.vae.kl_weight = 1. # beta-VAE weight to scale KL loss relative to reconstruction loss in ELBO
# VAE decoder settings
self.algo.vae.decoder.is_conditioned = True # whether decoder should condition on observation
self.algo.vae.decoder.reconstruction_sum_across_elements = False # sum instead of mean for reconstruction loss
# VAE prior settings
self.algo.vae.prior.learn = False # learn Gaussian / GMM prior instead of N(0, 1)
self.algo.vae.prior.is_conditioned = False # whether to condition prior on observations
self.algo.vae.prior.use_gmm = False # whether to use GMM prior
self.algo.vae.prior.gmm_num_modes = 10 # number of GMM modes
self.algo.vae.prior.gmm_learn_weights = False # whether to learn GMM weights
self.algo.vae.prior.use_categorical = False # whether to use categorical prior
self.algo.vae.prior.categorical_dim = 10 # the number of categorical classes for each latent dimension
self.algo.vae.prior.categorical_gumbel_softmax_hard = False # use hard selection in forward pass
self.algo.vae.prior.categorical_init_temp = 1.0 # initial gumbel-softmax temp
self.algo.vae.prior.categorical_temp_anneal_step = 0.001 # linear temp annealing rate
self.algo.vae.prior.categorical_min_temp = 0.3 # lowest gumbel-softmax temp
self.algo.vae.encoder_layer_dims = (300, 400) # encoder MLP layer dimensions
self.algo.vae.decoder_layer_dims = (300, 400) # decoder MLP layer dimensions
self.algo.vae.prior_layer_dims = (300, 400) # prior MLP layer dimensions (if learning conditioned prior)
def observation_config(self):
"""
Update from superclass to specify subgoal modalities.
"""
super(GLConfig, self).observation_config()
self.observation.modalities.subgoal.low_dim = [ # specify low-dim subgoal observations for agent to predict
"robot0_eef_pos",
"robot0_eef_quat",
"robot0_gripper_qpos",
"object",
]
self.observation.modalities.subgoal.rgb = [] # specify rgb image subgoal observations for agent to predict
self.observation.modalities.subgoal.depth = []
self.observation.modalities.subgoal.scan = []
self.observation.modalities.subgoal.do_not_lock_keys()
@property
def all_obs_keys(self):
"""
Update from superclass to include subgoals.
"""
# pool all modalities
return sorted(tuple(set([
obs_key for group in [
self.observation.modalities.obs.values(),
self.observation.modalities.goal.values(),
self.observation.modalities.subgoal.values(),
]
for modality in group
for obs_key in modality
])))