|
|
|
|
|
import copy
|
|
|
|
|
|
import pytest
|
|
|
import torch
|
|
|
from numpy.testing import assert_array_equal
|
|
|
|
|
|
from mmaction.models import MultiModalDataPreprocessor
|
|
|
from mmaction.structures import ActionDataSample
|
|
|
from mmaction.utils import register_all_modules
|
|
|
|
|
|
|
|
|
def generate_dummy_data(batch_size, input_keys, input_shapes):
|
|
|
data = dict()
|
|
|
data['data_samples'] = [
|
|
|
ActionDataSample().set_gt_label(2) for _ in range(batch_size)
|
|
|
]
|
|
|
data['inputs'] = dict()
|
|
|
for key, shape in zip(input_keys, input_shapes):
|
|
|
data['inputs'][key] = [
|
|
|
torch.randint(0, 255, shape) for _ in range(batch_size)
|
|
|
]
|
|
|
|
|
|
return data
|
|
|
|
|
|
|
|
|
def test_multimodal_data_preprocessor():
|
|
|
with pytest.raises(AssertionError):
|
|
|
MultiModalDataPreprocessor(
|
|
|
preprocessors=dict(imgs=dict(format_shape='NCTHW')))
|
|
|
|
|
|
register_all_modules()
|
|
|
data_keys = ('imgs', 'heatmap_imgs')
|
|
|
data_shapes = ((1, 3, 8, 224, 224), (1, 17, 32, 64, 64))
|
|
|
raw_data = generate_dummy_data(2, data_keys, data_shapes)
|
|
|
|
|
|
psr = MultiModalDataPreprocessor(
|
|
|
preprocessors=dict(
|
|
|
imgs=dict(
|
|
|
type='ActionDataPreprocessor',
|
|
|
mean=[123.675, 116.28, 103.53],
|
|
|
std=[58.395, 57.12, 57.375],
|
|
|
format_shape='NCTHW'),
|
|
|
heatmap_imgs=dict(type='ActionDataPreprocessor')))
|
|
|
|
|
|
data = psr(copy.deepcopy(raw_data))
|
|
|
assert data['inputs']['imgs'].shape == (2, 1, 3, 8, 224, 224)
|
|
|
assert data['inputs']['heatmap_imgs'].shape == (2, 1, 17, 32, 64, 64)
|
|
|
psr_imgs = psr.preprocessors['imgs']
|
|
|
assert_array_equal(data['inputs']['imgs'][0],
|
|
|
(raw_data['inputs']['imgs'][0] - psr_imgs.mean) /
|
|
|
psr_imgs.std)
|
|
|
assert_array_equal(data['inputs']['imgs'][1],
|
|
|
(raw_data['inputs']['imgs'][1] - psr_imgs.mean) /
|
|
|
psr_imgs.std)
|
|
|
assert_array_equal(data['inputs']['heatmap_imgs'][0],
|
|
|
raw_data['inputs']['heatmap_imgs'][0])
|
|
|
assert_array_equal(data['inputs']['heatmap_imgs'][1],
|
|
|
raw_data['inputs']['heatmap_imgs'][1])
|
|
|
|
|
|
data_keys = ('imgs_2D', 'imgs_3D')
|
|
|
data_shapes = ((1, 3, 224, 224), (1, 3, 8, 224, 224))
|
|
|
raw_data = generate_dummy_data(2, data_keys, data_shapes)
|
|
|
|
|
|
psr = MultiModalDataPreprocessor(
|
|
|
preprocessors=dict(
|
|
|
imgs_2D=dict(
|
|
|
type='ActionDataPreprocessor',
|
|
|
mean=[123.675, 116.28, 103.53],
|
|
|
std=[58.395, 57.12, 57.375],
|
|
|
format_shape='NCHW'),
|
|
|
imgs_3D=dict(
|
|
|
type='ActionDataPreprocessor',
|
|
|
mean=[127.5, 127.5, 127.5],
|
|
|
std=[57.5, 57.5, 57.5],
|
|
|
format_shape='NCTHW')))
|
|
|
|
|
|
data = psr(copy.deepcopy(raw_data))
|
|
|
assert data['inputs']['imgs_2D'].shape == (2, 1, 3, 224, 224)
|
|
|
assert data['inputs']['imgs_3D'].shape == (2, 1, 3, 8, 224, 224)
|
|
|
psr_imgs2d = psr.preprocessors['imgs_2D']
|
|
|
psr_imgs3d = psr.preprocessors['imgs_3D']
|
|
|
assert_array_equal(data['inputs']['imgs_2D'][0],
|
|
|
(raw_data['inputs']['imgs_2D'][0] - psr_imgs2d.mean) /
|
|
|
psr_imgs2d.std)
|
|
|
assert_array_equal(data['inputs']['imgs_2D'][1],
|
|
|
(raw_data['inputs']['imgs_2D'][1] - psr_imgs2d.mean) /
|
|
|
psr_imgs2d.std)
|
|
|
assert_array_equal(data['inputs']['imgs_3D'][0],
|
|
|
(raw_data['inputs']['imgs_3D'][0] - psr_imgs3d.mean) /
|
|
|
psr_imgs3d.std)
|
|
|
assert_array_equal(data['inputs']['imgs_3D'][1],
|
|
|
(raw_data['inputs']['imgs_3D'][1] - psr_imgs3d.mean) /
|
|
|
psr_imgs3d.std)
|
|
|
|