From e2b16e0547b9f1b94760057c7ca2f86526ba4070 Mon Sep 17 00:00:00 2001 From: Jiaxi Jiang Date: Fri, 15 Mar 2024 09:05:08 +0100 Subject: [PATCH] add copyright --- data/dataset_amass.py | 16 +++++++++++----- data/select_dataset.py | 10 ++++++++++ main_test_avatarposer.py | 17 +++++++++++------ main_train_avatarposer.py | 12 +++++++++++- models/.emformer.py.swp | Bin 450560 -> 0 bytes models/model_avatarposer.py | 11 +++++++++++ models/network.py | 11 ++++++++++- models/select_model.py | 18 +++++++++++------- prepare_data.py | 24 ++++++++++-------------- utils/utils_transform.py | 11 +++++++++++ utils/utils_visualize.py | 12 ++++++++++++ 11 files changed, 108 insertions(+), 34 deletions(-) delete mode 100644 models/.emformer.py.swp diff --git a/data/dataset_amass.py b/data/dataset_amass.py index 58252c0..4f7c002 100644 --- a/data/dataset_amass.py +++ b/data/dataset_amass.py @@ -1,3 +1,14 @@ +''' +# -------------------------------------------- +# dataloader for AMASS dataset +# -------------------------------------------- +# AvatarPoser: Articulated Full-Body Pose Tracking from Sparse Motion Sensing (ECCV 2022) +# https://github.com/eth-siplab/AvatarPoser +# Jiaxi Jiang (jiaxi.jiang@inf.ethz.ch) +# Sensing, Interaction & Perception Lab, +# Department of Computer Science, ETH Zurich +''' + import torch import numpy as np import os @@ -7,17 +18,12 @@ from human_body_prior.tools.omni_tools import copy2cpu as c2c from human_body_prior.tools.rotation_tools import aa2matrot,matrot2aa,local2global_pose import random -from utils import utils_transform - -from scipy import signal - import glob from IPython import embed import time import copy import pickle - class AMASS_Dataset(Dataset): """Motion Capture dataset""" diff --git a/data/select_dataset.py b/data/select_dataset.py index 180d30c..4781d11 100644 --- a/data/select_dataset.py +++ b/data/select_dataset.py @@ -1,3 +1,13 @@ +''' +# -------------------------------------------- +# define dataset +# -------------------------------------------- +# AvatarPoser: Articulated Full-Body Pose Tracking from Sparse Motion Sensing (ECCV 2022) +# https://github.com/eth-siplab/AvatarPoser +# Jiaxi Jiang (jiaxi.jiang@inf.ethz.ch) +# Sensing, Interaction & Perception Lab, +# Department of Computer Science, ETH Zurich +''' def define_Dataset(dataset_opt): dataset_type = dataset_opt['dataset_type'].lower() diff --git a/main_test_avatarposer.py b/main_test_avatarposer.py index 20f91af..4b2ac39 100644 --- a/main_test_avatarposer.py +++ b/main_test_avatarposer.py @@ -1,9 +1,17 @@ +''' +# -------------------------------------------- +# main testing code +# -------------------------------------------- +# AvatarPoser: Articulated Full-Body Pose Tracking from Sparse Motion Sensing (ECCV 2022) +# https://github.com/eth-siplab/AvatarPoser +# Jiaxi Jiang (jiaxi.jiang@inf.ethz.ch) +# Sensing, Interaction & Perception Lab, +# Department of Computer Science, ETH Zurich +''' + import os.path -import math import argparse -import random import numpy as np -from collections import OrderedDict import logging import torch from torch.utils.data import DataLoader @@ -11,11 +19,8 @@ from utils import utils_option as option from data.select_dataset import define_Dataset from models.select_model import define_Model -from utils import utils_transform -import pickle from utils import utils_visualize as vis - save_animation = False resolution = (800,800) diff --git a/main_train_avatarposer.py b/main_train_avatarposer.py index b6712fa..2a8bbc4 100644 --- a/main_train_avatarposer.py +++ b/main_train_avatarposer.py @@ -1,3 +1,14 @@ +''' +# -------------------------------------------- +# main training code +# -------------------------------------------- +# AvatarPoser: Articulated Full-Body Pose Tracking from Sparse Motion Sensing (ECCV 2022) +# https://github.com/eth-siplab/AvatarPoser +# Jiaxi Jiang (jiaxi.jiang@inf.ethz.ch) +# Sensing, Interaction & Perception Lab, +# Department of Computer Science, ETH Zurich +''' + import os.path import math import argparse @@ -15,7 +26,6 @@ import pickle from utils import utils_visualize as vis - save_animation = False resolution = (800,800) diff --git a/models/.emformer.py.swp b/models/.emformer.py.swp deleted file mode 100644 index 7e343ccbdd7743c3f2b92101efebf62be6dcf67d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450560 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