| """Utils for evaluating robot policies in various environments.""" |
|
|
| import os |
| import random |
| import time |
|
|
| import numpy as np |
| import torch |
|
|
| from src.evaluation.libero_bench.VLANeXt_utils import ( |
| get_vla as get_vlanext, |
| get_vla_action as get_vlanext_action, |
| get_processor as get_vlanext_processor, |
| ) |
|
|
| ACTION_DIM = 7 |
| DATE = time.strftime("%Y_%m_%d") |
| DATE_TIME = time.strftime("%Y_%m_%d-%H_%M_%S") |
| DEVICE = torch.device("cuda:0") if torch.cuda.is_available() else torch.device("cpu") |
| np.set_printoptions(formatter={"float": lambda x: "{0:0.3f}".format(x)}) |
|
|
|
|
| def set_seed_everywhere(seed: int): |
| """Sets the random seed for Python, NumPy, and PyTorch functions.""" |
| torch.manual_seed(seed) |
| torch.cuda.manual_seed_all(seed) |
| np.random.seed(seed) |
| random.seed(seed) |
| torch.backends.cudnn.deterministic = True |
| torch.backends.cudnn.benchmark = False |
| os.environ["PYTHONHASHSEED"] = str(seed) |
|
|
|
|
| def get_model(cfg): |
| """Load model for evaluation.""" |
| model = get_vlanext(cfg) |
| print(f"Loaded model: {type(model)}") |
| return model |
|
|
|
|
| def get_image_resize_size(cfg): |
| """ |
| Gets image resize size for a model class. |
| """ |
| return cfg.eval.image_size |
|
|
|
|
| def get_action(cfg, model, obs, task_label, processor=None): |
| """Queries the model to get an action.""" |
| action = get_vlanext_action( |
| cfg, model, processor, obs, task_label |
| ) |
| if action.ndim == 1: |
| assert action.shape == (ACTION_DIM,) |
| else: |
| assert action.shape[-1] == ACTION_DIM |
| return action |