| | import numpy as np |
| | import torch |
| | from os.path import join as pjoin |
| | from .humanml.utils.word_vectorizer import WordVectorizer |
| | from .humanml.scripts.motion_process import (process_file, recover_from_ric) |
| | from .HumanML3D import HumanML3DDataModule |
| | from .humanml import Text2MotionDatasetEval, Text2MotionDataset, Text2MotionDatasetCB, MotionDataset, MotionDatasetVQ, Text2MotionDatasetToken |
| |
|
| |
|
| | class KitDataModule(HumanML3DDataModule): |
| | def __init__(self, cfg, **kwargs): |
| |
|
| | super().__init__(cfg, **kwargs) |
| |
|
| | |
| | self.name = "kit" |
| | self.njoints = 21 |
| |
|
| | |
| | data_root = cfg.DATASET.KIT.ROOT |
| | self.hparams.data_root = data_root |
| | self.hparams.text_dir = pjoin(data_root, "texts") |
| | self.hparams.motion_dir = pjoin(data_root, 'new_joint_vecs') |
| |
|
| | |
| | dis_data_root = pjoin(cfg.DATASET.KIT.MEAN_STD_PATH, 'kit', |
| | "VQVAEV3_CB1024_CMT_H1024_NRES3", "meta") |
| | self.hparams.mean = np.load(pjoin(dis_data_root, "mean.npy")) |
| | self.hparams.std = np.load(pjoin(dis_data_root, "std.npy")) |
| |
|
| | |
| | dis_data_root_eval = pjoin(cfg.DATASET.KIT.MEAN_STD_PATH, 't2m', |
| | "Comp_v6_KLD005", "meta") |
| | self.hparams.mean_eval = np.load(pjoin(dis_data_root_eval, "mean.npy")) |
| | self.hparams.std_eval = np.load(pjoin(dis_data_root_eval, "std.npy")) |
| |
|
| | |
| | self.hparams.max_motion_length = cfg.DATASET.KIT.MAX_MOTION_LEN |
| | self.hparams.min_motion_length = cfg.DATASET.KIT.MIN_MOTION_LEN |
| | self.hparams.max_text_len = cfg.DATASET.KIT.MAX_TEXT_LEN |
| | self.hparams.unit_length = cfg.DATASET.KIT.UNIT_LEN |
| | |
| | |
| | self._sample_set = self.get_sample_set(overrides={"split": "test", "tiny": True}) |
| | self.nfeats = self._sample_set.nfeats |
| | cfg.DATASET.NFEATS = self.nfeats |
| |
|
| | def feats2joints(self, features): |
| | mean = torch.tensor(self.hparams.mean).to(features) |
| | std = torch.tensor(self.hparams.std).to(features) |
| | features = features * std + mean |
| | return recover_from_ric(features, self.njoints) |
| |
|
| | def joints2feats(self, features): |
| | features = process_file(features, self.njoints)[0] |
| | |
| | |
| | |
| | return features |
| |
|
| | def normalize(self, features): |
| | mean = torch.tensor(self.hparams.mean).to(features) |
| | std = torch.tensor(self.hparams.std).to(features) |
| | features = (features - mean) / std |
| | return features |
| |
|
| | def renorm4t2m(self, features): |
| | |
| | ori_mean = torch.tensor(self.hparams.mean).to(features) |
| | ori_std = torch.tensor(self.hparams.std).to(features) |
| | eval_mean = torch.tensor(self.hparams.mean_eval).to(features) |
| | eval_std = torch.tensor(self.hparams.std_eval).to(features) |
| | features = features * ori_std + ori_mean |
| | features = (features - eval_mean) / eval_std |
| | return features |
| |
|
| | def mm_mode(self, mm_on=True): |
| | |
| | if mm_on: |
| | self.is_mm = True |
| | self.name_list = self.test_dataset.name_list |
| | self.mm_list = np.random.choice(self.name_list, |
| | self.cfg.METRIC.MM_NUM_SAMPLES, |
| | replace=False) |
| | self.test_dataset.name_list = self.mm_list |
| | else: |
| | self.is_mm = False |
| | self.test_dataset.name_list = self.name_list |
| |
|