diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b07bffc --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +TARGETS +body_visualizer +human_body_prior +*_fb.py diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..3232ed6 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,80 @@ +# Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic +address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a +professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +Examples of representing a project or community include using an official +project e-mail address, posting via an official social media account, or acting +as an appointed representative at an online or offline event. Representation of +a project may be further defined and clarified by project maintainers. + +This Code of Conduct also applies outside the project spaces when there is a +reasonable belief that an individual's behavior may have a negative impact on +the project or its community. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at . All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..80b78f0 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,36 @@ +# Contributing to AGRoL +We want to make contributing to this project as easy and transparent as +possible. + +## Pull Requests +We actively welcome your pull requests. + +1. Fork the repo and create your branch from `main`. +2. If you've added code that should be tested, add tests. +3. If you've changed APIs, update the documentation. +4. Ensure the test suite passes. +5. Make sure your code lints. +6. If you haven't already, complete the Contributor License Agreement ("CLA"). + +## Contributor License Agreement ("CLA") +In order to accept your pull request, we need you to submit a CLA. You only need +to do this once to work on any of Facebook's open source projects. + +Complete your CLA here: + +## Issues +We use GitHub issues to track public bugs. Please ensure your description is +clear and has sufficient instructions to be able to reproduce the issue. + +Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe +disclosure of security bugs. In those cases, please go through the process +outlined on that page and do not file a public issue. + +## Coding Style +* 4 spaces for indentation rather than tabs +* 80 character line length +* PEP8 formatting following [Black](https://black.readthedocs.io/en/stable/) + +## License +By contributing to AGRoL, you agree that your contributions will be licensed +under the LICENSE file in the root directory of this source tree. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6b28d56 --- /dev/null +++ b/LICENSE @@ -0,0 +1,399 @@ +Attribution-NonCommercial 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + j. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + k. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + l. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d3ca48d --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +# AGRoL: Generating Smooth Human Motion from Sparse Tracking Inputs with Diffusion Model + +> [**Avatars Grow Legs: Generating Smooth Human Motion from Sparse Tracking Inputs with Diffusion Model**](https://dulucas.github.io/agrol/) +> [Y. Du](https://dulucas.github.io/), [R. Kips](https://scholar.google.fr/citations?user=RwyrWEkAAAAJ&hl=en), A. [Pumarola](https://www.albertpumarola.com/), [S. Starke](https://www.sebastianxstarke.com/), [A. Thabet](https://scholar.google.com/citations?user=7T0CPEkAAAAJ&hl=en), [A. Sanakoyeu](https://gdude.de/) +> CVPR 2023 + +[[`arXiv`](https://arxiv.org/abs/2304.08577)] [[`Project`](https://dulucas.github.io/agrol/)] [[`BibTeX`](#-citing-agrol)] + +

+ +## Enviroment Setup +All our experiments are done on a single V-100 16G GPU. +``` +conda env create -f environment.yml +conda activate agrol +``` +The code was tested on Python 3.9 and PyTorch 1.12.1. + +Download the [human_body_prior](https://github.com/nghorbani/human_body_prior/tree/master/src) lib and [body_visualizer](https://github.com/nghorbani/body_visualizer/tree/master/src) lib and put them in this repo. The repo should look like +``` +agrol +├── body_visualizer +├──── mesh/ +├──── tools/ +├──── ... +├── human_body_prior/ +├──── body_model/ +├──── data/ +├──── ... +├── dataset/ +├── prepare_data/ +└── ... +``` + +## Dataset Preparation +Please download the AMASS dataset from [here](https://amass.is.tue.mpg.de/)(SMPL+H G). +``` +python prepare_data.py --support_dir /path/to/your/smplh/dmpls --save_dir ./dataset/AMASS/ --root_dir /path/to/your/amass/dataset +``` +The generated dataset should look like this +``` +./dataset/AMASS/ +├── BioMotionLab_NTroje +├──── train/ +├──── test/ +├── CMU/ +├──── train/ +├──── test/ +└── MPI_HDM05/ +├──── train/ +└──── test/ +``` + +## Evaluation +You can either download our pre-trained models or use your pre-trained model. +To download our pre-trained models: +``` +sh prepare_data/download_model.sh +``` + +To evaluate the model: +``` +# Diffusion model +python test.py --model_path /path/to/your/model --timestep_respacing ddim5 --support_dir /path/to/your/smpls/dmpls --dataset_path ./dataset/AMASS/ + +# MLP +python test.py --model_path /path/to/your/model --support_dir /path/to/your/smpls/dmpls --dataset_path ./dataset/AMASS/ +``` + +## Pretrained Weights +The pretrained weights for AGROL can be downloaded from this link: *coming soon*. +To do it automatically, please run `bash prepare_data/download_model.sh`. + + +## Training +To train the AGRoL model(diffusion-model): +``` +python train.py --save_dir /path/to/save/your/model --dataset amass --weight_decay 1e-4 --batch_size 256 --lr 3e-4 --latent_dim 512 --save_interval 1 --log_interval 1 --device 0 --input_motion_length 196 --diffusion_steps 1000 --num_workers 8 --motion_nfeat 132 --arch diffusion_DiffMLP --layers 12 --sparse_dim 54 --train_dataset_repeat_times 1000 --lr_anneal_steps 225000 --overwrite +``` +To train the MLP model: +``` +python train.py --save_dir /path/to/save/your/model --dataset amass --weight_decay 1e-4 --batch_size 256 --lr 3e-4 --latent_dim 512 --save_interval 1 --log_interval 1 --device 0 --input_motion_length 196 --diffusion_steps 1000 --num_workers 8 --motion_nfeat 132 --arch mlp_PureMLP --layers 12 --sparse_dim 54 --train_dataset_repeat_times 1000 --lr_anneal_steps 225000 --overwrite --no_normalization +``` + +## License +![CC BY-NC 4.0][cc-by-nc-shield] + +The majority of AGRoL code is licensed under CC-BY-NC, however portions of the project are available under separate license terms: +- Trimesh, [AvatarPose](https://github.com/eth-siplab/AvatarPoser), [Guided Diffusion](https://github.com/openai/guided-diffusion), and [MDM](https://github.com/GuyTevet/motion-diffusion-model) are licensed under the MIT license; +- Human Body Prior is licensed under a custom license for non-commercial scientific research purposes, available at [link](https://github.com/nghorbani/human_body_prior/blob/master/LICENSE); +- Body Visualizer is licensed under a custom license for non-commercial scientific research purposes, available at [link](https://github.com/nghorbani/body_visualizer/blob/master/LICENSE). + +[cc-by-nc-shield]: https://img.shields.io/badge/License-CC%20BY--NC%204.0-lightgrey.svg + +## Citing AGRoL +If you find our work inspiring or use our codebase in your research, please consider giving a star ⭐ and a citation. + +```BibTeX +@inproceedings{du2023agrol, + author = {Du, Yuming and Kips, Robin and Pumarola, Albert and Starke, Sebastian and Thabet, Ali and Sanakoyeu, Artsiom}, + title = {Avatars Grow Legs: Generating Smooth Human Motion from Sparse Tracking Inputs with Diffusion Model}, + booktitle = {CVPR}, + year = {2023}, +} +``` diff --git a/data_loaders/dataloader.py b/data_loaders/dataloader.py new file mode 100644 index 0000000..65018c2 --- /dev/null +++ b/data_loaders/dataloader.py @@ -0,0 +1,230 @@ +# Copyright (c) Meta Platforms, Inc. All Rights Reserved +import glob +import os + +import torch + +from torch.utils.data import DataLoader, Dataset +from tqdm import tqdm + + +class TrainDataset(Dataset): + def __init__( + self, + dataset, + mean, + std, + motions, + sparses, + input_motion_length=196, + train_dataset_repeat_times=1, + no_normalization=False, + ): + self.dataset = dataset + self.mean = mean + self.std = std + self.motions = motions + self.sparses = sparses + self.train_dataset_repeat_times = train_dataset_repeat_times + self.no_normalization = no_normalization + + self.motions = motions + self.sparses = sparses + + self.input_motion_length = input_motion_length + + def __len__(self): + return len(self.motions) * self.train_dataset_repeat_times + + def inv_transform(self, data): + return data * self.std + self.mean + + def __getitem__(self, idx): + motion = self.motions[idx % len(self.motions)] + sparse = self.sparses[idx % len(self.motions)] + seqlen = motion.shape[0] + + if seqlen <= self.input_motion_length: + idx = 0 + else: + idx = torch.randint(0, int(seqlen - self.input_motion_length), (1,))[0] + motion = motion[idx : idx + self.input_motion_length] + sparse = sparse[idx : idx + self.input_motion_length] + + # Normalization + if not self.no_normalization: + motion = (motion - self.mean) / (self.std + 1e-8) + + return motion.float(), sparse.float() + + +class TestDataset(Dataset): + def __init__( + self, + name, + mean, + std, + all_info, + filename_list, + normalize_sparse="none", + ): + self.name = name + self.mean = mean + self.std = std + self.filename_list = filename_list + self.normalize_sparse = normalize_sparse + + self.motions = [] + self.sparses = [] + self.body_params = [] + self.head_motion = [] + for i in all_info: + self.motions.append(i["rotation_local_full_gt_list"]) + self.sparses.append(i["hmd_position_global_full_gt_list"]) + self.body_params.append(i["body_parms_list"]) + self.head_motion.append(i["head_global_trans_list"]) + + def __len__(self): + return len(self.motions) + + def inv_transform(self, data): + return data * self.std + self.mean + + def __getitem__(self, idx): + motion = self.motions[idx] + sparse = self.sparses[idx] + body_param = self.body_params[idx] + head_motion = self.head_motion[idx] + filename = self.filename_list[idx] + + return ( + motion, + sparse.unsqueeze(0), + body_param, + head_motion, + filename, + ) + + +def get_mean_std_path(dataset): + return dataset + "_mean.pt", dataset + "_std.pt" + + +def get_motion(motion_list): + # rotation_local_full_gt_list : 6d rotation parameters + # hmd_position_global_full_gt_list : 3 joints(head, hands) 6d rotation/6d rotation velocity/global translation/global translation velocity + motions = [i["rotation_local_full_gt_list"] for i in motion_list] + sparses = [i["hmd_position_global_full_gt_list"] for i in motion_list] + return motions, sparses + + +def get_path(dataset_path, split): + data_list_path = [] + parent_data_path = glob.glob(dataset_path + "/*") + for d in parent_data_path: + if os.path.isdir(d): + files = glob.glob(d + "/" + split + "/*pt") + data_list_path.extend(files) + return data_list_path + + +def load_data(dataset, dataset_path, split, **kwargs): + """ + Collect the data for the given split + + Args: + - For test: + dataset : the name of the testing dataset + split : test or train + - For train: + dataset : the name of the training dataset + split : train or test + input_motion_length : the input motion length + + Outout: + - For test: + filename_list : List of all filenames in the dataset + motion_list : List contains N dictoinaries, with + "hmd_position_global_full_gt_list" - sparse features of the 3 joints + "local_joint_parameters_gt_list" - body parameters Nx7[tx,ty,tz,rx,ry,rz] as the input of the human kinematic model + "head_global_trans_list" - Tx4x4 matrix which contains the global rotation and global translation of the head movement + mean : mean of train dataset + std : std of train dataset + - For train: + new_motions : motions indicates the sequences of rotation representation of each joint + new_sparses : sparses indicates the sequences of sparse features of the 3 joints + mean : mean of train dataset + std : std of train dataset + """ + + if split == "test": + motion_list = get_path(dataset_path, split) + mean_path, std_path = get_mean_std_path(dataset) + filename_list = [ + "-".join([i.split("/")[-3], i.split("/")[-1]]).split(".")[0] + for i in motion_list + ] + motion_list = [torch.load(i) for i in tqdm(motion_list)] + mean = torch.load(os.path.join(dataset_path, mean_path)) + std = torch.load(os.path.join(dataset_path, std_path)) + return filename_list, motion_list, mean, std + + assert split == "train" + assert ( + "input_motion_length" in kwargs + ), "Please specify the input_motion_length to load training dataset" + + motion_list = get_path(dataset_path, split) + mean_path, std_path = get_mean_std_path(dataset) + input_motion_length = kwargs["input_motion_length"] + motion_list = [torch.load(i) for i in tqdm(motion_list)] + + motions, sparses = get_motion(motion_list) + + new_motions = [] + new_sparses = [] + for idx, motion in enumerate(motions): + if motion.shape[0] < input_motion_length: # Arbitrary choice + continue + new_sparses.append(sparses[idx]) + new_motions.append(motions[idx]) + + if os.path.exists(os.path.join(dataset_path, mean_path)): + mean = torch.load(os.path.join(dataset_path, mean_path)) + std = torch.load(os.path.join(dataset_path, std_path)) + else: + tmp_data_list = torch.cat(new_motions, dim=0) + mean = tmp_data_list.mean(axis=0).float() + std = tmp_data_list.std(axis=0).float() + with open(os.path.join(dataset_path, mean_path), "wb") as f: + torch.save(mean, f) + with open(os.path.join(dataset_path, std_path), "wb") as f: + torch.save(std, f) + + return new_motions, new_sparses, mean, std + + +def get_dataloader( + dataset, + split, + batch_size, + num_workers=32, +): + + if split == "train": + shuffle = True + drop_last = True + num_workers = num_workers + else: + shuffle = False + drop_last = False + num_workers = 1 + loader = DataLoader( + dataset, + batch_size=batch_size, + shuffle=shuffle, + num_workers=num_workers, + drop_last=drop_last, + persistent_workers=False, + ) + return loader diff --git a/dataset/AMASS/amass_mean.pt b/dataset/AMASS/amass_mean.pt new file mode 100644 index 0000000..3e84262 Binary files /dev/null and b/dataset/AMASS/amass_mean.pt differ diff --git a/dataset/AMASS/amass_std.pt b/dataset/AMASS/amass_std.pt new file mode 100644 index 0000000..ee609cc Binary files /dev/null and b/dataset/AMASS/amass_std.pt differ diff --git a/diffusion/diffusion_model.py b/diffusion/diffusion_model.py new file mode 100644 index 0000000..8ec7f1d --- /dev/null +++ b/diffusion/diffusion_model.py @@ -0,0 +1,114 @@ +""" +This code started out as a PyTorch port of Ho et al's diffusion models: +https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/diffusion_utils_2.py + +Docstrings have been added, as well as DDIM sampling and a new collection of beta schedules. +""" +# MIT License +# Copyright (c) 2021 OpenAI +# +# This code is based on https://github.com/GuyTevet/motion-diffusion-model +# Copyright (c) Meta Platforms, Inc. All Rights Reserved + +import torch +import torch as th + +from diffusion.gaussian_diffusion import ( + GaussianDiffusion, + LossType, + ModelMeanType, + ModelVarType, +) + + +class DiffusionModel(GaussianDiffusion): + def __init__( + self, + **kwargs, + ): + super(DiffusionModel, self).__init__( + **kwargs, + ) + + def masked_l2(self, a, b): + bs, n, c = a.shape + + loss = torch.mean( + torch.norm( + (a - b).reshape(-1, 6), + 2, + 1, + ) + ) + + return loss + + def training_losses( + self, model, x_start, t, sparse, model_kwargs=None, noise=None, dataset=None + ): + + if model_kwargs is None: + model_kwargs = {} + if noise is None: + noise = th.randn_like(x_start) + x_t = self.q_sample(x_start, t, noise=noise) + + terms = {} + + if self.loss_type == LossType.KL or self.loss_type == LossType.RESCALED_KL: + terms["loss"] = self._vb_terms_bpd( + model=model, + x_start=x_start, + x_t=x_t, + t=t, + clip_denoised=False, + model_kwargs=model_kwargs, + )["output"] + if self.loss_type == LossType.RESCALED_KL: + terms["loss"] *= self.num_timesteps + elif self.loss_type == LossType.MSE or self.loss_type == LossType.RESCALED_MSE: + model_output = model(x_t, self._scale_timesteps(t), sparse, **model_kwargs) + + if self.model_var_type in [ + ModelVarType.LEARNED, + ModelVarType.LEARNED_RANGE, + ]: + B, C = x_t.shape[:2] + assert model_output.shape == (B, C * 2, *x_t.shape[2:]) + model_output, model_var_values = th.split(model_output, C, dim=1) + # Learn the variance using the variational bound, but don't let + # it affect our mean prediction. + frozen_out = th.cat([model_output.detach(), model_var_values], dim=1) + terms["vb"] = self._vb_terms_bpd( + model=lambda *args, r=frozen_out: r, + x_start=x_start, + x_t=x_t, + t=t, + clip_denoised=False, + )["output"] + if self.loss_type == LossType.RESCALED_MSE: + # Divide by 1000 for equivalence with initial implementation. + # Without a factor of 1/1000, the VB term hurts the MSE term. + terms["vb"] *= self.num_timesteps / 1000.0 + + target = { + ModelMeanType.PREVIOUS_X: self.q_posterior_mean_variance( + x_start=x_start, x_t=x_t, t=t + )[0], + ModelMeanType.START_X: x_start, + ModelMeanType.EPSILON: noise, + }[self.model_mean_type] + + assert model_output.shape == target.shape == x_start.shape + + terms["rot_mse"] = self.masked_l2( + target, + model_output, + ) + + terms["loss"] = terms["rot_mse"] + terms.get("vb", 0.0) + + else: + raise NotImplementedError(self.loss_type) + + return terms diff --git a/diffusion/fp16_util.py b/diffusion/fp16_util.py new file mode 100644 index 0000000..78ba41d --- /dev/null +++ b/diffusion/fp16_util.py @@ -0,0 +1,240 @@ +# MIT License +# Copyright (c) 2021 OpenAI +# +# This code is based on https://github.com/openai/guided-diffusion +""" +Helpers to train with 16-bit precision. +""" + +import numpy as np +import torch as th +import torch.nn as nn + +from diffusion import logger +from torch._utils import _flatten_dense_tensors, _unflatten_dense_tensors + +INITIAL_LOG_LOSS_SCALE = 20.0 + + +def convert_module_to_f16(l): + """ + Convert primitive modules to float16. + """ + if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): + l.weight.data = l.weight.data.half() + if l.bias is not None: + l.bias.data = l.bias.data.half() + + +def convert_module_to_f32(l): + """ + Convert primitive modules to float32, undoing convert_module_to_f16(). + """ + if isinstance(l, (nn.Conv1d, nn.Conv2d, nn.Conv3d)): + l.weight.data = l.weight.data.float() + if l.bias is not None: + l.bias.data = l.bias.data.float() + + +def make_master_params(param_groups_and_shapes): + """ + Copy model parameters into a (differently-shaped) list of full-precision + parameters. + """ + master_params = [] + for param_group, shape in param_groups_and_shapes: + master_param = nn.Parameter( + _flatten_dense_tensors( + [param.detach().float() for (_, param) in param_group] + ).view(shape) + ) + master_param.requires_grad = True + master_params.append(master_param) + return master_params + + +def model_grads_to_master_grads(param_groups_and_shapes, master_params): + """ + Copy the gradients from the model parameters into the master parameters + from make_master_params(). + """ + for master_param, (param_group, shape) in zip( + master_params, param_groups_and_shapes + ): + master_param.grad = _flatten_dense_tensors( + [param_grad_or_zeros(param) for (_, param) in param_group] + ).view(shape) + + +def master_params_to_model_params(param_groups_and_shapes, master_params): + """ + Copy the master parameter data back into the model parameters. + """ + # Without copying to a list, if a generator is passed, this will + # silently not copy any parameters. + for master_param, (param_group, _) in zip(master_params, param_groups_and_shapes): + for (_, param), unflat_master_param in zip( + param_group, unflatten_master_params(param_group, master_param.view(-1)) + ): + param.detach().copy_(unflat_master_param) + + +def unflatten_master_params(param_group, master_param): + return _unflatten_dense_tensors(master_param, [param for (_, param) in param_group]) + + +def get_param_groups_and_shapes(named_model_params): + named_model_params = list(named_model_params) + scalar_vector_named_params = ( + [(n, p) for (n, p) in named_model_params if p.ndim <= 1], + (-1), + ) + matrix_named_params = ( + [(n, p) for (n, p) in named_model_params if p.ndim > 1], + (1, -1), + ) + return [scalar_vector_named_params, matrix_named_params] + + +def master_params_to_state_dict( + model, param_groups_and_shapes, master_params, use_fp16 +): + if use_fp16: + state_dict = model.state_dict() + for master_param, (param_group, _) in zip( + master_params, param_groups_and_shapes + ): + for (name, _), unflat_master_param in zip( + param_group, unflatten_master_params(param_group, master_param.view(-1)) + ): + assert name in state_dict + state_dict[name] = unflat_master_param + else: + state_dict = model.state_dict() + for i, (name, _value) in enumerate(model.named_parameters()): + assert name in state_dict + state_dict[name] = master_params[i] + return state_dict + + +def state_dict_to_master_params(model, state_dict, use_fp16): + if use_fp16: + named_model_params = [ + (name, state_dict[name]) for name, _ in model.named_parameters() + ] + param_groups_and_shapes = get_param_groups_and_shapes(named_model_params) + master_params = make_master_params(param_groups_and_shapes) + else: + master_params = [state_dict[name] for name, _ in model.named_parameters()] + return master_params + + +def zero_master_grads(master_params): + for param in master_params: + param.grad = None + + +def zero_grad(model_params): + for param in model_params: + # Taken from https://pytorch.org/docs/stable/_modules/torch/optim/optimizer.html#Optimizer.add_param_group + if param.grad is not None: + param.grad.detach_() + param.grad.zero_() + + +def param_grad_or_zeros(param): + if param.grad is not None: + return param.grad.data.detach() + else: + return th.zeros_like(param) + + +class MixedPrecisionTrainer: + def __init__( + self, + *, + model, + use_fp16=False, + fp16_scale_growth=1e-3, + initial_lg_loss_scale=INITIAL_LOG_LOSS_SCALE, + ): + self.model = model + self.use_fp16 = use_fp16 + self.fp16_scale_growth = fp16_scale_growth + + self.model_params = list(self.model.parameters()) + self.master_params = self.model_params + self.param_groups_and_shapes = None + self.lg_loss_scale = initial_lg_loss_scale + + if self.use_fp16: + self.param_groups_and_shapes = get_param_groups_and_shapes( + self.model.named_parameters() + ) + self.master_params = make_master_params(self.param_groups_and_shapes) + self.model.convert_to_fp16() + + def zero_grad(self): + zero_grad(self.model_params) + + def backward(self, loss: th.Tensor): + if self.use_fp16: + loss_scale = 2**self.lg_loss_scale + (loss * loss_scale).backward() + else: + loss.backward() + + def optimize(self, opt: th.optim.Optimizer): + if self.use_fp16: + return self._optimize_fp16(opt) + else: + return self._optimize_normal(opt) + + def _optimize_fp16(self, opt: th.optim.Optimizer): + logger.logkv_mean("lg_loss_scale", self.lg_loss_scale) + model_grads_to_master_grads(self.param_groups_and_shapes, self.master_params) + grad_norm, param_norm = self._compute_norms(grad_scale=2**self.lg_loss_scale) + if check_overflow(grad_norm): + self.lg_loss_scale -= 1 + logger.log(f"Found NaN, decreased lg_loss_scale to {self.lg_loss_scale}") + zero_master_grads(self.master_params) + return False + + logger.logkv_mean("grad_norm", grad_norm) + logger.logkv_mean("param_norm", param_norm) + + self.master_params[0].grad.mul_(1.0 / (2**self.lg_loss_scale)) + opt.step() + zero_master_grads(self.master_params) + master_params_to_model_params(self.param_groups_and_shapes, self.master_params) + self.lg_loss_scale += self.fp16_scale_growth + return True + + def _optimize_normal(self, opt: th.optim.Optimizer): + grad_norm, param_norm = self._compute_norms() + logger.logkv_mean("grad_norm", grad_norm) + logger.logkv_mean("param_norm", param_norm) + opt.step() + return True + + def _compute_norms(self, grad_scale=1.0): + grad_norm = 0.0 + param_norm = 0.0 + for p in self.master_params: + with th.no_grad(): + param_norm += th.norm(p, p=2, dtype=th.float32).item() ** 2 + if p.grad is not None: + grad_norm += th.norm(p.grad, p=2, dtype=th.float32).item() ** 2 + return np.sqrt(grad_norm) / grad_scale, np.sqrt(param_norm) + + def master_params_to_state_dict(self, master_params): + return master_params_to_state_dict( + self.model, self.param_groups_and_shapes, master_params, self.use_fp16 + ) + + def state_dict_to_master_params(self, state_dict): + return state_dict_to_master_params(self.model, state_dict, self.use_fp16) + + +def check_overflow(value): + return (value == float("inf")) or (value == -float("inf")) or (value != value) diff --git a/diffusion/gaussian_diffusion.py b/diffusion/gaussian_diffusion.py new file mode 100644 index 0000000..b7766b9 --- /dev/null +++ b/diffusion/gaussian_diffusion.py @@ -0,0 +1,1410 @@ +""" +This code started out as a PyTorch port of Ho et al's diffusion models: +https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/diffusion_utils_2.py + +Docstrings have been added, as well as DDIM sampling and a new collection of beta schedules. +""" +# MIT License +# Copyright (c) 2021 OpenAI +# +# This code is based on https://github.com/openai/guided-diffusion +# MIT License +# Copyright (c) 2022 Guy Tevet +# +# This code is based on https://github.com/GuyTevet/motion-diffusion-model +# Copyright (c) Meta Platforms, Inc. All Rights Reserved + +import enum +import math +from copy import deepcopy + +import numpy as np +import torch +import torch as th + +from diffusion.losses import discretized_gaussian_log_likelihood, normal_kl + + +def mean_flat(tensor): + """ + Take the mean over all non-batch dimensions. + """ + return tensor.mean(dim=list(range(1, len(tensor.shape)))) + + +def get_named_beta_schedule(schedule_name, num_diffusion_timesteps, scale_betas=1.0): + """ + Get a pre-defined beta schedule for the given name. + + The beta schedule library consists of beta schedules which remain similar + in the limit of num_diffusion_timesteps. + Beta schedules may be added, but should not be removed or changed once + they are committed to maintain backwards compatibility. + """ + if schedule_name == "linear": + # Linear schedule from Ho et al, extended to work for any number of + # diffusion steps. + scale = scale_betas * 1000 / num_diffusion_timesteps + beta_start = scale * 0.0001 + beta_end = scale * 0.02 + return np.linspace( + beta_start, beta_end, num_diffusion_timesteps, dtype=np.float64 + ) + elif schedule_name == "cosine": + return betas_for_alpha_bar( + num_diffusion_timesteps, + lambda t: math.cos((t + 0.008) / 1.008 * math.pi / 2) ** 2, + ) + else: + raise NotImplementedError(f"unknown beta schedule: {schedule_name}") + + +def betas_for_alpha_bar(num_diffusion_timesteps, alpha_bar, max_beta=0.999): + """ + Create a beta schedule that discretizes the given alpha_t_bar function, + which defines the cumulative product of (1-beta) over time from t = [0,1]. + + :param num_diffusion_timesteps: the number of betas to produce. + :param alpha_bar: a lambda that takes an argument t from 0 to 1 and + produces the cumulative product of (1-beta) up to that + part of the diffusion process. + :param max_beta: the maximum beta to use; use values lower than 1 to + prevent singularities. + """ + betas = [] + for i in range(num_diffusion_timesteps): + t1 = i / num_diffusion_timesteps + t2 = (i + 1) / num_diffusion_timesteps + betas.append(min(1 - alpha_bar(t2) / alpha_bar(t1), max_beta)) + return np.array(betas) + + +class ModelMeanType(enum.Enum): + """ + Which type of output the model predicts. + """ + + PREVIOUS_X = enum.auto() # the model predicts x_{t-1} + START_X = enum.auto() # the model predicts x_0 + EPSILON = enum.auto() # the model predicts epsilon + + +class ModelVarType(enum.Enum): + """ + What is used as the model's output variance. + + The LEARNED_RANGE option has been added to allow the model to predict + values between FIXED_SMALL and FIXED_LARGE, making its job easier. + """ + + LEARNED = enum.auto() + FIXED_SMALL = enum.auto() + FIXED_LARGE = enum.auto() + LEARNED_RANGE = enum.auto() + + +class LossType(enum.Enum): + MSE = enum.auto() # use raw MSE loss (and KL when learning variances) + RESCALED_MSE = ( + enum.auto() + ) # use raw MSE loss (with RESCALED_KL when learning variances) + KL = enum.auto() # use the variational lower-bound + RESCALED_KL = enum.auto() # like KL, but rescale to estimate the full VLB + + def is_vb(self): + return self == LossType.KL or self == LossType.RESCALED_KL + + +class GaussianDiffusion: + """ + Utilities for training and sampling diffusion models. + + Ported directly from here, and then adapted over time to further experimentation. + https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/diffusion_utils_2.py#L42 + + :param betas: a 1-D numpy array of betas for each diffusion timestep, + starting at T and going to 1. + :param model_mean_type: a ModelMeanType determining what the model outputs. + :param model_var_type: a ModelVarType determining how variance is output. + :param loss_type: a LossType determining the loss function to use. + :param rescale_timesteps: if True, pass floating point timesteps into the + model so that they are always scaled like in the + original paper (0 to 1000). + """ + + def __init__( + self, + *, + dataset, + betas, + model_mean_type, + model_var_type, + loss_type, + rescale_timesteps=False, + lambda_rcxyz=0.0, + lambda_vel=1.0, + lambda_pose=1.0, + lambda_orient=1.0, + lambda_loc=1.0, + data_rep="rot", + lambda_root_vel=0.0, + lambda_vel_rcxyz=0.0, + lambda_fc=0.0, + ): + self.dataset = dataset + self.model_mean_type = model_mean_type + self.model_var_type = model_var_type + self.loss_type = loss_type + self.rescale_timesteps = rescale_timesteps + self.data_rep = data_rep + + if data_rep != "rot_vel" and lambda_pose != 1.0: + raise ValueError( + "lambda_pose is relevant only when training on velocities!" + ) + self.lambda_pose = lambda_pose + self.lambda_orient = lambda_orient + self.lambda_loc = lambda_loc + + self.lambda_rcxyz = lambda_rcxyz + self.lambda_vel = lambda_vel + self.lambda_root_vel = lambda_root_vel + self.lambda_vel_rcxyz = lambda_vel_rcxyz + self.lambda_fc = lambda_fc + + if ( + self.lambda_rcxyz > 0.0 + or self.lambda_vel > 0.0 + or self.lambda_root_vel > 0.0 + or self.lambda_vel_rcxyz > 0.0 + or self.lambda_fc > 0.0 + ): + assert ( + self.loss_type == LossType.MSE + ), "Geometric losses are supported by MSE loss type only!" + + # Use float64 for accuracy. + betas = np.array(betas, dtype=np.float64) + self.betas = betas + assert len(betas.shape) == 1, "betas must be 1-D" + assert (betas > 0).all() and (betas <= 1).all() + + self.num_timesteps = int(betas.shape[0]) + + alphas = 1.0 - betas + self.alphas_cumprod = np.cumprod(alphas, axis=0) + self.alphas_cumprod_prev = np.append(1.0, self.alphas_cumprod[:-1]) + self.alphas_cumprod_next = np.append(self.alphas_cumprod[1:], 0.0) + assert self.alphas_cumprod_prev.shape == (self.num_timesteps,) + + # calculations for diffusion q(x_t | x_{t-1}) and others + self.sqrt_alphas_cumprod = np.sqrt(self.alphas_cumprod) + self.sqrt_one_minus_alphas_cumprod = np.sqrt(1.0 - self.alphas_cumprod) + self.log_one_minus_alphas_cumprod = np.log(1.0 - self.alphas_cumprod) + self.sqrt_recip_alphas_cumprod = np.sqrt(1.0 / self.alphas_cumprod) + self.sqrt_recipm1_alphas_cumprod = np.sqrt(1.0 / self.alphas_cumprod - 1) + + # calculations for posterior q(x_{t-1} | x_t, x_0) + self.posterior_variance = ( + betas * (1.0 - self.alphas_cumprod_prev) / (1.0 - self.alphas_cumprod) + ) + # log calculation clipped because the posterior variance is 0 at the + # beginning of the diffusion chain. + self.posterior_log_variance_clipped = np.log( + np.append(self.posterior_variance[1], self.posterior_variance[1:]) + ) + self.posterior_mean_coef1 = ( + betas * np.sqrt(self.alphas_cumprod_prev) / (1.0 - self.alphas_cumprod) + ) + self.posterior_mean_coef2 = ( + (1.0 - self.alphas_cumprod_prev) + * np.sqrt(alphas) + / (1.0 - self.alphas_cumprod) + ) + + def masked_l2(self, a, b): + pass + + def q_mean_variance(self, x_start, t): + """ + Get the distribution q(x_t | x_0). + + :param x_start: the [N x C x ...] tensor of noiseless inputs. + :param t: the number of diffusion steps (minus 1). Here, 0 means one step. + :return: A tuple (mean, variance, log_variance), all of x_start's shape. + """ + mean = ( + _extract_into_tensor(self.sqrt_alphas_cumprod, t, x_start.shape) * x_start + ) + variance = _extract_into_tensor(1.0 - self.alphas_cumprod, t, x_start.shape) + log_variance = _extract_into_tensor( + self.log_one_minus_alphas_cumprod, t, x_start.shape + ) + return mean, variance, log_variance + + def q_sample(self, x_start, t, noise=None): + """ + Diffuse the dataset for a given number of diffusion steps. + + In other words, sample from q(x_t | x_0). + + :param x_start: the initial dataset batch. + :param t: the number of diffusion steps (minus 1). Here, 0 means one step. + :param noise: if specified, the split-out normal noise. + :return: A noisy version of x_start. + """ + if noise is None: + noise = th.randn_like(x_start) + assert noise.shape == x_start.shape + return ( + _extract_into_tensor(self.sqrt_alphas_cumprod, t, x_start.shape) * x_start + + _extract_into_tensor(self.sqrt_one_minus_alphas_cumprod, t, x_start.shape) + * noise + ) + + def q_posterior_mean_variance(self, x_start, x_t, t): + """ + Compute the mean and variance of the diffusion posterior: + + q(x_{t-1} | x_t, x_0) + + """ + assert x_start.shape == x_t.shape + posterior_mean = ( + _extract_into_tensor(self.posterior_mean_coef1, t, x_t.shape) * x_start + + _extract_into_tensor(self.posterior_mean_coef2, t, x_t.shape) * x_t + ) + posterior_variance = _extract_into_tensor(self.posterior_variance, t, x_t.shape) + posterior_log_variance_clipped = _extract_into_tensor( + self.posterior_log_variance_clipped, t, x_t.shape + ) + assert ( + posterior_mean.shape[0] + == posterior_variance.shape[0] + == posterior_log_variance_clipped.shape[0] + == x_start.shape[0] + ) + return posterior_mean, posterior_variance, posterior_log_variance_clipped + + def p_mean_variance( + self, + model, + x, + t, + sparse, + clip_denoised=True, + denoised_fn=None, + model_kwargs=None, + ): + """ + Apply the model to get p(x_{t-1} | x_t), as well as a prediction of + the initial x, x_0. + + :param model: the model, which takes a signal and a batch of timesteps + as input. + :param x: the [N x C x ...] tensor at time t. + :param t: a 1-D Tensor of timesteps. + :param clip_denoised: if True, clip the denoised signal into [-1, 1]. + :param denoised_fn: if not None, a function which applies to the + x_start prediction before it is used to sample. Applies before + clip_denoised. + :param model_kwargs: if not None, a dict of extra keyword arguments to + pass to the model. This can be used for conditioning. + :return: a dict with the following keys: + - 'mean': the model mean output. + - 'variance': the model variance output. + - 'log_variance': the log of 'variance'. + - 'pred_xstart': the prediction for x_0. + """ + + B, C = x.shape[:2] + assert t.shape == (B,) + if model_kwargs is not None: + model_output = model(x, self._scale_timesteps(t), sparse, **model_kwargs) + else: + model_output = model(x, self._scale_timesteps(t), sparse) + + if model_kwargs is not None: + if ( + "inpainting_mask" in model_kwargs["y"].keys() + and "inpainted_motion" in model_kwargs["y"].keys() + ): + inpainting_mask, inpainted_motion = ( + model_kwargs["y"]["inpainting_mask"], + model_kwargs["y"]["inpainted_motion"], + ) + assert ( + self.model_mean_type == ModelMeanType.START_X + ), "This feature supports only X_start pred for mow!" + assert ( + model_output.shape + == inpainting_mask.shape + == inpainted_motion.shape + ) + model_output = (model_output * (1 - inpainting_mask)) + ( + inpainted_motion * inpainting_mask + ) + + if self.model_var_type in [ModelVarType.LEARNED, ModelVarType.LEARNED_RANGE]: + assert model_output.shape == (B, C * 2, *x.shape[2:]) + model_output, model_var_values = th.split(model_output, C, dim=1) + if self.model_var_type == ModelVarType.LEARNED: + model_log_variance = model_var_values + model_variance = th.exp(model_log_variance) + else: + min_log = _extract_into_tensor( + self.posterior_log_variance_clipped, t, x.shape + ) + max_log = _extract_into_tensor(np.log(self.betas), t, x.shape) + # The model_var_values is [-1, 1] for [min_var, max_var]. + frac = (model_var_values + 1) / 2 + model_log_variance = frac * max_log + (1 - frac) * min_log + model_variance = th.exp(model_log_variance) + else: + model_variance, model_log_variance = { + # for fixedlarge, we set the initial (log-)variance like so + # to get a better decoder log likelihood. + ModelVarType.FIXED_LARGE: ( + np.append(self.posterior_variance[1], self.betas[1:]), + np.log(np.append(self.posterior_variance[1], self.betas[1:])), + ), + ModelVarType.FIXED_SMALL: ( + self.posterior_variance, + self.posterior_log_variance_clipped, + ), + }[self.model_var_type] + + model_variance = _extract_into_tensor(model_variance, t, x.shape) + model_log_variance = _extract_into_tensor(model_log_variance, t, x.shape) + + def process_xstart(x): + if denoised_fn is not None: + x = denoised_fn(x) + if clip_denoised: + # print('clip_denoised', clip_denoised) + return x.clamp(-1, 1) + return x + + if self.model_mean_type == ModelMeanType.PREVIOUS_X: + pred_xstart = process_xstart( + self._predict_xstart_from_xprev(x_t=x, t=t, xprev=model_output) + ) + model_mean = model_output + elif self.model_mean_type in [ + ModelMeanType.START_X, + ModelMeanType.EPSILON, + ]: # THIS IS US! + if self.model_mean_type == ModelMeanType.START_X: + pred_xstart = process_xstart(model_output) + else: + pred_xstart = process_xstart( + self._predict_xstart_from_eps(x_t=x, t=t, eps=model_output) + ) + model_mean, _, _ = self.q_posterior_mean_variance( + x_start=pred_xstart, x_t=x, t=t + ) + else: + raise NotImplementedError(self.model_mean_type) + + assert ( + model_mean.shape == model_log_variance.shape == pred_xstart.shape == x.shape + ) + return { + "mean": model_mean, + "variance": model_variance, + "log_variance": model_log_variance, + "pred_xstart": pred_xstart, + } + + def _predict_xstart_from_eps(self, x_t, t, eps): + assert x_t.shape == eps.shape + return ( + _extract_into_tensor(self.sqrt_recip_alphas_cumprod, t, x_t.shape) * x_t + - _extract_into_tensor(self.sqrt_recipm1_alphas_cumprod, t, x_t.shape) * eps + ) + + def _predict_xstart_from_xprev(self, x_t, t, xprev): + assert x_t.shape == xprev.shape + return ( # (xprev - coef2*x_t) / coef1 + _extract_into_tensor(1.0 / self.posterior_mean_coef1, t, x_t.shape) * xprev + - _extract_into_tensor( + self.posterior_mean_coef2 / self.posterior_mean_coef1, t, x_t.shape + ) + * x_t + ) + + def _predict_eps_from_xstart(self, x_t, t, pred_xstart): + return ( + _extract_into_tensor(self.sqrt_recip_alphas_cumprod, t, x_t.shape) * x_t + - pred_xstart + ) / _extract_into_tensor(self.sqrt_recipm1_alphas_cumprod, t, x_t.shape) + + def _scale_timesteps(self, t): + if self.rescale_timesteps: + return t.float() * (1000.0 / self.num_timesteps) + return t + + def condition_mean(self, cond_fn, p_mean_var, x, t, model_kwargs=None): + """ + Compute the mean for the previous step, given a function cond_fn that + computes the gradient of a conditional log probability with respect to + x. In particular, cond_fn computes grad(log(p(y|x))), and we want to + condition on y. + + This uses the conditioning strategy from Sohl-Dickstein et al. (2015). + """ + gradient = cond_fn(x, self._scale_timesteps(t), **model_kwargs) + new_mean = ( + p_mean_var["mean"].float() + p_mean_var["variance"] * gradient.float() + ) + return new_mean + + def condition_mean_with_grad(self, cond_fn, p_mean_var, x, t, model_kwargs=None): + """ + Compute the mean for the previous step, given a function cond_fn that + computes the gradient of a conditional log probability with respect to + x. In particular, cond_fn computes grad(log(p(y|x))), and we want to + condition on y. + + This uses the conditioning strategy from Sohl-Dickstein et al. (2015). + """ + gradient = cond_fn(x, t, p_mean_var, **model_kwargs) + new_mean = ( + p_mean_var["mean"].float() + p_mean_var["variance"] * gradient.float() + ) + return new_mean + + def condition_score(self, cond_fn, p_mean_var, x, t, model_kwargs=None): + """ + Compute what the p_mean_variance output would have been, should the + model's score function be conditioned by cond_fn. + + See condition_mean() for details on cond_fn. + + Unlike condition_mean(), this instead uses the conditioning strategy + from Song et al (2020). + """ + alpha_bar = _extract_into_tensor(self.alphas_cumprod, t, x.shape) + + eps = self._predict_eps_from_xstart(x, t, p_mean_var["pred_xstart"]) + eps = eps - (1 - alpha_bar).sqrt() * cond_fn( + x, self._scale_timesteps(t), **model_kwargs + ) + + out = p_mean_var.copy() + out["pred_xstart"] = self._predict_xstart_from_eps(x, t, eps) + out["mean"], _, _ = self.q_posterior_mean_variance( + x_start=out["pred_xstart"], x_t=x, t=t + ) + return out + + def condition_score_with_grad(self, cond_fn, p_mean_var, x, t, model_kwargs=None): + """ + Compute what the p_mean_variance output would have been, should the + model's score function be conditioned by cond_fn. + + See condition_mean() for details on cond_fn. + + Unlike condition_mean(), this instead uses the conditioning strategy + from Song et al (2020). + """ + alpha_bar = _extract_into_tensor(self.alphas_cumprod, t, x.shape) + + eps = self._predict_eps_from_xstart(x, t, p_mean_var["pred_xstart"]) + eps = eps - (1 - alpha_bar).sqrt() * cond_fn(x, t, p_mean_var, **model_kwargs) + + out = p_mean_var.copy() + out["pred_xstart"] = self._predict_xstart_from_eps(x, t, eps) + out["mean"], _, _ = self.q_posterior_mean_variance( + x_start=out["pred_xstart"], x_t=x, t=t + ) + return out + + def p_sample( + self, + model, + x, + t, + sparse, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + const_noise=False, + ): + """ + Sample x_{t-1} from the model at the given timestep. + + :param model: the model to sample from. + :param x: the current tensor at x_{t-1}. + :param t: the value of t, starting at 0 for the first diffusion step. + :param clip_denoised: if True, clip the x_start prediction to [-1, 1]. + :param denoised_fn: if not None, a function which applies to the + x_start prediction before it is used to sample. + :param cond_fn: if not None, this is a gradient function that acts + similarly to the model. + :param model_kwargs: if not None, a dict of extra keyword arguments to + pass to the model. This can be used for conditioning. + :return: a dict containing the following keys: + - 'sample': a random sample from the model. + - 'pred_xstart': a prediction of x_0. + """ + out = self.p_mean_variance( + model, + x, + t, + sparse, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + model_kwargs=model_kwargs, + ) + noise = th.randn_like(x) + # print('const_noise', const_noise) + if const_noise: + noise = noise[[0]].repeat(x.shape[0], 1, 1, 1) + + nonzero_mask = ( + (t != 0).float().view(-1, *([1] * (len(x.shape) - 1))) + ) # no noise when t == 0 + if cond_fn is not None: + out["mean"] = self.condition_mean( + cond_fn, out, x, t, model_kwargs=model_kwargs + ) + # print('mean', out["mean"].shape, out["mean"]) + # print('log_variance', out["log_variance"].shape, out["log_variance"]) + # print('nonzero_mask', nonzero_mask.shape, nonzero_mask) + sample = out["mean"] + nonzero_mask * th.exp(0.5 * out["log_variance"]) * noise + return {"sample": sample, "pred_xstart": out["pred_xstart"]} + + def p_sample_with_grad( + self, + model, + x, + t, + sparse, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + ): + """ + Sample x_{t-1} from the model at the given timestep. + + :param model: the model to sample from. + :param x: the current tensor at x_{t-1}. + :param t: the value of t, starting at 0 for the first diffusion step. + :param clip_denoised: if True, clip the x_start prediction to [-1, 1]. + :param denoised_fn: if not None, a function which applies to the + x_start prediction before it is used to sample. + :param cond_fn: if not None, this is a gradient function that acts + similarly to the model. + :param model_kwargs: if not None, a dict of extra keyword arguments to + pass to the model. This can be used for conditioning. + :return: a dict containing the following keys: + - 'sample': a random sample from the model. + - 'pred_xstart': a prediction of x_0. + """ + with th.enable_grad(): + x = x.detach().requires_grad_() + out = self.p_mean_variance( + model, + x, + t, + sparse, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + model_kwargs=model_kwargs, + ) + noise = th.randn_like(x) + nonzero_mask = ( + (t != 0).float().view(-1, *([1] * (len(x.shape) - 1))) + ) # no noise when t == 0 + if cond_fn is not None: + out["mean"] = self.condition_mean_with_grad( + cond_fn, out, x, t, model_kwargs=model_kwargs + ) + sample = out["mean"] + nonzero_mask * th.exp(0.5 * out["log_variance"]) * noise + return {"sample": sample, "pred_xstart": out["pred_xstart"].detach()} + + def p_sample_loop( + self, + model, + shape, + sparse=None, + noise=None, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + device=None, + progress=False, + skip_timesteps=0, + init_image=None, + randomize_class=False, + cond_fn_with_grad=False, + dump_steps=None, + const_noise=False, + ): + """ + Generate samples from the model. + + :param model: the model module. + :param shape: the shape of the samples, (N, C, H, W). + :param noise: if specified, the noise from the encoder to sample. + Should be of the same shape as `shape`. + :param clip_denoised: if True, clip x_start predictions to [-1, 1]. + :param denoised_fn: if not None, a function which applies to the + x_start prediction before it is used to sample. + :param cond_fn: if not None, this is a gradient function that acts + similarly to the model. + :param model_kwargs: if not None, a dict of extra keyword arguments to + pass to the model. This can be used for conditioning. + :param device: if specified, the device to create the samples on. + If not specified, use a model parameter's device. + :param progress: if True, show a tqdm progress bar. + :param const_noise: If True, will noise all samples with the same noise throughout sampling + :return: a non-differentiable batch of samples. + """ + final = None + if dump_steps is not None: + dump = [] + + for i, sample in enumerate( + self.p_sample_loop_progressive( + model, + shape, + sparse=sparse, + noise=noise, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + cond_fn=cond_fn, + model_kwargs=model_kwargs, + device=device, + progress=progress, + skip_timesteps=skip_timesteps, + init_image=init_image, + randomize_class=randomize_class, + cond_fn_with_grad=cond_fn_with_grad, + const_noise=const_noise, + ) + ): + if dump_steps is not None and i in dump_steps: + dump.append(deepcopy(sample["sample"])) + final = sample + if dump_steps is not None: + return dump + return final["sample"] + + def p_sample_loop_progressive( + self, + model, + shape, + sparse=None, + noise=None, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + device=None, + progress=False, + skip_timesteps=0, + init_image=None, + randomize_class=False, + cond_fn_with_grad=False, + const_noise=False, + ): + """ + Generate samples from the model and yield intermediate samples from + each timestep of diffusion. + + Arguments are the same as p_sample_loop(). + Returns a generator over dicts, where each dict is the return value of + p_sample(). + """ + if device is None: + device = next(model.parameters()).device + assert isinstance(shape, (tuple, list)) + if noise is not None: + img = noise + else: + img = th.randn(*shape, device=device) + + if skip_timesteps and init_image is None: + init_image = th.zeros_like(img) + indices = list(range(self.num_timesteps - skip_timesteps))[::-1] + + if init_image is not None: + my_t = th.ones([shape[0]], device=device, dtype=th.long) * indices[0] + img = self.q_sample(init_image, my_t, img) + + if progress: + # Lazy import so that we don't depend on tqdm. + from tqdm.auto import tqdm + + indices = tqdm(indices) + + for i in indices: + t = th.tensor([i] * shape[0], device=device) + if randomize_class and "y" in model_kwargs: + model_kwargs["y"] = th.randint( + low=0, + high=model.num_classes, + size=model_kwargs["y"].shape, + device=model_kwargs["y"].device, + ) + with th.no_grad(): + sample_fn = ( + self.p_sample_with_grad if cond_fn_with_grad else self.p_sample + ) + out = sample_fn( + model, + img, + t, + sparse, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + cond_fn=cond_fn, + model_kwargs=model_kwargs, + const_noise=const_noise, + ) + yield out + img = out["sample"] + + def ddim_sample( + self, + model, + x, + t, + sparse, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + eta=0.0, + ): + """ + Sample x_{t-1} from the model using DDIM. + + Same usage as p_sample(). + """ + out_orig = self.p_mean_variance( + model, + x, + t, + sparse, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + model_kwargs=model_kwargs, + ) + if cond_fn is not None: + out = self.condition_score( + cond_fn, out_orig, x, t, model_kwargs=model_kwargs + ) + else: + out = out_orig + + # Usually our model outputs epsilon, but we re-derive it + # in case we used x_start or x_prev prediction. + eps = self._predict_eps_from_xstart(x, t, out["pred_xstart"]) + + alpha_bar = _extract_into_tensor(self.alphas_cumprod, t, x.shape) + alpha_bar_prev = _extract_into_tensor(self.alphas_cumprod_prev, t, x.shape) + sigma = ( + eta + * th.sqrt((1 - alpha_bar_prev) / (1 - alpha_bar)) + * th.sqrt(1 - alpha_bar / alpha_bar_prev) + ) + # Equation 12. + noise = th.randn_like(x) + mean_pred = ( + out["pred_xstart"] * th.sqrt(alpha_bar_prev) + + th.sqrt(1 - alpha_bar_prev - sigma**2) * eps + ) + nonzero_mask = ( + (t != 0).float().view(-1, *([1] * (len(x.shape) - 1))) + ) # no noise when t == 0 + sample = mean_pred + nonzero_mask * sigma * noise + return {"sample": sample, "pred_xstart": out_orig["pred_xstart"]} + + def ddim_sample_with_grad( + self, + model, + x, + t, + sparse, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + eta=0.0, + ): + """ + Sample x_{t-1} from the model using DDIM. + + Same usage as p_sample(). + """ + with th.enable_grad(): + x = x.detach().requires_grad_() + out_orig = self.p_mean_variance( + model, + x, + t, + sparse, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + model_kwargs=model_kwargs, + ) + if cond_fn is not None: + out = self.condition_score_with_grad( + cond_fn, out_orig, x, t, model_kwargs=model_kwargs + ) + else: + out = out_orig + + out["pred_xstart"] = out["pred_xstart"].detach() + + # Usually our model outputs epsilon, but we re-derive it + # in case we used x_start or x_prev prediction. + eps = self._predict_eps_from_xstart(x, t, out["pred_xstart"]) + + alpha_bar = _extract_into_tensor(self.alphas_cumprod, t, x.shape) + alpha_bar_prev = _extract_into_tensor(self.alphas_cumprod_prev, t, x.shape) + sigma = ( + eta + * th.sqrt((1 - alpha_bar_prev) / (1 - alpha_bar)) + * th.sqrt(1 - alpha_bar / alpha_bar_prev) + ) + # Equation 12. + noise = th.randn_like(x) + mean_pred = ( + out["pred_xstart"] * th.sqrt(alpha_bar_prev) + + th.sqrt(1 - alpha_bar_prev - sigma**2) * eps + ) + nonzero_mask = ( + (t != 0).float().view(-1, *([1] * (len(x.shape) - 1))) + ) # no noise when t == 0 + sample = mean_pred + nonzero_mask * sigma * noise + return {"sample": sample, "pred_xstart": out_orig["pred_xstart"].detach()} + + def ddim_reverse_sample( + self, + model, + x, + t, + sparse, + clip_denoised=True, + denoised_fn=None, + model_kwargs=None, + eta=0.0, + ): + """ + Sample x_{t+1} from the model using DDIM reverse ODE. + """ + assert eta == 0.0, "Reverse ODE only for deterministic path" + out = self.p_mean_variance( + model, + x, + t, + sparse, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + model_kwargs=model_kwargs, + ) + # Usually our model outputs epsilon, but we re-derive it + # in case we used x_start or x_prev prediction. + eps = ( + _extract_into_tensor(self.sqrt_recip_alphas_cumprod, t, x.shape) * x + - out["pred_xstart"] + ) / _extract_into_tensor(self.sqrt_recipm1_alphas_cumprod, t, x.shape) + alpha_bar_next = _extract_into_tensor(self.alphas_cumprod_next, t, x.shape) + + # Equation 12. reversed + mean_pred = ( + out["pred_xstart"] * th.sqrt(alpha_bar_next) + + th.sqrt(1 - alpha_bar_next) * eps + ) + + return {"sample": mean_pred, "pred_xstart": out["pred_xstart"]} + + def ddim_sample_loop( + self, + model, + shape, + sparse=None, + noise=None, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + device=None, + progress=False, + eta=0.0, + skip_timesteps=0, + init_image=None, + randomize_class=False, + cond_fn_with_grad=False, + dump_steps=None, + const_noise=False, + ): + """ + Generate samples from the model using DDIM. + + Same usage as p_sample_loop(). + """ + if dump_steps is not None: + raise NotImplementedError() + if const_noise: + raise NotImplementedError() + + final = None + for sample in self.ddim_sample_loop_progressive( + model, + shape, + sparse=sparse, + noise=noise, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + cond_fn=cond_fn, + model_kwargs=model_kwargs, + device=device, + progress=progress, + eta=eta, + skip_timesteps=skip_timesteps, + init_image=init_image, + randomize_class=randomize_class, + cond_fn_with_grad=cond_fn_with_grad, + ): + final = sample + return final["sample"] + + def ddim_sample_loop_progressive( + self, + model, + shape, + sparse=None, + noise=None, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + device=None, + progress=False, + eta=0.0, + skip_timesteps=0, + init_image=None, + randomize_class=False, + cond_fn_with_grad=False, + ): + """ + Use DDIM to sample from the model and yield intermediate samples from + each timestep of DDIM. + + Same usage as p_sample_loop_progressive(). + """ + if device is None: + device = next(model.parameters()).device + assert isinstance(shape, (tuple, list)) + if noise is not None: + img = noise + else: + img = th.randn(*shape, device=device) + + if skip_timesteps and init_image is None: + init_image = th.zeros_like(img) + + indices = list(range(self.num_timesteps - skip_timesteps))[::-1] + + if init_image is not None: + my_t = th.ones([shape[0]], device=device, dtype=th.long) * indices[0] + img = self.q_sample(init_image, my_t, img) + + if progress: + # Lazy import so that we don't depend on tqdm. + from tqdm.auto import tqdm + + indices = tqdm(indices) + + for i in indices: + t = th.tensor([i] * shape[0], device=device) + with th.no_grad(): + sample_fn = ( + self.ddim_sample_with_grad + if cond_fn_with_grad + else self.ddim_sample + ) + out = sample_fn( + model, + img, + t, + sparse, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + cond_fn=cond_fn, + model_kwargs=model_kwargs, + eta=eta, + ) + yield out + img = out["sample"] + + def plms_sample( + self, + model, + x, + t, + sparse=None, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + cond_fn_with_grad=False, + order=2, + old_out=None, + ): + """ + Sample x_{t-1} from the model using Pseudo Linear Multistep. + + Same usage as p_sample(). + """ + if not int(order) or not 1 <= order <= 4: + raise ValueError("order is invalid (should be int from 1-4).") + + def get_model_output(x, t): + with th.set_grad_enabled(cond_fn_with_grad and cond_fn is not None): + x = x.detach().requires_grad_() if cond_fn_with_grad else x + out_orig = self.p_mean_variance( + model, + x, + t, + sparse, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + model_kwargs=model_kwargs, + ) + if cond_fn is not None: + if cond_fn_with_grad: + out = self.condition_score_with_grad( + cond_fn, out_orig, x, t, model_kwargs=model_kwargs + ) + x = x.detach() + else: + out = self.condition_score( + cond_fn, out_orig, x, t, model_kwargs=model_kwargs + ) + else: + out = out_orig + + # Usually our model outputs epsilon, but we re-derive it + # in case we used x_start or x_prev prediction. + eps = self._predict_eps_from_xstart(x, t, out["pred_xstart"]) + return eps, out, out_orig + + alpha_bar_prev = _extract_into_tensor(self.alphas_cumprod_prev, t, x.shape) + eps, out, out_orig = get_model_output(x, t) + + if order > 1 and old_out is None: + # Pseudo Improved Euler + old_eps = [eps] + mean_pred = ( + out["pred_xstart"] * th.sqrt(alpha_bar_prev) + + th.sqrt(1 - alpha_bar_prev) * eps + ) + eps_2, _, _ = get_model_output(mean_pred, t - 1) + eps_prime = (eps + eps_2) / 2 + pred_prime = self._predict_xstart_from_eps(x, t, eps_prime) + mean_pred = ( + pred_prime * th.sqrt(alpha_bar_prev) + + th.sqrt(1 - alpha_bar_prev) * eps_prime + ) + else: + # Pseudo Linear Multistep (Adams-Bashforth) + old_eps = old_out["old_eps"] + old_eps.append(eps) + cur_order = min(order, len(old_eps)) + if cur_order == 1: + eps_prime = old_eps[-1] + elif cur_order == 2: + eps_prime = (3 * old_eps[-1] - old_eps[-2]) / 2 + elif cur_order == 3: + eps_prime = (23 * old_eps[-1] - 16 * old_eps[-2] + 5 * old_eps[-3]) / 12 + elif cur_order == 4: + eps_prime = ( + 55 * old_eps[-1] + - 59 * old_eps[-2] + + 37 * old_eps[-3] + - 9 * old_eps[-4] + ) / 24 + else: + raise RuntimeError("cur_order is invalid.") + pred_prime = self._predict_xstart_from_eps(x, t, eps_prime) + mean_pred = ( + pred_prime * th.sqrt(alpha_bar_prev) + + th.sqrt(1 - alpha_bar_prev) * eps_prime + ) + + if len(old_eps) >= order: + old_eps.pop(0) + + nonzero_mask = (t != 0).float().view(-1, *([1] * (len(x.shape) - 1))) + sample = mean_pred * nonzero_mask + out["pred_xstart"] * (1 - nonzero_mask) + + return { + "sample": sample, + "pred_xstart": out_orig["pred_xstart"], + "old_eps": old_eps, + } + + def plms_sample_loop( + self, + model, + shape, + sparse=None, + noise=None, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + device=None, + progress=False, + skip_timesteps=0, + init_image=None, + randomize_class=False, + cond_fn_with_grad=False, + order=2, + ): + """ + Generate samples from the model using Pseudo Linear Multistep. + + Same usage as p_sample_loop(). + """ + final = None + for sample in self.plms_sample_loop_progressive( + model, + shape, + sparse=sparse, + noise=noise, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + cond_fn=cond_fn, + model_kwargs=model_kwargs, + device=device, + progress=progress, + skip_timesteps=skip_timesteps, + init_image=init_image, + randomize_class=randomize_class, + cond_fn_with_grad=cond_fn_with_grad, + order=order, + ): + final = sample + return final["sample"] + + def plms_sample_loop_progressive( + self, + model, + shape, + sparse=None, + noise=None, + clip_denoised=True, + denoised_fn=None, + cond_fn=None, + model_kwargs=None, + device=None, + progress=False, + skip_timesteps=0, + init_image=None, + randomize_class=False, + cond_fn_with_grad=False, + order=2, + ): + """ + Use PLMS to sample from the model and yield intermediate samples from each + timestep of PLMS. + + Same usage as p_sample_loop_progressive(). + """ + if device is None: + device = next(model.parameters()).device + assert isinstance(shape, (tuple, list)) + if noise is not None: + img = noise + else: + img = th.randn(*shape, device=device) + + if skip_timesteps and init_image is None: + init_image = th.zeros_like(img) + + indices = list(range(self.num_timesteps - skip_timesteps))[::-1] + + if init_image is not None: + my_t = th.ones([shape[0]], device=device, dtype=th.long) * indices[0] + img = self.q_sample(init_image, my_t, img) + + if progress: + # Lazy import so that we don't depend on tqdm. + from tqdm.auto import tqdm + + indices = tqdm(indices) + + old_out = None + + for i in indices: + t = th.tensor([i] * shape[0], device=device) + if randomize_class and "y" in model_kwargs: + model_kwargs["y"] = th.randint( + low=0, + high=model.num_classes, + size=model_kwargs["y"].shape, + device=model_kwargs["y"].device, + ) + with th.no_grad(): + out = self.plms_sample( + model, + img, + t, + sparse=sparse, + clip_denoised=clip_denoised, + denoised_fn=denoised_fn, + cond_fn=cond_fn, + model_kwargs=model_kwargs, + cond_fn_with_grad=cond_fn_with_grad, + order=order, + old_out=old_out, + ) + yield out + old_out = out + img = out["sample"] + + def _vb_terms_bpd( + self, model, x_start, x_t, t, sparse=None, clip_denoised=True, model_kwargs=None + ): + """ + Get a term for the variational lower-bound. + + The resulting units are bits (rather than nats, as one might expect). + This allows for comparison to other papers. + + :return: a dict with the following keys: + - 'output': a shape [N] tensor of NLLs or KLs. + - 'pred_xstart': the x_0 predictions. + """ + true_mean, _, true_log_variance_clipped = self.q_posterior_mean_variance( + x_start=x_start, x_t=x_t, t=t + ) + out = self.p_mean_variance( + model, + x_t, + t, + sparse=sparse, + clip_denoised=clip_denoised, + model_kwargs=model_kwargs, + ) + kl = normal_kl( + true_mean, true_log_variance_clipped, out["mean"], out["log_variance"] + ) + kl = mean_flat(kl) / np.log(2.0) + + decoder_nll = -discretized_gaussian_log_likelihood( + x_start, means=out["mean"], log_scales=0.5 * out["log_variance"] + ) + assert decoder_nll.shape == x_start.shape + decoder_nll = mean_flat(decoder_nll) / np.log(2.0) + + # At the first timestep return the decoder NLL, + # otherwise return KL(q(x_{t-1}|x_t,x_0) || p(x_{t-1}|x_t)) + output = th.where((t == 0), decoder_nll, kl) + return {"output": output, "pred_xstart": out["pred_xstart"]} + + def training_losses( + self, model, x_start, t, sparse, model_kwargs=None, noise=None, dataset=None + ): + pass + + def _prior_bpd(self, x_start): + """ + Get the prior KL term for the variational lower-bound, measured in + bits-per-dim. + + This term can't be optimized, as it only depends on the encoder. + + :param x_start: the [N x C x ...] tensor of inputs. + :return: a batch of [N] KL values (in bits), one per batch element. + """ + batch_size = x_start.shape[0] + t = th.tensor([self.num_timesteps - 1] * batch_size, device=x_start.device) + qt_mean, _, qt_log_variance = self.q_mean_variance(x_start, t) + kl_prior = normal_kl( + mean1=qt_mean, logvar1=qt_log_variance, mean2=0.0, logvar2=0.0 + ) + return mean_flat(kl_prior) / np.log(2.0) + + def calc_bpd_loop(self, model, x_start, clip_denoised=True, model_kwargs=None): + """ + Compute the entire variational lower-bound, measured in bits-per-dim, + as well as other related quantities. + + :param model: the model to evaluate loss on. + :param x_start: the [N x C x ...] tensor of inputs. + :param clip_denoised: if True, clip denoised samples. + :param model_kwargs: if not None, a dict of extra keyword arguments to + pass to the model. This can be used for conditioning. + + :return: a dict containing the following keys: + - total_bpd: the total variational lower-bound, per batch element. + - prior_bpd: the prior term in the lower-bound. + - vb: an [N x T] tensor of terms in the lower-bound. + - xstart_mse: an [N x T] tensor of x_0 MSEs for each timestep. + - mse: an [N x T] tensor of epsilon MSEs for each timestep. + """ + device = x_start.device + batch_size = x_start.shape[0] + + vb = [] + xstart_mse = [] + mse = [] + for t in list(range(self.num_timesteps))[::-1]: + t_batch = th.tensor([t] * batch_size, device=device) + noise = th.randn_like(x_start) + x_t = self.q_sample(x_start=x_start, t=t_batch, noise=noise) + # Calculate VLB term at the current timestep + with th.no_grad(): + out = self._vb_terms_bpd( + model, + x_start=x_start, + x_t=x_t, + t=t_batch, + clip_denoised=clip_denoised, + model_kwargs=model_kwargs, + ) + vb.append(out["output"]) + xstart_mse.append(mean_flat((out["pred_xstart"] - x_start) ** 2)) + eps = self._predict_eps_from_xstart(x_t, t_batch, out["pred_xstart"]) + mse.append(mean_flat((eps - noise) ** 2)) + + vb = th.stack(vb, dim=1) + xstart_mse = th.stack(xstart_mse, dim=1) + mse = th.stack(mse, dim=1) + + prior_bpd = self._prior_bpd(x_start) + total_bpd = vb.sum(dim=1) + prior_bpd + return { + "total_bpd": total_bpd, + "prior_bpd": prior_bpd, + "vb": vb, + "xstart_mse": xstart_mse, + "mse": mse, + } + + +def _extract_into_tensor(arr, timesteps, broadcast_shape): + """ + Extract values from a 1-D numpy array for a batch of indices. + + :param arr: the 1-D numpy array. + :param timesteps: a tensor of indices into the array to extract. + :param broadcast_shape: a larger shape of K dimensions with the batch + dimension equal to the length of timesteps. + :return: a tensor of shape [batch_size, 1, ...] where the shape has K dims. + """ + res = th.from_numpy(arr).to(device=timesteps.device)[timesteps].float() + while len(res.shape) < len(broadcast_shape): + res = res[..., None] + return res.expand(broadcast_shape) diff --git a/diffusion/logger.py b/diffusion/logger.py new file mode 100644 index 0000000..cd72660 --- /dev/null +++ b/diffusion/logger.py @@ -0,0 +1,498 @@ +""" +Logger copied from OpenAI baselines to avoid extra RL-based dependencies: +https://github.com/openai/baselines/blob/ea25b9e8b234e6ee1bca43083f8f3cf974143998/baselines/logger.py +""" +# MIT License +# Copyright (c) 2021 OpenAI +# +# This code is based on https://github.com/openai/guided-diffusion +# Copyright (c) Meta Platforms, Inc. All Rights Reserved + +import datetime +import json +import os +import os.path as osp +import sys +import tempfile +import time +import warnings +from collections import defaultdict +from contextlib import contextmanager + +DEBUG = 10 +INFO = 20 +WARN = 30 +ERROR = 40 + +DISABLED = 50 + + +class KVWriter(object): + def writekvs(self, kvs): + raise NotImplementedError + + +class SeqWriter(object): + def writeseq(self, seq): + raise NotImplementedError + + +class HumanOutputFormat(KVWriter, SeqWriter): + def __init__(self, filename_or_file): + if isinstance(filename_or_file, str): + self.file = open(filename_or_file, "wt") + self.own_file = True + else: + assert hasattr(filename_or_file, "read"), ( + "expected file or str, got %s" % filename_or_file + ) + self.file = filename_or_file + self.own_file = False + + def writekvs(self, kvs): + # Create strings for printing + key2str = {} + for (key, val) in sorted(kvs.items()): + if hasattr(val, "__float__"): + valstr = "%-8.3g" % val + else: + valstr = str(val) + key2str[self._truncate(key)] = self._truncate(valstr) + + # Find max widths + if len(key2str) == 0: + print("WARNING: tried to write empty key-value dict") + return + else: + keywidth = max(map(len, key2str.keys())) + valwidth = max(map(len, key2str.values())) + + # Write out the data + dashes = "-" * (keywidth + valwidth + 7) + lines = [dashes] + for (key, val) in sorted(key2str.items(), key=lambda kv: kv[0].lower()): + lines.append( + "| %s%s | %s%s |" + % (key, " " * (keywidth - len(key)), val, " " * (valwidth - len(val))) + ) + lines.append(dashes) + self.file.write("\n".join(lines) + "\n") + + # Flush the output to the file + self.file.flush() + + def _truncate(self, s): + maxlen = 30 + return s[: maxlen - 3] + "..." if len(s) > maxlen else s + + def writeseq(self, seq): + seq = list(seq) + for (i, elem) in enumerate(seq): + self.file.write(elem) + if i < len(seq) - 1: # add space unless this is the last one + self.file.write(" ") + self.file.write("\n") + self.file.flush() + + def close(self): + if self.own_file: + self.file.close() + + +class JSONOutputFormat(KVWriter): + def __init__(self, filename): + self.file = open(filename, "wt") + + def writekvs(self, kvs): + for k, v in sorted(kvs.items()): + if hasattr(v, "dtype"): + kvs[k] = float(v) + self.file.write(json.dumps(kvs) + "\n") + self.file.flush() + + def close(self): + self.file.close() + + +class CSVOutputFormat(KVWriter): + def __init__(self, filename): + self.file = open(filename, "w+t") + self.keys = [] + self.sep = "," + + def writekvs(self, kvs): + # Add our current row to the history + extra_keys = list(kvs.keys() - self.keys) + extra_keys.sort() + if extra_keys: + self.keys.extend(extra_keys) + self.file.seek(0) + lines = self.file.readlines() + self.file.seek(0) + for (i, k) in enumerate(self.keys): + if i > 0: + self.file.write(",") + self.file.write(k) + self.file.write("\n") + for line in lines[1:]: + self.file.write(line[:-1]) + self.file.write(self.sep * len(extra_keys)) + self.file.write("\n") + for (i, k) in enumerate(self.keys): + if i > 0: + self.file.write(",") + v = kvs.get(k) + if v is not None: + self.file.write(str(v)) + self.file.write("\n") + self.file.flush() + + def close(self): + self.file.close() + + +class TensorBoardOutputFormat(KVWriter): + """ + Dumps key/value pairs into TensorBoard's numeric format. + """ + + def __init__(self, dir): + os.makedirs(dir, exist_ok=True) + self.dir = dir + self.step = 1 + prefix = "events" + path = osp.join(osp.abspath(dir), prefix) + import tensorflow as tf + from tensorflow.core.util import event_pb2 + from tensorflow.python import pywrap_tensorflow + from tensorflow.python.util import compat + + self.tf = tf + self.event_pb2 = event_pb2 + self.pywrap_tensorflow = pywrap_tensorflow + self.writer = pywrap_tensorflow.EventsWriter(compat.as_bytes(path)) + + def writekvs(self, kvs): + def summary_val(k, v): + kwargs = {"tag": k, "simple_value": float(v)} + return self.tf.Summary.Value(**kwargs) + + summary = self.tf.Summary(value=[summary_val(k, v) for k, v in kvs.items()]) + event = self.event_pb2.Event(wall_time=time.time(), summary=summary) + event.step = ( + self.step + ) # is there any reason why you'd want to specify the step? + self.writer.WriteEvent(event) + self.writer.Flush() + self.step += 1 + + def close(self): + if self.writer: + self.writer.Close() + self.writer = None + + +def make_output_format(format, ev_dir, log_suffix=""): + os.makedirs(ev_dir, exist_ok=True) + if format == "stdout": + return HumanOutputFormat(sys.stdout) + elif format == "log": + return HumanOutputFormat(osp.join(ev_dir, "log%s.txt" % log_suffix)) + elif format == "json": + return JSONOutputFormat(osp.join(ev_dir, "progress%s.json" % log_suffix)) + elif format == "csv": + return CSVOutputFormat(osp.join(ev_dir, "progress%s.csv" % log_suffix)) + elif format == "tensorboard": + return TensorBoardOutputFormat(osp.join(ev_dir, "tb%s" % log_suffix)) + else: + raise ValueError("Unknown format specified: %s" % (format,)) + + +# ================================================================ +# API +# ================================================================ + + +def logkv(key, val): + """ + Log a value of some diagnostic + Call this once for each diagnostic quantity, each iteration + If called many times, last value will be used. + """ + get_current().logkv(key, val) + + +def logkv_mean(key, val): + """ + The same as logkv(), but if called many times, values averaged. + """ + get_current().logkv_mean(key, val) + + +def logkvs(d): + """ + Log a dictionary of key-value pairs + """ + for (k, v) in d.items(): + logkv(k, v) + + +def dumpkvs(): + """ + Write all of the diagnostics from the current iteration + """ + return get_current().dumpkvs() + + +def getkvs(): + return get_current().name2val + + +def log(*args, level=INFO): + """ + Write the sequence of args, with no separators, to the console and output files (if you've configured an output file). + """ + get_current().log(*args, level=level) + + +def debug(*args): + log(*args, level=DEBUG) + + +def info(*args): + log(*args, level=INFO) + + +def warn(*args): + log(*args, level=WARN) + + +def error(*args): + log(*args, level=ERROR) + + +def set_level(level): + """ + Set logging threshold on current logger. + """ + get_current().set_level(level) + + +def set_comm(comm): + get_current().set_comm(comm) + + +def get_dir(): + """ + Get directory that log files are being written to. + will be None if there is no output directory (i.e., if you didn't call start) + """ + return get_current().get_dir() + + +record_tabular = logkv +dump_tabular = dumpkvs + + +@contextmanager +def profile_kv(scopename): + logkey = "wait_" + scopename + tstart = time.time() + try: + yield + finally: + get_current().name2val[logkey] += time.time() - tstart + + +def profile(n): + """ + Usage: + @profile("my_func") + def my_func(): code + """ + + def decorator_with_name(func): + def func_wrapper(*args, **kwargs): + with profile_kv(n): + return func(*args, **kwargs) + + return func_wrapper + + return decorator_with_name + + +# ================================================================ +# Backend +# ================================================================ + + +def get_current(): + if Logger.CURRENT is None: + _configure_default_logger() + + return Logger.CURRENT + + +class Logger(object): + DEFAULT = None # A logger with no output files. (See right below class definition) + # So that you can still log to the terminal without setting up any output files + CURRENT = None # Current logger being used by the free functions above + + def __init__(self, dir, output_formats, comm=None): + self.name2val = defaultdict(float) # values this iteration + self.name2cnt = defaultdict(int) + self.level = INFO + self.dir = dir + self.output_formats = output_formats + self.comm = comm + + # Logging API, forwarded + # ---------------------------------------- + def logkv(self, key, val): + self.name2val[key] = val + + def logkv_mean(self, key, val): + oldval, cnt = self.name2val[key], self.name2cnt[key] + self.name2val[key] = oldval * cnt / (cnt + 1) + val / (cnt + 1) + self.name2cnt[key] = cnt + 1 + + def dumpkvs(self): + if self.comm is None: + d = self.name2val + else: + d = mpi_weighted_mean( + self.comm, + { + name: (val, self.name2cnt.get(name, 1)) + for (name, val) in self.name2val.items() + }, + ) + if self.comm.rank != 0: + d["dummy"] = 1 # so we don't get a warning about empty dict + out = d.copy() # Return the dict for unit testing purposes + for fmt in self.output_formats: + if isinstance(fmt, KVWriter): + fmt.writekvs(d) + self.name2val.clear() + self.name2cnt.clear() + return out + + def log(self, *args, level=INFO): + if self.level <= level: + self._do_log(args) + + # Configuration + # ---------------------------------------- + def set_level(self, level): + self.level = level + + def set_comm(self, comm): + self.comm = comm + + def get_dir(self): + return self.dir + + def close(self): + for fmt in self.output_formats: + fmt.close() + + # Misc + # ---------------------------------------- + def _do_log(self, args): + for fmt in self.output_formats: + if isinstance(fmt, SeqWriter): + fmt.writeseq(map(str, args)) + + +def get_rank_without_mpi_import(): + # check environment variables here instead of importing mpi4py + # to avoid calling MPI_Init() when this module is imported + for varname in ["PMI_RANK", "OMPI_COMM_WORLD_RANK"]: + if varname in os.environ: + return int(os.environ[varname]) + return 0 + + +def mpi_weighted_mean(comm, local_name2valcount): + """ + Copied from: https://github.com/openai/baselines/blob/ea25b9e8b234e6ee1bca43083f8f3cf974143998/baselines/common/mpi_util.py#L110 + Perform a weighted average over dicts that are each on a different node + Input: local_name2valcount: dict mapping key -> (value, count) + Returns: key -> mean + """ + all_name2valcount = comm.gather(local_name2valcount) + if comm.rank == 0: + name2sum = defaultdict(float) + name2count = defaultdict(float) + for n2vc in all_name2valcount: + for (name, (val, count)) in n2vc.items(): + try: + val = float(val) + except ValueError: + if comm.rank == 0: + warnings.warn( + "WARNING: tried to compute mean on non-float {}={}".format( + name, val + ) + ) + else: + name2sum[name] += val * count + name2count[name] += count + return {name: name2sum[name] / name2count[name] for name in name2sum} + else: + return {} + + +def configure(dir=None, format_strs=None, comm=None, log_suffix=""): + """ + If comm is provided, average all numerical stats across that comm + """ + if dir is None: + dir = os.getenv("OPENAI_LOGDIR") + if dir is None: + dir = osp.join( + tempfile.gettempdir(), + datetime.datetime.now().strftime("agrol-%Y-%m-%d-%H-%M-%S-%f"), + ) + assert isinstance(dir, str) + dir = os.path.expanduser(dir) + os.makedirs(os.path.expanduser(dir), exist_ok=True) + + rank = get_rank_without_mpi_import() + if rank > 0: + log_suffix = log_suffix + "-rank%03i" % rank + + if format_strs is None: + if rank == 0: + format_strs = os.getenv("OPENAI_LOG_FORMAT", "stdout,log,csv").split(",") + else: + format_strs = os.getenv("OPENAI_LOG_FORMAT_MPI", "log").split(",") + format_strs = filter(None, format_strs) + output_formats = [make_output_format(f, dir, log_suffix) for f in format_strs] + + Logger.CURRENT = Logger(dir=dir, output_formats=output_formats, comm=comm) + if output_formats: + log("Logging to %s" % dir) + + +def _configure_default_logger(): + configure() + Logger.DEFAULT = Logger.CURRENT + + +def reset(): + if Logger.CURRENT is not Logger.DEFAULT: + Logger.CURRENT.close() + Logger.CURRENT = Logger.DEFAULT + log("Reset logger") + + +@contextmanager +def scoped_configure(dir=None, format_strs=None, comm=None): + prevlogger = Logger.CURRENT + configure(dir=dir, format_strs=format_strs, comm=comm) + try: + yield + finally: + Logger.CURRENT.close() + Logger.CURRENT = prevlogger diff --git a/diffusion/losses.py b/diffusion/losses.py new file mode 100644 index 0000000..deb42a8 --- /dev/null +++ b/diffusion/losses.py @@ -0,0 +1,79 @@ +""" +Helpers for various likelihood-based losses. These are ported from the original +Ho et al. diffusion models codebase: +https://github.com/hojonathanho/diffusion/blob/1e0dceb3b3495bbe19116a5e1b3596cd0706c543/diffusion_tf/utils.py +""" +# MIT License +# Copyright (c) 2021 OpenAI +# +# This code is based on https://github.com/openai/guided-diffusion +import numpy as np +import torch as th + + +def normal_kl(mean1, logvar1, mean2, logvar2): + """ + Compute the KL divergence between two gaussians. + + Shapes are automatically broadcasted, so batches can be compared to + scalars, among other use cases. + """ + tensor = None + for obj in (mean1, logvar1, mean2, logvar2): + if isinstance(obj, th.Tensor): + tensor = obj + break + assert tensor is not None, "at least one argument must be a Tensor" + + # Force variances to be Tensors. Broadcasting helps convert scalars to + # Tensors, but it does not work for th.exp(). + logvar1, logvar2 = [ + x if isinstance(x, th.Tensor) else th.tensor(x).to(tensor) + for x in (logvar1, logvar2) + ] + + return 0.5 * ( + -1.0 + + logvar2 + - logvar1 + + th.exp(logvar1 - logvar2) + + ((mean1 - mean2) ** 2) * th.exp(-logvar2) + ) + + +def approx_standard_normal_cdf(x): + """ + A fast approximation of the cumulative distribution function of the + standard normal. + """ + return 0.5 * (1.0 + th.tanh(np.sqrt(2.0 / np.pi) * (x + 0.044715 * th.pow(x, 3)))) + + +def discretized_gaussian_log_likelihood(x, *, means, log_scales): + """ + Compute the log-likelihood of a Gaussian distribution discretizing to a + given image. + + :param x: the target images. It is assumed that this was uint8 values, + rescaled to the range [-1, 1]. + :param means: the Gaussian mean Tensor. + :param log_scales: the Gaussian log stddev Tensor. + :return: a tensor like x of log probabilities (in nats). + """ + assert x.shape == means.shape == log_scales.shape + centered_x = x - means + inv_stdv = th.exp(-log_scales) + plus_in = inv_stdv * (centered_x + 1.0 / 255.0) + cdf_plus = approx_standard_normal_cdf(plus_in) + min_in = inv_stdv * (centered_x - 1.0 / 255.0) + cdf_min = approx_standard_normal_cdf(min_in) + log_cdf_plus = th.log(cdf_plus.clamp(min=1e-12)) + log_one_minus_cdf_min = th.log((1.0 - cdf_min).clamp(min=1e-12)) + cdf_delta = cdf_plus - cdf_min + log_probs = th.where( + x < -0.999, + log_cdf_plus, + th.where(x > 0.999, log_one_minus_cdf_min, th.log(cdf_delta.clamp(min=1e-12))), + ) + assert log_probs.shape == x.shape + return log_probs diff --git a/diffusion/resample.py b/diffusion/resample.py new file mode 100644 index 0000000..a513fdc --- /dev/null +++ b/diffusion/resample.py @@ -0,0 +1,158 @@ +# MIT License +# Copyright (c) 2021 OpenAI +# +# This code is based on https://github.com/openai/guided-diffusion +from abc import ABC, abstractmethod + +import numpy as np +import torch as th +import torch.distributed as dist + + +def create_named_schedule_sampler(name, diffusion): + """ + Create a ScheduleSampler from a library of pre-defined samplers. + + :param name: the name of the sampler. + :param diffusion: the diffusion object to sample for. + """ + if name == "uniform": + return UniformSampler(diffusion) + elif name == "loss-second-moment": + return LossSecondMomentResampler(diffusion) + else: + raise NotImplementedError(f"unknown schedule sampler: {name}") + + +class ScheduleSampler(ABC): + """ + A distribution over timesteps in the diffusion process, intended to reduce + variance of the objective. + + By default, samplers perform unbiased importance sampling, in which the + objective's mean is unchanged. + However, subclasses may override sample() to change how the resampled + terms are reweighted, allowing for actual changes in the objective. + """ + + @abstractmethod + def weights(self): + """ + Get a numpy array of weights, one per diffusion step. + + The weights needn't be normalized, but must be positive. + """ + + def sample(self, batch_size, device): + """ + Importance-sample timesteps for a batch. + + :param batch_size: the number of timesteps. + :param device: the torch device to save to. + :return: a tuple (timesteps, weights): + - timesteps: a tensor of timestep indices. + - weights: a tensor of weights to scale the resulting losses. + """ + w = self.weights() + p = w / np.sum(w) + indices_np = np.random.choice(len(p), size=(batch_size,), p=p) + indices = th.from_numpy(indices_np).long().to(device) + weights_np = 1 / (len(p) * p[indices_np]) + weights = th.from_numpy(weights_np).float().to(device) + return indices, weights + + +class UniformSampler(ScheduleSampler): + def __init__(self, diffusion): + self.diffusion = diffusion + self._weights = np.ones([diffusion.num_timesteps]) + + def weights(self): + return self._weights + + +class LossAwareSampler(ScheduleSampler): + def update_with_local_losses(self, local_ts, local_losses): + """ + Update the reweighting using losses from a model. + + Call this method from each rank with a batch of timesteps and the + corresponding losses for each of those timesteps. + This method will perform synchronization to make sure all of the ranks + maintain the exact same reweighting. + + :param local_ts: an integer Tensor of timesteps. + :param local_losses: a 1D Tensor of losses. + """ + batch_sizes = [ + th.tensor([0], dtype=th.int32, device=local_ts.device) + for _ in range(dist.get_world_size()) + ] + dist.all_gather( + batch_sizes, + th.tensor([len(local_ts)], dtype=th.int32, device=local_ts.device), + ) + + # Pad all_gather batches to be the maximum batch size. + batch_sizes = [x.item() for x in batch_sizes] + max_bs = max(batch_sizes) + + timestep_batches = [th.zeros(max_bs).to(local_ts) for bs in batch_sizes] + loss_batches = [th.zeros(max_bs).to(local_losses) for bs in batch_sizes] + dist.all_gather(timestep_batches, local_ts) + dist.all_gather(loss_batches, local_losses) + timesteps = [ + x.item() for y, bs in zip(timestep_batches, batch_sizes) for x in y[:bs] + ] + losses = [x.item() for y, bs in zip(loss_batches, batch_sizes) for x in y[:bs]] + self.update_with_all_losses(timesteps, losses) + + @abstractmethod + def update_with_all_losses(self, ts, losses): + """ + Update the reweighting using losses from a model. + + Sub-classes should override this method to update the reweighting + using losses from the model. + + This method directly updates the reweighting without synchronizing + between workers. It is called by update_with_local_losses from all + ranks with identical arguments. Thus, it should have deterministic + behavior to maintain state across workers. + + :param ts: a list of int timesteps. + :param losses: a list of float losses, one per timestep. + """ + + +class LossSecondMomentResampler(LossAwareSampler): + def __init__(self, diffusion, history_per_term=10, uniform_prob=0.001): + self.diffusion = diffusion + self.history_per_term = history_per_term + self.uniform_prob = uniform_prob + self._loss_history = np.zeros( + [diffusion.num_timesteps, history_per_term], dtype=np.float64 + ) + self._loss_counts = np.zeros([diffusion.num_timesteps], dtype=np.int) + + def weights(self): + if not self._warmed_up(): + return np.ones([self.diffusion.num_timesteps], dtype=np.float64) + weights = np.sqrt(np.mean(self._loss_history**2, axis=-1)) + weights /= np.sum(weights) + weights *= 1 - self.uniform_prob + weights += self.uniform_prob / len(weights) + return weights + + def update_with_all_losses(self, ts, losses): + for t, loss in zip(ts, losses): + if self._loss_counts[t] == self.history_per_term: + # Shift out the oldest loss term. + self._loss_history[t, :-1] = self._loss_history[t, 1:] + self._loss_history[t, -1] = loss + else: + self._loss_history[t, self._loss_counts[t]] = loss + self._loss_counts[t] += 1 + + def _warmed_up(self): + return (self._loss_counts == self.history_per_term).all() diff --git a/diffusion/respace.py b/diffusion/respace.py new file mode 100644 index 0000000..ee471d3 --- /dev/null +++ b/diffusion/respace.py @@ -0,0 +1,138 @@ +# MIT License +# Copyright (c) 2021 OpenAI +# +# This code is based on https://github.com/openai/guided-diffusion +# MIT License +# Copyright (c) 2022 Guy Tevet +# +# This code is based on https://github.com/GuyTevet/motion-diffusion-model +# Copyright (c) Meta Platforms, Inc. All Rights Reserved + +import numpy as np +import torch as th + +from .diffusion_model import DiffusionModel + + +def space_timesteps(num_timesteps, section_counts): + """ + Create a list of timesteps to use from an original diffusion process, + given the number of timesteps we want to take from equally-sized portions + of the original process. + + For example, if there's 300 timesteps and the section counts are [10,15,20] + then the first 100 timesteps are strided to be 10 timesteps, the second 100 + are strided to be 15 timesteps, and the final 100 are strided to be 20. + + If the stride is a string starting with "ddim", then the fixed striding + from the DDIM paper is used, and only one section is allowed. + + :param num_timesteps: the number of diffusion steps in the original + process to divide up. + :param section_counts: either a list of numbers, or a string containing + comma-separated numbers, indicating the step count + per section. As a special case, use "ddimN" where N + is a number of steps to use the striding from the + DDIM paper. + :return: a set of diffusion steps from the original process to use. + """ + if isinstance(section_counts, str): + if section_counts.startswith("ddim"): + desired_count = int(section_counts[len("ddim") :]) + for i in range(1, num_timesteps): + if len(range(0, num_timesteps, i)) == desired_count: + return set(range(0, num_timesteps, i)) + raise ValueError( + f"cannot create exactly {num_timesteps} steps with an integer stride" + ) + section_counts = [int(x) for x in section_counts.split(",")] + size_per = num_timesteps // len(section_counts) + extra = num_timesteps % len(section_counts) + start_idx = 0 + all_steps = [] + for i, section_count in enumerate(section_counts): + size = size_per + (1 if i < extra else 0) + if size < section_count: + raise ValueError( + f"cannot divide section of {size} steps into {section_count}" + ) + if section_count <= 1: + frac_stride = 1 + else: + frac_stride = (size - 1) / (section_count - 1) + cur_idx = 0.0 + taken_steps = [] + for _ in range(section_count): + taken_steps.append(start_idx + round(cur_idx)) + cur_idx += frac_stride + all_steps += taken_steps + start_idx += size + return set(all_steps) + + +class SpacedDiffusion(DiffusionModel): + """ + A diffusion process which can skip steps in a base diffusion process. + + :param use_timesteps: a collection (sequence or set) of timesteps from the + original diffusion process to retain. + :param kwargs: the kwargs to create the base diffusion process. + """ + + def __init__(self, use_timesteps, **kwargs): + self.use_timesteps = set(use_timesteps) + self.timestep_map = [] + self.original_num_steps = len(kwargs["betas"]) + + base_diffusion = DiffusionModel(**kwargs) + last_alpha_cumprod = 1.0 + new_betas = [] + for i, alpha_cumprod in enumerate(base_diffusion.alphas_cumprod): + if i in self.use_timesteps: + new_betas.append(1 - alpha_cumprod / last_alpha_cumprod) + last_alpha_cumprod = alpha_cumprod + self.timestep_map.append(i) + kwargs["betas"] = np.array(new_betas) + super().__init__(**kwargs) + + def p_mean_variance( + self, model, *args, **kwargs + ): # pylint: disable=signature-differs + return super().p_mean_variance(self._wrap_model(model), *args, **kwargs) + + def training_losses( + self, model, *args, **kwargs + ): # pylint: disable=signature-differs + return super().training_losses(self._wrap_model(model), *args, **kwargs) + + def condition_mean(self, cond_fn, *args, **kwargs): + return super().condition_mean(self._wrap_model(cond_fn), *args, **kwargs) + + def condition_score(self, cond_fn, *args, **kwargs): + return super().condition_score(self._wrap_model(cond_fn), *args, **kwargs) + + def _wrap_model(self, model): + if isinstance(model, _WrappedModel): + return model + return _WrappedModel( + model, self.timestep_map, self.rescale_timesteps, self.original_num_steps + ) + + def _scale_timesteps(self, t): + # Scaling is done by the wrapped model. + return t + + +class _WrappedModel: + def __init__(self, model, timestep_map, rescale_timesteps, original_num_steps): + self.model = model + self.timestep_map = timestep_map + self.rescale_timesteps = rescale_timesteps + self.original_num_steps = original_num_steps + + def __call__(self, x, ts, sparse, **kwargs): + map_tensor = th.tensor(self.timestep_map, device=ts.device, dtype=ts.dtype) + new_ts = map_tensor[ts] + if self.rescale_timesteps: + new_ts = new_ts.float() * (1000.0 / self.original_num_steps) + return self.model(x, new_ts, sparse, **kwargs) diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000..7adf7de --- /dev/null +++ b/environment.yml @@ -0,0 +1,79 @@ +name: agrol +channels: + - conda-forge +dependencies: + - _libgcc_mutex=0.1 + - _openmp_mutex=4.5 + - bzip2=1.0.8 + - ca-certificates=2022.12.7 + - cffi=1.15.1 + - cudatoolkit=11.8.0 + - cudnn=8.4.1.50 + - icu=70.1 + - ld_impl_linux-64=2.40 + - libblas=3.9.0 + - libcblas=3.9.0 + - libffi=3.4.2 + - libgcc-ng=12.2.0 + - libgfortran-ng=12.2.0 + - libgfortran5=12.2.0 + - libgomp=12.2.0 + - libhwloc=2.9.0 + - libiconv=1.17 + - liblapack=3.9.0 + - libnsl=2.0.0 + - libopenblas=0.3.21 + - libprotobuf=3.21.12 + - libsqlite=3.40.0 + - libstdcxx-ng=12.2.0 + - libuuid=2.32.1 + - libxml2=2.10.3 + - libzlib=1.2.13 + - llvm-openmp=15.0.7 + - magma=2.6.2 + - mkl=2022.2.1 + - nccl=2.14.3.1 + - ncurses=6.3 + - ninja=1.11.1 + - numpy=1.24.2 + - openssl=3.0.8 + - pip=23.0.1 + - pycparser=2.21 + - python=3.8.16 + - python_abi=3.8 + - pytorch=1.13.1 + - readline=8.1.2 + - sleef=3.5.1 + - tbb=2021.8.0 + - tk=8.6.12 + - typing_extensions=4.4.0 + - tzdata=2022g + - wheel=0.38.4 + - xz=5.2.6 + - pip: + - contourpy==1.0.7 + - cycler==0.11.0 + - fonttools==4.39.0 + - freetype-py==2.3.0 + - imageio==2.26.0 + - importlib-resources==5.12.0 + - kiwisolver==1.4.4 + - matplotlib==3.7.1 + - networkx==3.0 + - opencv-python==4.7.0.72 + - packaging==23.0 + - pillow==9.4.0 + - psbody-mesh==0.4 + - pyglet==2.0.5 + - pyopengl==3.1.6 + - pyparsing==3.0.9 + - pyrender==0.1.45 + - python-dateutil==2.8.2 + - pyyaml==6.0 + - pyzmq==25.0.0 + - scipy==1.10.1 + - setuptools==67.6.0 + - six==1.16.0 + - tqdm==4.65.0 + - trimesh==3.20.1 + - zipp==3.15.0 diff --git a/imgs/teaser.jpg b/imgs/teaser.jpg new file mode 100644 index 0000000..ceb56a0 Binary files /dev/null and b/imgs/teaser.jpg differ diff --git a/model/meta_model.py b/model/meta_model.py new file mode 100644 index 0000000..22b9804 --- /dev/null +++ b/model/meta_model.py @@ -0,0 +1,95 @@ +# Copyright (c) Meta Platforms, Inc. All Rights Reserved +import numpy as np +import torch +import torch.nn as nn +from model.networks import DiffMLP + + +class MetaModel(nn.Module): + def __init__( + self, + arch, + nfeats, + latent_dim=256, + num_layers=8, + dropout=0.1, + dataset="amass", + sparse_dim=54, + **kargs, + ): + super().__init__() + + self.arch = DiffMLP + self.dataset = dataset + + self.input_feats = nfeats + self.latent_dim = latent_dim + self.num_layers = num_layers + self.dropout = dropout + self.sparse_dim = sparse_dim + + self.cond_mask_prob = kargs.get("cond_mask_prob", 0.0) + self.input_process = nn.Linear(self.input_feats, self.latent_dim) + + self.mlp = self.arch( + self.latent_dim, seq=kargs.get("input_motion_length"), num_layers=num_layers + ) + self.embed_timestep = TimestepEmbeding(self.latent_dim) + self.sparse_process = nn.Linear(self.sparse_dim, self.latent_dim) + self.output_process = nn.Linear(self.latent_dim, self.input_feats) + + def mask_cond_sparse(self, cond, force_mask=True): + bs, n, c = cond.shape + if force_mask: + return torch.zeros_like(cond) + elif self.training and self.cond_mask_prob > 0.0: + mask = torch.bernoulli( + torch.ones(bs, device=cond.device) * self.cond_mask_prob + ).view( + bs, 1, 1 + ) # 1-> use null_cond, 0-> use real cond + return cond * (1.0 - mask) + else: + return cond + + def forward(self, x, timesteps, sparse_emb, force_mask=False): + """ + x: [batch_size, nfeats, nframes], denoted x_t in the paper + sparse: [batch_size, nframes, sparse_dim], the sparse features + timesteps: [batch_size] (int) + """ + emb = self.embed_timestep(timesteps) # time step embedding : [1, bs, d] + + # Pass the sparse signal to a FC + sparse_emb = self.sparse_process( + self.mask_cond_sparse(sparse_emb, force_mask=force_mask) + ) + + # Pass the input to a FC + x = self.input_process(x) + + # Concat the sparse feature with input + x = torch.cat((sparse_emb, x), axis=-1) + output = self.mlp(x, emb) + + # Pass the output to a FC and reshape the output + output = self.output_process(output) + return output + + +class TimestepEmbeding(nn.Module): + def __init__(self, d_model, max_len=5000): + super().__init__() + pe = torch.zeros(max_len, d_model) + position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1) + div_term = torch.exp( + torch.arange(0, d_model, 2).float() * (-np.log(10000.0) / d_model) + ) + pe[:, 0::2] = torch.sin(position * div_term) + pe[:, 1::2] = torch.cos(position * div_term) + pe = pe.unsqueeze(0).transpose(0, 1) + + self.register_buffer("pe", pe) + + def forward(self, timesteps): + return self.pe[timesteps] diff --git a/model/networks.py b/model/networks.py new file mode 100644 index 0000000..fc6271d --- /dev/null +++ b/model/networks.py @@ -0,0 +1,108 @@ +# Copyright (c) Meta Platforms, Inc. All Rights Reserved +import torch.nn as nn + + +############################### +############ Layers ########### +############################### + + +class MLPblock(nn.Module): + def __init__(self, dim, seq0, seq1, first=False, w_embed=True): + super().__init__() + + self.w_embed = w_embed + self.fc0 = nn.Conv1d(seq0, seq1, 1) + + if self.w_embed: + if first: + self.conct = nn.Linear(dim * 2, dim) + else: + self.conct = nn.Identity() + self.emb_fc = nn.Linear(dim, dim) + + self.fc1 = nn.Linear(dim, dim) + self.norm0 = nn.LayerNorm(dim) + self.norm1 = nn.LayerNorm(dim) + self.act = nn.SiLU() + + def forward(self, inputs): + + if self.w_embed: + x = inputs[0] + embed = inputs[1] + x = self.conct(x) + self.emb_fc(self.act(embed)) + else: + x = inputs + + x_ = self.norm0(x) + x_ = self.fc0(x_) + x_ = self.act(x_) + x = x + x_ + + x_ = self.norm1(x) + x_ = self.fc1(x_) + x_ = self.act(x_) + + x = x + x_ + + if self.w_embed: + return x, embed + else: + return x + + +class BaseMLP(nn.Module): + def __init__(self, dim, seq, num_layers, w_embed=True): + super().__init__() + + layers = [] + for i in range(num_layers): + layers.append( + MLPblock(dim, seq, seq, first=i == 0 and w_embed, w_embed=w_embed) + ) + + self.mlps = nn.Sequential(*layers) + + def forward(self, x): + x = self.mlps(x) + return x + + +############################### +########### Networks ########## +############################### + + +class DiffMLP(nn.Module): + def __init__(self, latent_dim=512, seq=98, num_layers=12): + super(DiffMLP, self).__init__() + + self.motion_mlp = BaseMLP(dim=latent_dim, seq=seq, num_layers=num_layers) + + def forward(self, motion_input, embed): + + motion_feats = self.motion_mlp([motion_input, embed])[0] + + return motion_feats + + +class PureMLP(nn.Module): + def __init__( + self, latent_dim=512, seq=98, num_layers=12, input_dim=54, output_dim=132 + ): + super(PureMLP, self).__init__() + + self.input_fc = nn.Linear(input_dim, latent_dim) + self.motion_mlp = BaseMLP( + dim=latent_dim, seq=seq, num_layers=num_layers, w_embed=False + ) + self.output_fc = nn.Linear(latent_dim, output_dim) + + def forward(self, motion_input): + + motion_feats = self.input_fc(motion_input) + motion_feats = self.motion_mlp(motion_feats) + motion_feats = self.output_fc(motion_feats) + + return motion_feats diff --git a/prepare_data.py b/prepare_data.py new file mode 100644 index 0000000..4987606 --- /dev/null +++ b/prepare_data.py @@ -0,0 +1,201 @@ +# Copyright (c) Meta Platforms, Inc. All Rights Reserved +import argparse +import os + +import numpy as np +import torch + +from human_body_prior.body_model.body_model import BodyModel +from human_body_prior.tools.rotation_tools import aa2matrot, local2global_pose +from tqdm import tqdm +from utils import utils_transform + + +def main(args, bm): + for dataroot_subset in ["BioMotionLab_NTroje", "CMU", "MPI_HDM05"]: + print(dataroot_subset) + for phase in ["train", "test"]: + print(phase) + savedir = os.path.join(args.save_dir, dataroot_subset, phase) + if not os.path.exists(savedir): + os.makedirs(savedir) + + split_file = os.path.join( + "prepare_data/data_split", dataroot_subset, phase + "_split.txt" + ) + + with open(split_file, "r") as f: + filepaths = [line.strip() for line in f] + + rotation_local_full_gt_list = [] + hmd_position_global_full_gt_list = [] + body_parms_list = [] + head_global_trans_list = [] + + idx = 0 + for filepath in tqdm(filepaths): + data = {} + bdata = np.load( + os.path.join(args.root_dir, filepath), allow_pickle=True + ) + + if "mocap_framerate" in bdata: + framerate = bdata["mocap_framerate"] + else: + continue + idx += 1 + + if framerate == 120: + stride = 2 + elif framerate == 60: + stride = 1 + else: + raise AssertionError( + "Please check your AMASS data, should only have 2 types of framerate, either 120 or 60!!!" + ) + + bdata_poses = bdata["poses"][::stride, ...] + bdata_trans = bdata["trans"][::stride, ...] + subject_gender = bdata["gender"] + + body_parms = { + "root_orient": torch.Tensor( + bdata_poses[:, :3] + ), # .to(comp_device), # controls the global root orientation + "pose_body": torch.Tensor( + bdata_poses[:, 3:66] + ), # .to(comp_device), # controls the body + "trans": torch.Tensor( + bdata_trans + ), # .to(comp_device), # controls the global body position + } + + body_parms_list = body_parms + + body_pose_world = bm( + **{ + k: v + for k, v in body_parms.items() + if k in ["pose_body", "root_orient", "trans"] + } + ) + + output_aa = torch.Tensor(bdata_poses[:, :66]).reshape(-1, 3) + output_6d = utils_transform.aa2sixd(output_aa).reshape( + bdata_poses.shape[0], -1 + ) + rotation_local_full_gt_list = output_6d[1:] + + rotation_local_matrot = aa2matrot( + torch.tensor(bdata_poses).reshape(-1, 3) + ).reshape(bdata_poses.shape[0], -1, 9) + rotation_global_matrot = local2global_pose( + rotation_local_matrot, bm.kintree_table[0].long() + ) # rotation of joints relative to the origin + + head_rotation_global_matrot = rotation_global_matrot[:, [15], :, :] + + rotation_global_6d = utils_transform.matrot2sixd( + rotation_global_matrot.reshape(-1, 3, 3) + ).reshape(rotation_global_matrot.shape[0], -1, 6) + input_rotation_global_6d = rotation_global_6d[1:, [15, 20, 21], :] + + rotation_velocity_global_matrot = torch.matmul( + torch.inverse(rotation_global_matrot[:-1]), + rotation_global_matrot[1:], + ) + rotation_velocity_global_6d = utils_transform.matrot2sixd( + rotation_velocity_global_matrot.reshape(-1, 3, 3) + ).reshape(rotation_velocity_global_matrot.shape[0], -1, 6) + input_rotation_velocity_global_6d = rotation_velocity_global_6d[ + :, [15, 20, 21], : + ] + + position_global_full_gt_world = body_pose_world.Jtr[ + :, :22, : + ] # position of joints relative to the world origin + + position_head_world = position_global_full_gt_world[ + :, 15, : + ] # world position of head + + head_global_trans = torch.eye(4).repeat( + position_head_world.shape[0], 1, 1 + ) + head_global_trans[:, :3, :3] = head_rotation_global_matrot.squeeze() + head_global_trans[:, :3, 3] = position_global_full_gt_world[:, 15, :] + + head_global_trans_list = head_global_trans[1:] + + num_frames = position_global_full_gt_world.shape[0] - 1 + + hmd_position_global_full_gt_list = torch.cat( + [ + input_rotation_global_6d.reshape(num_frames, -1), + input_rotation_velocity_global_6d.reshape(num_frames, -1), + position_global_full_gt_world[1:, [15, 20, 21], :].reshape( + num_frames, -1 + ), + position_global_full_gt_world[1:, [15, 20, 21], :].reshape( + num_frames, -1 + ) + - position_global_full_gt_world[:-1, [15, 20, 21], :].reshape( + num_frames, -1 + ), + ], + dim=-1, + ) + + data["rotation_local_full_gt_list"] = rotation_local_full_gt_list + data[ + "hmd_position_global_full_gt_list" + ] = hmd_position_global_full_gt_list + data["body_parms_list"] = body_parms_list + data["head_global_trans_list"] = head_global_trans_list + data["position_global_full_gt_world"] = ( + position_global_full_gt_world[1:].cpu().float() + ) + data["framerate"] = 60 + data["gender"] = subject_gender + data["filepath"] = filepath + + torch.save(data, os.path.join(savedir, "{}.pt".format(idx))) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter + ) + parser.add_argument( + "--support_dir", + type=str, + default=None, + help="=dir where you put your smplh and dmpls dirs", + ) + parser.add_argument( + "--save_dir", + type=str, + default=None, + help="=dir where you want to save your generated data", + ) + parser.add_argument( + "--root_dir", type=str, default=None, help="=dir where you put your AMASS data" + ) + args = parser.parse_args() + + # Here we follow the AvatarPoser paper and use male model for all sequences + bm_fname_male = os.path.join(args.support_dir, "smplh/{}/model.npz".format("male")) + dmpl_fname_male = os.path.join( + args.support_dir, "dmpls/{}/model.npz".format("male") + ) + + num_betas = 16 # number of body parameters + num_dmpls = 8 # number of DMPL parameters + bm_male = BodyModel( + bm_fname=bm_fname_male, + num_betas=num_betas, + num_dmpls=num_dmpls, + dmpl_fname=dmpl_fname_male, + ) + + main(args, bm_male) diff --git a/prepare_data/data_split/BioMotionLab_NTroje/test_split.txt b/prepare_data/data_split/BioMotionLab_NTroje/test_split.txt new file mode 100644 index 0000000..390ff13 --- /dev/null +++ b/prepare_data/data_split/BioMotionLab_NTroje/test_split.txt @@ -0,0 +1,307 @@ +BioMotionLab_NTroje/rub098/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub098/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub098/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub098/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub098/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub099/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub099/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub099/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub028/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub028/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub068/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub068/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub068/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub023/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub023/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub023/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub047/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub047/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub075/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub094/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub094/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub094/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub094/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub094/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub094/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub094/0030_scamper_poses.npz +BioMotionLab_NTroje/rub014/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub014/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub043/0027_jumping1_poses.npz +BioMotionLab_NTroje/rub052/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub052/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub070/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub070/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub085/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub102/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub102/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub102/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub054/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub054/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub054/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub018/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub095/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub025/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub025/0016_lifting_light1_poses.npz +BioMotionLab_NTroje/rub025/0022_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub025/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub025/0012_knocking1_poses.npz +BioMotionLab_NTroje/rub025/0006_normal_walk3_poses.npz +BioMotionLab_NTroje/rub025/0024_kicking1_poses.npz +BioMotionLab_NTroje/rub109/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub109/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub109/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub109/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub109/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub103/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub073/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub100/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub100/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub100/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub010/0019_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub010/0029_scamper_poses.npz +BioMotionLab_NTroje/rub086/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub086/0014_sitting1_poses.npz +BioMotionLab_NTroje/rub057/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub057/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub057/0011_normal_jog2_poses.npz +BioMotionLab_NTroje/rub004/0008_knocking1_poses.npz +BioMotionLab_NTroje/rub046/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub046/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub104/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub104/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub104/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub104/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub033/0013_knocking2_poses.npz +BioMotionLab_NTroje/rub011/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub011/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub011/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub011/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub002/0014_lifting_light2_poses.npz +BioMotionLab_NTroje/rub045/0017_sitting3_poses.npz +BioMotionLab_NTroje/rub045/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub045/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub045/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub045/0025_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub045/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub045/0024_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub006/0008_normal_jog2_poses.npz +BioMotionLab_NTroje/rub015/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub015/0025_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub015/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub015/0022_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub021/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub115/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub115/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub115/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub115/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub105/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub105/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub105/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub105/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub105/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub105/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub024/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub024/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub024/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub024/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub035/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub035/0026_kicking3_poses.npz +BioMotionLab_NTroje/rub069/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub097/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub027/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub027/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub027/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub027/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub027/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub027/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub027/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub059/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub059/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub059/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub059/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub059/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub049/0022_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub049/0012_knocking2_poses.npz +BioMotionLab_NTroje/rub022/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub022/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub056/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub056/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub056/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub031/0017_sitting3_poses.npz +BioMotionLab_NTroje/rub041/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub041/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub030/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub030/0030_scamper_poses.npz +BioMotionLab_NTroje/rub087/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub087/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub007/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub007/0014_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub088/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub088/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub088/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub016/0030_scamper_poses.npz +BioMotionLab_NTroje/rub001/0013_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub001/0007_normal_jog1_poses.npz +BioMotionLab_NTroje/rub001/0009_sitting1_poses.npz +BioMotionLab_NTroje/rub001/0017_circle_walk_poses.npz +BioMotionLab_NTroje/rub110/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub108/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub108/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub108/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub108/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub008/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub092/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub092/0026_scamper_poses.npz +BioMotionLab_NTroje/rub092/0018_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub092/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub060/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub060/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub062/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub062/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub062/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub062/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub062/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub062/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub096/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub065/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub065/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub065/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub065/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub065/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub066/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub066/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub066/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub020/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub020/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub020/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub079/0019_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub079/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub079/0018_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub079/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub079/0024_kicking1_poses.npz +BioMotionLab_NTroje/rub081/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub081/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub081/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub081/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub090/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub090/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub090/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub005/0023_scamper1_poses.npz +BioMotionLab_NTroje/rub005/0010_sitting1_poses.npz +BioMotionLab_NTroje/rub005/0011_sitting2_poses.npz +BioMotionLab_NTroje/rub005/0021_jumping1_poses.npz +BioMotionLab_NTroje/rub005/0014_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub101/0011_normal_jog4_poses.npz +BioMotionLab_NTroje/rub038/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub038/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub078/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub078/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub078/0029_scamper_poses.npz +BioMotionLab_NTroje/rub078/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub077/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub077/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub077/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub077/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub077/0030_balett_poses.npz +BioMotionLab_NTroje/rub048/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub048/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub048/0030_scamper_poses.npz +BioMotionLab_NTroje/rub071/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub029/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub029/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub029/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub029/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub029/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub029/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub072/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub072/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub072/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub072/0031_rom_poses.npz +BioMotionLab_NTroje/rub037/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub037/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub037/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub037/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub106/0018_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub106/0020_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub039/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub039/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub039/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub039/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub036/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub036/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub036/0023_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub012/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub012/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub012/0006_normal_walk3_poses.npz +BioMotionLab_NTroje/rub114/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub114/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub114/0030_throwing_poses.npz +BioMotionLab_NTroje/rub058/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub058/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub093/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub093/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub093/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub063/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub063/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub063/0031_rom_poses.npz +BioMotionLab_NTroje/rub063/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub076/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub076/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub076/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub074/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub074/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub112/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub084/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub084/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub084/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub084/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub084/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub084/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub080/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub091/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub091/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub091/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub091/0031_rom_poses.npz +BioMotionLab_NTroje/rub091/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub044/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub044/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub044/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub042/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub042/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub042/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub042/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub064/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub064/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub064/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub064/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub064/0031_rom_poses.npz +BioMotionLab_NTroje/rub064/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub032/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub032/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub050/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub050/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub050/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub050/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub050/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub050/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub017/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub017/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub026/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub026/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub026/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub026/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub026/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub053/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub053/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub053/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub089/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub089/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub034/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub034/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub061/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub061/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub061/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub067/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub067/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub067/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub067/0028_jumping1_poses.npz diff --git a/prepare_data/data_split/BioMotionLab_NTroje/train_split.txt b/prepare_data/data_split/BioMotionLab_NTroje/train_split.txt new file mode 100644 index 0000000..f9949d9 --- /dev/null +++ b/prepare_data/data_split/BioMotionLab_NTroje/train_split.txt @@ -0,0 +1,2754 @@ +BioMotionLab_NTroje/rub098/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub098/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub098/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub098/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub098/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub098/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub098/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub098/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub098/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub098/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub098/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub098/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub098/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub098/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub098/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub098/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub098/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub098/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub098/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub098/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub098/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub098/0031_rom_poses.npz +BioMotionLab_NTroje/rub098/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub098/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub098/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub098/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub099/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub099/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub099/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub099/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub099/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub099/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub099/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub099/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub099/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub099/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub099/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub099/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub099/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub099/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub099/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub099/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub099/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub099/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub099/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub099/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub099/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub099/0031_rom_poses.npz +BioMotionLab_NTroje/rub099/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub099/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub099/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub099/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub099/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub028/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub028/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub028/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub028/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub028/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub028/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub028/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub028/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub028/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub028/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub028/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub028/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub028/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub028/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub028/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub028/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub028/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub028/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub028/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub028/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub028/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub028/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub028/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub028/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub068/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub068/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub068/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub068/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub068/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub068/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub068/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub068/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub068/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub068/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub068/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub068/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub068/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub068/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub068/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub068/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub068/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub068/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub068/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub068/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub068/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub068/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub068/0031_rom_poses.npz +BioMotionLab_NTroje/rub068/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub068/0030_scamper_poses.npz +BioMotionLab_NTroje/rub068/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub068/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub068/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub023/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub023/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub023/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub023/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub023/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub023/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub023/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub023/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub023/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub023/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub023/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub023/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub023/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub023/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub023/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub023/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub023/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub023/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub023/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub023/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub023/0030_scamper_poses.npz +BioMotionLab_NTroje/rub023/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub023/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub023/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub023/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub047/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub047/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub047/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub047/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub047/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub047/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub047/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub047/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub047/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub047/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub047/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub047/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub047/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub047/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub047/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub047/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub047/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub047/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub047/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub047/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub047/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub047/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub047/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub047/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub047/0031_rom_poses.npz +BioMotionLab_NTroje/rub047/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub047/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub047/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub047/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub075/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub075/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub075/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub075/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub075/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub075/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub075/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub075/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub075/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub075/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub075/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub075/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub075/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub075/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub075/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub075/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub075/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub075/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub075/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub075/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub075/0031_rom_poses.npz +BioMotionLab_NTroje/rub075/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub075/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub075/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub075/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub094/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub094/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub094/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub094/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub094/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub094/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub094/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub094/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub094/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub094/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub094/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub094/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub094/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub094/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub094/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub094/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub094/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub094/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub094/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub094/0031_rom_poses.npz +BioMotionLab_NTroje/rub094/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub094/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub094/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub094/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub094/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub014/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub014/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub014/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub014/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub014/0002_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub014/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub014/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub014/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub014/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub014/0001_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub014/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub014/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub014/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub014/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub014/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub014/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub014/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub014/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub014/0000_motorcycle_poses.npz +BioMotionLab_NTroje/rub014/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub014/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub014/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub014/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub014/0003_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub014/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub014/0030_scamper_poses.npz +BioMotionLab_NTroje/rub014/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub014/0004_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub043/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub043/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub043/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub043/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub043/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub043/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub043/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub043/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub043/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub043/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub043/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub043/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub043/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub043/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub043/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub043/0022_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub043/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub043/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub043/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub043/0021_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub043/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub043/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub043/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub043/0023_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub043/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub043/0024_kicking1_poses.npz +BioMotionLab_NTroje/rub043/0026_circle_walk_poses.npz +BioMotionLab_NTroje/rub052/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub052/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub052/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub052/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub052/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub052/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub052/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub052/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub052/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub070/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub070/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub070/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub070/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub070/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub070/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub070/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub070/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub070/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub070/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub070/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub070/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub070/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub070/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub070/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub070/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub070/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub070/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub070/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub070/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub070/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub070/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub070/0031_rom_poses.npz +BioMotionLab_NTroje/rub070/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub070/0030_scamper_poses.npz +BioMotionLab_NTroje/rub070/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub070/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub085/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub085/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub085/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub085/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub085/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub085/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub085/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub085/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub085/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub085/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub085/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub085/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub085/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub085/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub085/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub085/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub085/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub085/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub085/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub085/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub085/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub085/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub085/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub085/0031_rom_poses.npz +BioMotionLab_NTroje/rub085/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub085/0030_scamper_poses.npz +BioMotionLab_NTroje/rub085/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub085/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub085/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub085/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub102/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub102/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub102/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub102/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub102/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub102/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub102/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub102/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub102/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub102/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub102/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub102/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub102/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub102/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub102/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub102/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub102/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub102/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub102/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub102/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub102/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub102/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub102/0031_rom_poses.npz +BioMotionLab_NTroje/rub102/0030_scamper_poses.npz +BioMotionLab_NTroje/rub102/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub102/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub102/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub102/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub054/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub054/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub054/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub054/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub054/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub054/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub054/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub054/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub054/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub054/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub054/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub054/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub054/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub054/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub054/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub054/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub054/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub054/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub054/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub054/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub054/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub054/0031_rom_poses.npz +BioMotionLab_NTroje/rub054/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub054/0030_scamper_poses.npz +BioMotionLab_NTroje/rub054/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub054/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub054/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub054/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub018/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub018/0031_scamper_poses.npz +BioMotionLab_NTroje/rub018/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub018/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub018/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub018/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub018/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub018/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub018/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub018/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub018/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub018/0030_jumping3_poses.npz +BioMotionLab_NTroje/rub018/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub018/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub018/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub018/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub018/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub018/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub018/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub018/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub018/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub018/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub018/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub018/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub018/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub095/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub095/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub095/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub095/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub095/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub095/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub095/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub095/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub095/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub095/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub095/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub095/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub095/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub095/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub095/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub095/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub095/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub095/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub095/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub095/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub095/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub095/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub095/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub095/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub095/0031_rom_poses.npz +BioMotionLab_NTroje/rub095/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub095/0030_scamper_poses.npz +BioMotionLab_NTroje/rub095/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub095/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub095/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub095/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub025/0019_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub025/0007_normal_walk4_poses.npz +BioMotionLab_NTroje/rub025/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub025/0017_lifting_light2_poses.npz +BioMotionLab_NTroje/rub025/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub025/0029_scamper_poses.npz +BioMotionLab_NTroje/rub025/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub025/0005_normal_walk2_poses.npz +BioMotionLab_NTroje/rub025/0013_knocking2_poses.npz +BioMotionLab_NTroje/rub025/0010_normal_jog3_poses.npz +BioMotionLab_NTroje/rub025/0009_normal_jog2_poses.npz +BioMotionLab_NTroje/rub025/0008_normal_jog1_poses.npz +BioMotionLab_NTroje/rub025/0018_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub025/0021_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub025/0020_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub025/0011_normal_jog4_poses.npz +BioMotionLab_NTroje/rub025/0004_normal_walk1_poses.npz +BioMotionLab_NTroje/rub025/0014_sitting1_poses.npz +BioMotionLab_NTroje/rub025/0027_jumping1_poses.npz +BioMotionLab_NTroje/rub025/0015_sitting2_poses.npz +BioMotionLab_NTroje/rub025/0023_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub025/0026_circle_walk_poses.npz +BioMotionLab_NTroje/rub109/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub109/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub109/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub109/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub109/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub109/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub109/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub109/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub109/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub109/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub109/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub109/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub109/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub109/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub109/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub109/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub109/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub109/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub109/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub109/0031_rom_poses.npz +BioMotionLab_NTroje/rub109/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub109/0030_scamper_poses.npz +BioMotionLab_NTroje/rub109/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub109/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub109/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub109/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub103/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub103/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub103/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub103/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub103/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub103/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub103/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub103/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub103/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub103/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub103/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub103/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub103/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub103/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub103/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub103/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub103/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub103/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub103/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub103/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub103/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub103/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub103/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub103/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub103/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub103/0031_rom_poses.npz +BioMotionLab_NTroje/rub103/0030_scamper_poses.npz +BioMotionLab_NTroje/rub103/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub103/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub103/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub103/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub073/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub073/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub073/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub073/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub073/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub073/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub073/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub073/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub073/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub073/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub073/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub073/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub073/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub073/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub073/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub073/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub073/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub073/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub073/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub073/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub073/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub073/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub073/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub073/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub073/0031_rom_poses.npz +BioMotionLab_NTroje/rub073/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub073/0030_scamper_poses.npz +BioMotionLab_NTroje/rub073/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub073/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub073/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub073/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub100/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub100/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub100/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub100/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub100/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub100/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub100/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub100/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub100/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub100/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub100/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub100/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub100/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub100/0029_rom_poses.npz +BioMotionLab_NTroje/rub100/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub100/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub100/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub100/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub100/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub100/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub100/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub100/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub100/0028_scamper_poses.npz +BioMotionLab_NTroje/rub100/0027_jumping1_poses.npz +BioMotionLab_NTroje/rub100/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub100/0026_circle_walk_poses.npz +BioMotionLab_NTroje/rub010/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub010/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub010/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub010/0026_kicking3_poses.npz +BioMotionLab_NTroje/rub010/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub010/0017_lifting_light2_poses.npz +BioMotionLab_NTroje/rub010/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub010/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub010/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub010/0016_lifting_light1_poses.npz +BioMotionLab_NTroje/rub010/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub010/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub010/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub010/0013_knocking2_poses.npz +BioMotionLab_NTroje/rub010/0022_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub010/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub010/0010_normal_jog3_poses.npz +BioMotionLab_NTroje/rub010/0009_normal_jog2_poses.npz +BioMotionLab_NTroje/rub010/0018_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub010/0021_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub010/0020_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub010/0011_normal_jog4_poses.npz +BioMotionLab_NTroje/rub010/0014_sitting1_poses.npz +BioMotionLab_NTroje/rub010/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub010/0012_knocking1_poses.npz +BioMotionLab_NTroje/rub010/0015_sitting2_poses.npz +BioMotionLab_NTroje/rub010/0023_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub010/0024_kicking1_poses.npz +BioMotionLab_NTroje/rub086/0027_rom_poses.npz +BioMotionLab_NTroje/rub086/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub086/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub086/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub086/0021_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub086/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub086/0017_lifting_light2_poses.npz +BioMotionLab_NTroje/rub086/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub086/0016_lifting_light1_poses.npz +BioMotionLab_NTroje/rub086/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub086/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub086/0013_knocking2_poses.npz +BioMotionLab_NTroje/rub086/0023_kicking1_poses.npz +BioMotionLab_NTroje/rub086/0024_kicking2_poses.npz +BioMotionLab_NTroje/rub086/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub086/0020_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub086/0018_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub086/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub086/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub086/0012_knocking1_poses.npz +BioMotionLab_NTroje/rub086/0015_sitting2_poses.npz +BioMotionLab_NTroje/rub086/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub057/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub057/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub057/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub057/0016_sitting1_poses.npz +BioMotionLab_NTroje/rub057/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub057/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub057/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub057/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub057/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub057/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub057/0029_scamper_poses.npz +BioMotionLab_NTroje/rub057/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub057/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub057/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub057/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub057/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub057/0014_knocking1_poses.npz +BioMotionLab_NTroje/rub057/0013_normal_jog4_poses.npz +BioMotionLab_NTroje/rub057/0015_knocking2_poses.npz +BioMotionLab_NTroje/rub057/0012_normal_jog3_poses.npz +BioMotionLab_NTroje/rub057/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub057/0009_normal_walk5_poses.npz +BioMotionLab_NTroje/rub057/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub057/0027_jumping1_poses.npz +BioMotionLab_NTroje/rub057/0010_normal_jog1_poses.npz +BioMotionLab_NTroje/rub057/0030_rom_poses.npz +BioMotionLab_NTroje/rub004/0018_kicking2_poses.npz +BioMotionLab_NTroje/rub004/0019_circle_walk_poses.npz +BioMotionLab_NTroje/rub004/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub004/0021_jumping2_poses.npz +BioMotionLab_NTroje/rub004/0013_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub004/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub004/0010_sitting1_poses.npz +BioMotionLab_NTroje/rub004/0012_lifting_light2_poses.npz +BioMotionLab_NTroje/rub004/0017_kicking1_poses.npz +BioMotionLab_NTroje/rub004/0011_lifting_light1_poses.npz +BioMotionLab_NTroje/rub004/0016_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub004/0006_normal_jog1_poses.npz +BioMotionLab_NTroje/rub004/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub004/0005_normal_walk2_poses.npz +BioMotionLab_NTroje/rub004/0014_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub004/0015_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub004/0004_normal_walk1_poses.npz +BioMotionLab_NTroje/rub004/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub004/0020_jumping1_poses.npz +BioMotionLab_NTroje/rub004/0009_knocking2_poses.npz +BioMotionLab_NTroje/rub004/0007_normal_jog2_poses.npz +BioMotionLab_NTroje/rub046/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub046/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub046/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub046/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub046/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub046/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub046/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub046/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub046/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub046/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub046/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub046/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub046/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub046/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub046/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub046/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub046/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub046/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub046/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub046/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub046/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub046/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub046/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub046/0031_rom_poses.npz +BioMotionLab_NTroje/rub046/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub046/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub046/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub046/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub046/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub104/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub104/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub104/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub104/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub104/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub104/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub104/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub104/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub104/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub104/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub104/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub104/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub104/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub104/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub104/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub104/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub104/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub104/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub104/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub104/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub104/0031_rom_poses.npz +BioMotionLab_NTroje/rub104/0030_scamper_poses.npz +BioMotionLab_NTroje/rub104/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub104/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub104/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub104/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub003/0009_knocking1_poses.npz +BioMotionLab_NTroje/rub003/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub003/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub003/0023_jumping2_poses.npz +BioMotionLab_NTroje/rub003/0014_lifting_light2_poses.npz +BioMotionLab_NTroje/rub003/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub003/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub003/0018_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub003/0021_circle_walk_poses.npz +BioMotionLab_NTroje/rub003/0024_scamper1_poses.npz +BioMotionLab_NTroje/rub003/0012_sitting2_poses.npz +BioMotionLab_NTroje/rub003/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub003/0015_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub003/0016_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub003/0007_normal_jog1_poses.npz +BioMotionLab_NTroje/rub003/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub003/0020_kicking2_poses.npz +BioMotionLab_NTroje/rub003/0025_scamper2_poses.npz +BioMotionLab_NTroje/rub003/0017_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub003/0019_kicking1_poses.npz +BioMotionLab_NTroje/rub003/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub003/0008_normal_jog2_poses.npz +BioMotionLab_NTroje/rub003/0010_knocking2_poses.npz +BioMotionLab_NTroje/rub003/0011_sitting1_poses.npz +BioMotionLab_NTroje/rub033/0019_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub033/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub033/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub033/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub033/0017_lifting_light2_poses.npz +BioMotionLab_NTroje/rub033/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub033/0016_lifting_light1_poses.npz +BioMotionLab_NTroje/rub033/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub033/0022_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub033/0010_normal_jog3_poses.npz +BioMotionLab_NTroje/rub033/0009_normal_jog2_poses.npz +BioMotionLab_NTroje/rub033/0018_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub033/0011_normal_jog4_poses.npz +BioMotionLab_NTroje/rub033/0004_normal_walk1_poses.npz +BioMotionLab_NTroje/rub033/0014_sitting1_poses.npz +BioMotionLab_NTroje/rub033/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub033/0006_normal_walk3_poses.npz +BioMotionLab_NTroje/rub033/0015_sitting2_poses.npz +BioMotionLab_NTroje/rub011/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub011/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub011/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub011/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub011/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub011/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub011/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub011/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub011/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub011/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub011/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub011/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub011/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub011/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub011/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub011/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub011/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub011/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub011/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub011/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub011/0030_scamper_poses.npz +BioMotionLab_NTroje/rub011/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub011/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub011/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub011/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub002/0013_lifting_light1_poses.npz +BioMotionLab_NTroje/rub002/0009_knocking1_poses.npz +BioMotionLab_NTroje/rub002/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub002/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub002/0023_jumping2_poses.npz +BioMotionLab_NTroje/rub002/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub002/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub002/0018_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub002/0021_circle_walk_poses.npz +BioMotionLab_NTroje/rub002/0012_sitting2_poses.npz +BioMotionLab_NTroje/rub002/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub002/0015_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub002/0016_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub002/0007_normal_jog1_poses.npz +BioMotionLab_NTroje/rub002/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub002/0024_scamper_poses.npz +BioMotionLab_NTroje/rub002/0020_kicking2_poses.npz +BioMotionLab_NTroje/rub002/0017_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub002/0019_kicking1_poses.npz +BioMotionLab_NTroje/rub002/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub002/0008_normal_jog2_poses.npz +BioMotionLab_NTroje/rub002/0010_knocking2_poses.npz +BioMotionLab_NTroje/rub002/0022_jumping1_poses.npz +BioMotionLab_NTroje/rub002/0011_sitting1_poses.npz +BioMotionLab_NTroje/rub045/0018_lifting_light1_poses.npz +BioMotionLab_NTroje/rub045/0030_jumping2_poses.npz +BioMotionLab_NTroje/rub045/0031_scamper_poses.npz +BioMotionLab_NTroje/rub045/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub045/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub045/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub045/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub045/0027_kicking2_poses.npz +BioMotionLab_NTroje/rub045/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub045/0032_rom_poses.npz +BioMotionLab_NTroje/rub045/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub045/0021_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub045/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub045/0019_lifting_light2_poses.npz +BioMotionLab_NTroje/rub045/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub045/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub045/0020_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub045/0029_jumping1_poses.npz +BioMotionLab_NTroje/rub045/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub045/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub045/0022_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub045/0028_circle_walk_poses.npz +BioMotionLab_NTroje/rub045/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub045/0026_kicking1_poses.npz +BioMotionLab_NTroje/rub045/0023_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub006/0013_lifting_light1_poses.npz +BioMotionLab_NTroje/rub006/0009_knocking1_poses.npz +BioMotionLab_NTroje/rub006/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub006/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub006/0023_jumping2_poses.npz +BioMotionLab_NTroje/rub006/0014_lifting_light2_poses.npz +BioMotionLab_NTroje/rub006/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub006/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub006/0018_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub006/0021_circle_walk_poses.npz +BioMotionLab_NTroje/rub006/0012_sitting2_poses.npz +BioMotionLab_NTroje/rub006/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub006/0015_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub006/0016_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub006/0007_normal_jog1_poses.npz +BioMotionLab_NTroje/rub006/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub006/0024_scamper_poses.npz +BioMotionLab_NTroje/rub006/0020_kicking2_poses.npz +BioMotionLab_NTroje/rub006/0017_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub006/0019_kicking1_poses.npz +BioMotionLab_NTroje/rub006/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub006/0010_knocking2_poses.npz +BioMotionLab_NTroje/rub006/0022_jumping1_poses.npz +BioMotionLab_NTroje/rub006/0011_sitting1_poses.npz +BioMotionLab_NTroje/rub055/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub055/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub055/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub055/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub055/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub055/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub055/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub055/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub055/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub055/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub055/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub055/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub055/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub055/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub055/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub055/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub055/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub055/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub055/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub055/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub055/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub055/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub055/0031_rom_poses.npz +BioMotionLab_NTroje/rub055/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub055/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub055/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub055/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub055/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub015/0030_jumping2_poses.npz +BioMotionLab_NTroje/rub015/0031_scamper_poses.npz +BioMotionLab_NTroje/rub015/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub015/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub015/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub015/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub015/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub015/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub015/0027_kicking2_poses.npz +BioMotionLab_NTroje/rub015/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub015/0019_lifting_light3_poses.npz +BioMotionLab_NTroje/rub015/0021_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub015/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub015/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub015/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub015/0020_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub015/0029_jumping1_poses.npz +BioMotionLab_NTroje/rub015/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub015/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub015/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub015/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub015/0028_circle_walk_poses.npz +BioMotionLab_NTroje/rub015/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub015/0026_kicking1_poses.npz +BioMotionLab_NTroje/rub015/0023_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub021/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub021/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub021/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub021/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub021/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub021/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub021/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub021/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub021/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub021/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub021/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub021/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub021/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub021/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub021/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub021/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub021/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub021/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub021/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub021/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub021/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub021/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub021/0030_scamper_poses.npz +BioMotionLab_NTroje/rub021/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub021/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub021/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub021/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub115/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub115/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub115/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub115/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub115/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub115/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub115/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub115/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub115/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub115/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub115/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub115/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub115/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub115/0032_rom_poses.npz +BioMotionLab_NTroje/rub115/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub115/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub115/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub115/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub115/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub115/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub115/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub115/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub115/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub115/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub115/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub115/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub105/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub105/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub105/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub105/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub105/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub105/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub105/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub105/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub105/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub105/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub105/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub105/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub105/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub105/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub105/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub105/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub105/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub105/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub105/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub024/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub024/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub024/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub024/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub024/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub024/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub024/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub024/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub024/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub024/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub024/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub024/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub024/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub024/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub024/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub024/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub024/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub024/0030_scamper_poses.npz +BioMotionLab_NTroje/rub024/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub024/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub024/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub024/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub035/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub035/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub035/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub035/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub035/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub035/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub035/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub035/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub035/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub035/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub035/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub035/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub035/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub035/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub035/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub035/0022_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub035/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub035/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub035/0021_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub035/0030_scamper_poses.npz +BioMotionLab_NTroje/rub035/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub035/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub035/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub035/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub035/0024_kicking1_poses.npz +BioMotionLab_NTroje/rub069/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub069/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub069/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub069/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub069/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub069/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub069/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub069/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub069/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub069/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub069/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub069/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub069/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub069/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub069/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub069/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub069/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub069/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub069/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub069/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub069/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub069/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub069/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub069/0031_rom_poses.npz +BioMotionLab_NTroje/rub069/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub069/0030_scamper_poses.npz +BioMotionLab_NTroje/rub069/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub069/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub069/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub069/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub097/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub097/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub097/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub097/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub097/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub097/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub097/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub097/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub097/0029_scamper_poses.npz +BioMotionLab_NTroje/rub097/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub097/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub097/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub097/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub097/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub097/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub097/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub097/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub097/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub097/0027_jumping1_poses.npz +BioMotionLab_NTroje/rub097/0026_circle_walk_poses.npz +BioMotionLab_NTroje/rub027/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub027/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub027/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub027/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub027/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub027/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub027/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub027/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub027/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub027/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub027/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub027/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub027/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub027/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub027/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub027/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub027/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub027/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub027/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub027/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub027/0030_scamper_poses.npz +BioMotionLab_NTroje/rub027/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub027/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub059/0030_jumping2_poses.npz +BioMotionLab_NTroje/rub059/0031_scamper_poses.npz +BioMotionLab_NTroje/rub059/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub059/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub059/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub059/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub059/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub059/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub059/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub059/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub059/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub059/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub059/0027_kicking3_poses.npz +BioMotionLab_NTroje/rub059/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub059/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub059/0032_rom_poses.npz +BioMotionLab_NTroje/rub059/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub059/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub059/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub059/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub059/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub059/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub059/0029_jumping1_poses.npz +BioMotionLab_NTroje/rub059/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub059/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub059/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub059/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub059/0028_circle_walk_poses.npz +BioMotionLab_NTroje/rub049/0019_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub049/0005_normal_walk3_poses.npz +BioMotionLab_NTroje/rub049/0018_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub049/0021_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub049/0014_sitting2_poses.npz +BioMotionLab_NTroje/rub049/0006_normal_walk4_poses.npz +BioMotionLab_NTroje/rub049/0017_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub049/0016_lifting_light2_poses.npz +BioMotionLab_NTroje/rub049/0013_sitting1_poses.npz +BioMotionLab_NTroje/rub049/0007_normal_jog1_poses.npz +BioMotionLab_NTroje/rub049/0003_normal_walk1_poses.npz +BioMotionLab_NTroje/rub049/0023_kicking1_poses.npz +BioMotionLab_NTroje/rub049/0025_circle_walk_poses.npz +BioMotionLab_NTroje/rub049/0024_kicking2_poses.npz +BioMotionLab_NTroje/rub049/0020_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub049/0011_knocking1_poses.npz +BioMotionLab_NTroje/rub049/0010_normal_jog4_poses.npz +BioMotionLab_NTroje/rub049/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub049/0008_normal_jog2_poses.npz +BioMotionLab_NTroje/rub049/0026_jumping1_poses.npz +BioMotionLab_NTroje/rub049/0015_lifting_light1_poses.npz +BioMotionLab_NTroje/rub049/0004_normal_walk2_poses.npz +BioMotionLab_NTroje/rub049/0009_normal_jog3_poses.npz +BioMotionLab_NTroje/rub049/0002_motorcycle_poses.npz +BioMotionLab_NTroje/rub049/0001_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub049/0027_jumping2_poses.npz +BioMotionLab_NTroje/rub022/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub022/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub022/0019_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub022/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub022/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub022/0017_lifting_light2_poses.npz +BioMotionLab_NTroje/rub022/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub022/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub022/0016_lifting_light1_poses.npz +BioMotionLab_NTroje/rub022/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub022/0029_scamper_poses.npz +BioMotionLab_NTroje/rub022/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub022/0013_knocking2_poses.npz +BioMotionLab_NTroje/rub022/0022_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub022/0009_normal_jog2_poses.npz +BioMotionLab_NTroje/rub022/0018_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub022/0020_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub022/0011_normal_jog4_poses.npz +BioMotionLab_NTroje/rub022/0014_sitting1_poses.npz +BioMotionLab_NTroje/rub022/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub022/0012_knocking1_poses.npz +BioMotionLab_NTroje/rub022/0027_jumping1_poses.npz +BioMotionLab_NTroje/rub022/0015_sitting2_poses.npz +BioMotionLab_NTroje/rub022/0026_circle_walk_poses.npz +BioMotionLab_NTroje/rub056/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub056/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub056/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub056/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub056/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub056/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub056/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub056/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub056/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub056/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub056/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub056/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub056/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub056/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub056/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub056/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub056/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub056/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub056/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub056/0030_scamper_poses.npz +BioMotionLab_NTroje/rub056/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub056/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub056/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub031/0018_lifting_light1_poses.npz +BioMotionLab_NTroje/rub031/0030_jumping2_poses.npz +BioMotionLab_NTroje/rub031/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub031/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub031/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub031/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub031/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub031/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub031/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub031/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub031/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub031/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub031/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub031/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub031/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub031/0019_lifting_light2_poses.npz +BioMotionLab_NTroje/rub031/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub031/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub031/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub031/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub031/0029_jumping1_poses.npz +BioMotionLab_NTroje/rub031/0027_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub031/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub031/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub031/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub031/0028_circle_walk_poses.npz +BioMotionLab_NTroje/rub031/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub041/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub041/0029_scamper_rom_poses.npz +BioMotionLab_NTroje/rub041/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub041/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub041/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub041/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub041/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub041/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub041/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub041/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub041/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub041/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub041/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub041/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub041/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub041/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub041/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub041/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub041/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub041/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub041/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub041/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub041/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub111/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub111/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub111/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub111/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub030/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub030/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub030/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub030/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub030/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub030/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub030/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub030/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub030/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub030/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub030/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub030/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub030/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub030/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub030/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub030/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub030/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub030/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub030/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub030/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub030/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub030/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub087/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub087/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub087/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub087/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub087/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub087/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub087/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub087/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub087/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub087/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub087/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub087/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub087/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub087/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub087/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub087/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub087/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub087/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub087/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub087/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub087/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub087/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub087/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub087/0031_rom_poses.npz +BioMotionLab_NTroje/rub087/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub087/0030_scamper_poses.npz +BioMotionLab_NTroje/rub087/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub087/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub087/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub087/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub007/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub007/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub007/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub007/0012_lifting_light1_poses.npz +BioMotionLab_NTroje/rub007/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub007/0016_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub007/0010_sitting1_poses.npz +BioMotionLab_NTroje/rub007/0017_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub007/0008_knocking1_poses.npz +BioMotionLab_NTroje/rub007/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub007/0011_sitting2_poses.npz +BioMotionLab_NTroje/rub007/0007_normal_jog1_poses.npz +BioMotionLab_NTroje/rub007/0021_jumping1_poses.npz +BioMotionLab_NTroje/rub007/0019_kicking2_poses.npz +BioMotionLab_NTroje/rub007/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub007/0015_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub007/0009_knocking2_poses.npz +BioMotionLab_NTroje/rub007/0018_kicking1_poses.npz +BioMotionLab_NTroje/rub007/0013_lifting_light2_poses.npz +BioMotionLab_NTroje/rub088/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub088/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub088/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub088/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub088/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub088/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub088/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub088/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub088/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub088/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub088/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub088/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub088/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub088/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub088/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub088/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub088/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub088/0031_rom_poses.npz +BioMotionLab_NTroje/rub088/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub088/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub088/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub088/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub088/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub016/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub016/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub016/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub016/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub016/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub016/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub016/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub016/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub016/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub016/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub016/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub016/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub016/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub016/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub016/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub016/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub016/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub016/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub016/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub016/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub016/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub016/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub016/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub016/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub016/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub009/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub009/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub009/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub009/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub009/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub009/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub009/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub009/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub009/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub009/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub009/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub009/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub009/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub009/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub009/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub009/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub009/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub009/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub009/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub009/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub009/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub009/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub009/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub009/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub009/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub009/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub009/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub009/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub009/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub009/0030_scamper1_poses.npz +BioMotionLab_NTroje/rub009/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub001/0019_jumping2_poses.npz +BioMotionLab_NTroje/rub001/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub001/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub001/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub001/0020_knocking1_poses.npz +BioMotionLab_NTroje/rub001/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub001/0014_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub001/0012_lifting_light2_poses.npz +BioMotionLab_NTroje/rub001/0011_lifting_light1_poses.npz +BioMotionLab_NTroje/rub001/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub001/0021_knocking2_poses.npz +BioMotionLab_NTroje/rub001/0015_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub001/0010_sitting2_poses.npz +BioMotionLab_NTroje/rub001/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub001/0016_kicking1_poses.npz +BioMotionLab_NTroje/rub001/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub001/0008_normal_jog2_poses.npz +BioMotionLab_NTroje/rub001/0018_jumping1_poses.npz +BioMotionLab_NTroje/rub110/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub110/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub110/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub108/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub108/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub108/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub108/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub108/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub108/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub108/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub108/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub108/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub108/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub108/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub108/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub108/0021_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub108/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub108/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub108/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub108/0027_jumping1_poses.npz +BioMotionLab_NTroje/rub108/0030_rom_poses.npz +BioMotionLab_NTroje/rub108/0023_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub008/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub008/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub008/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub008/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub008/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub008/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub008/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub008/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub008/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub008/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub008/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub008/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub008/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub008/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub008/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub008/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub008/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub008/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub008/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub008/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub008/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub008/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub008/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub008/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub008/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub008/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub008/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub008/0030_scamper1_poses.npz +BioMotionLab_NTroje/rub008/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub113/0000_normal_walk1_poses.npz +BioMotionLab_NTroje/rub092/0021_kicking1_poses.npz +BioMotionLab_NTroje/rub092/0027_rom_poses.npz +BioMotionLab_NTroje/rub092/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub092/0019_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub092/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub092/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub092/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub092/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub092/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub092/0020_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub092/0022_kicking2_poses.npz +BioMotionLab_NTroje/rub092/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub092/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub092/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub092/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub092/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub092/0017_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub092/0023_circle_walk_poses.npz +BioMotionLab_NTroje/rub092/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub092/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub092/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub092/0024_jumping1_poses.npz +BioMotionLab_NTroje/rub092/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub092/0025_jumping2_poses.npz +BioMotionLab_NTroje/rub060/0030_jumping2_poses.npz +BioMotionLab_NTroje/rub060/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub060/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub060/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub060/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub060/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub060/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub060/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub060/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub060/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub060/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub060/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub060/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub060/0032_rom_poses.npz +BioMotionLab_NTroje/rub060/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub060/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub060/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub060/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub060/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub060/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub060/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub060/0029_jumping1_poses.npz +BioMotionLab_NTroje/rub060/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub060/0027_circle_walk1_poses.npz +BioMotionLab_NTroje/rub060/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub060/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub060/0028_circle_walk2_poses.npz +BioMotionLab_NTroje/rub060/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub060/0031_scamper1_poses.npz +BioMotionLab_NTroje/rub060/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub062/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub062/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub062/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub062/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub062/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub062/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub062/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub062/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub062/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub062/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub062/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub062/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub062/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub062/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub062/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub062/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub062/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub062/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub062/0031_rom_poses.npz +BioMotionLab_NTroje/rub062/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub062/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub062/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub096/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub096/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub096/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub096/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub096/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub096/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub096/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub096/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub096/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub096/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub096/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub096/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub096/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub096/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub096/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub096/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub096/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub096/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub096/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub096/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub096/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub096/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub096/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub096/0031_rom_poses.npz +BioMotionLab_NTroje/rub096/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub096/0030_scamper_poses.npz +BioMotionLab_NTroje/rub096/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub096/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub096/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub096/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub065/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub065/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub065/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub065/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub065/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub065/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub065/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub065/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub065/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub065/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub065/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub065/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub065/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub065/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub065/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub065/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub065/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub065/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub065/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub065/0031_rom_poses.npz +BioMotionLab_NTroje/rub065/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub065/0030_scamper_poses.npz +BioMotionLab_NTroje/rub065/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub065/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub065/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub066/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub066/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub066/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub066/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub066/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub066/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub066/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub066/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub066/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub066/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub066/0029_scamper_poses.npz +BioMotionLab_NTroje/rub066/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub066/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub066/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub066/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub066/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub066/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub066/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub066/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub066/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub066/0030_rom_poses.npz +BioMotionLab_NTroje/rub020/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub020/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub020/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub020/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub020/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub020/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub020/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub020/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub020/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub020/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub020/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub020/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub020/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub020/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub020/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub020/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub020/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub020/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub020/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub020/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub020/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub020/0030_scamper_poses.npz +BioMotionLab_NTroje/rub020/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub020/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub020/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub079/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub079/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub079/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub079/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub079/0017_lifting_light2_poses.npz +BioMotionLab_NTroje/rub079/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub079/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub079/0016_lifting_light1_poses.npz +BioMotionLab_NTroje/rub079/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub079/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub079/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub079/0022_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub079/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub079/0021_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub079/0020_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub079/0028_rom_poses.npz +BioMotionLab_NTroje/rub079/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub079/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub079/0015_sitting2_poses.npz +BioMotionLab_NTroje/rub079/0027_scamper_poses.npz +BioMotionLab_NTroje/rub079/0023_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub079/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub079/0026_circle_walk_poses.npz +BioMotionLab_NTroje/rub081/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub081/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub081/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub081/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub081/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub081/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub081/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub081/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub081/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub081/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub081/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub081/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub081/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub081/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub081/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub081/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub081/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub081/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub081/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub081/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub081/0031_rom_poses.npz +BioMotionLab_NTroje/rub081/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub081/0030_scamper_poses.npz +BioMotionLab_NTroje/rub081/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub081/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub081/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub081/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub090/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub090/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub090/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub090/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub090/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub090/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub090/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub090/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub090/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub090/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub090/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub090/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub090/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub090/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub090/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub090/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub090/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub090/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub090/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub090/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub005/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub005/0012_lifting_light1_poses.npz +BioMotionLab_NTroje/rub005/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub005/0016_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub005/0017_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub005/0008_knocking1_poses.npz +BioMotionLab_NTroje/rub005/0006_normal_jog1_poses.npz +BioMotionLab_NTroje/rub005/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub005/0005_normal_walk2_poses.npz +BioMotionLab_NTroje/rub005/0022_jumping2_poses.npz +BioMotionLab_NTroje/rub005/0019_kicking2_poses.npz +BioMotionLab_NTroje/rub005/0004_normal_walk1_poses.npz +BioMotionLab_NTroje/rub005/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub005/0015_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub005/0009_knocking2_poses.npz +BioMotionLab_NTroje/rub005/0007_normal_jog2_poses.npz +BioMotionLab_NTroje/rub005/0018_kicking1_poses.npz +BioMotionLab_NTroje/rub101/0019_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub101/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub101/0007_normal_walk4_poses.npz +BioMotionLab_NTroje/rub101/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub101/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub101/0017_lifting_light2_poses.npz +BioMotionLab_NTroje/rub101/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub101/0016_lifting_light1_poses.npz +BioMotionLab_NTroje/rub101/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub101/0005_normal_walk2_poses.npz +BioMotionLab_NTroje/rub101/0013_knocking2_poses.npz +BioMotionLab_NTroje/rub101/0022_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub101/0010_normal_jog3_poses.npz +BioMotionLab_NTroje/rub101/0009_normal_jog2_poses.npz +BioMotionLab_NTroje/rub101/0008_normal_jog1_poses.npz +BioMotionLab_NTroje/rub101/0018_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub101/0021_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub101/0004_normal_walk1_poses.npz +BioMotionLab_NTroje/rub101/0014_sitting1_poses.npz +BioMotionLab_NTroje/rub101/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub101/0012_knocking1_poses.npz +BioMotionLab_NTroje/rub101/0027_jumping1_poses.npz +BioMotionLab_NTroje/rub101/0006_normal_walk3_poses.npz +BioMotionLab_NTroje/rub101/0015_sitting2_poses.npz +BioMotionLab_NTroje/rub101/0030_rom_poses.npz +BioMotionLab_NTroje/rub101/0023_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub101/0024_kicking1_poses.npz +BioMotionLab_NTroje/rub101/0026_circle_walk_poses.npz +BioMotionLab_NTroje/rub038/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub038/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub038/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub038/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub038/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub038/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub038/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub038/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub038/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub038/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub038/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub038/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub038/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub038/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub038/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub038/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub038/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub038/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub038/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub038/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub038/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub038/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub038/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub038/0031_rom_poses.npz +BioMotionLab_NTroje/rub038/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub038/0030_scamper_poses.npz +BioMotionLab_NTroje/rub038/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub038/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub038/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub078/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub078/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub078/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub078/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub078/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub078/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub078/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub078/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub078/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub078/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub078/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub078/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub078/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub078/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub078/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub078/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub078/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub078/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub078/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub078/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub078/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub078/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub078/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub078/0030_rom_poses.npz +BioMotionLab_NTroje/rub077/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub077/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub077/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub077/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub077/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub077/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub077/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub077/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub077/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub077/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub077/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub077/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub077/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub077/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub077/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub077/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub077/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub077/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub077/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub077/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub077/0031_rom_poses.npz +BioMotionLab_NTroje/rub077/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub077/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub077/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub077/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub077/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub048/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub048/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub048/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub048/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub048/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub048/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub048/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub048/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub048/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub048/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub048/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub048/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub048/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub048/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub048/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub048/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub048/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub048/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub048/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub048/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub048/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub048/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub048/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub048/0031_rom_poses.npz +BioMotionLab_NTroje/rub048/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub048/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub048/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub048/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub048/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub071/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub071/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub071/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub071/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub071/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub071/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub071/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub071/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub071/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub071/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub071/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub071/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub071/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub071/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub071/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub071/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub071/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub071/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub071/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub071/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub071/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub071/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub071/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub071/0031_rom_poses.npz +BioMotionLab_NTroje/rub071/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub071/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub071/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub071/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub071/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub029/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub029/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub029/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub029/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub029/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub029/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub029/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub029/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub029/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub029/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub029/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub029/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub029/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub029/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub029/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub029/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub029/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub029/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub029/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub029/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub029/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub029/0031_rom_poses.npz +BioMotionLab_NTroje/rub029/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub029/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub029/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub072/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub072/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub072/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub072/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub072/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub072/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub072/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub072/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub072/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub072/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub072/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub072/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub072/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub072/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub072/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub072/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub072/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub072/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub072/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub072/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub072/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub072/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub072/0030_scamper_poses.npz +BioMotionLab_NTroje/rub072/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub072/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub072/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub072/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub037/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub037/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub037/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub037/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub037/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub037/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub037/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub037/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub037/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub037/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub037/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub037/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub037/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub037/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub037/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub037/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub037/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub037/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub037/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub037/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub037/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub037/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub037/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub037/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub037/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub037/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub106/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub106/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub106/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub106/0019_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub106/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub106/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub106/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub106/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub106/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub106/0017_lifting_light2_poses.npz +BioMotionLab_NTroje/rub106/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub106/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub106/0016_lifting_light1_poses.npz +BioMotionLab_NTroje/rub106/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub106/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub106/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub106/0022_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub106/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub106/0021_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub106/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub106/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub106/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub106/0027_jumping1_poses.npz +BioMotionLab_NTroje/rub106/0030_rom_poses.npz +BioMotionLab_NTroje/rub106/0023_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub106/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub106/0024_kicking1_poses.npz +BioMotionLab_NTroje/rub106/0026_circle_walk_poses.npz +BioMotionLab_NTroje/rub039/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub039/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub039/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub039/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub039/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub039/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub039/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub039/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub039/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub039/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub039/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub039/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub039/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub039/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub039/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub039/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub039/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub039/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub039/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub039/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub039/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub039/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub039/0030_scamper_rom_poses.npz +BioMotionLab_NTroje/rub039/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub039/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub039/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub039/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub036/0030_jumping2_poses.npz +BioMotionLab_NTroje/rub036/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub036/0031_jumping3_poses.npz +BioMotionLab_NTroje/rub036/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub036/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub036/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub036/0032_scamper_poses.npz +BioMotionLab_NTroje/rub036/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub036/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub036/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub036/0027_kicking2_poses.npz +BioMotionLab_NTroje/rub036/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub036/0025_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub036/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub036/0019_lifting_light3_poses.npz +BioMotionLab_NTroje/rub036/0021_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub036/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub036/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub036/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub036/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub036/0020_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub036/0029_jumping1_poses.npz +BioMotionLab_NTroje/rub036/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub036/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub036/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub036/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub036/0024_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub036/0022_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub036/0028_circle_walk_poses.npz +BioMotionLab_NTroje/rub036/0026_kicking1_poses.npz +BioMotionLab_NTroje/rub036/0033_rom_poses.npz +BioMotionLab_NTroje/rub012/0030_jumping2_poses.npz +BioMotionLab_NTroje/rub012/0031_scamper_poses.npz +BioMotionLab_NTroje/rub012/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub012/0007_normal_walk4_poses.npz +BioMotionLab_NTroje/rub012/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub012/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub012/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub012/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub012/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub012/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub012/0008_motorcycle_poses.npz +BioMotionLab_NTroje/rub012/0027_kicking3_poses.npz +BioMotionLab_NTroje/rub012/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub012/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub012/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub012/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub012/0005_normal_walk2_poses.npz +BioMotionLab_NTroje/rub012/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub012/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub012/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub012/0029_jumping1_poses.npz +BioMotionLab_NTroje/rub012/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub012/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub012/0004_normal_walk1_poses.npz +BioMotionLab_NTroje/rub012/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub012/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub012/0028_circle_walk_poses.npz +BioMotionLab_NTroje/rub012/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub114/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub114/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub114/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub114/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub114/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub114/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub114/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub114/0025_kicking2_poses.npz +BioMotionLab_NTroje/rub114/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub114/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub114/0029_rom_poses.npz +BioMotionLab_NTroje/rub114/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub114/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub114/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub114/0022_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub114/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub114/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub114/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub114/0021_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub114/0020_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub114/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub114/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub114/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub114/0027_jumping1_poses.npz +BioMotionLab_NTroje/rub114/0023_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub114/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub114/0024_kicking1_poses.npz +BioMotionLab_NTroje/rub114/0026_circle_walk_poses.npz +BioMotionLab_NTroje/rub058/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub058/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub058/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub058/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub058/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub058/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub058/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub058/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub058/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub058/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub058/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub058/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub058/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub058/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub058/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub058/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub058/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub058/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub058/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub058/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub058/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub058/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub058/0030_scamper_poses.npz +BioMotionLab_NTroje/rub058/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub058/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub058/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub058/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub093/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub093/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub093/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub093/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub093/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub093/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub093/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub093/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub093/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub093/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub093/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub093/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub093/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub093/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub093/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub093/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub093/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub093/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub093/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub093/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub093/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub093/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub093/0031_rom_poses.npz +BioMotionLab_NTroje/rub093/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub093/0030_scamper_poses.npz +BioMotionLab_NTroje/rub093/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub093/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub093/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub063/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub063/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub063/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub063/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub063/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub063/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub063/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub063/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub063/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub063/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub063/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub063/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub063/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub063/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub063/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub063/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub063/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub063/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub063/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub063/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub063/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub063/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub063/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub063/0030_scamper_poses.npz +BioMotionLab_NTroje/rub063/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub063/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub063/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub063/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub076/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub076/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub076/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub076/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub076/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub076/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub076/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub076/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub076/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub076/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub076/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub076/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub076/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub076/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub076/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub076/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub076/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub076/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub076/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub076/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub076/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub076/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub076/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub076/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub076/0031_rom_poses.npz +BioMotionLab_NTroje/rub076/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub076/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub076/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub074/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub074/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub074/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub074/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub074/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub074/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub074/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub074/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub074/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub074/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub074/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub074/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub074/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub074/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub074/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub074/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub074/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub074/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub074/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub074/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub074/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub074/0031_rom_poses.npz +BioMotionLab_NTroje/rub074/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub074/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub074/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub112/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub112/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub112/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub112/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub112/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub112/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub112/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub112/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub112/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub112/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub112/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub112/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub112/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub112/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub112/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub112/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub112/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub112/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub112/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub112/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub112/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub112/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub112/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub112/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub112/0031_rom_poses.npz +BioMotionLab_NTroje/rub112/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub112/0030_scamper_poses.npz +BioMotionLab_NTroje/rub112/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub112/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub112/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub112/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub084/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub084/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub084/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub084/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub084/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub084/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub084/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub084/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub084/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub084/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub084/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub084/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub084/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub084/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub084/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub084/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub084/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub084/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub084/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub084/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub084/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub084/0031_rom_poses.npz +BioMotionLab_NTroje/rub084/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub084/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub084/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub080/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub080/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub080/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub080/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub080/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub080/0028_jumping2_poses.npz +BioMotionLab_NTroje/rub080/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub080/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub080/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub080/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub080/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub080/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub080/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub080/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub080/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub080/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub080/0029_scamper_poses.npz +BioMotionLab_NTroje/rub080/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub080/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub080/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub080/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub080/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub080/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub080/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub080/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub080/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub080/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub080/0030_rom_poses.npz +BioMotionLab_NTroje/rub091/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub091/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub091/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub091/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub091/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub091/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub091/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub091/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub091/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub091/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub091/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub091/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub091/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub091/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub091/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub091/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub091/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub091/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub091/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub091/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub091/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub091/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub091/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub091/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub044/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub044/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub044/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub044/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub044/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub044/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub044/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub044/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub044/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub044/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub044/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub044/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub044/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub044/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub044/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub044/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub044/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub044/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub044/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub044/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub044/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub044/0030_scamper_poses.npz +BioMotionLab_NTroje/rub044/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub044/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub044/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub042/0030_jumping2_poses.npz +BioMotionLab_NTroje/rub042/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub042/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub042/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub042/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub042/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub042/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub042/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub042/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub042/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub042/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub042/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub042/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub042/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub042/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub042/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub042/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub042/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub042/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub042/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub042/0029_jumping1_poses.npz +BioMotionLab_NTroje/rub042/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub042/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub042/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub042/0028_scamper_poses.npz +BioMotionLab_NTroje/rub042/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub064/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub064/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub064/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub064/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub064/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub064/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub064/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub064/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub064/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub064/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub064/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub064/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub064/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub064/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub064/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub064/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub064/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub064/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub064/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub064/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub064/0030_scamper_poses.npz +BioMotionLab_NTroje/rub064/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub064/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub064/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub083/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub083/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub083/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub083/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub083/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub083/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub083/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub083/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub083/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub083/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub083/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub083/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub083/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub083/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub083/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub083/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub083/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub083/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub083/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub083/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub083/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub083/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub083/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub083/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub083/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub083/0031_rom_poses.npz +BioMotionLab_NTroje/rub083/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub083/0030_scamper_poses.npz +BioMotionLab_NTroje/rub083/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub083/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub083/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub083/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub032/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub032/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub032/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub032/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub032/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub032/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub032/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub032/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub032/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub032/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub032/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub032/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub032/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub032/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub032/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub032/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub032/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub051/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub051/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub051/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub051/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub051/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub051/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub051/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub051/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub051/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub051/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub051/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub051/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub051/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub051/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub051/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub051/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub051/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub051/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub051/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub051/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub051/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub051/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub051/0031_rom_poses.npz +BioMotionLab_NTroje/rub051/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub051/0030_scamper_poses.npz +BioMotionLab_NTroje/rub051/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub051/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub051/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub051/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub050/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub050/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub050/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub050/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub050/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub050/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub050/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub050/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub050/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub050/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub050/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub050/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub050/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub050/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub050/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub050/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub050/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub050/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub050/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub050/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub050/0031_rom_poses.npz +BioMotionLab_NTroje/rub050/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub050/0030_scamper_poses.npz +BioMotionLab_NTroje/rub050/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub050/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub017/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub017/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub017/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub017/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub017/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub017/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub017/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub017/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub017/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub017/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub017/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub017/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub017/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub017/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub017/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub017/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub017/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub017/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub017/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub017/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub017/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub017/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub017/0030_scamper_poses.npz +BioMotionLab_NTroje/rub017/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub017/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub017/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub017/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub026/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub026/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub026/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub026/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub026/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub026/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub026/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub026/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub026/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub026/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub026/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub026/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub026/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub026/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub026/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub026/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub026/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub026/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub026/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub026/0030_scamper_poses.npz +BioMotionLab_NTroje/rub026/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub026/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub026/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub026/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub053/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub053/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub053/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub053/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub053/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub053/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub053/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub053/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub053/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub053/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub053/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub053/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub053/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub053/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub053/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub053/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub053/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub053/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub053/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub053/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub053/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub053/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub053/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub053/0031_rom_poses.npz +BioMotionLab_NTroje/rub053/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub053/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub053/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub053/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub089/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub089/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub089/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub089/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub089/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub089/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub089/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub089/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub089/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub089/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub089/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub089/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub089/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub089/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub089/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub089/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub089/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub089/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub089/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub089/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub089/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub089/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub089/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub089/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub089/0031_rom_poses.npz +BioMotionLab_NTroje/rub089/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub089/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub089/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub089/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub034/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub034/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub034/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub034/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub034/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub034/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub034/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub034/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub034/0014_knocking2_poses.npz +BioMotionLab_NTroje/rub034/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub034/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub034/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub034/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub034/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub034/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub034/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub034/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub034/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub034/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub034/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub034/0031_rom_poses.npz +BioMotionLab_NTroje/rub034/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub034/0030_scamper_rom_poses.npz +BioMotionLab_NTroje/rub034/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub034/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub034/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub034/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub061/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub061/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub061/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub061/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub061/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub061/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub061/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub061/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub061/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub061/0021_catching_and_throwing_poses.npz +BioMotionLab_NTroje/rub061/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub061/0027_circle_walk_poses.npz +BioMotionLab_NTroje/rub061/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub061/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub061/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub061/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub061/0028_jumping1_poses.npz +BioMotionLab_NTroje/rub061/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub061/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub061/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub061/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub061/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub061/0031_rom_poses.npz +BioMotionLab_NTroje/rub061/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub061/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub061/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub061/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub061/0030_scamper1_poses.npz +BioMotionLab_NTroje/rub061/0009_normal_jog1_poses.npz +BioMotionLab_NTroje/rub040/0001_normal_walk2_poses.npz +BioMotionLab_NTroje/rub040/0000_normal_walk1_poses.npz +BioMotionLab_NTroje/rub067/0029_jumping2_poses.npz +BioMotionLab_NTroje/rub067/0004_motorcycle_poses.npz +BioMotionLab_NTroje/rub067/0023_throwing_hard2_poses.npz +BioMotionLab_NTroje/rub067/0011_normal_jog3_poses.npz +BioMotionLab_NTroje/rub067/0005_normal_walk1_poses.npz +BioMotionLab_NTroje/rub067/0003_treadmill_jog_poses.npz +BioMotionLab_NTroje/rub067/0026_kicking2_poses.npz +BioMotionLab_NTroje/rub067/0024_throwing_hard3_poses.npz +BioMotionLab_NTroje/rub067/0020_lifting_heavy2_poses.npz +BioMotionLab_NTroje/rub067/0015_sitting1_poses.npz +BioMotionLab_NTroje/rub067/0001_treadmill_fast_poses.npz +BioMotionLab_NTroje/rub067/0025_kicking1_poses.npz +BioMotionLab_NTroje/rub067/0006_normal_walk2_poses.npz +BioMotionLab_NTroje/rub067/0008_normal_walk4_poses.npz +BioMotionLab_NTroje/rub067/0016_sitting2_poses.npz +BioMotionLab_NTroje/rub067/0018_lifting_light2_poses.npz +BioMotionLab_NTroje/rub067/0002_treadmill_slow_poses.npz +BioMotionLab_NTroje/rub067/0012_normal_jog4_poses.npz +BioMotionLab_NTroje/rub067/0022_throwing_hard1_poses.npz +BioMotionLab_NTroje/rub067/0007_normal_walk3_poses.npz +BioMotionLab_NTroje/rub067/0019_lifting_heavy1_poses.npz +BioMotionLab_NTroje/rub067/0017_lifting_light1_poses.npz +BioMotionLab_NTroje/rub067/0030_scamper_poses.npz +BioMotionLab_NTroje/rub067/0010_normal_jog2_poses.npz +BioMotionLab_NTroje/rub067/0000_treadmill_norm_poses.npz +BioMotionLab_NTroje/rub067/0013_knocking1_poses.npz +BioMotionLab_NTroje/rub067/0009_normal_jog1_poses.npz diff --git a/prepare_data/data_split/CMU/test_split.txt b/prepare_data/data_split/CMU/test_split.txt new file mode 100644 index 0000000..93ca551 --- /dev/null +++ b/prepare_data/data_split/CMU/test_split.txt @@ -0,0 +1,207 @@ +CMU/01/01_02_poses.npz +CMU/05/05_04_poses.npz +CMU/07/07_08_poses.npz +CMU/07/07_09_poses.npz +CMU/07/07_10_poses.npz +CMU/08/08_01_poses.npz +CMU/10/10_02_poses.npz +CMU/10/10_05_poses.npz +CMU/102/102_14_poses.npz +CMU/102/102_19_poses.npz +CMU/102/102_23_poses.npz +CMU/103/103_01_poses.npz +CMU/103/103_02_poses.npz +CMU/103/103_05_poses.npz +CMU/105/105_05_poses.npz +CMU/105/105_19_poses.npz +CMU/105/105_21_poses.npz +CMU/105/105_31_poses.npz +CMU/105/105_39_poses.npz +CMU/105/105_45_poses.npz +CMU/105/105_50_poses.npz +CMU/105/105_52_poses.npz +CMU/106/106_01_poses.npz +CMU/106/106_14_poses.npz +CMU/106/106_16_poses.npz +CMU/106/106_17_poses.npz +CMU/107/107_03_poses.npz +CMU/108/108_04_poses.npz +CMU/108/108_06_poses.npz +CMU/108/108_07_poses.npz +CMU/108/108_08_poses.npz +CMU/108/108_16_poses.npz +CMU/108/108_18_poses.npz +CMU/108/108_21_poses.npz +CMU/108/108_26_poses.npz +CMU/111/111_01_poses.npz +CMU/111/111_13_poses.npz +CMU/111/111_32_poses.npz +CMU/111/111_33_poses.npz +CMU/113/113_01_poses.npz +CMU/113/113_14_poses.npz +CMU/118/118_02_poses.npz +CMU/118/118_09_poses.npz +CMU/118/118_17_poses.npz +CMU/120/120_05_poses.npz +CMU/120/120_08_poses.npz +CMU/120/120_16_poses.npz +CMU/122/122_12_poses.npz +CMU/122/122_43_poses.npz +CMU/122/122_59_poses.npz +CMU/122/122_66_poses.npz +CMU/122/122_67_poses.npz +CMU/123/123_07_poses.npz +CMU/125/125_03_poses.npz +CMU/125/125_06_poses.npz +CMU/126/126_02_poses.npz +CMU/126/126_05_poses.npz +CMU/127/127_02_poses.npz +CMU/127/127_26_poses.npz +CMU/13/13_10_poses.npz +CMU/13/13_12_poses.npz +CMU/13/13_34_poses.npz +CMU/131/131_07_poses.npz +CMU/132/132_05_poses.npz +CMU/132/132_15_poses.npz +CMU/132/132_28_poses.npz +CMU/132/132_33_poses.npz +CMU/132/132_47_poses.npz +CMU/133/133_23_poses.npz +CMU/133/133_25_poses.npz +CMU/135/135_04_poses.npz +CMU/136/136_01_poses.npz +CMU/136/136_11_poses.npz +CMU/136/136_14_poses.npz +CMU/136/136_23_poses.npz +CMU/136/136_29_poses.npz +CMU/137/137_06_poses.npz +CMU/137/137_12_poses.npz +CMU/137/137_14_poses.npz +CMU/137/137_18_poses.npz +CMU/139/139_34_poses.npz +CMU/141/141_02_poses.npz +CMU/141/141_07_poses.npz +CMU/141/141_09_poses.npz +CMU/141/141_22_poses.npz +CMU/142/142_02_poses.npz +CMU/142/142_11_poses.npz +CMU/142/142_19_poses.npz +CMU/143/143_01_poses.npz +CMU/143/143_07_poses.npz +CMU/143/143_39_poses.npz +CMU/143/143_40_poses.npz +CMU/144/144_03_poses.npz +CMU/144/144_06_poses.npz +CMU/144/144_17_poses.npz +CMU/15/15_06_poses.npz +CMU/15/15_07_poses.npz +CMU/15/15_10_poses.npz +CMU/16/16_34_poses.npz +CMU/17/17_05_poses.npz +CMU/17/17_07_poses.npz +CMU/18_19_Justin/18_02_poses.npz +CMU/18_19_Justin/18_04_poses.npz +CMU/18_19_Justin/18_08_poses.npz +CMU/18_19_Justin/18_09_poses.npz +CMU/18_19_Justin/18_10_poses.npz +CMU/18_19_rory/18_14_poses.npz +CMU/20_21_Justin1/20_04_poses.npz +CMU/22_23_Rory/22_17_poses.npz +CMU/22_23_Rory/22_18_poses.npz +CMU/22_23_Rory/22_22_poses.npz +CMU/27/27_11_poses.npz +CMU/29/29_03_poses.npz +CMU/29/29_08_poses.npz +CMU/29/29_19_poses.npz +CMU/30/30_02_poses.npz +CMU/30/30_09_poses.npz +CMU/30/30_17_poses.npz +CMU/31/31_19_poses.npz +CMU/35/35_08_poses.npz +CMU/35/35_16_poses.npz +CMU/35/35_18_poses.npz +CMU/35/35_26_poses.npz +CMU/35/35_28_poses.npz +CMU/35/35_29_poses.npz +CMU/36/36_07_poses.npz +CMU/36/36_14_poses.npz +CMU/36/36_19_poses.npz +CMU/36/36_20_poses.npz +CMU/36/36_22_poses.npz +CMU/40/40_11_poses.npz +CMU/41/41_03_poses.npz +CMU/41/41_04_poses.npz +CMU/54/54_03_poses.npz +CMU/54/54_05_poses.npz +CMU/54/54_06_poses.npz +CMU/54/54_17_poses.npz +CMU/54/54_20_poses.npz +CMU/55/55_11_poses.npz +CMU/55/55_20_poses.npz +CMU/55/55_28_poses.npz +CMU/60/60_05_poses.npz +CMU/60/60_08_poses.npz +CMU/62/62_12_poses.npz +CMU/62/62_18_poses.npz +CMU/62/62_25_poses.npz +CMU/63/63_02_poses.npz +CMU/63/63_09_poses.npz +CMU/63/63_15_poses.npz +CMU/63/63_20_poses.npz +CMU/63/63_26_poses.npz +CMU/64/64_16_poses.npz +CMU/64/64_17_poses.npz +CMU/64/64_21_poses.npz +CMU/74/74_13_poses.npz +CMU/77/77_02_poses.npz +CMU/77/77_09_poses.npz +CMU/77/77_16_poses.npz +CMU/77/77_32_poses.npz +CMU/78/78_05_poses.npz +CMU/78/78_34_poses.npz +CMU/79/79_13_poses.npz +CMU/79/79_21_poses.npz +CMU/79/79_24_poses.npz +CMU/79/79_26_poses.npz +CMU/79/79_27_poses.npz +CMU/79/79_36_poses.npz +CMU/79/79_50_poses.npz +CMU/79/79_65_poses.npz +CMU/79/79_77_poses.npz +CMU/79/79_94_poses.npz +CMU/80/80_14_poses.npz +CMU/80/80_18_poses.npz +CMU/80/80_31_poses.npz +CMU/80/80_36_poses.npz +CMU/80/80_67_poses.npz +CMU/82/82_17_poses.npz +CMU/83/83_14_poses.npz +CMU/83/83_16_poses.npz +CMU/83/83_26_poses.npz +CMU/83/83_32_poses.npz +CMU/83/83_35_poses.npz +CMU/83/83_39_poses.npz +CMU/83/83_43_poses.npz +CMU/83/83_46_poses.npz +CMU/83/83_55_poses.npz +CMU/83/83_59_poses.npz +CMU/83/83_68_poses.npz +CMU/84/84_04_poses.npz +CMU/84/84_16_poses.npz +CMU/85/85_08_poses.npz +CMU/86/86_04_poses.npz +CMU/86/86_05_poses.npz +CMU/86/86_15_poses.npz +CMU/88/88_10_poses.npz +CMU/90/90_12_poses.npz +CMU/90/90_18_poses.npz +CMU/90/90_19_poses.npz +CMU/90/90_23_poses.npz +CMU/91/91_06_poses.npz +CMU/91/91_36_poses.npz +CMU/91/91_37_poses.npz +CMU/91/91_42_poses.npz +CMU/91/91_43_poses.npz +CMU/91/91_45_poses.npz +CMU/93/93_06_poses.npz +CMU/94/94_16_poses.npz diff --git a/prepare_data/data_split/CMU/train_split.txt b/prepare_data/data_split/CMU/train_split.txt new file mode 100644 index 0000000..712a0d2 --- /dev/null +++ b/prepare_data/data_split/CMU/train_split.txt @@ -0,0 +1,1867 @@ +CMU/01/01_01_poses.npz +CMU/01/01_03_poses.npz +CMU/01/01_05_poses.npz +CMU/01/01_06_poses.npz +CMU/01/01_07_poses.npz +CMU/01/01_08_poses.npz +CMU/01/01_09_poses.npz +CMU/01/01_10_poses.npz +CMU/01/01_11_poses.npz +CMU/02/02_01_poses.npz +CMU/02/02_02_poses.npz +CMU/02/02_03_poses.npz +CMU/02/02_04_poses.npz +CMU/02/02_05_poses.npz +CMU/02/02_06_poses.npz +CMU/02/02_07_poses.npz +CMU/02/02_08_poses.npz +CMU/02/02_09_poses.npz +CMU/02/02_10_poses.npz +CMU/05/05_01_poses.npz +CMU/05/05_02_poses.npz +CMU/05/05_03_poses.npz +CMU/05/05_05_poses.npz +CMU/05/05_06_poses.npz +CMU/05/05_07_poses.npz +CMU/05/05_08_poses.npz +CMU/05/05_09_poses.npz +CMU/05/05_10_poses.npz +CMU/05/05_11_poses.npz +CMU/05/05_12_poses.npz +CMU/05/05_13_poses.npz +CMU/05/05_14_poses.npz +CMU/05/05_15_poses.npz +CMU/05/05_16_poses.npz +CMU/05/05_17_poses.npz +CMU/05/05_18_poses.npz +CMU/05/05_19_poses.npz +CMU/05/05_20_poses.npz +CMU/06/06_01_poses.npz +CMU/06/06_03_poses.npz +CMU/06/06_04_poses.npz +CMU/06/06_05_poses.npz +CMU/06/06_06_poses.npz +CMU/06/06_07_poses.npz +CMU/07/07_01_poses.npz +CMU/07/07_02_poses.npz +CMU/07/07_03_poses.npz +CMU/07/07_04_poses.npz +CMU/07/07_05_poses.npz +CMU/07/07_06_poses.npz +CMU/07/07_07_poses.npz +CMU/07/07_11_poses.npz +CMU/07/07_12_poses.npz +CMU/08/08_02_poses.npz +CMU/08/08_03_poses.npz +CMU/08/08_04_poses.npz +CMU/08/08_05_poses.npz +CMU/08/08_06_poses.npz +CMU/08/08_07_poses.npz +CMU/08/08_08_poses.npz +CMU/08/08_09_poses.npz +CMU/08/08_11_poses.npz +CMU/09/09_01_poses.npz +CMU/09/09_02_poses.npz +CMU/09/09_03_poses.npz +CMU/09/09_04_poses.npz +CMU/09/09_05_poses.npz +CMU/09/09_06_poses.npz +CMU/09/09_07_poses.npz +CMU/09/09_08_poses.npz +CMU/09/09_09_poses.npz +CMU/09/09_10_poses.npz +CMU/09/09_11_poses.npz +CMU/09/09_12_poses.npz +CMU/10/10_01_poses.npz +CMU/10/10_03_poses.npz +CMU/10/10_04_poses.npz +CMU/102/102_01_poses.npz +CMU/102/102_02_poses.npz +CMU/102/102_04_poses.npz +CMU/102/102_05_poses.npz +CMU/102/102_06_poses.npz +CMU/102/102_07_poses.npz +CMU/102/102_08_poses.npz +CMU/102/102_09_poses.npz +CMU/102/102_10_poses.npz +CMU/102/102_11_poses.npz +CMU/102/102_12_poses.npz +CMU/102/102_13_poses.npz +CMU/102/102_16_poses.npz +CMU/102/102_17_poses.npz +CMU/102/102_18_poses.npz +CMU/102/102_20_poses.npz +CMU/102/102_21_poses.npz +CMU/102/102_22_poses.npz +CMU/102/102_24_poses.npz +CMU/102/102_25_poses.npz +CMU/102/102_26_poses.npz +CMU/102/102_27_poses.npz +CMU/102/102_28_poses.npz +CMU/102/102_29_poses.npz +CMU/102/102_30_poses.npz +CMU/102/102_31_poses.npz +CMU/102/102_32_poses.npz +CMU/102/102_33_poses.npz +CMU/103/103_03_poses.npz +CMU/103/103_04_poses.npz +CMU/103/103_06_poses.npz +CMU/103/103_07_poses.npz +CMU/103/103_08_poses.npz +CMU/105/105_01_poses.npz +CMU/105/105_02_poses.npz +CMU/105/105_03_poses.npz +CMU/105/105_04_poses.npz +CMU/105/105_06_poses.npz +CMU/105/105_07_poses.npz +CMU/105/105_08_poses.npz +CMU/105/105_09_poses.npz +CMU/105/105_10_poses.npz +CMU/105/105_11_poses.npz +CMU/105/105_12_poses.npz +CMU/105/105_13_poses.npz +CMU/105/105_14_poses.npz +CMU/105/105_15_poses.npz +CMU/105/105_16_poses.npz +CMU/105/105_17_poses.npz +CMU/105/105_18_poses.npz +CMU/105/105_20_poses.npz +CMU/105/105_22_poses.npz +CMU/105/105_23_poses.npz +CMU/105/105_24_poses.npz +CMU/105/105_25_poses.npz +CMU/105/105_26_poses.npz +CMU/105/105_27_poses.npz +CMU/105/105_28_poses.npz +CMU/105/105_29_poses.npz +CMU/105/105_30_poses.npz +CMU/105/105_33_poses.npz +CMU/105/105_34_poses.npz +CMU/105/105_35_poses.npz +CMU/105/105_36_poses.npz +CMU/105/105_37_poses.npz +CMU/105/105_38_poses.npz +CMU/105/105_40_poses.npz +CMU/105/105_41_poses.npz +CMU/105/105_42_poses.npz +CMU/105/105_43_poses.npz +CMU/105/105_44_poses.npz +CMU/105/105_46_poses.npz +CMU/105/105_47_poses.npz +CMU/105/105_48_poses.npz +CMU/105/105_51_poses.npz +CMU/105/105_53_poses.npz +CMU/105/105_54_poses.npz +CMU/105/105_55_poses.npz +CMU/105/105_56_poses.npz +CMU/105/105_57_poses.npz +CMU/105/105_58_poses.npz +CMU/105/105_59_poses.npz +CMU/105/105_60_poses.npz +CMU/105/105_61_poses.npz +CMU/105/105_62_poses.npz +CMU/106/106_02_poses.npz +CMU/106/106_03_poses.npz +CMU/106/106_04_poses.npz +CMU/106/106_05_poses.npz +CMU/106/106_06_poses.npz +CMU/106/106_07_poses.npz +CMU/106/106_08_poses.npz +CMU/106/106_09_poses.npz +CMU/106/106_10_poses.npz +CMU/106/106_11_poses.npz +CMU/106/106_12_poses.npz +CMU/106/106_13_poses.npz +CMU/106/106_15_poses.npz +CMU/106/106_18_poses.npz +CMU/106/106_19_poses.npz +CMU/106/106_20_poses.npz +CMU/106/106_21_poses.npz +CMU/106/106_22_poses.npz +CMU/106/106_23_poses.npz +CMU/106/106_24_poses.npz +CMU/106/106_25_poses.npz +CMU/106/106_26_poses.npz +CMU/106/106_27_poses.npz +CMU/106/106_28_poses.npz +CMU/106/106_29_poses.npz +CMU/106/106_30_poses.npz +CMU/106/106_31_poses.npz +CMU/106/106_32_poses.npz +CMU/106/106_33_poses.npz +CMU/106/106_34_poses.npz +CMU/107/107_01_poses.npz +CMU/107/107_02_poses.npz +CMU/107/107_04_poses.npz +CMU/107/107_05_poses.npz +CMU/107/107_06_poses.npz +CMU/107/107_07_poses.npz +CMU/107/107_08_poses.npz +CMU/107/107_09_poses.npz +CMU/107/107_10_poses.npz +CMU/107/107_11_poses.npz +CMU/107/107_12_poses.npz +CMU/107/107_13_poses.npz +CMU/107/107_14_poses.npz +CMU/108/108_01_poses.npz +CMU/108/108_02_poses.npz +CMU/108/108_03_poses.npz +CMU/108/108_05_poses.npz +CMU/108/108_09_poses.npz +CMU/108/108_10_poses.npz +CMU/108/108_11_poses.npz +CMU/108/108_12_poses.npz +CMU/108/108_13_poses.npz +CMU/108/108_14_poses.npz +CMU/108/108_15_poses.npz +CMU/108/108_17_poses.npz +CMU/108/108_19_poses.npz +CMU/108/108_20_poses.npz +CMU/108/108_22_poses.npz +CMU/108/108_23_poses.npz +CMU/108/108_24_poses.npz +CMU/108/108_25_poses.npz +CMU/108/108_27_poses.npz +CMU/108/108_28_poses.npz +CMU/11/11_01_poses.npz +CMU/111/111_02_poses.npz +CMU/111/111_03_poses.npz +CMU/111/111_04_poses.npz +CMU/111/111_05_poses.npz +CMU/111/111_06_poses.npz +CMU/111/111_07_poses.npz +CMU/111/111_08_poses.npz +CMU/111/111_09_poses.npz +CMU/111/111_10_poses.npz +CMU/111/111_11_poses.npz +CMU/111/111_14_poses.npz +CMU/111/111_15_poses.npz +CMU/111/111_17_poses.npz +CMU/111/111_18_poses.npz +CMU/111/111_19_poses.npz +CMU/111/111_20_poses.npz +CMU/111/111_21_poses.npz +CMU/111/111_23_poses.npz +CMU/111/111_24_poses.npz +CMU/111/111_25_poses.npz +CMU/111/111_26_poses.npz +CMU/111/111_27_poses.npz +CMU/111/111_28_poses.npz +CMU/111/111_29_poses.npz +CMU/111/111_30_poses.npz +CMU/111/111_31_poses.npz +CMU/111/111_34_poses.npz +CMU/111/111_35_poses.npz +CMU/111/111_36_poses.npz +CMU/111/111_37_poses.npz +CMU/111/111_38_poses.npz +CMU/111/111_39_poses.npz +CMU/111/111_40_poses.npz +CMU/111/111_41_poses.npz +CMU/113/113_02_poses.npz +CMU/113/113_03_poses.npz +CMU/113/113_04_poses.npz +CMU/113/113_05_poses.npz +CMU/113/113_06_poses.npz +CMU/113/113_07_poses.npz +CMU/113/113_08_poses.npz +CMU/113/113_09_poses.npz +CMU/113/113_10_poses.npz +CMU/113/113_11_poses.npz +CMU/113/113_12_poses.npz +CMU/113/113_13_poses.npz +CMU/113/113_15_poses.npz +CMU/113/113_16_poses.npz +CMU/113/113_17_poses.npz +CMU/113/113_18_poses.npz +CMU/113/113_19_poses.npz +CMU/113/113_20_poses.npz +CMU/113/113_21_poses.npz +CMU/113/113_22_poses.npz +CMU/113/113_23_poses.npz +CMU/113/113_24_poses.npz +CMU/113/113_25_poses.npz +CMU/113/113_26_poses.npz +CMU/113/113_27_poses.npz +CMU/113/113_28_poses.npz +CMU/113/113_29_poses.npz +CMU/114/114_01_poses.npz +CMU/114/114_02_poses.npz +CMU/114/114_03_poses.npz +CMU/114/114_04_poses.npz +CMU/114/114_05_poses.npz +CMU/114/114_06_poses.npz +CMU/114/114_07_poses.npz +CMU/114/114_08_poses.npz +CMU/114/114_09_poses.npz +CMU/114/114_10_poses.npz +CMU/114/114_11_poses.npz +CMU/114/114_12_poses.npz +CMU/114/114_13_poses.npz +CMU/114/114_14_poses.npz +CMU/114/114_15_poses.npz +CMU/114/114_16_poses.npz +CMU/115/115_01_poses.npz +CMU/115/115_02_poses.npz +CMU/115/115_03_poses.npz +CMU/115/115_04_poses.npz +CMU/115/115_05_poses.npz +CMU/115/115_06_poses.npz +CMU/115/115_07_poses.npz +CMU/115/115_08_poses.npz +CMU/115/115_09_poses.npz +CMU/115/115_10_poses.npz +CMU/118/118_01_poses.npz +CMU/118/118_03_poses.npz +CMU/118/118_04_poses.npz +CMU/118/118_05_poses.npz +CMU/118/118_06_poses.npz +CMU/118/118_07_poses.npz +CMU/118/118_08_poses.npz +CMU/118/118_10_poses.npz +CMU/118/118_11_poses.npz +CMU/118/118_12_poses.npz +CMU/118/118_13_poses.npz +CMU/118/118_14_poses.npz +CMU/118/118_15_poses.npz +CMU/118/118_16_poses.npz +CMU/118/118_18_poses.npz +CMU/118/118_19_poses.npz +CMU/118/118_20_poses.npz +CMU/118/118_21_poses.npz +CMU/118/118_22_poses.npz +CMU/118/118_23_poses.npz +CMU/118/118_24_poses.npz +CMU/118/118_25_poses.npz +CMU/118/118_26_poses.npz +CMU/118/118_27_poses.npz +CMU/118/118_28_poses.npz +CMU/118/118_29_poses.npz +CMU/118/118_30_poses.npz +CMU/118/118_31_poses.npz +CMU/118/118_32_poses.npz +CMU/12/12_01_poses.npz +CMU/12/12_02_poses.npz +CMU/12/12_03_poses.npz +CMU/12/12_04_poses.npz +CMU/120/120_01_poses.npz +CMU/120/120_02_poses.npz +CMU/120/120_03_poses.npz +CMU/120/120_04_poses.npz +CMU/120/120_06_poses.npz +CMU/120/120_07_poses.npz +CMU/120/120_09_poses.npz +CMU/120/120_11_poses.npz +CMU/120/120_12_poses.npz +CMU/120/120_13_poses.npz +CMU/120/120_14_poses.npz +CMU/120/120_15_poses.npz +CMU/120/120_18_poses.npz +CMU/120/120_19_poses.npz +CMU/120/120_20_poses.npz +CMU/120/120_21_poses.npz +CMU/120/120_22_poses.npz +CMU/122/122_01_poses.npz +CMU/122/122_02_poses.npz +CMU/122/122_03_poses.npz +CMU/122/122_04_poses.npz +CMU/122/122_05_poses.npz +CMU/122/122_06_poses.npz +CMU/122/122_07_poses.npz +CMU/122/122_08_poses.npz +CMU/122/122_09_poses.npz +CMU/122/122_10_poses.npz +CMU/122/122_11_poses.npz +CMU/122/122_13_poses.npz +CMU/122/122_14_poses.npz +CMU/122/122_15_poses.npz +CMU/122/122_16_poses.npz +CMU/122/122_17_poses.npz +CMU/122/122_18_poses.npz +CMU/122/122_19_poses.npz +CMU/122/122_20_poses.npz +CMU/122/122_21_poses.npz +CMU/122/122_22_poses.npz +CMU/122/122_23_poses.npz +CMU/122/122_24_poses.npz +CMU/122/122_25_poses.npz +CMU/122/122_26_poses.npz +CMU/122/122_27_poses.npz +CMU/122/122_28_poses.npz +CMU/122/122_29_poses.npz +CMU/122/122_30_poses.npz +CMU/122/122_31_poses.npz +CMU/122/122_32_poses.npz +CMU/122/122_33_poses.npz +CMU/122/122_34_poses.npz +CMU/122/122_35_poses.npz +CMU/122/122_36_poses.npz +CMU/122/122_37_poses.npz +CMU/122/122_38_poses.npz +CMU/122/122_39_poses.npz +CMU/122/122_40_poses.npz +CMU/122/122_41_poses.npz +CMU/122/122_42_poses.npz +CMU/122/122_44_poses.npz +CMU/122/122_45_poses.npz +CMU/122/122_46_poses.npz +CMU/122/122_47_poses.npz +CMU/122/122_48_poses.npz +CMU/122/122_49_poses.npz +CMU/122/122_50_poses.npz +CMU/122/122_51_poses.npz +CMU/122/122_52_poses.npz +CMU/122/122_53_poses.npz +CMU/122/122_54_poses.npz +CMU/122/122_55_poses.npz +CMU/122/122_56_poses.npz +CMU/122/122_57_poses.npz +CMU/122/122_58_poses.npz +CMU/122/122_60_poses.npz +CMU/122/122_61_poses.npz +CMU/122/122_62_poses.npz +CMU/122/122_63_poses.npz +CMU/122/122_64_poses.npz +CMU/122/122_65_poses.npz +CMU/122/122_68_poses.npz +CMU/123/123_01_poses.npz +CMU/123/123_02_poses.npz +CMU/123/123_03_poses.npz +CMU/123/123_04_poses.npz +CMU/123/123_05_poses.npz +CMU/123/123_06_poses.npz +CMU/123/123_08_poses.npz +CMU/123/123_09_poses.npz +CMU/123/123_10_poses.npz +CMU/123/123_11_poses.npz +CMU/123/123_12_poses.npz +CMU/123/123_13_poses.npz +CMU/124/124_01_poses.npz +CMU/124/124_03_poses.npz +CMU/124/124_04_poses.npz +CMU/124/124_06_poses.npz +CMU/124/124_07_poses.npz +CMU/124/124_08_poses.npz +CMU/124/124_10_poses.npz +CMU/124/124_11_poses.npz +CMU/124/124_12_poses.npz +CMU/124/124_13_poses.npz +CMU/125/125_01_poses.npz +CMU/125/125_02_poses.npz +CMU/125/125_05_poses.npz +CMU/126/126_01_poses.npz +CMU/126/126_03_poses.npz +CMU/126/126_04_poses.npz +CMU/126/126_06_poses.npz +CMU/126/126_07_poses.npz +CMU/126/126_08_poses.npz +CMU/126/126_09_poses.npz +CMU/126/126_10_poses.npz +CMU/126/126_11_poses.npz +CMU/126/126_12_poses.npz +CMU/126/126_13_poses.npz +CMU/126/126_14_poses.npz +CMU/127/127_01_poses.npz +CMU/127/127_03_poses.npz +CMU/127/127_04_poses.npz +CMU/127/127_05_poses.npz +CMU/127/127_06_poses.npz +CMU/127/127_07_poses.npz +CMU/127/127_08_poses.npz +CMU/127/127_09_poses.npz +CMU/127/127_10_poses.npz +CMU/127/127_11_poses.npz +CMU/127/127_12_poses.npz +CMU/127/127_13_poses.npz +CMU/127/127_14_poses.npz +CMU/127/127_15_poses.npz +CMU/127/127_16_poses.npz +CMU/127/127_17_poses.npz +CMU/127/127_18_poses.npz +CMU/127/127_19_poses.npz +CMU/127/127_20_poses.npz +CMU/127/127_21_poses.npz +CMU/127/127_22_poses.npz +CMU/127/127_23_poses.npz +CMU/127/127_24_poses.npz +CMU/127/127_25_poses.npz +CMU/127/127_28_poses.npz +CMU/127/127_29_poses.npz +CMU/127/127_30_poses.npz +CMU/127/127_31_poses.npz +CMU/127/127_33_poses.npz +CMU/127/127_34_poses.npz +CMU/127/127_35_poses.npz +CMU/127/127_36_poses.npz +CMU/127/127_37_poses.npz +CMU/127/127_38_poses.npz +CMU/128/128_01_poses.npz +CMU/128/128_02_poses.npz +CMU/128/128_03_poses.npz +CMU/128/128_04_poses.npz +CMU/128/128_05_poses.npz +CMU/128/128_06_poses.npz +CMU/128/128_07_poses.npz +CMU/128/128_08_poses.npz +CMU/128/128_09_poses.npz +CMU/128/128_10_poses.npz +CMU/128/128_11_poses.npz +CMU/13/13_01_poses.npz +CMU/13/13_02_poses.npz +CMU/13/13_03_poses.npz +CMU/13/13_04_poses.npz +CMU/13/13_05_poses.npz +CMU/13/13_06_poses.npz +CMU/13/13_07_poses.npz +CMU/13/13_08_poses.npz +CMU/13/13_09_poses.npz +CMU/13/13_11_poses.npz +CMU/13/13_13_poses.npz +CMU/13/13_14_poses.npz +CMU/13/13_15_poses.npz +CMU/13/13_16_poses.npz +CMU/13/13_17_poses.npz +CMU/13/13_18_poses.npz +CMU/13/13_19_poses.npz +CMU/13/13_20_poses.npz +CMU/13/13_21_poses.npz +CMU/13/13_22_poses.npz +CMU/13/13_23_poses.npz +CMU/13/13_24_poses.npz +CMU/13/13_25_poses.npz +CMU/13/13_26_poses.npz +CMU/13/13_27_poses.npz +CMU/13/13_28_poses.npz +CMU/13/13_29_poses.npz +CMU/13/13_30_poses.npz +CMU/13/13_31_poses.npz +CMU/13/13_32_poses.npz +CMU/13/13_33_poses.npz +CMU/13/13_35_poses.npz +CMU/13/13_36_poses.npz +CMU/13/13_37_poses.npz +CMU/13/13_38_poses.npz +CMU/13/13_39_poses.npz +CMU/13/13_40_poses.npz +CMU/13/13_41_poses.npz +CMU/13/13_42_poses.npz +CMU/131/131_01_poses.npz +CMU/131/131_02_poses.npz +CMU/131/131_03_poses.npz +CMU/131/131_04_poses.npz +CMU/131/131_05_poses.npz +CMU/131/131_06_poses.npz +CMU/131/131_08_poses.npz +CMU/131/131_09_poses.npz +CMU/131/131_10_poses.npz +CMU/131/131_11_poses.npz +CMU/131/131_12_poses.npz +CMU/131/131_13_poses.npz +CMU/131/131_14_poses.npz +CMU/132/132_01_poses.npz +CMU/132/132_02_poses.npz +CMU/132/132_03_poses.npz +CMU/132/132_04_poses.npz +CMU/132/132_06_poses.npz +CMU/132/132_07_poses.npz +CMU/132/132_08_poses.npz +CMU/132/132_09_poses.npz +CMU/132/132_10_poses.npz +CMU/132/132_11_poses.npz +CMU/132/132_12_poses.npz +CMU/132/132_17_poses.npz +CMU/132/132_18_poses.npz +CMU/132/132_19_poses.npz +CMU/132/132_20_poses.npz +CMU/132/132_21_poses.npz +CMU/132/132_22_poses.npz +CMU/132/132_24_poses.npz +CMU/132/132_25_poses.npz +CMU/132/132_27_poses.npz +CMU/132/132_29_poses.npz +CMU/132/132_30_poses.npz +CMU/132/132_31_poses.npz +CMU/132/132_32_poses.npz +CMU/132/132_34_poses.npz +CMU/132/132_35_poses.npz +CMU/132/132_36_poses.npz +CMU/132/132_37_poses.npz +CMU/132/132_38_poses.npz +CMU/132/132_39_poses.npz +CMU/132/132_40_poses.npz +CMU/132/132_41_poses.npz +CMU/132/132_42_poses.npz +CMU/132/132_43_poses.npz +CMU/132/132_44_poses.npz +CMU/132/132_45_poses.npz +CMU/132/132_46_poses.npz +CMU/132/132_48_poses.npz +CMU/132/132_50_poses.npz +CMU/132/132_51_poses.npz +CMU/132/132_52_poses.npz +CMU/132/132_53_poses.npz +CMU/132/132_54_poses.npz +CMU/132/132_55_poses.npz +CMU/133/133_01_poses.npz +CMU/133/133_02_poses.npz +CMU/133/133_03_poses.npz +CMU/133/133_04_poses.npz +CMU/133/133_05_poses.npz +CMU/133/133_06_poses.npz +CMU/133/133_07_poses.npz +CMU/133/133_08_poses.npz +CMU/133/133_09_poses.npz +CMU/133/133_10_poses.npz +CMU/133/133_11_poses.npz +CMU/133/133_12_poses.npz +CMU/133/133_13_poses.npz +CMU/133/133_14_poses.npz +CMU/133/133_15_poses.npz +CMU/133/133_16_poses.npz +CMU/133/133_17_poses.npz +CMU/133/133_18_poses.npz +CMU/133/133_19_poses.npz +CMU/133/133_20_poses.npz +CMU/133/133_21_poses.npz +CMU/133/133_22_poses.npz +CMU/133/133_24_poses.npz +CMU/133/133_26_poses.npz +CMU/135/135_02_poses.npz +CMU/135/135_03_poses.npz +CMU/135/135_05_poses.npz +CMU/135/135_06_poses.npz +CMU/135/135_07_poses.npz +CMU/135/135_08_poses.npz +CMU/135/135_09_poses.npz +CMU/135/135_10_poses.npz +CMU/135/135_11_poses.npz +CMU/136/136_02_poses.npz +CMU/136/136_03_poses.npz +CMU/136/136_04_poses.npz +CMU/136/136_05_poses.npz +CMU/136/136_06_poses.npz +CMU/136/136_07_poses.npz +CMU/136/136_08_poses.npz +CMU/136/136_09_poses.npz +CMU/136/136_12_poses.npz +CMU/136/136_13_poses.npz +CMU/136/136_15_poses.npz +CMU/136/136_16_poses.npz +CMU/136/136_17_poses.npz +CMU/136/136_18_poses.npz +CMU/136/136_20_poses.npz +CMU/136/136_21_poses.npz +CMU/136/136_22_poses.npz +CMU/136/136_24_poses.npz +CMU/136/136_25_poses.npz +CMU/136/136_26_poses.npz +CMU/136/136_27_poses.npz +CMU/136/136_30_poses.npz +CMU/136/136_31_poses.npz +CMU/136/136_32_poses.npz +CMU/136/136_33_poses.npz +CMU/137/137_01_poses.npz +CMU/137/137_02_poses.npz +CMU/137/137_03_poses.npz +CMU/137/137_04_poses.npz +CMU/137/137_05_poses.npz +CMU/137/137_07_poses.npz +CMU/137/137_08_poses.npz +CMU/137/137_09_poses.npz +CMU/137/137_10_poses.npz +CMU/137/137_11_poses.npz +CMU/137/137_13_poses.npz +CMU/137/137_15_poses.npz +CMU/137/137_16_poses.npz +CMU/137/137_17_poses.npz +CMU/137/137_19_poses.npz +CMU/137/137_20_poses.npz +CMU/137/137_21_poses.npz +CMU/137/137_22_poses.npz +CMU/137/137_23_poses.npz +CMU/137/137_24_poses.npz +CMU/137/137_25_poses.npz +CMU/137/137_26_poses.npz +CMU/137/137_27_poses.npz +CMU/137/137_28_poses.npz +CMU/137/137_29_poses.npz +CMU/137/137_31_poses.npz +CMU/137/137_32_poses.npz +CMU/137/137_33_poses.npz +CMU/137/137_34_poses.npz +CMU/137/137_35_poses.npz +CMU/137/137_36_poses.npz +CMU/137/137_37_poses.npz +CMU/137/137_38_poses.npz +CMU/137/137_39_poses.npz +CMU/137/137_40_poses.npz +CMU/137/137_41_poses.npz +CMU/137/137_42_poses.npz +CMU/138/138_01_poses.npz +CMU/138/138_03_poses.npz +CMU/138/138_04_poses.npz +CMU/138/138_06_poses.npz +CMU/138/138_09_poses.npz +CMU/138/138_10_poses.npz +CMU/138/138_11_poses.npz +CMU/138/138_12_poses.npz +CMU/138/138_17_poses.npz +CMU/138/138_18_poses.npz +CMU/138/138_19_poses.npz +CMU/138/138_20_poses.npz +CMU/138/138_21_poses.npz +CMU/138/138_23_poses.npz +CMU/138/138_24_poses.npz +CMU/138/138_25_poses.npz +CMU/138/138_48_poses.npz +CMU/139/139_01_poses.npz +CMU/139/139_02_poses.npz +CMU/139/139_03_poses.npz +CMU/139/139_04_poses.npz +CMU/139/139_05_poses.npz +CMU/139/139_06_poses.npz +CMU/139/139_07_poses.npz +CMU/139/139_08_poses.npz +CMU/139/139_09_poses.npz +CMU/139/139_10_poses.npz +CMU/139/139_11_poses.npz +CMU/139/139_12_poses.npz +CMU/139/139_13_poses.npz +CMU/139/139_14_poses.npz +CMU/139/139_15_poses.npz +CMU/139/139_16_poses.npz +CMU/139/139_17_poses.npz +CMU/139/139_18_poses.npz +CMU/139/139_19_poses.npz +CMU/139/139_21_poses.npz +CMU/139/139_22_poses.npz +CMU/139/139_23_poses.npz +CMU/139/139_24_poses.npz +CMU/139/139_25_poses.npz +CMU/139/139_26_poses.npz +CMU/139/139_27_poses.npz +CMU/139/139_29_poses.npz +CMU/139/139_30_poses.npz +CMU/139/139_31_poses.npz +CMU/139/139_32_poses.npz +CMU/139/139_33_poses.npz +CMU/140/140_01_poses.npz +CMU/140/140_02_poses.npz +CMU/140/140_04_poses.npz +CMU/140/140_06_poses.npz +CMU/140/140_07_poses.npz +CMU/140/140_08_poses.npz +CMU/140/140_09_poses.npz +CMU/141/141_01_poses.npz +CMU/141/141_03_poses.npz +CMU/141/141_04_poses.npz +CMU/141/141_05_poses.npz +CMU/141/141_06_poses.npz +CMU/141/141_08_poses.npz +CMU/141/141_10_poses.npz +CMU/141/141_11_poses.npz +CMU/141/141_12_poses.npz +CMU/141/141_13_poses.npz +CMU/141/141_14_poses.npz +CMU/141/141_15_poses.npz +CMU/141/141_16_poses.npz +CMU/141/141_17_poses.npz +CMU/141/141_18_poses.npz +CMU/141/141_19_poses.npz +CMU/141/141_20_poses.npz +CMU/141/141_21_poses.npz +CMU/141/141_23_poses.npz +CMU/141/141_24_poses.npz +CMU/141/141_25_poses.npz +CMU/141/141_26_poses.npz +CMU/141/141_27_poses.npz +CMU/141/141_28_poses.npz +CMU/141/141_29_poses.npz +CMU/141/141_30_poses.npz +CMU/141/141_31_poses.npz +CMU/141/141_32_poses.npz +CMU/141/141_33_poses.npz +CMU/141/141_34_poses.npz +CMU/142/142_01_poses.npz +CMU/142/142_04_poses.npz +CMU/142/142_06_poses.npz +CMU/142/142_08_poses.npz +CMU/142/142_09_poses.npz +CMU/142/142_12_poses.npz +CMU/142/142_13_poses.npz +CMU/142/142_14_poses.npz +CMU/142/142_15_poses.npz +CMU/142/142_16_poses.npz +CMU/142/142_17_poses.npz +CMU/142/142_18_poses.npz +CMU/142/142_20_poses.npz +CMU/142/142_21_poses.npz +CMU/142/142_22_poses.npz +CMU/143/143_02_poses.npz +CMU/143/143_03_poses.npz +CMU/143/143_04_poses.npz +CMU/143/143_05_poses.npz +CMU/143/143_06_poses.npz +CMU/143/143_08_poses.npz +CMU/143/143_09_poses.npz +CMU/143/143_10_poses.npz +CMU/143/143_11_poses.npz +CMU/143/143_12_poses.npz +CMU/143/143_13_poses.npz +CMU/143/143_14_poses.npz +CMU/143/143_15_poses.npz +CMU/143/143_16_poses.npz +CMU/143/143_17_poses.npz +CMU/143/143_18_poses.npz +CMU/143/143_19_poses.npz +CMU/143/143_20_poses.npz +CMU/143/143_22_poses.npz +CMU/143/143_23_poses.npz +CMU/143/143_24_poses.npz +CMU/143/143_25_poses.npz +CMU/143/143_26_poses.npz +CMU/143/143_27_poses.npz +CMU/143/143_28_poses.npz +CMU/143/143_29_poses.npz +CMU/143/143_30_poses.npz +CMU/143/143_31_poses.npz +CMU/143/143_32_poses.npz +CMU/143/143_33_poses.npz +CMU/143/143_34_poses.npz +CMU/143/143_35_poses.npz +CMU/143/143_36_poses.npz +CMU/143/143_37_poses.npz +CMU/143/143_38_poses.npz +CMU/143/143_41_poses.npz +CMU/143/143_42_poses.npz +CMU/144/144_01_poses.npz +CMU/144/144_02_poses.npz +CMU/144/144_04_poses.npz +CMU/144/144_05_poses.npz +CMU/144/144_07_poses.npz +CMU/144/144_08_poses.npz +CMU/144/144_09_poses.npz +CMU/144/144_10_poses.npz +CMU/144/144_11_poses.npz +CMU/144/144_12_poses.npz +CMU/144/144_13_poses.npz +CMU/144/144_14_poses.npz +CMU/144/144_15_poses.npz +CMU/144/144_16_poses.npz +CMU/144/144_18_poses.npz +CMU/144/144_19_poses.npz +CMU/144/144_20_poses.npz +CMU/144/144_21_poses.npz +CMU/144/144_22_poses.npz +CMU/144/144_23_poses.npz +CMU/144/144_24_poses.npz +CMU/144/144_26_poses.npz +CMU/144/144_27_poses.npz +CMU/144/144_28_poses.npz +CMU/144/144_29_poses.npz +CMU/144/144_32_poses.npz +CMU/144/144_34_poses.npz +CMU/15/15_01_poses.npz +CMU/15/15_02_poses.npz +CMU/15/15_03_poses.npz +CMU/15/15_04_poses.npz +CMU/15/15_05_poses.npz +CMU/15/15_08_poses.npz +CMU/15/15_09_poses.npz +CMU/15/15_11_poses.npz +CMU/15/15_12_poses.npz +CMU/15/15_13_poses.npz +CMU/15/15_14_poses.npz +CMU/16/16_35_poses.npz +CMU/17/17_01_poses.npz +CMU/17/17_03_poses.npz +CMU/17/17_04_poses.npz +CMU/17/17_06_poses.npz +CMU/17/17_08_poses.npz +CMU/17/17_09_poses.npz +CMU/17/17_10_poses.npz +CMU/18_19_Justin/18_01_poses.npz +CMU/18_19_Justin/18_03_poses.npz +CMU/18_19_Justin/18_06_poses.npz +CMU/18_19_Justin/18_07_poses.npz +CMU/18_19_Justin/18_11_poses.npz +CMU/18_19_Justin/18_13_poses.npz +CMU/18_19_Justin/18_14_poses.npz +CMU/18_19_Justin/18_15_poses.npz +CMU/18_19_rory/18_01_poses.npz +CMU/18_19_rory/18_03_poses.npz +CMU/18_19_rory/18_04_poses.npz +CMU/18_19_rory/18_06_poses.npz +CMU/18_19_rory/18_07_poses.npz +CMU/18_19_rory/18_08_poses.npz +CMU/18_19_rory/18_09_poses.npz +CMU/18_19_rory/18_10_poses.npz +CMU/18_19_rory/18_11_poses.npz +CMU/18_19_rory/18_12_poses.npz +CMU/18_19_rory/18_13_poses.npz +CMU/18_19_rory/18_15_poses.npz +CMU/20_21_Justin1/20_01_poses.npz +CMU/20_21_Justin1/20_02_poses.npz +CMU/20_21_Justin1/20_03_poses.npz +CMU/20_21_Justin1/20_06_poses.npz +CMU/20_21_Justin1/20_07_poses.npz +CMU/20_21_Justin1/20_08_poses.npz +CMU/20_21_Justin1/20_09_poses.npz +CMU/20_21_Justin1/20_10_poses.npz +CMU/20_21_Justin1/20_11_poses.npz +CMU/20_21_Justin1/20_12_poses.npz +CMU/20_21_Justin1/20_13_poses.npz +CMU/20_21_rory1/20_01_poses.npz +CMU/20_21_rory1/20_02_poses.npz +CMU/20_21_rory1/20_03_poses.npz +CMU/20_21_rory1/20_04_poses.npz +CMU/20_21_rory1/20_05_poses.npz +CMU/20_21_rory1/20_06_poses.npz +CMU/20_21_rory1/20_07_poses.npz +CMU/20_21_rory1/20_08_poses.npz +CMU/20_21_rory1/20_09_poses.npz +CMU/20_21_rory1/20_10_poses.npz +CMU/20_21_rory1/20_11_poses.npz +CMU/20_21_rory1/20_12_poses.npz +CMU/20_21_rory1/20_13_poses.npz +CMU/22_23_Rory/22_01_poses.npz +CMU/22_23_Rory/22_02_poses.npz +CMU/22_23_Rory/22_03_poses.npz +CMU/22_23_Rory/22_04_poses.npz +CMU/22_23_Rory/22_05_poses.npz +CMU/22_23_Rory/22_06_poses.npz +CMU/22_23_Rory/22_07_poses.npz +CMU/22_23_Rory/22_08_poses.npz +CMU/22_23_Rory/22_10_poses.npz +CMU/22_23_Rory/22_11_poses.npz +CMU/22_23_Rory/22_12_poses.npz +CMU/22_23_Rory/22_13_poses.npz +CMU/22_23_Rory/22_14_poses.npz +CMU/22_23_Rory/22_15_poses.npz +CMU/22_23_Rory/22_16_poses.npz +CMU/22_23_Rory/22_19_poses.npz +CMU/22_23_Rory/22_20_poses.npz +CMU/22_23_Rory/22_21_poses.npz +CMU/22_23_Rory/22_23_poses.npz +CMU/22_23_Rory/22_24_poses.npz +CMU/22_23_Rory/22_25_poses.npz +CMU/22_23_justin/22_01_poses.npz +CMU/22_23_justin/22_02_poses.npz +CMU/22_23_justin/22_03_poses.npz +CMU/22_23_justin/22_04_poses.npz +CMU/22_23_justin/22_05_poses.npz +CMU/22_23_justin/22_06_poses.npz +CMU/22_23_justin/22_07_poses.npz +CMU/22_23_justin/22_08_poses.npz +CMU/22_23_justin/22_09_poses.npz +CMU/22_23_justin/22_10_poses.npz +CMU/22_23_justin/22_11_poses.npz +CMU/22_23_justin/22_12_poses.npz +CMU/22_23_justin/22_13_poses.npz +CMU/22_23_justin/22_14_poses.npz +CMU/22_23_justin/22_15_poses.npz +CMU/22_23_justin/22_16_poses.npz +CMU/22_23_justin/22_17_poses.npz +CMU/22_23_justin/22_18_poses.npz +CMU/22_23_justin/22_19_poses.npz +CMU/22_23_justin/22_20_poses.npz +CMU/22_23_justin/22_21_poses.npz +CMU/22_23_justin/22_22_poses.npz +CMU/22_23_justin/22_23_poses.npz +CMU/22_23_justin/22_24_poses.npz +CMU/24/24_01_poses.npz +CMU/25/25_01_poses.npz +CMU/26/26_01_poses.npz +CMU/26/26_02_poses.npz +CMU/26/26_03_poses.npz +CMU/26/26_05_poses.npz +CMU/26/26_10_poses.npz +CMU/27/27_01_poses.npz +CMU/27/27_02_poses.npz +CMU/27/27_03_poses.npz +CMU/27/27_04_poses.npz +CMU/27/27_05_poses.npz +CMU/27/27_06_poses.npz +CMU/27/27_07_poses.npz +CMU/27/27_08_poses.npz +CMU/27/27_09_poses.npz +CMU/27/27_10_poses.npz +CMU/28/28_01_poses.npz +CMU/28/28_02_poses.npz +CMU/28/28_03_poses.npz +CMU/28/28_04_poses.npz +CMU/28/28_05_poses.npz +CMU/28/28_06_poses.npz +CMU/28/28_07_poses.npz +CMU/28/28_09_poses.npz +CMU/28/28_10_poses.npz +CMU/28/28_11_poses.npz +CMU/28/28_12_poses.npz +CMU/28/28_13_poses.npz +CMU/28/28_14_poses.npz +CMU/28/28_15_poses.npz +CMU/28/28_16_poses.npz +CMU/28/28_17_poses.npz +CMU/28/28_19_poses.npz +CMU/29/29_01_poses.npz +CMU/29/29_02_poses.npz +CMU/29/29_04_poses.npz +CMU/29/29_05_poses.npz +CMU/29/29_06_poses.npz +CMU/29/29_07_poses.npz +CMU/29/29_09_poses.npz +CMU/29/29_10_poses.npz +CMU/29/29_11_poses.npz +CMU/29/29_12_poses.npz +CMU/29/29_13_poses.npz +CMU/29/29_14_poses.npz +CMU/29/29_15_poses.npz +CMU/29/29_16_poses.npz +CMU/29/29_17_poses.npz +CMU/29/29_18_poses.npz +CMU/29/29_20_poses.npz +CMU/29/29_21_poses.npz +CMU/29/29_22_poses.npz +CMU/29/29_23_poses.npz +CMU/29/29_24_poses.npz +CMU/29/29_25_poses.npz +CMU/30/30_01_poses.npz +CMU/30/30_03_poses.npz +CMU/30/30_04_poses.npz +CMU/30/30_06_poses.npz +CMU/30/30_07_poses.npz +CMU/30/30_08_poses.npz +CMU/30/30_10_poses.npz +CMU/30/30_11_poses.npz +CMU/30/30_12_poses.npz +CMU/30/30_13_poses.npz +CMU/30/30_14_poses.npz +CMU/30/30_15_poses.npz +CMU/30/30_16_poses.npz +CMU/30/30_18_poses.npz +CMU/30/30_19_poses.npz +CMU/30/30_20_poses.npz +CMU/30/30_21_poses.npz +CMU/30/30_22_poses.npz +CMU/30/30_23_poses.npz +CMU/31/31_01_poses.npz +CMU/31/31_02_poses.npz +CMU/31/31_03_poses.npz +CMU/31/31_05_poses.npz +CMU/31/31_06_poses.npz +CMU/31/31_07_poses.npz +CMU/31/31_08_poses.npz +CMU/31/31_09_poses.npz +CMU/31/31_10_poses.npz +CMU/31/31_11_poses.npz +CMU/31/31_13_poses.npz +CMU/31/31_14_poses.npz +CMU/31/31_15_poses.npz +CMU/31/31_16_poses.npz +CMU/31/31_17_poses.npz +CMU/31/31_18_poses.npz +CMU/31/31_20_poses.npz +CMU/31/31_21_poses.npz +CMU/32/32_01_poses.npz +CMU/32/32_02_poses.npz +CMU/32/32_03_poses.npz +CMU/32/32_04_poses.npz +CMU/32/32_05_poses.npz +CMU/32/32_06_poses.npz +CMU/32/32_07_poses.npz +CMU/32/32_08_poses.npz +CMU/32/32_09_poses.npz +CMU/32/32_10_poses.npz +CMU/32/32_11_poses.npz +CMU/32/32_12_poses.npz +CMU/32/32_13_poses.npz +CMU/32/32_14_poses.npz +CMU/32/32_15_poses.npz +CMU/32/32_16_poses.npz +CMU/32/32_17_poses.npz +CMU/32/32_18_poses.npz +CMU/32/32_19_poses.npz +CMU/32/32_20_poses.npz +CMU/32/32_21_poses.npz +CMU/32/32_22_poses.npz +CMU/35/35_01_poses.npz +CMU/35/35_02_poses.npz +CMU/35/35_03_poses.npz +CMU/35/35_04_poses.npz +CMU/35/35_05_poses.npz +CMU/35/35_06_poses.npz +CMU/35/35_07_poses.npz +CMU/35/35_09_poses.npz +CMU/35/35_10_poses.npz +CMU/35/35_11_poses.npz +CMU/35/35_12_poses.npz +CMU/35/35_13_poses.npz +CMU/35/35_14_poses.npz +CMU/35/35_15_poses.npz +CMU/35/35_17_poses.npz +CMU/35/35_19_poses.npz +CMU/35/35_20_poses.npz +CMU/35/35_21_poses.npz +CMU/35/35_22_poses.npz +CMU/35/35_23_poses.npz +CMU/35/35_24_poses.npz +CMU/35/35_25_poses.npz +CMU/35/35_27_poses.npz +CMU/35/35_30_poses.npz +CMU/35/35_31_poses.npz +CMU/35/35_32_poses.npz +CMU/35/35_33_poses.npz +CMU/35/35_34_poses.npz +CMU/36/36_01_poses.npz +CMU/36/36_02_poses.npz +CMU/36/36_03_poses.npz +CMU/36/36_04_poses.npz +CMU/36/36_05_poses.npz +CMU/36/36_06_poses.npz +CMU/36/36_08_poses.npz +CMU/36/36_09_poses.npz +CMU/36/36_10_poses.npz +CMU/36/36_11_poses.npz +CMU/36/36_12_poses.npz +CMU/36/36_13_poses.npz +CMU/36/36_15_poses.npz +CMU/36/36_16_poses.npz +CMU/36/36_17_poses.npz +CMU/36/36_18_poses.npz +CMU/36/36_21_poses.npz +CMU/36/36_23_poses.npz +CMU/36/36_24_poses.npz +CMU/36/36_25_poses.npz +CMU/36/36_26_poses.npz +CMU/36/36_27_poses.npz +CMU/36/36_28_poses.npz +CMU/36/36_29_poses.npz +CMU/36/36_30_poses.npz +CMU/36/36_31_poses.npz +CMU/36/36_32_poses.npz +CMU/36/36_33_poses.npz +CMU/36/36_34_poses.npz +CMU/36/36_35_poses.npz +CMU/36/36_36_poses.npz +CMU/37/37_01_poses.npz +CMU/38/38_01_poses.npz +CMU/38/38_02_poses.npz +CMU/38/38_03_poses.npz +CMU/38/38_04_poses.npz +CMU/39/39_01_poses.npz +CMU/39/39_02_poses.npz +CMU/39/39_03_poses.npz +CMU/39/39_04_poses.npz +CMU/39/39_05_poses.npz +CMU/39/39_06_poses.npz +CMU/39/39_07_poses.npz +CMU/39/39_08_poses.npz +CMU/39/39_09_poses.npz +CMU/39/39_10_poses.npz +CMU/39/39_11_poses.npz +CMU/39/39_12_poses.npz +CMU/39/39_13_poses.npz +CMU/39/39_14_poses.npz +CMU/40/40_02_poses.npz +CMU/40/40_03_poses.npz +CMU/40/40_04_poses.npz +CMU/40/40_05_poses.npz +CMU/40/40_06_poses.npz +CMU/40/40_07_poses.npz +CMU/40/40_08_poses.npz +CMU/40/40_09_poses.npz +CMU/40/40_10_poses.npz +CMU/40/40_12_poses.npz +CMU/41/41_02_poses.npz +CMU/41/41_05_poses.npz +CMU/41/41_06_poses.npz +CMU/41/41_07_poses.npz +CMU/41/41_08_poses.npz +CMU/41/41_09_poses.npz +CMU/41/41_10_poses.npz +CMU/41/41_11_poses.npz +CMU/43/43_01_poses.npz +CMU/43/43_02_poses.npz +CMU/43/43_03_poses.npz +CMU/45/45_01_poses.npz +CMU/46/46_01_poses.npz +CMU/47/47_01_poses.npz +CMU/49/49_01_poses.npz +CMU/49/49_02_poses.npz +CMU/49/49_03_poses.npz +CMU/49/49_04_poses.npz +CMU/49/49_05_poses.npz +CMU/49/49_06_poses.npz +CMU/49/49_07_poses.npz +CMU/49/49_08_poses.npz +CMU/49/49_09_poses.npz +CMU/49/49_10_poses.npz +CMU/49/49_11_poses.npz +CMU/49/49_12_poses.npz +CMU/49/49_13_poses.npz +CMU/49/49_14_poses.npz +CMU/49/49_15_poses.npz +CMU/49/49_16_poses.npz +CMU/49/49_17_poses.npz +CMU/49/49_18_poses.npz +CMU/49/49_19_poses.npz +CMU/49/49_20_poses.npz +CMU/49/49_21_poses.npz +CMU/49/49_22_poses.npz +CMU/54/54_01_poses.npz +CMU/54/54_02_poses.npz +CMU/54/54_04_poses.npz +CMU/54/54_07_poses.npz +CMU/54/54_08_poses.npz +CMU/54/54_09_poses.npz +CMU/54/54_10_poses.npz +CMU/54/54_11_poses.npz +CMU/54/54_12_poses.npz +CMU/54/54_13_poses.npz +CMU/54/54_14_poses.npz +CMU/54/54_15_poses.npz +CMU/54/54_16_poses.npz +CMU/54/54_18_poses.npz +CMU/54/54_19_poses.npz +CMU/54/54_21_poses.npz +CMU/54/54_22_poses.npz +CMU/54/54_23_poses.npz +CMU/54/54_24_poses.npz +CMU/54/54_25_poses.npz +CMU/54/54_26_poses.npz +CMU/54/54_27_poses.npz +CMU/55/55_01_poses.npz +CMU/55/55_02_poses.npz +CMU/55/55_03_poses.npz +CMU/55/55_04_poses.npz +CMU/55/55_05_poses.npz +CMU/55/55_06_poses.npz +CMU/55/55_07_poses.npz +CMU/55/55_08_poses.npz +CMU/55/55_09_poses.npz +CMU/55/55_10_poses.npz +CMU/55/55_12_poses.npz +CMU/55/55_13_poses.npz +CMU/55/55_14_poses.npz +CMU/55/55_15_poses.npz +CMU/55/55_16_poses.npz +CMU/55/55_17_poses.npz +CMU/55/55_18_poses.npz +CMU/55/55_19_poses.npz +CMU/55/55_21_poses.npz +CMU/55/55_22_poses.npz +CMU/55/55_23_poses.npz +CMU/55/55_24_poses.npz +CMU/55/55_25_poses.npz +CMU/55/55_26_poses.npz +CMU/55/55_27_poses.npz +CMU/56/56_01_poses.npz +CMU/56/56_02_poses.npz +CMU/56/56_03_poses.npz +CMU/56/56_04_poses.npz +CMU/56/56_05_poses.npz +CMU/56/56_06_poses.npz +CMU/56/56_07_poses.npz +CMU/56/56_08_poses.npz +CMU/60/60_01_poses.npz +CMU/60/60_02_poses.npz +CMU/60/60_03_poses.npz +CMU/60/60_04_poses.npz +CMU/60/60_06_poses.npz +CMU/60/60_09_poses.npz +CMU/60/60_10_poses.npz +CMU/60/60_11_poses.npz +CMU/60/60_12_poses.npz +CMU/60/60_13_poses.npz +CMU/60/60_14_poses.npz +CMU/60/60_15_poses.npz +CMU/61/61_01_poses.npz +CMU/61/61_02_poses.npz +CMU/61/61_03_poses.npz +CMU/61/61_04_poses.npz +CMU/61/61_09_poses.npz +CMU/61/61_10_poses.npz +CMU/61/61_12_poses.npz +CMU/61/61_15_poses.npz +CMU/62/62_01_poses.npz +CMU/62/62_02_poses.npz +CMU/62/62_03_poses.npz +CMU/62/62_04_poses.npz +CMU/62/62_05_poses.npz +CMU/62/62_06_poses.npz +CMU/62/62_07_poses.npz +CMU/62/62_08_poses.npz +CMU/62/62_09_poses.npz +CMU/62/62_10_poses.npz +CMU/62/62_11_poses.npz +CMU/62/62_13_poses.npz +CMU/62/62_14_poses.npz +CMU/62/62_15_poses.npz +CMU/62/62_16_poses.npz +CMU/62/62_17_poses.npz +CMU/62/62_19_poses.npz +CMU/62/62_20_poses.npz +CMU/62/62_21_poses.npz +CMU/62/62_22_poses.npz +CMU/62/62_23_poses.npz +CMU/62/62_24_poses.npz +CMU/63/63_01_poses.npz +CMU/63/63_03_poses.npz +CMU/63/63_04_poses.npz +CMU/63/63_05_poses.npz +CMU/63/63_06_poses.npz +CMU/63/63_07_poses.npz +CMU/63/63_08_poses.npz +CMU/63/63_10_poses.npz +CMU/63/63_11_poses.npz +CMU/63/63_12_poses.npz +CMU/63/63_13_poses.npz +CMU/63/63_14_poses.npz +CMU/63/63_16_poses.npz +CMU/63/63_17_poses.npz +CMU/63/63_18_poses.npz +CMU/63/63_19_poses.npz +CMU/63/63_21_poses.npz +CMU/63/63_22_poses.npz +CMU/63/63_23_poses.npz +CMU/63/63_24_poses.npz +CMU/63/63_25_poses.npz +CMU/63/63_27_poses.npz +CMU/63/63_28_poses.npz +CMU/63/63_29_poses.npz +CMU/63/63_30_poses.npz +CMU/64/64_01_poses.npz +CMU/64/64_02_poses.npz +CMU/64/64_03_poses.npz +CMU/64/64_04_poses.npz +CMU/64/64_05_poses.npz +CMU/64/64_06_poses.npz +CMU/64/64_07_poses.npz +CMU/64/64_08_poses.npz +CMU/64/64_09_poses.npz +CMU/64/64_10_poses.npz +CMU/64/64_11_poses.npz +CMU/64/64_12_poses.npz +CMU/64/64_13_poses.npz +CMU/64/64_14_poses.npz +CMU/64/64_15_poses.npz +CMU/64/64_18_poses.npz +CMU/64/64_19_poses.npz +CMU/64/64_20_poses.npz +CMU/64/64_22_poses.npz +CMU/64/64_23_poses.npz +CMU/64/64_24_poses.npz +CMU/64/64_25_poses.npz +CMU/64/64_26_poses.npz +CMU/64/64_27_poses.npz +CMU/64/64_28_poses.npz +CMU/64/64_29_poses.npz +CMU/64/64_30_poses.npz +CMU/70/70_01_poses.npz +CMU/70/70_02_poses.npz +CMU/70/70_03_poses.npz +CMU/70/70_04_poses.npz +CMU/70/70_05_poses.npz +CMU/70/70_06_poses.npz +CMU/70/70_08_poses.npz +CMU/70/70_09_poses.npz +CMU/70/70_10_poses.npz +CMU/73/73_01_poses.npz +CMU/73/73_02_poses.npz +CMU/73/73_03_poses.npz +CMU/73/73_04_poses.npz +CMU/73/73_05_poses.npz +CMU/73/73_06_poses.npz +CMU/73/73_08_poses.npz +CMU/73/73_09_poses.npz +CMU/73/73_10_poses.npz +CMU/74/74_01_poses.npz +CMU/74/74_02_poses.npz +CMU/74/74_03_poses.npz +CMU/74/74_04_poses.npz +CMU/74/74_05_poses.npz +CMU/74/74_06_poses.npz +CMU/74/74_07_poses.npz +CMU/74/74_08_poses.npz +CMU/74/74_09_poses.npz +CMU/74/74_10_poses.npz +CMU/74/74_11_poses.npz +CMU/74/74_12_poses.npz +CMU/74/74_14_poses.npz +CMU/74/74_15_poses.npz +CMU/74/74_16_poses.npz +CMU/74/74_17_poses.npz +CMU/74/74_18_poses.npz +CMU/74/74_19_poses.npz +CMU/74/74_20_poses.npz +CMU/75/75_01_poses.npz +CMU/75/75_02_poses.npz +CMU/75/75_03_poses.npz +CMU/75/75_04_poses.npz +CMU/75/75_05_poses.npz +CMU/75/75_06_poses.npz +CMU/75/75_07_poses.npz +CMU/75/75_08_poses.npz +CMU/75/75_09_poses.npz +CMU/75/75_11_poses.npz +CMU/75/75_12_poses.npz +CMU/75/75_13_poses.npz +CMU/75/75_14_poses.npz +CMU/75/75_15_poses.npz +CMU/75/75_16_poses.npz +CMU/75/75_17_poses.npz +CMU/75/75_18_poses.npz +CMU/75/75_19_poses.npz +CMU/75/75_20_poses.npz +CMU/76/76_01_poses.npz +CMU/76/76_02_poses.npz +CMU/76/76_03_poses.npz +CMU/76/76_04_poses.npz +CMU/76/76_05_poses.npz +CMU/76/76_06_poses.npz +CMU/76/76_07_poses.npz +CMU/76/76_08_poses.npz +CMU/76/76_09_poses.npz +CMU/76/76_10_poses.npz +CMU/76/76_11_poses.npz +CMU/77/77_01_poses.npz +CMU/77/77_03_poses.npz +CMU/77/77_04_poses.npz +CMU/77/77_05_poses.npz +CMU/77/77_06_poses.npz +CMU/77/77_07_poses.npz +CMU/77/77_08_poses.npz +CMU/77/77_10_poses.npz +CMU/77/77_11_poses.npz +CMU/77/77_12_poses.npz +CMU/77/77_13_poses.npz +CMU/77/77_14_poses.npz +CMU/77/77_15_poses.npz +CMU/77/77_17_poses.npz +CMU/77/77_18_poses.npz +CMU/77/77_19_poses.npz +CMU/77/77_20_poses.npz +CMU/77/77_21_poses.npz +CMU/77/77_22_poses.npz +CMU/77/77_23_poses.npz +CMU/77/77_24_poses.npz +CMU/77/77_25_poses.npz +CMU/77/77_26_poses.npz +CMU/77/77_27_poses.npz +CMU/77/77_28_poses.npz +CMU/77/77_29_poses.npz +CMU/77/77_30_poses.npz +CMU/77/77_31_poses.npz +CMU/77/77_33_poses.npz +CMU/77/77_34_poses.npz +CMU/78/78_02_poses.npz +CMU/78/78_03_poses.npz +CMU/78/78_06_poses.npz +CMU/78/78_07_poses.npz +CMU/78/78_08_poses.npz +CMU/78/78_10_poses.npz +CMU/78/78_11_poses.npz +CMU/78/78_12_poses.npz +CMU/78/78_13_poses.npz +CMU/78/78_14_poses.npz +CMU/78/78_15_poses.npz +CMU/78/78_16_poses.npz +CMU/78/78_17_poses.npz +CMU/78/78_18_poses.npz +CMU/78/78_19_poses.npz +CMU/78/78_20_poses.npz +CMU/78/78_21_poses.npz +CMU/78/78_22_poses.npz +CMU/78/78_23_poses.npz +CMU/78/78_24_poses.npz +CMU/78/78_25_poses.npz +CMU/78/78_26_poses.npz +CMU/78/78_27_poses.npz +CMU/78/78_28_poses.npz +CMU/78/78_29_poses.npz +CMU/78/78_30_poses.npz +CMU/78/78_31_poses.npz +CMU/78/78_32_poses.npz +CMU/78/78_33_poses.npz +CMU/78/78_35_poses.npz +CMU/79/79_01_poses.npz +CMU/79/79_02_poses.npz +CMU/79/79_03_poses.npz +CMU/79/79_04_poses.npz +CMU/79/79_05_poses.npz +CMU/79/79_06_poses.npz +CMU/79/79_07_poses.npz +CMU/79/79_08_poses.npz +CMU/79/79_09_poses.npz +CMU/79/79_10_poses.npz +CMU/79/79_11_poses.npz +CMU/79/79_12_poses.npz +CMU/79/79_14_poses.npz +CMU/79/79_15_poses.npz +CMU/79/79_16_poses.npz +CMU/79/79_17_poses.npz +CMU/79/79_18_poses.npz +CMU/79/79_19_poses.npz +CMU/79/79_20_poses.npz +CMU/79/79_22_poses.npz +CMU/79/79_23_poses.npz +CMU/79/79_25_poses.npz +CMU/79/79_28_poses.npz +CMU/79/79_29_poses.npz +CMU/79/79_30_poses.npz +CMU/79/79_31_poses.npz +CMU/79/79_32_poses.npz +CMU/79/79_33_poses.npz +CMU/79/79_34_poses.npz +CMU/79/79_35_poses.npz +CMU/79/79_37_poses.npz +CMU/79/79_38_poses.npz +CMU/79/79_39_poses.npz +CMU/79/79_40_poses.npz +CMU/79/79_41_poses.npz +CMU/79/79_42_poses.npz +CMU/79/79_43_poses.npz +CMU/79/79_44_poses.npz +CMU/79/79_45_poses.npz +CMU/79/79_46_poses.npz +CMU/79/79_47_poses.npz +CMU/79/79_48_poses.npz +CMU/79/79_49_poses.npz +CMU/79/79_51_poses.npz +CMU/79/79_52_poses.npz +CMU/79/79_53_poses.npz +CMU/79/79_54_poses.npz +CMU/79/79_55_poses.npz +CMU/79/79_56_poses.npz +CMU/79/79_57_poses.npz +CMU/79/79_58_poses.npz +CMU/79/79_59_poses.npz +CMU/79/79_60_poses.npz +CMU/79/79_61_poses.npz +CMU/79/79_62_poses.npz +CMU/79/79_63_poses.npz +CMU/79/79_64_poses.npz +CMU/79/79_66_poses.npz +CMU/79/79_67_poses.npz +CMU/79/79_68_poses.npz +CMU/79/79_69_poses.npz +CMU/79/79_70_poses.npz +CMU/79/79_71_poses.npz +CMU/79/79_72_poses.npz +CMU/79/79_73_poses.npz +CMU/79/79_74_poses.npz +CMU/79/79_75_poses.npz +CMU/79/79_76_poses.npz +CMU/79/79_78_poses.npz +CMU/79/79_79_poses.npz +CMU/79/79_80_poses.npz +CMU/79/79_81_poses.npz +CMU/79/79_82_poses.npz +CMU/79/79_83_poses.npz +CMU/79/79_84_poses.npz +CMU/79/79_85_poses.npz +CMU/79/79_86_poses.npz +CMU/79/79_87_poses.npz +CMU/79/79_88_poses.npz +CMU/79/79_89_poses.npz +CMU/79/79_90_poses.npz +CMU/79/79_91_poses.npz +CMU/79/79_92_poses.npz +CMU/79/79_93_poses.npz +CMU/79/79_95_poses.npz +CMU/79/79_96_poses.npz +CMU/80/80_01_poses.npz +CMU/80/80_02_poses.npz +CMU/80/80_03_poses.npz +CMU/80/80_04_poses.npz +CMU/80/80_05_poses.npz +CMU/80/80_06_poses.npz +CMU/80/80_07_poses.npz +CMU/80/80_08_poses.npz +CMU/80/80_09_poses.npz +CMU/80/80_10_poses.npz +CMU/80/80_11_poses.npz +CMU/80/80_12_poses.npz +CMU/80/80_13_poses.npz +CMU/80/80_15_poses.npz +CMU/80/80_16_poses.npz +CMU/80/80_17_poses.npz +CMU/80/80_19_poses.npz +CMU/80/80_20_poses.npz +CMU/80/80_21_poses.npz +CMU/80/80_22_poses.npz +CMU/80/80_23_poses.npz +CMU/80/80_24_poses.npz +CMU/80/80_25_poses.npz +CMU/80/80_26_poses.npz +CMU/80/80_27_poses.npz +CMU/80/80_28_poses.npz +CMU/80/80_29_poses.npz +CMU/80/80_30_poses.npz +CMU/80/80_32_poses.npz +CMU/80/80_33_poses.npz +CMU/80/80_34_poses.npz +CMU/80/80_35_poses.npz +CMU/80/80_37_poses.npz +CMU/80/80_38_poses.npz +CMU/80/80_39_poses.npz +CMU/80/80_40_poses.npz +CMU/80/80_41_poses.npz +CMU/80/80_42_poses.npz +CMU/80/80_43_poses.npz +CMU/80/80_44_poses.npz +CMU/80/80_45_poses.npz +CMU/80/80_46_poses.npz +CMU/80/80_47_poses.npz +CMU/80/80_48_poses.npz +CMU/80/80_49_poses.npz +CMU/80/80_50_poses.npz +CMU/80/80_51_poses.npz +CMU/80/80_52_poses.npz +CMU/80/80_53_poses.npz +CMU/80/80_54_poses.npz +CMU/80/80_55_poses.npz +CMU/80/80_56_poses.npz +CMU/80/80_57_poses.npz +CMU/80/80_58_poses.npz +CMU/80/80_59_poses.npz +CMU/80/80_60_poses.npz +CMU/80/80_61_poses.npz +CMU/80/80_62_poses.npz +CMU/80/80_63_poses.npz +CMU/80/80_64_poses.npz +CMU/80/80_65_poses.npz +CMU/80/80_66_poses.npz +CMU/80/80_68_poses.npz +CMU/80/80_69_poses.npz +CMU/80/80_70_poses.npz +CMU/80/80_71_poses.npz +CMU/80/80_72_poses.npz +CMU/80/80_73_poses.npz +CMU/82/82_01_poses.npz +CMU/82/82_02_poses.npz +CMU/82/82_03_poses.npz +CMU/82/82_04_poses.npz +CMU/82/82_05_poses.npz +CMU/82/82_06_poses.npz +CMU/82/82_07_poses.npz +CMU/82/82_08_poses.npz +CMU/82/82_09_poses.npz +CMU/82/82_10_poses.npz +CMU/82/82_11_poses.npz +CMU/82/82_12_poses.npz +CMU/82/82_13_poses.npz +CMU/82/82_14_poses.npz +CMU/82/82_15_poses.npz +CMU/82/82_16_poses.npz +CMU/82/82_18_poses.npz +CMU/83/83_01_poses.npz +CMU/83/83_02_poses.npz +CMU/83/83_03_poses.npz +CMU/83/83_04_poses.npz +CMU/83/83_05_poses.npz +CMU/83/83_06_poses.npz +CMU/83/83_07_poses.npz +CMU/83/83_08_poses.npz +CMU/83/83_09_poses.npz +CMU/83/83_10_poses.npz +CMU/83/83_11_poses.npz +CMU/83/83_12_poses.npz +CMU/83/83_13_poses.npz +CMU/83/83_15_poses.npz +CMU/83/83_17_poses.npz +CMU/83/83_18_poses.npz +CMU/83/83_19_poses.npz +CMU/83/83_20_poses.npz +CMU/83/83_21_poses.npz +CMU/83/83_22_poses.npz +CMU/83/83_23_poses.npz +CMU/83/83_24_poses.npz +CMU/83/83_25_poses.npz +CMU/83/83_27_poses.npz +CMU/83/83_28_poses.npz +CMU/83/83_29_poses.npz +CMU/83/83_30_poses.npz +CMU/83/83_31_poses.npz +CMU/83/83_33_poses.npz +CMU/83/83_34_poses.npz +CMU/83/83_36_poses.npz +CMU/83/83_37_poses.npz +CMU/83/83_38_poses.npz +CMU/83/83_40_poses.npz +CMU/83/83_41_poses.npz +CMU/83/83_42_poses.npz +CMU/83/83_44_poses.npz +CMU/83/83_45_poses.npz +CMU/83/83_47_poses.npz +CMU/83/83_48_poses.npz +CMU/83/83_49_poses.npz +CMU/83/83_50_poses.npz +CMU/83/83_51_poses.npz +CMU/83/83_52_poses.npz +CMU/83/83_53_poses.npz +CMU/83/83_54_poses.npz +CMU/83/83_56_poses.npz +CMU/83/83_57_poses.npz +CMU/83/83_58_poses.npz +CMU/83/83_60_poses.npz +CMU/83/83_61_poses.npz +CMU/83/83_62_poses.npz +CMU/83/83_63_poses.npz +CMU/83/83_64_poses.npz +CMU/83/83_65_poses.npz +CMU/83/83_66_poses.npz +CMU/83/83_67_poses.npz +CMU/84/84_01_poses.npz +CMU/84/84_02_poses.npz +CMU/84/84_03_poses.npz +CMU/84/84_05_poses.npz +CMU/84/84_06_poses.npz +CMU/84/84_07_poses.npz +CMU/84/84_08_poses.npz +CMU/84/84_09_poses.npz +CMU/84/84_10_poses.npz +CMU/84/84_11_poses.npz +CMU/84/84_12_poses.npz +CMU/84/84_13_poses.npz +CMU/84/84_14_poses.npz +CMU/84/84_15_poses.npz +CMU/84/84_17_poses.npz +CMU/84/84_18_poses.npz +CMU/84/84_19_poses.npz +CMU/84/84_20_poses.npz +CMU/85/85_01_poses.npz +CMU/85/85_02_poses.npz +CMU/85/85_03_poses.npz +CMU/85/85_04_poses.npz +CMU/85/85_05_poses.npz +CMU/85/85_06_poses.npz +CMU/85/85_07_poses.npz +CMU/85/85_09_poses.npz +CMU/85/85_10_poses.npz +CMU/85/85_11_poses.npz +CMU/85/85_12_poses.npz +CMU/85/85_13_poses.npz +CMU/85/85_14_poses.npz +CMU/86/86_01_poses.npz +CMU/86/86_02_poses.npz +CMU/86/86_03_poses.npz +CMU/86/86_06_poses.npz +CMU/86/86_07_poses.npz +CMU/86/86_08_poses.npz +CMU/86/86_09_poses.npz +CMU/86/86_10_poses.npz +CMU/86/86_11_poses.npz +CMU/86/86_12_poses.npz +CMU/86/86_13_poses.npz +CMU/86/86_14_poses.npz +CMU/87/87_01_poses.npz +CMU/88/88_03_poses.npz +CMU/88/88_05_poses.npz +CMU/88/88_06_poses.npz +CMU/88/88_07_poses.npz +CMU/88/88_08_poses.npz +CMU/88/88_09_poses.npz +CMU/88/88_11_poses.npz +CMU/89/89_01_poses.npz +CMU/89/89_02_poses.npz +CMU/90/90_01_poses.npz +CMU/90/90_02_poses.npz +CMU/90/90_03_poses.npz +CMU/90/90_04_poses.npz +CMU/90/90_05_poses.npz +CMU/90/90_06_poses.npz +CMU/90/90_07_poses.npz +CMU/90/90_08_poses.npz +CMU/90/90_11_poses.npz +CMU/90/90_13_poses.npz +CMU/90/90_14_poses.npz +CMU/90/90_15_poses.npz +CMU/90/90_16_poses.npz +CMU/90/90_22_poses.npz +CMU/90/90_24_poses.npz +CMU/90/90_25_poses.npz +CMU/90/90_26_poses.npz +CMU/90/90_27_poses.npz +CMU/90/90_28_poses.npz +CMU/90/90_29_poses.npz +CMU/90/90_30_poses.npz +CMU/90/90_31_poses.npz +CMU/90/90_32_poses.npz +CMU/90/90_33_poses.npz +CMU/90/90_34_poses.npz +CMU/90/90_35_poses.npz +CMU/90/90_36_poses.npz +CMU/91/91_01_poses.npz +CMU/91/91_02_poses.npz +CMU/91/91_03_poses.npz +CMU/91/91_04_poses.npz +CMU/91/91_05_poses.npz +CMU/91/91_07_poses.npz +CMU/91/91_08_poses.npz +CMU/91/91_09_poses.npz +CMU/91/91_10_poses.npz +CMU/91/91_11_poses.npz +CMU/91/91_12_poses.npz +CMU/91/91_13_poses.npz +CMU/91/91_14_poses.npz +CMU/91/91_15_poses.npz +CMU/91/91_16_poses.npz +CMU/91/91_17_poses.npz +CMU/91/91_18_poses.npz +CMU/91/91_19_poses.npz +CMU/91/91_20_poses.npz +CMU/91/91_21_poses.npz +CMU/91/91_22_poses.npz +CMU/91/91_23_poses.npz +CMU/91/91_24_poses.npz +CMU/91/91_25_poses.npz +CMU/91/91_26_poses.npz +CMU/91/91_27_poses.npz +CMU/91/91_28_poses.npz +CMU/91/91_29_poses.npz +CMU/91/91_30_poses.npz +CMU/91/91_31_poses.npz +CMU/91/91_32_poses.npz +CMU/91/91_33_poses.npz +CMU/91/91_34_poses.npz +CMU/91/91_35_poses.npz +CMU/91/91_38_poses.npz +CMU/91/91_39_poses.npz +CMU/91/91_40_poses.npz +CMU/91/91_41_poses.npz +CMU/91/91_44_poses.npz +CMU/91/91_46_poses.npz +CMU/91/91_47_poses.npz +CMU/91/91_48_poses.npz +CMU/91/91_50_poses.npz +CMU/91/91_51_poses.npz +CMU/91/91_52_poses.npz +CMU/91/91_53_poses.npz +CMU/91/91_54_poses.npz +CMU/91/91_55_poses.npz +CMU/91/91_56_poses.npz +CMU/91/91_57_poses.npz +CMU/91/91_58_poses.npz +CMU/91/91_59_poses.npz +CMU/91/91_60_poses.npz +CMU/91/91_61_poses.npz +CMU/91/91_62_poses.npz +CMU/93/93_01_poses.npz +CMU/93/93_02_poses.npz +CMU/93/93_03_poses.npz +CMU/93/93_04_poses.npz +CMU/93/93_05_poses.npz +CMU/93/93_07_poses.npz +CMU/93/93_08_poses.npz +CMU/94/94_01_poses.npz +CMU/94/94_03_poses.npz +CMU/94/94_04_poses.npz +CMU/94/94_05_poses.npz +CMU/94/94_06_poses.npz +CMU/94/94_07_poses.npz +CMU/94/94_08_poses.npz +CMU/94/94_09_poses.npz +CMU/94/94_12_poses.npz +CMU/94/94_13_poses.npz +CMU/94/94_15_poses.npz diff --git a/prepare_data/data_split/MPI_HDM05/test_split.txt b/prepare_data/data_split/MPI_HDM05/test_split.txt new file mode 100644 index 0000000..df47fb9 --- /dev/null +++ b/prepare_data/data_split/MPI_HDM05/test_split.txt @@ -0,0 +1,22 @@ +MPI_HDM05/dg/HDM_dg_05-02_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_05-03_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-02_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_06-01_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_07-01_04_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-02_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_02-02_04_120_poses.npz +MPI_HDM05/mm/HDM_mm_02-02_03_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-03_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-02_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-03_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_02-03_04_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-04_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-03_04_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-05_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_02-03_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-11_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_02-03_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-01_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-02_04_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-03_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-03_01_120_poses.npz diff --git a/prepare_data/data_split/MPI_HDM05/train_split.txt b/prepare_data/data_split/MPI_HDM05/train_split.txt new file mode 100644 index 0000000..8272628 --- /dev/null +++ b/prepare_data/data_split/MPI_HDM05/train_split.txt @@ -0,0 +1,193 @@ +MPI_HDM05/dg/HDM_dg_03-04_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-01_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-09_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_02-03_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_02-03_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_07-01_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-03_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_07-01_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-01_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-01_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_07-01_06_120_poses.npz +MPI_HDM05/dg/HDM_dg_02-02_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-11_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-02_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_02-01_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-04_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-01_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_06-03_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_06-03_04_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-03_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-04_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-04_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_06-03_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-02_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_05-01_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-11_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_02-01_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_04-01_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_05-01_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-04_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_08-01_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-04_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-03_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-02_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_05-01_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_07-01_05_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-09_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-09_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-03_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_02-02_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-01_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-05_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_06-03_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_04-01_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_05-03_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-11_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-01_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-03_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_05-02_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_06-04_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_07-01_07_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-11_04_120_poses.npz +MPI_HDM05/dg/HDM_dg_06-02_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_02-03_02_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-01_04_120_poses.npz +MPI_HDM05/dg/HDM_dg_01-03_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_07-01_08_120_poses.npz +MPI_HDM05/dg/HDM_dg_02-02_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_07-01_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-05_01_120_poses.npz +MPI_HDM05/dg/HDM_dg_03-05_03_120_poses.npz +MPI_HDM05/dg/HDM_dg_05-02_03_120_poses.npz +MPI_HDM05/mm/HDM_mm_02-01_04_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-05_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_01-01_03_120_poses.npz +MPI_HDM05/mm/HDM_mm_04-01_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_02-03_03_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-05_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-01_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_02-02_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-01_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_01-03_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_02-03_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_04-01_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_01-01_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_02-01_03_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-01_03_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-10_07_120_poses.npz +MPI_HDM05/mm/HDM_mm_01-02_03_120_poses.npz +MPI_HDM05/mm/HDM_mm_05-02_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_05-02_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_01-02_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_05-03_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-02_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_06-04_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_02-01_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_01-01_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_02-03_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-03_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_05-03_02_120_poses.npz +MPI_HDM05/mm/HDM_mm_05-02_03_120_poses.npz +MPI_HDM05/mm/HDM_mm_01-03_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_08-01_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_02-02_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_02-01_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_01-03_03_120_poses.npz +MPI_HDM05/mm/HDM_mm_03-10_06_120_poses.npz +MPI_HDM05/mm/HDM_mm_01-04_01_120_poses.npz +MPI_HDM05/mm/HDM_mm_01-04_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-03_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-02_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_04-01_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-02_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-03_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_05-03_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-01_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-02_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-04_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_05-03_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_04-01_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_05-02_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-11_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-03_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_05-02_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-03_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-11_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_05-03_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_05-01_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-04_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_05-01_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-02_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_02-03_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-04_04_120_poses.npz +MPI_HDM05/bk/HDM_bk_05-02_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_02-01_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_02-02_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-03_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-01_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_02-02_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-02_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-04_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_02-02_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_05-01_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-03_05_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-01_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_02-01_01_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-02_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-04_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-05_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_02-03_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_01-04_02_120_poses.npz +MPI_HDM05/bk/HDM_bk_04-01_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_02-01_03_120_poses.npz +MPI_HDM05/bk/HDM_bk_03-05_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-03_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-11_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_02-01_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-02_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-01_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_05-01_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_02-02_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_02-02_04_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-03_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-10_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-03_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_05-03_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-02_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-04_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-02_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_05-01_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-04_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-11_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_02-03_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-02_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-11_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_02-02_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-02_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-10_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_05-02_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_06-01_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-01_04_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-01_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_02-02_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_05-03_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_05-02_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-04_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_05-03_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-01_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-02_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_04-01_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_06-01_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-05_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-03_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_05-03_04_120_poses.npz +MPI_HDM05/tr/HDM_tr_02-01_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-05_03_120_poses.npz +MPI_HDM05/tr/HDM_tr_05-02_01_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-01_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-04_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_01-03_04_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-01_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_03-05_02_120_poses.npz +MPI_HDM05/tr/HDM_tr_02-01_03_120_poses.npz diff --git a/prepare_data/download_model.sh b/prepare_data/download_model.sh new file mode 100644 index 0000000..aad1a00 --- /dev/null +++ b/prepare_data/download_model.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright (c) Meta Platforms, Inc. All Rights Reserved + +mkdir -p pretrained +cd pretrained/ || exit + +# Download model command: coming soon + +unzip agrol.zip +rm agrol.zip + +printf "Pre-trained model was downloaded into pretreined/ folder!" diff --git a/runner/train_mlp.py b/runner/train_mlp.py new file mode 100644 index 0000000..5769f86 --- /dev/null +++ b/runner/train_mlp.py @@ -0,0 +1,52 @@ +# Copyright (c) Meta Platforms, Inc. All Rights Reserved +import torch + + +def update_lr_multistep( + nb_iter, total_iter, max_lr, min_lr, optimizer, lr_anneal_steps +): + if nb_iter > lr_anneal_steps: + current_lr = min_lr + else: + current_lr = max_lr + + for param_group in optimizer.param_groups: + param_group["lr"] = current_lr + + return optimizer, current_lr + + +def train_step( + motion_input, + motion_target, + model, + optimizer, + nb_iter, + total_iter, + max_lr, + min_lr, + device, + lr_anneal_steps, +): + + motion_input = motion_input.to(device) + motion_target = motion_target.to(device) + + motion_pred = model(motion_input) + + loss = torch.mean( + torch.norm( + (motion_pred - motion_target).reshape(-1, 6), + 2, + 1, + ) + ) + + optimizer.zero_grad() + loss.backward() + optimizer.step() + optimizer, current_lr = update_lr_multistep( + nb_iter, total_iter, max_lr, min_lr, optimizer, lr_anneal_steps + ) + + return loss.item(), optimizer, current_lr diff --git a/runner/training_loop.py b/runner/training_loop.py new file mode 100644 index 0000000..58f56e3 --- /dev/null +++ b/runner/training_loop.py @@ -0,0 +1,226 @@ +# MIT License +# Copyright (c) 2021 OpenAI +# +# This code is based on https://github.com/openai/guided-diffusion +# MIT License +# Copyright (c) 2022 Guy Tevet +# +# This code is based on https://github.com/GuyTevet/motion-diffusion-model +# Copyright (c) Meta Platforms, Inc. All Rights Reserved + +import functools + +import os + +import torch + +from diffusion import logger +from diffusion.fp16_util import MixedPrecisionTrainer +from diffusion.resample import create_named_schedule_sampler, LossAwareSampler +from torch.optim import AdamW +from tqdm import tqdm +from utils import dist_util + + +class TrainLoop: + def __init__(self, args, model, diffusion, data): + self.args = args + self.dataset = args.dataset + self.model = model + self.diffusion = diffusion + self.data = data + self.batch_size = args.batch_size + self.lr = args.lr + self.log_interval = args.log_interval + self.save_interval = args.save_interval + self.resume_checkpoint = args.resume_checkpoint + self.load_optimizer = args.load_optimizer + self.use_fp16 = False + self.fp16_scale_growth = 1e-3 + self.weight_decay = args.weight_decay + self.lr_anneal_steps = args.lr_anneal_steps + + self.step = 0 + self.resume_step = 0 + self.global_batch = self.batch_size + self.num_steps = args.num_steps + self.num_epochs = self.num_steps // len(self.data) + 1 + + self.sync_cuda = torch.cuda.is_available() + + self._load_and_sync_parameters() + self.mp_trainer = MixedPrecisionTrainer( + model=self.model, + use_fp16=self.use_fp16, + fp16_scale_growth=self.fp16_scale_growth, + ) + + self.save_dir = args.save_dir + self.overwrite = args.overwrite + + self.opt = AdamW( + self.mp_trainer.master_params, lr=self.lr, weight_decay=self.weight_decay + ) + if self.resume_step and self.load_optimizer: + self._load_optimizer_state() + + self.device = torch.device("cpu") + if torch.cuda.is_available() and dist_util.dev() != "cpu": + self.device = torch.device(dist_util.dev()) + + self.schedule_sampler_type = "uniform" + self.schedule_sampler = create_named_schedule_sampler( + self.schedule_sampler_type, diffusion + ) + self.eval_wrapper, self.eval_data, self.eval_gt_data = None, None, None + self.use_ddp = False + self.ddp_model = self.model + + def _load_and_sync_parameters(self): + resume_checkpoint = self.resume_checkpoint + + if resume_checkpoint: + self.resume_step = parse_resume_step_from_filename(resume_checkpoint) + logger.log(f"loading model from checkpoint: {resume_checkpoint}...") + self.model.load_state_dict( + dist_util.load_state_dict( + resume_checkpoint, + map_location=dist_util.dev(), + ) + ) + + def _load_optimizer_state(self): + main_checkpoint = self.resume_checkpoint + opt_checkpoint = os.path.join( + os.path.dirname(main_checkpoint), f"opt{self.resume_step:09}.pt" + ) + + logger.log(f"loading optimizer state from checkpoint: {opt_checkpoint}") + assert os.path.exists(opt_checkpoint), "optimiser states does not exist." + state_dict = dist_util.load_state_dict( + opt_checkpoint, map_location=dist_util.dev() + ) + self.opt.load_state_dict(state_dict) + + def run_loop(self): + + for epoch in range(self.num_epochs): + print(f"Starting epoch {epoch}") + for motion, cond in tqdm(self.data): + motion = motion.to(self.device) + cond = cond.to(self.device) + self.run_step(motion, cond) + self.step += 1 + if epoch % self.save_interval == 0: + self.save() + if epoch % self.log_interval == 0: + for k, v in logger.get_current().name2val.items(): + if k == "loss": + print("epoch[{}]: loss[{:0.5f}]".format(epoch, v)) + print("lr:", self.lr) + + # Save the last checkpoint if it wasn't already saved. + if (self.step - 1) % self.save_interval != 0: + self.save() + + def run_step(self, batch, cond): + self.forward_backward(batch, cond) + self.mp_trainer.optimize(self.opt) + self._step_lr() + self.log_step() + + def forward_backward(self, batch, cond): + self.mp_trainer.zero_grad() + + t, weights = self.schedule_sampler.sample(batch.shape[0], dist_util.dev()) + + compute_losses = functools.partial( + self.diffusion.training_losses, + self.ddp_model, + batch, + t, + cond, + dataset=self.data.dataset, + ) + + losses = compute_losses() + + if isinstance(self.schedule_sampler, LossAwareSampler): + self.schedule_sampler.update_with_local_losses(t, losses["loss"].detach()) + + loss = (losses["loss"] * weights).mean() + log_loss_dict(self.diffusion, t, {k: v * weights for k, v in losses.items()}) + self.mp_trainer.backward(loss) + + def _anneal_lr(self): + if not self.lr_anneal_steps: + return + frac_done = (self.step + self.resume_step) / self.lr_anneal_steps + lr = self.lr * (1 - frac_done) + for param_group in self.opt.param_groups: + param_group["lr"] = lr + + def _step_lr(self): + # One-step learning rate decay if needed. + if not self.lr_anneal_steps: + return + if (self.step + self.resume_step) > self.lr_anneal_steps: + self.lr = self.lr / 30.0 + self.lr_anneal_steps = False + else: + self.lr = self.lr + for param_group in self.opt.param_groups: + param_group["lr"] = self.lr + + def log_step(self): + logger.logkv("step", self.step + self.resume_step) + logger.logkv("samples", (self.step + self.resume_step + 1) * self.global_batch) + + def ckpt_file_name(self): + return f"model{(self.step+self.resume_step):09d}.pt" + + def save(self): + def save_checkpoint(params): + state_dict = self.mp_trainer.master_params_to_state_dict(params) + logger.log("saving model...") + filename = self.ckpt_file_name() + + if not os.path.exists(self.save_dir): + os.makedirs(self.save_dir) + with open( + os.path.join(self.save_dir, filename), + "wb", + ) as f: + torch.save(state_dict, f) + + save_checkpoint(self.mp_trainer.master_params) + + with open( + os.path.join(self.save_dir, f"opt{(self.step+self.resume_step):09d}.pt"), + "wb", + ) as f: + torch.save(self.opt.state_dict(), f) + + +def parse_resume_step_from_filename(filename): + """ + Parse filenames of the form path/to/modelNNNNNN.pt, where NNNNNN is the + checkpoint's number of steps. + """ + split = filename.split("model") + if len(split) < 2: + return 0 + split1 = split[-1].split(".")[0] + try: + return int(split1) + except ValueError: + return 0 + + +def log_loss_dict(diffusion, ts, losses): + for key, values in losses.items(): + logger.logkv_mean(key, values.mean().item()) + # Log the quantiles (four quartiles, in particular). + for sub_t, sub_loss in zip(ts.cpu().numpy(), values.detach().cpu().numpy()): + quartile = int(4 * sub_t / diffusion.num_timesteps) + logger.logkv_mean(f"{key}_q{quartile}", sub_loss) diff --git a/test.py b/test.py new file mode 100644 index 0000000..5e1d09e --- /dev/null +++ b/test.py @@ -0,0 +1,552 @@ +# Copyright (c) Meta Platforms, Inc. All Rights Reserved +import math +import os +import random + +import numpy as np + +import torch + +from data_loaders.dataloader import load_data, TestDataset + +from human_body_prior.body_model.body_model import BodyModel as BM + +from model.networks import PureMLP +from tqdm import tqdm + +from utils import utils_transform, utils_visualize +from utils.metrics import get_metric_function +from utils.model_util import create_model_and_diffusion, load_model_wo_clip +from utils.parser_util import sample_args + +device = torch.device("cuda") + +##################### +RADIANS_TO_DEGREES = 360.0 / (2 * math.pi) +METERS_TO_CENTIMETERS = 100.0 + +pred_metrics = [ + "mpjre", + "mpjpe", + "mpjve", + "handpe", + "upperpe", + "lowerpe", + "rootpe", + "pred_jitter", +] +gt_metrics = [ + "gt_jitter", +] +all_metrics = pred_metrics + gt_metrics + +RADIANS_TO_DEGREES = 360.0 / (2 * math.pi) # 57.2958 grads +metrics_coeffs = { + "mpjre": RADIANS_TO_DEGREES, + "mpjpe": METERS_TO_CENTIMETERS, + "mpjve": METERS_TO_CENTIMETERS, + "handpe": METERS_TO_CENTIMETERS, + "upperpe": METERS_TO_CENTIMETERS, + "lowerpe": METERS_TO_CENTIMETERS, + "rootpe": METERS_TO_CENTIMETERS, + "pred_jitter": 1.0, + "gt_jitter": 1.0, + "gt_mpjpe": METERS_TO_CENTIMETERS, + "gt_mpjve": METERS_TO_CENTIMETERS, + "gt_handpe": METERS_TO_CENTIMETERS, + "gt_rootpe": METERS_TO_CENTIMETERS, + "gt_upperpe": METERS_TO_CENTIMETERS, + "gt_lowerpe": METERS_TO_CENTIMETERS, +} + +##################### + + +class BodyModel(torch.nn.Module): + def __init__(self, support_dir): + super().__init__() + + device = torch.device("cuda") + subject_gender = "male" + bm_fname = os.path.join( + support_dir, "smplh/{}/model.npz".format(subject_gender) + ) + dmpl_fname = os.path.join( + support_dir, "dmpls/{}/model.npz".format(subject_gender) + ) + num_betas = 16 # number of body parameters + num_dmpls = 8 # number of DMPL parameters + body_model = BM( + bm_fname=bm_fname, + num_betas=num_betas, + num_dmpls=num_dmpls, + dmpl_fname=dmpl_fname, + ).to(device) + self.body_model = body_model.eval() + + def forward(self, body_params): + with torch.no_grad(): + body_pose = self.body_model( + **{ + k: v + for k, v in body_params.items() + if k in ["pose_body", "trans", "root_orient"] + } + ) + return body_pose + + +def non_overlapping_test( + args, + data, + sample_fn, + dataset, + model, + num_per_batch=256, + model_type="mlp", +): + gt_data, sparse_original, body_param, head_motion, filename = ( + data[0], + data[1], + data[2], + data[3], + data[4], + ) + gt_data = gt_data.cuda().float() + sparse_original = sparse_original.cuda().float() + head_motion = head_motion.cuda().float() + num_frames = head_motion.shape[0] + + output_samples = [] + count = 0 + sparse_splits = [] + flag_index = None + + if args.input_motion_length <= num_frames: + while count < num_frames: + if count + args.input_motion_length > num_frames: + tmp_k = num_frames - args.input_motion_length + sub_sparse = sparse_original[ + :, tmp_k : tmp_k + args.input_motion_length + ] + flag_index = count - tmp_k + else: + sub_sparse = sparse_original[ + :, count : count + args.input_motion_length + ] + sparse_splits.append(sub_sparse) + count += args.input_motion_length + else: + flag_index = args.input_motion_length - num_frames + tmp_init = sparse_original[:, :1].repeat(1, flag_index, 1).clone() + sub_sparse = torch.concat([tmp_init, sparse_original], dim=1) + sparse_splits = [sub_sparse] + + n_steps = len(sparse_splits) // num_per_batch + if len(sparse_splits) % num_per_batch > 0: + n_steps += 1 + # Split the sequence into n_steps non-overlapping batches + + if args.fix_noise: + # fix noise seed for every frame + noise = torch.randn(1, 1, 1).cuda() + noise = noise.repeat(1, args.input_motion_length, args.motion_nfeat) + else: + noise = None + + for step_index in range(n_steps): + sparse_per_batch = torch.cat( + sparse_splits[ + step_index * num_per_batch : (step_index + 1) * num_per_batch + ], + dim=0, + ) + + new_batch_size = sparse_per_batch.shape[0] + + if model_type == "diffusion": + sample = sample_fn( + model, + (new_batch_size, args.input_motion_length, args.motion_nfeat), + sparse=sparse_per_batch, + clip_denoised=False, + model_kwargs=None, + skip_timesteps=0, + init_image=None, + progress=False, + dump_steps=None, + noise=noise, + const_noise=False, + ) + elif model_type == "mlp": + sample = model(sparse_per_batch) + + if flag_index is not None and step_index == n_steps - 1: + last_batch = sample[-1] + last_batch = last_batch[flag_index:] + sample = sample[:-1].reshape(-1, args.motion_nfeat) + sample = torch.cat([sample, last_batch], dim=0) + else: + sample = sample.reshape(-1, args.motion_nfeat) + + if not args.no_normalization: + output_samples.append(dataset.inv_transform(sample.cpu().float())) + else: + output_samples.append(sample.cpu().float()) + + return output_samples, body_param, head_motion, filename + + +def overlapping_test( + args, + data, + sample_fn, + dataset, + model, + sld_wind_size=70, + model_type="diffusion", +): + assert ( + model_type == "diffusion" + ), "currently only diffusion model supports overlapping test!!!" + + gt_data, sparse_original, body_param, head_motion, filename = ( + data[0], + data[1], + data[2], + data[3], + data[4], + ) + gt_data = gt_data.cuda().float() + sparse_original = sparse_original.cuda().float() + head_motion = head_motion.cuda().float() + num_frames = head_motion.shape[0] + + output_samples = [] + count = 0 + sparse_splits = [] + flag_index = None + + if num_frames < args.input_motion_length: + flag_index = args.input_motion_length - num_frames + tmp_init = sparse_original[:, :1].repeat(1, flag_index, 1).clone() + sub_sparse = torch.concat([tmp_init, sparse_original], dim=1) + sparse_splits = [sub_sparse] + + else: + while count + args.input_motion_length <= num_frames: + if count == 0: + sub_sparse = sparse_original[ + :, count : count + args.input_motion_length + ] + tmp_idx = 0 + else: + sub_sparse = sparse_original[ + :, count : count + args.input_motion_length + ] + tmp_idx = args.input_motion_length - sld_wind_size + sparse_splits.append([sub_sparse, tmp_idx]) + count += sld_wind_size + + if count < num_frames: + sub_sparse = sparse_original[:, -args.input_motion_length :] + tmp_idx = args.input_motion_length - ( + num_frames - (count - sld_wind_size + args.input_motion_length) + ) + sparse_splits.append([sub_sparse, tmp_idx]) + + memory = None # init memory + + if args.fix_noise: + # fix noise seed for every frame + noise = torch.randn(1, 1, 1).cuda() + noise = noise.repeat(1, args.input_motion_length, args.motion_nfeat) + else: + noise = None + + for step_index in range(len(sparse_splits)): + sparse_per_batch = sparse_splits[step_index][0] + memory_end_index = sparse_splits[step_index][1] + + new_batch_size = sparse_per_batch.shape[0] + assert new_batch_size == 1 + + if memory is not None: + model_kwargs = {} + model_kwargs["y"] = {} + model_kwargs["y"]["inpainting_mask"] = torch.zeros( + ( + new_batch_size, + args.input_motion_length, + args.motion_nfeat, + ) + ).cuda() + model_kwargs["y"]["inpainting_mask"][:, :memory_end_index, :] = 1 + model_kwargs["y"]["inpainted_motion"] = torch.zeros( + ( + new_batch_size, + args.input_motion_length, + args.motion_nfeat, + ) + ).cuda() + model_kwargs["y"]["inpainted_motion"][:, :memory_end_index, :] = memory[ + :, -memory_end_index:, : + ] + else: + model_kwargs = None + + sample = sample_fn( + model, + (new_batch_size, args.input_motion_length, args.motion_nfeat), + sparse=sparse_per_batch, + clip_denoised=False, + model_kwargs=None, + skip_timesteps=0, + init_image=None, + progress=False, + dump_steps=None, + noise=noise, + const_noise=False, + ) + + memory = sample.clone().detach() + + if flag_index is not None: + sample = sample[:, flag_index:].cpu().reshape(-1, args.motion_nfeat) + else: + sample = sample[:, memory_end_index:].reshape(-1, args.motion_nfeat) + + if not args.no_normalization: + output_samples.append(dataset.inv_transform(sample.cpu().float())) + else: + output_samples.append(sample.cpu().float()) + + return output_samples, body_param, head_motion, filename + + +def evaluate_prediction( + args, + metrics, + sample, + body_model, + sample_index, + head_motion, + body_param, + fps, + filename, +): + motion_pred = sample.squeeze().cuda() + # Get the prediction from the model + model_rot_input = ( + utils_transform.sixd2aa(motion_pred.reshape(-1, 6).detach()) + .reshape(motion_pred.shape[0], -1) + .float() + ) + + T_head2world = head_motion.clone().cuda() + t_head2world = T_head2world[:, :3, 3].clone() + + # Get the offset between the head and other joints using forward kinematic model + body_pose_local = body_model( + { + "pose_body": model_rot_input[..., 3:66], + "root_orient": model_rot_input[..., :3], + } + ).Jtr + + # Get the offset in global coordiante system between head and body_world. + t_head2root = -body_pose_local[:, 15, :] + t_root2world = t_head2root + t_head2world.cuda() + + predicted_body = body_model( + { + "pose_body": model_rot_input[..., 3:66], + "root_orient": model_rot_input[..., :3], + "trans": t_root2world, + } + ) + predicted_position = predicted_body.Jtr[:, :22, :] + + # Get the predicted position and rotation + predicted_angle = model_rot_input + + for k, v in body_param.items(): + body_param[k] = v.squeeze().cuda() + body_param[k] = body_param[k][-predicted_angle.shape[0] :, ...] + + # Get the ground truth position from the model + gt_body = body_model(body_param) + gt_position = gt_body.Jtr[:, :22, :] + + # Create animation + if args.vis: + video_dir = args.output_dir + if not os.path.exists(video_dir): + os.makedirs(video_dir) + + save_filename = filename.split(".")[0].replace("/", "-") + save_video_path = os.path.join(video_dir, save_filename + ".mp4") + utils_visualize.save_animation( + body_pose=predicted_body, + savepath=save_video_path, + bm=body_model.body_model, + fps=fps, + resolution=(800, 800), + ) + save_video_path_gt = os.path.join(video_dir, save_filename + "_gt.mp4") + if not os.path.exists(save_video_path_gt): + utils_visualize.save_animation( + body_pose=gt_body, + savepath=save_video_path_gt, + bm=body_model.body_model, + fps=fps, + resolution=(800, 800), + ) + + gt_angle = body_param["pose_body"] + gt_root_angle = body_param["root_orient"] + + predicted_root_angle = predicted_angle[:, :3] + predicted_angle = predicted_angle[:, 3:] + + upper_index = [3, 6, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + lower_index = [0, 1, 2, 4, 5, 7, 8, 10, 11] + eval_log = {} + for metric in metrics: + eval_log[metric] = ( + get_metric_function(metric)( + predicted_position, + predicted_angle, + predicted_root_angle, + gt_position, + gt_angle, + gt_root_angle, + upper_index, + lower_index, + fps, + ) + .cpu() + .numpy() + ) + + torch.cuda.empty_cache() + return eval_log + + +def load_diffusion_model(args): + print("Creating model and diffusion...") + args.arch = args.arch[len("diffusion_") :] + model, diffusion = create_model_and_diffusion(args) + + print(f"Loading checkpoints from [{args.model_path}]...") + state_dict = torch.load(args.model_path, map_location="cpu") + load_model_wo_clip(model, state_dict) + + model.to("cuda:0") # dist_util.dev()) + model.eval() # disable random masking + return model, diffusion + + +def load_mlp_model(args): + model = PureMLP( + args.latent_dim, + args.input_motion_length, + args.layers, + args.sparse_dim, + args.motion_nfeat, + ) + model.eval() + state_dict = torch.load(args.model_path, map_location="cpu") + model.load_state_dict(state_dict) + model.to("cuda:0") + return model, None + + +def main(): + args = sample_args() + + torch.backends.cudnn.benchmark = False + random.seed(args.seed) + np.random.seed(args.seed) + torch.manual_seed(args.seed) + + fps = 60 # AMASS dataset requires 60 frames per second + + body_model = BodyModel(args.support_dir) + print("Loading dataset...") + filename_list, all_info, mean, std = load_data( + args.dataset, + args.dataset_path, + "test", + ) + dataset = TestDataset( + args.dataset, + mean, + std, + all_info, + filename_list, + ) + + log = {} + for metric in all_metrics: + log[metric] = 0 + + model_type = args.arch.split("_")[0] + if model_type == "diffusion": + model, diffusion = load_diffusion_model(args) + sample_fn = diffusion.p_sample_loop + elif model_type == "mlp": + model, _ = load_mlp_model(args) + sample_fn = None + else: + raise ValueError(f"Unknown model type {model_type}") + + if not args.overlapping_test: + test_func = non_overlapping_test + # batch size in the case of non-overlapping testing + n_testframe = args.num_per_batch + else: + print("Overlapping testing...") + test_func = overlapping_test + # sliding window size in case of overlapping testing + n_testframe = args.sld_wind_size + + for sample_index in tqdm(range(len(dataset))): + + output, body_param, head_motion, filename = test_func( + args, + dataset[sample_index], + sample_fn, + dataset, + model, + n_testframe, + model_type=model_type, + ) + + sample = torch.cat(output, axis=0) + + instance_log = evaluate_prediction( + args, + all_metrics, + sample, + body_model, + sample_index, + head_motion, + body_param, + fps, + filename, + ) + for key in instance_log: + log[key] += instance_log[key] + + # Print the value for all the metrics + print("Metrics for the predictions") + for metric in pred_metrics: + print(log[metric] / len(dataset) * metrics_coeffs[metric]) + print("Metrics for the ground truth") + for metric in gt_metrics: + print(metric, log[metric] / len(dataset) * metrics_coeffs[metric]) + + +if __name__ == "__main__": + main() diff --git a/train.py b/train.py new file mode 100644 index 0000000..ff9e336 --- /dev/null +++ b/train.py @@ -0,0 +1,181 @@ +# Copyright (c) Meta Platforms, Inc. All Rights Reserved +import json +import os +import random + +import numpy as np + +import torch + +from data_loaders.dataloader import get_dataloader, load_data, TrainDataset +from model.networks import PureMLP +from runner.train_mlp import train_step +from runner.training_loop import TrainLoop + +from utils import dist_util + +from utils.model_util import create_model_and_diffusion +from utils.parser_util import train_args + + +def train_diffusion_model(args, dataloader): + print("creating model and diffusion...") + args.arch = args.arch[len("diffusion_") :] + + num_gpus = torch.cuda.device_count() + args.num_workers = args.num_workers * num_gpus + + model, diffusion = create_model_and_diffusion(args) + + if num_gpus > 1: + print("Let's use", torch.cuda.device_count(), "GPUs!") + dist_util.setup_dist() + model = torch.nn.DataParallel(model).cuda() + print( + "Total params: %.2fM" + % (sum(p.numel() for p in model.module.parameters()) / 1000000.0) + ) + else: + dist_util.setup_dist(args.device) + model.to(dist_util.dev()) + print( + "Total params: %.2fM" + % (sum(p.numel() for p in model.parameters()) / 1000000.0) + ) + + print("Training...") + TrainLoop(args, model, diffusion, dataloader).run_loop() + print("Done.") + + +def train_mlp_model(args, dataloader): + print("creating MLP model...") + args.arch = args.arch[len("mlp_") :] + num_gpus = torch.cuda.device_count() + args.num_workers = args.num_workers * num_gpus + + model = PureMLP( + args.latent_dim, + args.input_motion_length, + args.layers, + args.sparse_dim, + args.motion_nfeat, + ) + model.train() + + if num_gpus > 1: + print("Let's use", torch.cuda.device_count(), "GPUs!") + dist_util.setup_dist() + model = torch.nn.DataParallel(model).cuda() + print( + "Total params: %.2fM" + % (sum(p.numel() for p in model.module.parameters()) / 1000000.0) + ) + else: + dist_util.setup_dist(args.device) + model.to(dist_util.dev()) + print( + "Total params: %.2fM" + % (sum(p.numel() for p in model.parameters()) / 1000000.0) + ) + + # initialize optimizer + optimizer = torch.optim.Adam( + model.parameters(), lr=args.lr, weight_decay=args.weight_decay + ) + nb_iter = 0 + avg_loss = 0.0 + avg_lr = 0.0 + + while (nb_iter + 1) < args.num_steps: + + for (motion_target, motion_input) in dataloader: + + loss, optimizer, current_lr = train_step( + motion_input, + motion_target, + model, + optimizer, + nb_iter, + args.num_steps, + args.lr, + args.lr / 10.0, + dist_util.dev(), + args.lr_anneal_steps, + ) + avg_loss += loss + avg_lr += current_lr + + if (nb_iter + 1) % args.log_interval == 0: + avg_loss = avg_loss / args.log_interval + avg_lr = avg_lr / args.log_interval + + print("Iter {} Summary: ".format(nb_iter + 1)) + print(f"\t lr: {avg_lr} \t Training loss: {avg_loss}") + avg_loss = 0 + avg_lr = 0 + + if (nb_iter + 1) == args.num_steps: + break + nb_iter += 1 + + with open( + os.path.join(args.save_dir, "model-iter-" + str(nb_iter + 1) + ".pth"), + "wb", + ) as f: + torch.save(model.state_dict(), f) + + +def main(): + args = train_args() + + torch.backends.cudnn.benchmark = False + random.seed(args.seed) + np.random.seed(args.seed) + torch.manual_seed(args.seed) + + if args.save_dir is None: + raise FileNotFoundError("save_dir was not specified.") + elif os.path.exists(args.save_dir) and not args.overwrite: + raise FileExistsError("save_dir [{}] already exists.".format(args.save_dir)) + elif not os.path.exists(args.save_dir): + os.makedirs(args.save_dir) + args_path = os.path.join(args.save_dir, "args.json") + with open(args_path, "w") as fw: + json.dump(vars(args), fw, indent=4, sort_keys=True) + + print("creating data loader...") + motions, sparses, mean, std = load_data( + args.dataset, + args.dataset_path, + "train", + input_motion_length=args.input_motion_length, + ) + dataset = TrainDataset( + args.dataset, + mean, + std, + motions, + sparses, + args.input_motion_length, + args.train_dataset_repeat_times, + args.no_normalization, + ) + dataloader = get_dataloader( + dataset, "train", batch_size=args.batch_size, num_workers=args.num_workers + ) + # args.lr_anneal_steps = ( + # args.lr_anneal_steps // args.train_dataset_repeat_times + # ) * len( + # dataloader + # ) # the input lr_anneal_steps is by epoch, here convert it to the number of steps + + model_type = args.arch.split("_")[0] + if model_type == "diffusion": + train_diffusion_model(args, dataloader) + elif model_type == "mlp": + train_mlp_model(args, dataloader) + + +if __name__ == "__main__": + main() diff --git a/utils/PYTORCH3D_LICENSE b/utils/PYTORCH3D_LICENSE new file mode 100644 index 0000000..bed0ceb --- /dev/null +++ b/utils/PYTORCH3D_LICENSE @@ -0,0 +1,30 @@ +BSD License + +For PyTorch3D software + +Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/utils/config.py b/utils/config.py new file mode 100644 index 0000000..093296f --- /dev/null +++ b/utils/config.py @@ -0,0 +1,18 @@ +import os + +SMPL_DATA_PATH = "./body_models/smpl" + +SMPL_KINTREE_PATH = os.path.join(SMPL_DATA_PATH, "kintree_table.pkl") +SMPL_MODEL_PATH = os.path.join(SMPL_DATA_PATH, "SMPL_NEUTRAL.pkl") +JOINT_REGRESSOR_TRAIN_EXTRA = os.path.join(SMPL_DATA_PATH, "J_regressor_extra.npy") + + +ROT_CONVENTION_TO_ROT_NUMBER = { + "legacy": 23, + "no_hands": 21, + "full_hands": 51, + "mitten_hands": 33, +} + +GENDERS = ["neutral", "male", "female"] +NUM_BETAS = 10 diff --git a/utils/dist_util.py b/utils/dist_util.py new file mode 100644 index 0000000..4810733 --- /dev/null +++ b/utils/dist_util.py @@ -0,0 +1,67 @@ +# MIT License +# Copyright (c) 2021 OpenAI +# +# This code is based on https://github.com/openai/guided-diffusion + +""" +Helpers for distributed training. +""" + +import socket + +import torch as th +import torch.distributed as dist + +# Change this to reflect your cluster layout. +# The GPU for a given rank is (rank % GPUS_PER_NODE). +GPUS_PER_NODE = 8 + +SETUP_RETRY_COUNT = 3 + +used_device = 0 + + +def setup_dist(device=0): + """ + Setup a distributed process group. + """ + global used_device + used_device = device + if dist.is_initialized(): + return + + +def dev(): + """ + Get the device to use for torch.distributed. + """ + global used_device + if th.cuda.is_available() and used_device >= 0: + return th.device(f"cuda:{used_device}") + return th.device("cpu") + + +def load_state_dict(path, **kwargs): + """ + Load a PyTorch file without redundant fetches across MPI ranks. + """ + return th.load(path, **kwargs) + + +def sync_params(params): + """ + Synchronize a sequence of Tensors across ranks from rank 0. + """ + for p in params: + with th.no_grad(): + dist.broadcast(p, 0) + + +def _find_free_port(): + try: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.bind(("", 0)) + s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + return s.getsockname()[1] + finally: + s.close() diff --git a/utils/metrics.py b/utils/metrics.py new file mode 100644 index 0000000..5b11532 --- /dev/null +++ b/utils/metrics.py @@ -0,0 +1,208 @@ +# Copyright (c) Meta Platforms, Inc. All Rights Reserved +# Metric functions with same inputs + +import numpy as np +import torch + + +def pred_jitter( + predicted_position, + predicted_angle, + predicted_root_angle, + gt_position, + gt_angle, + gt_root_angle, + upper_index, + lower_index, + fps, +): + pred_jitter = ( + ( + ( + predicted_position[3:] + - 3 * predicted_position[2:-1] + + 3 * predicted_position[1:-2] + - predicted_position[:-3] + ) + * (fps**3) + ) + .norm(dim=2) + .mean() + ) + return pred_jitter + + +def gt_jitter( + predicted_position, + predicted_angle, + predicted_root_angle, + gt_position, + gt_angle, + gt_root_angle, + upper_index, + lower_index, + fps, +): + gt_jitter = ( + ( + ( + gt_position[3:] + - 3 * gt_position[2:-1] + + 3 * gt_position[1:-2] + - gt_position[:-3] + ) + * (fps**3) + ) + .norm(dim=2) + .mean() + ) + return gt_jitter + + +def mpjre( + predicted_position, + predicted_angle, + predicted_root_angle, + gt_position, + gt_angle, + gt_root_angle, + upper_index, + lower_index, + fps, +): + diff = gt_angle - predicted_angle + diff[diff > np.pi] = diff[diff > np.pi] - 2 * np.pi + diff[diff < -np.pi] = diff[diff < -np.pi] + 2 * np.pi + rot_error = torch.mean(torch.absolute(diff)) + return rot_error + + +def mpjpe( + predicted_position, + predicted_angle, + predicted_root_angle, + gt_position, + gt_angle, + gt_root_angle, + upper_index, + lower_index, + fps, +): + pos_error = torch.mean( + torch.sqrt(torch.sum(torch.square(gt_position - predicted_position), axis=-1)) + ) + return pos_error + + +def handpe( + predicted_position, + predicted_angle, + predicted_root_angle, + gt_position, + gt_angle, + gt_root_angle, + upper_index, + lower_index, + fps, +): + pos_error_hands = torch.mean( + torch.sqrt(torch.sum(torch.square(gt_position - predicted_position), axis=-1))[ + ..., [20, 21] + ] + ) + return pos_error_hands + + +def upperpe( + predicted_position, + predicted_angle, + predicted_root_angle, + gt_position, + gt_angle, + gt_root_angle, + upper_index, + lower_index, + fps, +): + upper_body_error = torch.mean( + torch.sqrt(torch.sum(torch.square(gt_position - predicted_position), axis=-1))[ + ..., upper_index + ] + ) + return upper_body_error + + +def lowerpe( + predicted_position, + predicted_angle, + predicted_root_angle, + gt_position, + gt_angle, + gt_root_angle, + upper_index, + lower_index, + fps, +): + lower_body_error = torch.mean( + torch.sqrt(torch.sum(torch.square(gt_position - predicted_position), axis=-1))[ + ..., lower_index + ] + ) + return lower_body_error + + +def rootpe( + predicted_position, + predicted_angle, + predicted_root_angle, + gt_position, + gt_angle, + gt_root_angle, + upper_index, + lower_index, + fps, +): + pos_error_root = torch.mean( + torch.sqrt(torch.sum(torch.square(gt_position - predicted_position), axis=-1))[ + ..., [0] + ] + ) + return pos_error_root + + +def mpjve( + predicted_position, + predicted_angle, + predicted_root_angle, + gt_position, + gt_angle, + gt_root_angle, + upper_index, + lower_index, + fps, +): + gt_velocity = (gt_position[1:, ...] - gt_position[:-1, ...]) * fps + predicted_velocity = ( + predicted_position[1:, ...] - predicted_position[:-1, ...] + ) * fps + vel_error = torch.mean( + torch.sqrt(torch.sum(torch.square(gt_velocity - predicted_velocity), axis=-1)) + ) + return vel_error + + +metric_funcs_dict = { + "mpjre": mpjre, + "mpjpe": mpjpe, + "mpjve": mpjve, + "handpe": handpe, + "upperpe": upperpe, + "lowerpe": lowerpe, + "rootpe": rootpe, + "pred_jitter": pred_jitter, + "gt_jitter": gt_jitter, +} + + +def get_metric_function(metric): + return metric_funcs_dict[metric] diff --git a/utils/model_util.py b/utils/model_util.py new file mode 100644 index 0000000..1eb1e90 --- /dev/null +++ b/utils/model_util.py @@ -0,0 +1,78 @@ +# MIT License +# Copyright (c) 2022 Guy Tevet +# +# This code is based on https://github.com/GuyTevet/motion-diffusion-model +# Copyright (c) Meta Platforms, Inc. All Rights Reserved + +from diffusion import gaussian_diffusion as gd +from diffusion.respace import space_timesteps, SpacedDiffusion +from model.meta_model import MetaModel + + +def load_model_wo_clip(model, state_dict): + missing_keys, unexpected_keys = model.load_state_dict(state_dict, strict=False) + if len(unexpected_keys) != 0: + state_dict_new = {} + for key in state_dict.keys(): + state_dict_new[key.replace("module.", "")] = state_dict[key] + missing_keys, unexpected_keys = model.load_state_dict( + state_dict_new, strict=False + ) + assert len(unexpected_keys) == 0 + assert all([k.startswith("clip_model.") for k in missing_keys]) + + +def create_model_and_diffusion(args): + model = MetaModel(**get_model_args(args)) + diffusion = create_gaussian_diffusion(args) + return model, diffusion + + +def get_model_args(args): + + return { + "arch": args.arch, + "nfeats": args.motion_nfeat, + "latent_dim": args.latent_dim, + "sparse_dim": args.sparse_dim, + "num_layers": args.layers, + "dropout": 0.1, + "cond_mask_prob": args.cond_mask_prob, + "dataset": args.dataset, + "input_motion_length": args.input_motion_length, + } + + +def create_gaussian_diffusion(args): + predict_xstart = True + steps = args.diffusion_steps # 1000 + scale_beta = 1.0 + timestep_respacing = args.timestep_respacing + learn_sigma = False + rescale_timesteps = False + + betas = gd.get_named_beta_schedule(args.noise_schedule, steps, scale_beta) + loss_type = gd.LossType.MSE + + if not timestep_respacing: + timestep_respacing = [steps] + + return SpacedDiffusion( + dataset=args.dataset, + use_timesteps=space_timesteps(steps, timestep_respacing), + betas=betas, + model_mean_type=( + gd.ModelMeanType.EPSILON if not predict_xstart else gd.ModelMeanType.START_X + ), + model_var_type=( + ( + gd.ModelVarType.FIXED_LARGE + if not args.sigma_small + else gd.ModelVarType.FIXED_SMALL + ) + if not learn_sigma + else gd.ModelVarType.LEARNED_RANGE + ), + loss_type=loss_type, + rescale_timesteps=rescale_timesteps, + ) diff --git a/utils/parser_util.py b/utils/parser_util.py new file mode 100644 index 0000000..84192f7 --- /dev/null +++ b/utils/parser_util.py @@ -0,0 +1,323 @@ +# MIT License +# Copyright (c) 2022 Guy Tevet +# +# This code is based on https://github.com/GuyTevet/motion-diffusion-model +# Copyright (c) Meta Platforms, Inc. All Rights Reserved +import argparse +import json +import os +from argparse import ArgumentParser + + +def parse_and_load_from_model(parser): + # args according to the loaded model + # do not try to specify them from cmd line since they will be overwritten + add_data_options(parser) + add_model_options(parser) + add_diffusion_options(parser) + args = parser.parse_args() + args_to_overwrite = [] + for group_name in ["dataset", "model", "diffusion"]: + args_to_overwrite += get_args_per_group_name(parser, args, group_name) + + # load args from model + model_path = get_model_path_from_args() + args_path = os.path.join(os.path.dirname(model_path), "args.json") + assert os.path.exists(args_path), "Arguments json file was not found!" + with open(args_path, "r") as fr: + model_args = json.load(fr) + for a in args_to_overwrite: + if a in model_args.keys(): + # Use the chosen dataset, or use the dataset that is used to train the model + if a == "dataset": + if args.__dict__[a] is None: + args.__dict__[a] = model_args[a] + elif a == "input_motion_length": + continue + else: + args.__dict__[a] = model_args[a] + else: + print( + "Warning: was not able to load [{}], using default value [{}] instead.".format( + a, args.__dict__[a] + ) + ) + return args + + +def get_args_per_group_name(parser, args, group_name): + for group in parser._action_groups: + if group.title == group_name: + group_dict = { + a.dest: getattr(args, a.dest, None) for a in group._group_actions + } + return list(argparse.Namespace(**group_dict).__dict__.keys()) + return ValueError("group_name was not found.") + + +def get_model_path_from_args(): + try: + dummy_parser = ArgumentParser() + dummy_parser.add_argument("model_path") + dummy_args, _ = dummy_parser.parse_known_args() + return dummy_args.model_path + except Exception: + raise ValueError("model_path argument must be specified.") + + +def add_base_options(parser): + group = parser.add_argument_group("base") + group.add_argument( + "--cuda", default=True, type=bool, help="Use cuda device, otherwise use CPU." + ) + group.add_argument("--device", default=0, type=int, help="Device id to use.") + group.add_argument("--seed", default=10, type=int, help="For fixing random seed.") + group.add_argument( + "--batch_size", default=64, type=int, help="Batch size during training." + ) + group.add_argument( + "--timestep_respacing", default="", type=str, help="ddim timestep respacing." + ) + + +def add_diffusion_options(parser): + group = parser.add_argument_group("diffusion") + group.add_argument( + "--noise_schedule", + default="cosine", + choices=["linear", "cosine"], + type=str, + help="Noise schedule type", + ) + group.add_argument( + "--diffusion_steps", + default=1000, + type=int, + help="Number of diffusion steps (denoted T in the paper)", + ) + group.add_argument( + "--sigma_small", default=True, type=bool, help="Use smaller sigma values." + ) + + +def add_model_options(parser): + group = parser.add_argument_group("model") + group.add_argument( + "--arch", + default="DiffMLP", + type=str, + help="Architecture types as reported in the paper.", + ) + group.add_argument( + "--motion_nfeat", default=132, type=int, help="motion feature dimension" + ) + group.add_argument( + "--sparse_dim", default=54, type=int, help="sparse signal feature dimension" + ) + group.add_argument("--layers", default=8, type=int, help="Number of layers.") + group.add_argument( + "--latent_dim", default=512, type=int, help="Transformer/GRU width." + ) + group.add_argument( + "--cond_mask_prob", + default=0.0, + type=float, + help="The probability of masking the condition during training." + " For classifier-free guidance learning.", + ) + group.add_argument( + "--input_motion_length", + default=196, + type=int, + help="Limit for the maximal number of frames.", + ) + group.add_argument( + "--no_normalization", + action="store_true", + help="no data normalisation for the 6d motions", + ) + + +def add_data_options(parser): + group = parser.add_argument_group("dataset") + group.add_argument( + "--dataset", + default=None, + choices=[ + "amass", + ], + type=str, + help="Dataset name (choose from list).", + ) + group.add_argument( + "--dataset_path", + default="./dataset/AMASS/", + type=str, + help="Dataset path", + ) + + +def add_training_options(parser): + group = parser.add_argument_group("training") + group.add_argument( + "--save_dir", + required=True, + type=str, + help="Path to save checkpoints and results.", + ) + group.add_argument( + "--overwrite", + action="store_true", + help="If True, will enable to use an already existing save_dir.", + ) + group.add_argument( + "--train_platform_type", + default="NoPlatform", + choices=["NoPlatform", "ClearmlPlatform", "TensorboardPlatform"], + type=str, + help="Choose platform to log results. NoPlatform means no logging.", + ) + group.add_argument("--lr", default=2e-4, type=float, help="Learning rate.") + group.add_argument( + "--weight_decay", default=0.0, type=float, help="Optimizer weight decay." + ) + group.add_argument( + "--lr_anneal_steps", + default=0, + type=int, + help="Number of learning rate anneal steps.", + ) + group.add_argument( + "--train_dataset_repeat_times", + default=1000, + type=int, + help="Repeat the training dataset to save training time", + ) + group.add_argument( + "--eval_during_training", + action="store_true", + help="If True, will run evaluation during training.", + ) + group.add_argument( + "--log_interval", default=100, type=int, help="Log losses each N steps" + ) + group.add_argument( + "--save_interval", + default=5000, + type=int, + help="Save checkpoints and run evaluation each N steps", + ) + group.add_argument( + "--num_steps", + default=6000000, + type=int, + help="Training will stop after the specified number of steps.", + ) + group.add_argument( + "--resume_checkpoint", + default="", + type=str, + help="If not empty, will start from the specified checkpoint (path to model###.pt file).", + ) + group.add_argument( + "--load_optimizer", + action="store_true", + help="If True, will also load the saved optimizer state for network initialization", + ) + group.add_argument( + "--num_workers", + default=8, + type=int, + help="Number of dataloader workers.", + ) + + +def add_sampling_options(parser): + group = parser.add_argument_group("sampling") + group.add_argument( + "--overlapping_test", + action="store_true", + help="enabling overlapping test", + ) + group.add_argument( + "--num_per_batch", + default=256, + type=int, + help="the batch size of each split during non-overlapping testing", + ) + group.add_argument( + "--sld_wind_size", + default=70, + type=int, + help="the sliding window size", + ) + group.add_argument( + "--vis", + action="store_true", + help="visualize the output", + ) + group.add_argument( + "--fix_noise", + action="store_true", + help="fix init noise for the output", + ) + group.add_argument( + "--fps", + default=30, + type=int, + help="FPS", + ) + group.add_argument( + "--model_path", + required=True, + type=str, + help="Path to model####.pt file to be sampled.", + ) + group.add_argument( + "--output_dir", + default="", + type=str, + help="Path to results dir (auto created by the script). " + "If empty, will create dir in parallel to checkpoint.", + ) + group.add_argument( + "--support_dir", + type=str, + help="the dir that you store your smplh and dmpls dirs", + ) + + +def add_evaluation_options(parser): + group = parser.add_argument_group("eval") + group.add_argument( + "--model_path", + required=True, + type=str, + help="Path to model####.pt file to be sampled.", + ) + + +def train_args(): + parser = ArgumentParser() + add_base_options(parser) + add_data_options(parser) + add_model_options(parser) + add_diffusion_options(parser) + add_training_options(parser) + return parser.parse_args() + + +def sample_args(): + parser = ArgumentParser() + # args specified by the user: (all other will be loaded from the model) + add_base_options(parser) + add_sampling_options(parser) + return parse_and_load_from_model(parser) + + +def evaluation_parser(): + parser = ArgumentParser() + # args specified by the user: (all other will be loaded from the model) + add_base_options(parser) + add_evaluation_options(parser) + return parse_and_load_from_model(parser) diff --git a/utils/rotation_conversions.py b/utils/rotation_conversions.py new file mode 100644 index 0000000..749be1f --- /dev/null +++ b/utils/rotation_conversions.py @@ -0,0 +1,551 @@ +# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. +# Check PYTORCH3D_LICENCE before use + +import functools +from typing import Optional + +import torch +import torch.nn.functional as F + + +""" +The transformation matrices returned from the functions in this file assume +the points on which the transformation will be applied are column vectors. +i.e. the R matrix is structured as + + R = [ + [Rxx, Rxy, Rxz], + [Ryx, Ryy, Ryz], + [Rzx, Rzy, Rzz], + ] # (3, 3) + +This matrix can be applied to column vectors by post multiplication +by the points e.g. + + points = [[0], [1], [2]] # (3 x 1) xyz coordinates of a point + transformed_points = R * points + +To apply the same matrix to points which are row vectors, the R matrix +can be transposed and pre multiplied by the points: + +e.g. + points = [[0, 1, 2]] # (1 x 3) xyz coordinates of a point + transformed_points = points * R.transpose(1, 0) +""" + + +def quaternion_to_matrix(quaternions): + """ + Convert rotations given as quaternions to rotation matrices. + + Args: + quaternions: quaternions with real part first, + as tensor of shape (..., 4). + + Returns: + Rotation matrices as tensor of shape (..., 3, 3). + """ + r, i, j, k = torch.unbind(quaternions, -1) + two_s = 2.0 / (quaternions * quaternions).sum(-1) + + o = torch.stack( + ( + 1 - two_s * (j * j + k * k), + two_s * (i * j - k * r), + two_s * (i * k + j * r), + two_s * (i * j + k * r), + 1 - two_s * (i * i + k * k), + two_s * (j * k - i * r), + two_s * (i * k - j * r), + two_s * (j * k + i * r), + 1 - two_s * (i * i + j * j), + ), + -1, + ) + return o.reshape(quaternions.shape[:-1] + (3, 3)) + + +def _copysign(a, b): + """ + Return a tensor where each element has the absolute value taken from the, + corresponding element of a, with sign taken from the corresponding + element of b. This is like the standard copysign floating-point operation, + but is not careful about negative 0 and NaN. + + Args: + a: source tensor. + b: tensor whose signs will be used, of the same shape as a. + + Returns: + Tensor of the same shape as a with the signs of b. + """ + signs_differ = (a < 0) != (b < 0) + return torch.where(signs_differ, -a, a) + + +def _sqrt_positive_part(x): + """ + Returns torch.sqrt(torch.max(0, x)) + but with a zero subgradient where x is 0. + """ + ret = torch.zeros_like(x) + positive_mask = x > 0 + ret[positive_mask] = torch.sqrt(x[positive_mask]) + return ret + + +def matrix_to_quaternion(matrix): + """ + Convert rotations given as rotation matrices to quaternions. + + Args: + matrix: Rotation matrices as tensor of shape (..., 3, 3). + + Returns: + quaternions with real part first, as tensor of shape (..., 4). + """ + if matrix.size(-1) != 3 or matrix.size(-2) != 3: + raise ValueError(f"Invalid rotation matrix shape f{matrix.shape}.") + m00 = matrix[..., 0, 0] + m11 = matrix[..., 1, 1] + m22 = matrix[..., 2, 2] + o0 = 0.5 * _sqrt_positive_part(1 + m00 + m11 + m22) + x = 0.5 * _sqrt_positive_part(1 + m00 - m11 - m22) + y = 0.5 * _sqrt_positive_part(1 - m00 + m11 - m22) + z = 0.5 * _sqrt_positive_part(1 - m00 - m11 + m22) + o1 = _copysign(x, matrix[..., 2, 1] - matrix[..., 1, 2]) + o2 = _copysign(y, matrix[..., 0, 2] - matrix[..., 2, 0]) + o3 = _copysign(z, matrix[..., 1, 0] - matrix[..., 0, 1]) + return torch.stack((o0, o1, o2, o3), -1) + + +def _axis_angle_rotation(axis: str, angle): + """ + Return the rotation matrices for one of the rotations about an axis + of which Euler angles describe, for each value of the angle given. + + Args: + axis: Axis label "X" or "Y or "Z". + angle: any shape tensor of Euler angles in radians + + Returns: + Rotation matrices as tensor of shape (..., 3, 3). + """ + + cos = torch.cos(angle) + sin = torch.sin(angle) + one = torch.ones_like(angle) + zero = torch.zeros_like(angle) + + if axis == "X": + R_flat = (one, zero, zero, zero, cos, -sin, zero, sin, cos) + if axis == "Y": + R_flat = (cos, zero, sin, zero, one, zero, -sin, zero, cos) + if axis == "Z": + R_flat = (cos, -sin, zero, sin, cos, zero, zero, zero, one) + + return torch.stack(R_flat, -1).reshape(angle.shape + (3, 3)) + + +def euler_angles_to_matrix(euler_angles, convention: str): + """ + Convert rotations given as Euler angles in radians to rotation matrices. + + Args: + euler_angles: Euler angles in radians as tensor of shape (..., 3). + convention: Convention string of three uppercase letters from + {"X", "Y", and "Z"}. + + Returns: + Rotation matrices as tensor of shape (..., 3, 3). + """ + if euler_angles.dim() == 0 or euler_angles.shape[-1] != 3: + raise ValueError("Invalid input euler angles.") + if len(convention) != 3: + raise ValueError("Convention must have 3 letters.") + if convention[1] in (convention[0], convention[2]): + raise ValueError(f"Invalid convention {convention}.") + for letter in convention: + if letter not in ("X", "Y", "Z"): + raise ValueError(f"Invalid letter {letter} in convention string.") + matrices = map(_axis_angle_rotation, convention, torch.unbind(euler_angles, -1)) + return functools.reduce(torch.matmul, matrices) + + +def _angle_from_tan( + axis: str, other_axis: str, data, horizontal: bool, tait_bryan: bool +): + """ + Extract the first or third Euler angle from the two members of + the matrix which are positive constant times its sine and cosine. + + Args: + axis: Axis label "X" or "Y or "Z" for the angle we are finding. + other_axis: Axis label "X" or "Y or "Z" for the middle axis in the + convention. + data: Rotation matrices as tensor of shape (..., 3, 3). + horizontal: Whether we are looking for the angle for the third axis, + which means the relevant entries are in the same row of the + rotation matrix. If not, they are in the same column. + tait_bryan: Whether the first and third axes in the convention differ. + + Returns: + Euler Angles in radians for each matrix in dataset as a tensor + of shape (...). + """ + + i1, i2 = {"X": (2, 1), "Y": (0, 2), "Z": (1, 0)}[axis] + if horizontal: + i2, i1 = i1, i2 + even = (axis + other_axis) in ["XY", "YZ", "ZX"] + if horizontal == even: + return torch.atan2(data[..., i1], data[..., i2]) + if tait_bryan: + return torch.atan2(-data[..., i2], data[..., i1]) + return torch.atan2(data[..., i2], -data[..., i1]) + + +def _index_from_letter(letter: str): + if letter == "X": + return 0 + if letter == "Y": + return 1 + if letter == "Z": + return 2 + + +def matrix_to_euler_angles(matrix, convention: str): + """ + Convert rotations given as rotation matrices to Euler angles in radians. + + Args: + matrix: Rotation matrices as tensor of shape (..., 3, 3). + convention: Convention string of three uppercase letters. + + Returns: + Euler angles in radians as tensor of shape (..., 3). + """ + if len(convention) != 3: + raise ValueError("Convention must have 3 letters.") + if convention[1] in (convention[0], convention[2]): + raise ValueError(f"Invalid convention {convention}.") + for letter in convention: + if letter not in ("X", "Y", "Z"): + raise ValueError(f"Invalid letter {letter} in convention string.") + if matrix.size(-1) != 3 or matrix.size(-2) != 3: + raise ValueError(f"Invalid rotation matrix shape f{matrix.shape}.") + i0 = _index_from_letter(convention[0]) + i2 = _index_from_letter(convention[2]) + tait_bryan = i0 != i2 + if tait_bryan: + central_angle = torch.asin( + matrix[..., i0, i2] * (-1.0 if i0 - i2 in [-1, 2] else 1.0) + ) + else: + central_angle = torch.acos(matrix[..., i0, i0]) + + o = ( + _angle_from_tan( + convention[0], convention[1], matrix[..., i2], False, tait_bryan + ), + central_angle, + _angle_from_tan( + convention[2], convention[1], matrix[..., i0, :], True, tait_bryan + ), + ) + return torch.stack(o, -1) + + +def random_quaternions( + n: int, dtype: Optional[torch.dtype] = None, device=None, requires_grad=False +): + """ + Generate random quaternions representing rotations, + i.e. versors with nonnegative real part. + + Args: + n: Number of quaternions in a batch to return. + dtype: Type to return. + device: Desired device of returned tensor. Default: + uses the current device for the default tensor type. + requires_grad: Whether the resulting tensor should have the gradient + flag set. + + Returns: + Quaternions as tensor of shape (N, 4). + """ + o = torch.randn((n, 4), dtype=dtype, device=device, requires_grad=requires_grad) + s = (o * o).sum(1) + o = o / _copysign(torch.sqrt(s), o[:, 0])[:, None] + return o + + +def random_rotations( + n: int, dtype: Optional[torch.dtype] = None, device=None, requires_grad=False +): + """ + Generate random rotations as 3x3 rotation matrices. + + Args: + n: Number of rotation matrices in a batch to return. + dtype: Type to return. + device: Device of returned tensor. Default: if None, + uses the current device for the default tensor type. + requires_grad: Whether the resulting tensor should have the gradient + flag set. + + Returns: + Rotation matrices as tensor of shape (n, 3, 3). + """ + quaternions = random_quaternions( + n, dtype=dtype, device=device, requires_grad=requires_grad + ) + return quaternion_to_matrix(quaternions) + + +def random_rotation( + dtype: Optional[torch.dtype] = None, device=None, requires_grad=False +): + """ + Generate a single random 3x3 rotation matrix. + + Args: + dtype: Type to return + device: Device of returned tensor. Default: if None, + uses the current device for the default tensor type + requires_grad: Whether the resulting tensor should have the gradient + flag set + + Returns: + Rotation matrix as tensor of shape (3, 3). + """ + return random_rotations(1, dtype, device, requires_grad)[0] + + +def standardize_quaternion(quaternions): + """ + Convert a unit quaternion to a standard form: one in which the real + part is non negative. + + Args: + quaternions: Quaternions with real part first, + as tensor of shape (..., 4). + + Returns: + Standardized quaternions as tensor of shape (..., 4). + """ + return torch.where(quaternions[..., 0:1] < 0, -quaternions, quaternions) + + +def quaternion_raw_multiply(a, b): + """ + Multiply two quaternions. + Usual torch rules for broadcasting apply. + + Args: + a: Quaternions as tensor of shape (..., 4), real part first. + b: Quaternions as tensor of shape (..., 4), real part first. + + Returns: + The product of a and b, a tensor of quaternions shape (..., 4). + """ + aw, ax, ay, az = torch.unbind(a, -1) + bw, bx, by, bz = torch.unbind(b, -1) + ow = aw * bw - ax * bx - ay * by - az * bz + ox = aw * bx + ax * bw + ay * bz - az * by + oy = aw * by - ax * bz + ay * bw + az * bx + oz = aw * bz + ax * by - ay * bx + az * bw + return torch.stack((ow, ox, oy, oz), -1) + + +def quaternion_multiply(a, b): + """ + Multiply two quaternions representing rotations, returning the quaternion + representing their composition, i.e. the versor with nonnegative real part. + Usual torch rules for broadcasting apply. + + Args: + a: Quaternions as tensor of shape (..., 4), real part first. + b: Quaternions as tensor of shape (..., 4), real part first. + + Returns: + The product of a and b, a tensor of quaternions of shape (..., 4). + """ + ab = quaternion_raw_multiply(a, b) + return standardize_quaternion(ab) + + +def quaternion_invert(quaternion): + """ + Given a quaternion representing rotation, get the quaternion representing + its inverse. + + Args: + quaternion: Quaternions as tensor of shape (..., 4), with real part + first, which must be versors (unit quaternions). + + Returns: + The inverse, a tensor of quaternions of shape (..., 4). + """ + + return quaternion * quaternion.new_tensor([1, -1, -1, -1]) + + +def quaternion_apply(quaternion, point): + """ + Apply the rotation given by a quaternion to a 3D point. + Usual torch rules for broadcasting apply. + + Args: + quaternion: Tensor of quaternions, real part first, of shape (..., 4). + point: Tensor of 3D points of shape (..., 3). + + Returns: + Tensor of rotated points of shape (..., 3). + """ + if point.size(-1) != 3: + raise ValueError(f"Points are not in 3D, f{point.shape}.") + real_parts = point.new_zeros(point.shape[:-1] + (1,)) + point_as_quaternion = torch.cat((real_parts, point), -1) + out = quaternion_raw_multiply( + quaternion_raw_multiply(quaternion, point_as_quaternion), + quaternion_invert(quaternion), + ) + return out[..., 1:] + + +def axis_angle_to_matrix(axis_angle): + """ + Convert rotations given as axis/angle to rotation matrices. + + Args: + axis_angle: Rotations given as a vector in axis angle form, + as a tensor of shape (..., 3), where the magnitude is + the angle turned anticlockwise in radians around the + vector's direction. + + Returns: + Rotation matrices as tensor of shape (..., 3, 3). + """ + return quaternion_to_matrix(axis_angle_to_quaternion(axis_angle)) + + +def matrix_to_axis_angle(matrix): + """ + Convert rotations given as rotation matrices to axis/angle. + + Args: + matrix: Rotation matrices as tensor of shape (..., 3, 3). + + Returns: + Rotations given as a vector in axis angle form, as a tensor + of shape (..., 3), where the magnitude is the angle + turned anticlockwise in radians around the vector's + direction. + """ + return quaternion_to_axis_angle(matrix_to_quaternion(matrix)) + + +def axis_angle_to_quaternion(axis_angle): + """ + Convert rotations given as axis/angle to quaternions. + + Args: + axis_angle: Rotations given as a vector in axis angle form, + as a tensor of shape (..., 3), where the magnitude is + the angle turned anticlockwise in radians around the + vector's direction. + + Returns: + quaternions with real part first, as tensor of shape (..., 4). + """ + angles = torch.norm(axis_angle, p=2, dim=-1, keepdim=True) + half_angles = 0.5 * angles + eps = 1e-6 + small_angles = angles.abs() < eps + sin_half_angles_over_angles = torch.empty_like(angles) + sin_half_angles_over_angles[~small_angles] = ( + torch.sin(half_angles[~small_angles]) / angles[~small_angles] + ) + # for x small, sin(x/2) is about x/2 - (x/2)^3/6 + # so sin(x/2)/x is about 1/2 - (x*x)/48 + sin_half_angles_over_angles[small_angles] = ( + 0.5 - (angles[small_angles] * angles[small_angles]) / 48 + ) + quaternions = torch.cat( + [torch.cos(half_angles), axis_angle * sin_half_angles_over_angles], dim=-1 + ) + return quaternions + + +def quaternion_to_axis_angle(quaternions): + """ + Convert rotations given as quaternions to axis/angle. + + Args: + quaternions: quaternions with real part first, + as tensor of shape (..., 4). + + Returns: + Rotations given as a vector in axis angle form, as a tensor + of shape (..., 3), where the magnitude is the angle + turned anticlockwise in radians around the vector's + direction. + """ + norms = torch.norm(quaternions[..., 1:], p=2, dim=-1, keepdim=True) + half_angles = torch.atan2(norms, quaternions[..., :1]) + angles = 2 * half_angles + eps = 1e-6 + small_angles = angles.abs() < eps + sin_half_angles_over_angles = torch.empty_like(angles) + sin_half_angles_over_angles[~small_angles] = ( + torch.sin(half_angles[~small_angles]) / angles[~small_angles] + ) + # for x small, sin(x/2) is about x/2 - (x/2)^3/6 + # so sin(x/2)/x is about 1/2 - (x*x)/48 + sin_half_angles_over_angles[small_angles] = ( + 0.5 - (angles[small_angles] * angles[small_angles]) / 48 + ) + return quaternions[..., 1:] / sin_half_angles_over_angles + + +def rotation_6d_to_matrix(d6: torch.Tensor) -> torch.Tensor: + """ + Converts 6D rotation representation by Zhou et al. [1] to rotation matrix + using Gram--Schmidt orthogonalisation per Section B of [1]. + Args: + d6: 6D rotation representation, of size (*, 6) + + Returns: + batch of rotation matrices of size (*, 3, 3) + + [1] Zhou, Y., Barnes, C., Lu, J., Yang, J., & Li, H. + On the Continuity of Rotation Representations in Neural Networks. + IEEE Conference on Computer Vision and Pattern Recognition, 2019. + Retrieved from http://arxiv.org/abs/1812.07035 + """ + + a1, a2 = d6[..., :3], d6[..., 3:] + b1 = F.normalize(a1, dim=-1) + b2 = a2 - (b1 * a2).sum(-1, keepdim=True) * b1 + b2 = F.normalize(b2, dim=-1) + b3 = torch.cross(b1, b2, dim=-1) + return torch.stack((b1, b2, b3), dim=-2) + + +def matrix_to_rotation_6d(matrix: torch.Tensor) -> torch.Tensor: + """ + Converts rotation matrices to 6D rotation representation by Zhou et al. [1] + by dropping the last row. Note that 6D representation is not unique. + Args: + matrix: batch of rotation matrices of size (*, 3, 3) + + Returns: + 6D rotation representation, of size (*, 6) + + [1] Zhou, Y., Barnes, C., Lu, J., Yang, J., & Li, H. + On the Continuity of Rotation Representations in Neural Networks. + IEEE Conference on Computer Vision and Pattern Recognition, 2019. + Retrieved from http://arxiv.org/abs/1812.07035 + """ + return matrix[..., :2, :].clone().reshape(*matrix.size()[:-2], 6) diff --git a/utils/utils_transform.py b/utils/utils_transform.py new file mode 100644 index 0000000..de4f95d --- /dev/null +++ b/utils/utils_transform.py @@ -0,0 +1,88 @@ +# MIT License +# Copyright (c) 2022 ETH Sensing, Interaction & Perception Lab +# +# This code is based on https://github.com/eth-siplab/AvatarPoser +# Copyright (c) Meta Platforms, Inc. All Rights Reserved + +import torch +from human_body_prior.tools import tgm_conversion as tgm +from human_body_prior.tools.rotation_tools import aa2matrot, matrot2aa +from torch.nn import functional as F + + +def bgs(d6s): + d6s = d6s.reshape(-1, 2, 3).permute(0, 2, 1) + bsz = d6s.shape[0] + b1 = F.normalize(d6s[:, :, 0], p=2, dim=1) + a2 = d6s[:, :, 1] + c = torch.bmm(b1.view(bsz, 1, -1), a2.view(bsz, -1, 1)).view(bsz, 1) * b1 + b2 = F.normalize(a2 - c, p=2, dim=1) + b3 = torch.cross(b1, b2, dim=1) + return torch.stack([b1, b2, b3], dim=-1) + + +def matrot2sixd(pose_matrot): + """ + :param pose_matrot: Nx3x3 + :return: pose_6d: Nx6 + """ + pose_6d = torch.cat([pose_matrot[:, :3, 0], pose_matrot[:, :3, 1]], dim=1) + return pose_6d + + +def aa2sixd(pose_aa): + """ + :param pose_aa Nx3 + :return: pose_6d: Nx6 + """ + pose_matrot = aa2matrot(pose_aa) + pose_6d = matrot2sixd(pose_matrot) + return pose_6d + + +def sixd2matrot(pose_6d): + """ + :param pose_6d: Nx6 + :return: pose_matrot: Nx3x3 + """ + rot_vec_1 = pose_6d[:, :3] + rot_vec_2 = pose_6d[:, 3:6] + rot_vec_3 = torch.cross(rot_vec_1, rot_vec_2) + pose_matrot = torch.stack([rot_vec_1, rot_vec_2, rot_vec_3], dim=-1) + return pose_matrot + + +def sixd2aa(pose_6d, batch=False): + """ + :param pose_6d: Nx6 + :return: pose_aa: Nx3 + """ + if batch: + B, J, C = pose_6d.shape + pose_6d = pose_6d.reshape(-1, 6) + pose_matrot = sixd2matrot(pose_6d) + pose_aa = matrot2aa(pose_matrot) + if batch: + pose_aa = pose_aa.reshape(B, J, 3) + return pose_aa + + +def sixd2quat(pose_6d): + """ + :param pose_6d: Nx6 + :return: pose_quaternion: Nx4 + """ + pose_mat = sixd2matrot(pose_6d) + pose_mat_34 = torch.cat( + (pose_mat, torch.zeros(pose_mat.size(0), pose_mat.size(1), 1)), dim=-1 + ) + pose_quaternion = tgm.rotation_matrix_to_quaternion(pose_mat_34) + return pose_quaternion + + +def quat2aa(pose_quat): + """ + :param pose_quat: Nx4 + :return: pose_aa: Nx3 + """ + return tgm.quaternion_to_angle_axis(pose_quat) diff --git a/utils/utils_visualize.py b/utils/utils_visualize.py new file mode 100644 index 0000000..db85af9 --- /dev/null +++ b/utils/utils_visualize.py @@ -0,0 +1,135 @@ +# MIT License +# Copyright (c) 2022 ETH Sensing, Interaction & Perception Lab +# +# This code is based on https://github.com/eth-siplab/AvatarPoser +# Copyright (c) Meta Platforms, Inc. All Rights Reserved + +import os + +import cv2 +import numpy as np +import trimesh +from body_visualizer.mesh.mesh_viewer import MeshViewer + +from body_visualizer.tools.vis_tools import colors + +from human_body_prior.tools.omni_tools import copy2cpu as c2c +from tqdm import tqdm + +os.environ["PYOPENGL_PLATFORM"] = "egl" + +""" +# -------------------------------- +# CheckerBoard, from Xianghui Xie +# -------------------------------- +""" + + +class CheckerBoard: + def __init__(self, white=(247, 246, 244), black=(146, 163, 171)): + self.white = np.array(white) / 255.0 + self.black = np.array(black) / 255.0 + self.verts, self.faces, self.texts = None, None, None + self.offset = None + + @staticmethod + def gen_checker_xy(black, white, square_size=0.5, xlength=50.0, ylength=50.0): + """ + generate a checker board in parallel to x-y plane + starting from (0, 0) to (xlength, ylength), in meters + return: trimesh.Trimesh + """ + xsquares = int(xlength / square_size) + ysquares = int(ylength / square_size) + verts, faces, texts = [], [], [] + fcount = 0 + # black = torch.tensor([0, 0, 0.], dtype=torch.float32).cuda() + # white = torch.tensor([1., 1., 1.], dtype=torch.float32).cuda() + # white = np.array([247, 246, 244]) / 255. + # black = np.array([146, 163, 171]) / 255. + for i in range(xsquares): + for j in range(ysquares): + p1 = np.array([i * square_size, j * square_size, 0]) + p2 = np.array([(i + 1) * square_size, j * square_size, 0]) + p3 = np.array([(i + 1) * square_size, (j + 1) * square_size, 0]) + + verts.extend([p1, p2, p3]) + faces.append([fcount * 3, fcount * 3 + 1, fcount * 3 + 2]) + fcount += 1 + + p1 = np.array([i * square_size, j * square_size, 0]) + p2 = np.array([(i + 1) * square_size, (j + 1) * square_size, 0]) + p3 = np.array([i * square_size, (j + 1) * square_size, 0]) + + verts.extend([p1, p2, p3]) + faces.append([fcount * 3, fcount * 3 + 1, fcount * 3 + 2]) + fcount += 1 + + if (i + j) % 2 == 0: + texts.append(black) + texts.append(black) + else: + texts.append(white) + texts.append(white) + + # now compose as mesh + mesh = trimesh.Trimesh( + vertices=np.array(verts) + np.array([-5, -5, 0]), faces=np.array(faces) + ) # , fc=np.array(texts)) + mesh.visual.face_colors = np.array(texts) + # mesh.vertices += np.array([-5, -5, 0]) + return mesh + + +""" +# -------------------------------- +# Visualize avatar using body pose information and body model +# -------------------------------- +""" + + +def save_animation(body_pose, savepath, bm, fps=60, resolution=(800, 800)): + imw, imh = resolution + mv = MeshViewer(width=imw, height=imh, use_offscreen=True) + faces = c2c(bm.f) + img_array = [] + for fId in tqdm(range(body_pose.v.shape[0])): + body_mesh = trimesh.Trimesh( + vertices=c2c(body_pose.v[fId]), + faces=faces, + vertex_colors=np.tile(colors["purple"], (6890, 1)), + ) + + generator = CheckerBoard() + checker = generator.gen_checker_xy(generator.black, generator.white) + checker_mesh = trimesh.Trimesh( + checker.v, checker.f, process=False, face_colors=checker.fc + ) + + body_mesh.apply_transform( + trimesh.transformations.rotation_matrix(-90, (0, 0, 10)) + ) + body_mesh.apply_transform( + trimesh.transformations.rotation_matrix(30, (10, 0, 0)) + ) + body_mesh.apply_transform(trimesh.transformations.scale_matrix(0.5)) + + checker_mesh.apply_transform( + trimesh.transformations.rotation_matrix(-90, (0, 0, 10)) + ) + checker_mesh.apply_transform( + trimesh.transformations.rotation_matrix(30, (10, 0, 0)) + ) + checker_mesh.apply_transform(trimesh.transformations.scale_matrix(0.5)) + + mv.set_static_meshes([checker_mesh, body_mesh]) + body_image = mv.render(render_wireframe=False) + body_image = body_image.astype(np.uint8) + body_image = cv2.cvtColor(body_image, cv2.COLOR_BGR2RGB) + + img_array.append(body_image) + out = cv2.VideoWriter(savepath, cv2.VideoWriter_fourcc(*"DIVX"), fps, resolution) + + for i in range(len(img_array)): + out.write(img_array[i]) + out.release()