Spaces:
Running
on
Zero
Running
on
Zero
| import sys | |
| import torch | |
| from motion_loader import get_dataset_loader, get_motion_loader | |
| from datasets import get_dataset | |
| from models import build_models | |
| from eval import EvaluatorModelWrapper, evaluation | |
| from utils.utils import * | |
| from utils.model_load import load_model_weights | |
| import os | |
| from os.path import join as pjoin | |
| from models.gaussian_diffusion import DiffusePipeline | |
| from accelerate.utils import set_seed | |
| from options.evaluate_options import TestOptions | |
| import yaml | |
| from box import Box | |
| def yaml_to_box(yaml_file): | |
| with open(yaml_file, "r") as file: | |
| yaml_data = yaml.safe_load(file) | |
| return Box(yaml_data) | |
| if __name__ == "__main__": | |
| parser = TestOptions() | |
| opt = parser.parse() | |
| set_seed(0) | |
| if opt.edit_mode: | |
| edit_config = yaml_to_box("options/edit.yaml") | |
| else: | |
| edit_config = yaml_to_box("options/noedit.yaml") | |
| device_id = opt.gpu_id | |
| device = torch.device("cuda:%d" % device_id if torch.cuda.is_available() else "cpu") | |
| torch.cuda.set_device(device) | |
| opt.device = device | |
| # load evaluator | |
| eval_wrapper = EvaluatorModelWrapper(opt) | |
| # load dataset | |
| gt_loader = get_dataset_loader(opt, opt.batch_size, mode="gt_eval", split="test") | |
| gen_dataset = get_dataset(opt, mode="eval", split="test") | |
| # load model | |
| model = build_models(opt, edit_config=edit_config) | |
| ckpt_path = pjoin(opt.model_dir, opt.which_ckpt + ".tar") | |
| load_model_weights(model, ckpt_path, use_ema=not opt.no_ema, device=device) | |
| # Create a pipeline for generation in diffusion model framework | |
| pipeline = DiffusePipeline( | |
| opt=opt, | |
| model=model, | |
| diffuser_name=opt.diffuser_name, | |
| device=device, | |
| num_inference_steps=opt.num_inference_steps, | |
| torch_dtype=torch.float32 if opt.no_fp16 else torch.float16, | |
| ) | |
| eval_motion_loaders = { | |
| "text2motion": lambda: get_motion_loader( | |
| opt, | |
| opt.batch_size, | |
| pipeline, | |
| gen_dataset, | |
| opt.mm_num_samples, | |
| opt.mm_num_repeats, | |
| ) | |
| } | |
| save_dir = pjoin(opt.save_root, "eval") | |
| os.makedirs(save_dir, exist_ok=True) | |
| if opt.no_ema: | |
| log_file = ( | |
| pjoin(save_dir, opt.diffuser_name) | |
| + f"_{str(opt.num_inference_steps)}setps.log" | |
| ) | |
| else: | |
| log_file = ( | |
| pjoin(save_dir, opt.diffuser_name) | |
| + f"_{str(opt.num_inference_steps)}steps_ema.log" | |
| ) | |
| if not os.path.exists(log_file): | |
| config_dict = dict(pipeline.scheduler.config) | |
| config_dict["no_ema"] = opt.no_ema | |
| with open(log_file, "wt") as f: | |
| f.write("------------ Options -------------\n") | |
| for k, v in sorted(config_dict.items()): | |
| f.write("%s: %s\n" % (str(k), str(v))) | |
| f.write("-------------- End ----------------\n") | |
| all_metrics = evaluation( | |
| eval_wrapper, | |
| gt_loader, | |
| eval_motion_loaders, | |
| log_file, | |
| opt.replication_times, | |
| opt.diversity_times, | |
| opt.mm_num_times, | |
| run_mm=True, | |
| ) | |