computer-vision
EgoSMPLX / code /test.py
tmddud20's picture
Upload folder using huggingface_hub
d8dc31c verified
Raw
History Blame Contribute Delete
3.49 kB
import argparse
from config import cfg
from tqdm import tqdm
import torch
import torch.backends.cudnn as cudnn
import os.path as osp
from pdb import set_trace
import time
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('--num_gpus', type=int, dest='num_gpus')
parser.add_argument('--exp_name', type=str, default='output/test')
parser.add_argument('--result_path', type=str, default='output/test')
parser.add_argument('--ckpt_idx', type=int, default=0)
parser.add_argument('--testset', type=str, default='EHF')
parser.add_argument('--agora_benchmark', type=str, default='na')
parser.add_argument('--shapy_eval_split', type=str, default='val')
parser.add_argument('--use_cache', action='store_true')
parser.add_argument('--eval_on_train', action='store_true')
parser.add_argument('--vis', action='store_true')
parser.add_argument('--vis_feature', action='store_true')
parser.add_argument('--vis_hand_bbox', action='store_true')
args = parser.parse_args()
return args
def main():
print('### Argument parse and create log ###')
args = parse_args()
config_path = osp.join('../output',args.result_path, 'code', 'config_base.py')
ckpt_path = osp.join('../output', args.result_path, 'model_dump', f'snapshot_{int(args.ckpt_idx)}.pth.tar')
# set_trace()
cfg.get_config_fromfile(config_path)
cfg.update_test_config(args.testset, args.agora_benchmark, args.shapy_eval_split,
ckpt_path, args.use_cache, args.eval_on_train, args.vis)
cfg.update_config(args.num_gpus, args.exp_name)
cfg.vis_feature = args.vis_feature
cfg.vis_hand_bbox = args.vis_hand_bbox
cudnn.benchmark = True
from base import Tester
tester = Tester()
tester._make_batch_generator()
tester._make_model()
start_time = time.time()
frame_count = 0
eval_result = {}
cur_sample_idx = 0
for itr, (inputs, targets, meta_info) in enumerate(tqdm(tester.batch_generator)):
iter_start = time.time()
# forward
with torch.no_grad():
model_out = tester.model(inputs, targets, meta_info, 'test')
iter_end = time.time()
iter_time = iter_end - iter_start
fps = 1.0 / iter_time if iter_time > 0 else 0
print(f"[Iter {itr}] time: {iter_time:.4f}s FPS: {fps:.2f}")
frame_count += 1
# save output
batch_size = model_out['img'].shape[0]
out = {}
for k, v in model_out.items():
if isinstance(v, torch.Tensor):
out[k] = v.cpu().numpy()
elif isinstance(v, list):
out[k] = v
else:
raise ValueError('Undefined type in out. Key: {}; Type: {}.'.format(k, type(v)))
# out = {k: v.cpu().numpy() for k, v in out.items()}
# for k, v in out.items(): batch_size = out[k].shape[0]
out = [{k: v[bid] for k, v in out.items()} for bid in range(batch_size)]
# evaluate
cur_eval_result = tester._evaluate(out, cur_sample_idx)
for k, v in cur_eval_result.items():
if k in eval_result:
eval_result[k] += v
else:
eval_result[k] = v
cur_sample_idx += len(out)
total_time = time.time() - start_time
avg_fps = frame_count / total_time
print(f"Average FPS: {avg_fps:.2f}")
tester._print_eval_result(eval_result)
if __name__ == "__main__":
main()