def __init__(self, config: Config):

        #if model_type == "mujoco_offline":

        self.selector_name = config.selector_name

        with open(config.model_config_file, "rb") as f:
            model_config = pickle.load(f)
        model_config = Munch(model_config)
        model_config.B = 1

        if "fix_crop" not in model_config:
            model_config.fix_crop = False
        if config.model_type == "mujoco_offline":
            self.model = model_nets.mujoco_offline.MujocoOffline(model_config)
        elif config.model_type == "mujoco_offline_metric":
            self.model = model_nets.mujoco_offline_metric.MujocoOfflineMetric(
                model_config)

        self.saveload_config = dict()
        self.saveload_config["total_init"] = True
        self.saveload_config["reset_iter"] = False

        self.saveload_config["loadname"] = dict()
        ckpt_dict = eval(config.ckpt_dict)
        for key in ckpt_dict:
            self.saveload_config["loadname"][key] = ckpt_dict[key]
        self.saveload_config = Munch(self.saveload_config)

        self.saverloader = saverloader.SaverLoader(self.saveload_config,
                                                   self.model,
                                                   load_only=True)
        start_iter = self.saverloader.load_weights(optimizer=None)

        if config.model_type == "mujoco_offline":
            with open(config.cluster_pkl_file, 'rb') as f:
                self.cluster_centers = pickle.load(f)
            for center_name in self.cluster_centers:
                # key is string
                # center is B x H x W x D x C
                self.cluster_centers[center_name] = np.expand_dims(
                    self.cluster_centers[center_name], axis=0)
        elif config.model_type == "mujoco_offline_metric":
            self.cluster_centers = self.model.get_cluster_centers_dict()
    def __init__(self, config: Config):
        self.config = config

        with open(config.model_config_file, "rb") as f:
            model_config = pickle.load(f)
        model_config = Munch(model_config)
        model_config.B = 1

        self.model = model_nets.mujoco_offline.MujocoOffline(model_config)
        self.saveload_config = dict()
        self.saveload_config["total_init"] = True
        self.saveload_config["reset_iter"] = False

        self.saveload_config["loadname"] = dict()
        ckpt_dict = eval(config.ckpt_dict)
        for key in ckpt_dict:
            self.saveload_config["loadname"][key] = ckpt_dict[key]
        self.saveload_config = Munch(self.saveload_config)

        self.saverloader = saverloader.SaverLoader(self.saveload_config,
                                                   self.model,
                                                   load_only=True)
        start_iter = self.saverloader.load_weights(optimizer=None)

        # setup camera
        self.camera_positions, self.camera_quats = pcp_utils.cameras.generate_new_cameras_hemisphere(
            radius=self.config.camera_radius,
            lookat_point=self.config.camera_lookat_pos,
            pitch=self.config.camera_pitch,
            yaw=self.config.camera_yaw,
            yaw_list=self.config.camera_yaw_list)
        self.n_cams = len(self.camera_positions)

        mujoco_T_adam = np.array([[1, 0, 0], [0, 0, 1], [0, -1, 0]],
                                 dtype=np.float32)
        origin_T_camR_xpos = np.array(config.table_top, np.float32) + np.array(
            config.table_T_camR, np.float)

        origin_T_adam = np.zeros((4, 4), dtype=np.float32)
        origin_T_adam[:3, :3] = mujoco_T_adam
        origin_T_adam[:3, 3] = origin_T_camR_xpos
        origin_T_adam[3, 3] = 1
        self.origin_T_adam = origin_T_adam
        self.adam_T_origin = np.linalg.inv(self.origin_T_adam)