# Copyright (c) OpenMMLab. All rights reserved.
import pytest
import torch
from mmaction.models import build_recognizer
from ..base import generate_recognizer_demo_inputs, get_skeletongcn_cfg
def test_skeletongcn():
config = get_skeletongcn_cfg('stgcn/stgcn_80e_ntu60_xsub_keypoint.py')
with pytest.raises(TypeError):
# "pretrained" must be a str or None
config.model['backbone']['pretrained'] = ['None']
recognizer = build_recognizer(config.model)
config.model['backbone']['pretrained'] = None
recognizer = build_recognizer(config.model)
input_shape = (1, 3, 300, 17, 2)
demo_inputs = generate_recognizer_demo_inputs(input_shape, 'skeleton')
skeletons = demo_inputs['imgs']
gt_labels = demo_inputs['gt_labels']
losses = recognizer(skeletons, gt_labels)
assert isinstance(losses, dict)
# Test forward test
with torch.no_grad():
skeleton_list = [skeleton[None, :] for skeleton in skeletons]
for one_skeleton in skeleton_list:
recognizer(one_skeleton, None, return_loss=False)
# test stgcn without edge importance weighting
config.model['backbone']['edge_importance_weighting'] = False
recognizer = build_recognizer(config.model)
input_shape = (1, 3, 300, 17, 2)
demo_inputs = generate_recognizer_demo_inputs(input_shape, 'skeleton')
skeletons = demo_inputs['imgs']
gt_labels = demo_inputs['gt_labels']
losses = recognizer(skeletons, gt_labels)
assert isinstance(losses, dict)
# Test forward test
with torch.no_grad():
skeleton_list = [skeleton[None, :] for skeleton in skeletons]
for one_skeleton in skeleton_list:
recognizer(one_skeleton, None, return_loss=False)