def test_color_jitter(self): jitter_param = { 'brightness_factor': torch.tensor(1.), 'contrast_factor': torch.tensor(1.), 'saturation_factor': torch.tensor(1.), 'hue_factor': torch.tensor(0.), 'order': torch.tensor([2, 3, 0, 1]) } input = torch.rand(3, 5, 5) # 3 x 5 x 5 expected = input expected_transform = torch.eye(3).unsqueeze(0) # 3 x 3 assert_allclose(F.apply_color_jitter(input, jitter_param), expected, atol=1e-4, rtol=1e-5) assert_allclose(F.apply_color_jitter(input, jitter_param, return_transform=True)[0], expected, atol=1e-4, rtol=1e-5) assert_allclose( F.apply_color_jitter(input, jitter_param, return_transform=True)[1], expected_transform)
def test_color_jitter_batch(self): batch_size = 2 jitter_param = { 'brightness_factor': torch.tensor([1.] * batch_size), 'contrast_factor': torch.tensor([1.] * batch_size), 'saturation_factor': torch.tensor([1.] * batch_size), 'hue_factor': torch.tensor([0.] * batch_size), 'order': torch.tensor([2, 3, 0, 1]) } input = torch.rand(batch_size, 3, 5, 5) # 2 x 3 x 5 x 5 expected = input expected_transform = torch.eye(3).unsqueeze(0).expand( (batch_size, 3, 3)) # 2 x 3 x 3 assert_allclose(F.apply_color_jitter(input, jitter_param), expected, atol=1e-4, rtol=1e-5) assert_allclose(F.apply_color_jitter(input, jitter_param, return_transform=True)[0], expected, atol=1e-4, rtol=1e-5) assert_allclose( F.apply_color_jitter(input, jitter_param, return_transform=True)[1], expected_transform)
def test_random_brightness(self): torch.manual_seed(42) jitter_param = { 'brightness_factor': torch.tensor([1.1529, 1.1660]), 'contrast_factor': torch.tensor([1., 1.]), 'hue_factor': torch.tensor([0., 0.]), 'saturation_factor': torch.tensor([1., 1.]), 'order': torch.tensor([2, 3, 0, 1]) } input = torch.tensor([[[[0.1, 0.2, 0.3], [0.6, 0.5, 0.4], [0.7, 0.8, 1.]]]]) # 1 x 1 x 3 x 3 input = input.repeat(2, 3, 1, 1) # 2 x 3 x 3 expected = torch.tensor([[[[0.2529, 0.3529, 0.4529], [0.7529, 0.6529, 0.5529], [0.8529, 0.9529, 1.0000]], [[0.2529, 0.3529, 0.4529], [0.7529, 0.6529, 0.5529], [0.8529, 0.9529, 1.0000]], [[0.2529, 0.3529, 0.4529], [0.7529, 0.6529, 0.5529], [0.8529, 0.9529, 1.0000]]], [[[0.2660, 0.3660, 0.4660], [0.7660, 0.6660, 0.5660], [0.8660, 0.9660, 1.0000]], [[0.2660, 0.3660, 0.4660], [0.7660, 0.6660, 0.5660], [0.8660, 0.9660, 1.0000]], [[0.2660, 0.3660, 0.4660], [0.7660, 0.6660, 0.5660], [0.8660, 0.9660, 1.0000]]]]) # 1 x 1 x 3 x 3 assert_allclose(F.apply_color_jitter(input, jitter_param), expected)
def test_random_contrast(self): torch.manual_seed(42) jitter_param = { 'brightness_factor': torch.tensor([1.0, 1.0]), 'contrast_factor': torch.tensor([0.9531, 1.1837]), 'hue_factor': torch.tensor([0.0, 0.0]), 'saturation_factor': torch.tensor([1.0, 1.0]), 'order': torch.tensor([2, 3, 0, 1]), } input = torch.tensor([[[[0.1, 0.2, 0.3], [0.6, 0.5, 0.4], [0.7, 0.8, 1.0]]]]) # 1 x 1 x 3 x 3 input = input.repeat(2, 3, 1, 1) # 2 x 3 x 3 expected = torch.tensor( [ [ [[0.0953, 0.1906, 0.2859], [0.5719, 0.4766, 0.3813], [0.6672, 0.7625, 0.9531]], [[0.0953, 0.1906, 0.2859], [0.5719, 0.4766, 0.3813], [0.6672, 0.7625, 0.9531]], [[0.0953, 0.1906, 0.2859], [0.5719, 0.4766, 0.3813], [0.6672, 0.7625, 0.9531]], ], [ [[0.1184, 0.2367, 0.3551], [0.7102, 0.5919, 0.4735], [0.8286, 0.9470, 1.0000]], [[0.1184, 0.2367, 0.3551], [0.7102, 0.5919, 0.4735], [0.8286, 0.9470, 1.0000]], [[0.1184, 0.2367, 0.3551], [0.7102, 0.5919, 0.4735], [0.8286, 0.9470, 1.0000]], ], ] ) assert_allclose(F.apply_color_jitter(input, jitter_param), expected, atol=1e-4, rtol=1e-5)
def test_color_jitter_batch(self): batch_size = 2 jitter_param = { 'brightness_factor': torch.tensor([1.0] * batch_size), 'contrast_factor': torch.tensor([1.0] * batch_size), 'saturation_factor': torch.tensor([1.0] * batch_size), 'hue_factor': torch.tensor([0.0] * batch_size), 'order': torch.tensor([2, 3, 0, 1]), } input = torch.rand(batch_size, 3, 5, 5) # 2 x 3 x 5 x 5 expected = input assert_allclose(F.apply_color_jitter(input, jitter_param), expected, atol=1e-4, rtol=1e-5)
def test_random_saturation(self): torch.manual_seed(42) jitter_param = { 'brightness_factor': torch.tensor([1., 1.]), 'contrast_factor': torch.tensor([1., 1.]), 'hue_factor': torch.tensor([0., 0.]), 'saturation_factor': torch.tensor([0.9026, 1.1175]), 'order': torch.tensor([2, 3, 0, 1]) } input = torch.tensor([[[[0.1, 0.2, 0.3], [0.6, 0.5, 0.4], [0.7, 0.8, 1.]], [[1.0, 0.5, 0.6], [0.6, 0.3, 0.2], [0.8, 0.1, 0.2]], [[0.6, 0.8, 0.7], [0.9, 0.3, 0.2], [0.8, 0.4, .5]]]]) # 1 x 1 x 3 x 3 input = input.repeat(2, 1, 1, 1) # 2 x 3 x 3 expected = torch.tensor([[[[1.8763e-01, 2.5842e-01, 3.3895e-01], [6.2921e-01, 5.0000e-01, 4.0000e-01], [7.0974e-01, 8.0000e-01, 1.0000e+00]], [[1.0000e+00, 5.2921e-01, 6.0974e-01], [6.2921e-01, 3.1947e-01, 2.1947e-01], [8.0000e-01, 1.6816e-01, 2.7790e-01]], [[6.3895e-01, 8.0000e-01, 7.0000e-01], [9.0000e-01, 3.1947e-01, 2.1947e-01], [8.0000e-01, 4.3895e-01, 5.4869e-01]]], [[[1.1921e-07, 1.2953e-01, 2.5302e-01], [5.6476e-01, 5.0000e-01, 4.0000e-01], [6.8825e-01, 8.0000e-01, 1.0000e+00]], [[1.0000e+00, 4.6476e-01, 5.8825e-01], [5.6476e-01, 2.7651e-01, 1.7651e-01], [8.0000e-01, 1.7781e-02, 1.0603e-01]], [[5.5556e-01, 8.0000e-01, 7.0000e-01], [9.0000e-01, 2.7651e-01, 1.7651e-01], [8.0000e-01, 3.5302e-01, 4.4127e-01]]]]) assert_allclose(F.apply_color_jitter(input, jitter_param), expected, atol=1e-4, rtol=1e-5)
def test_color_jitter(self): jitter_param = { 'brightness_factor': torch.tensor(1.0), 'contrast_factor': torch.tensor(1.0), 'saturation_factor': torch.tensor(1.0), 'hue_factor': torch.tensor(0.0), 'order': torch.tensor([2, 3, 0, 1]), } input = torch.rand(3, 5, 5) # 3 x 5 x 5 expected = input assert_allclose(F.apply_color_jitter(input[None], jitter_param), expected[None], atol=1e-4, rtol=1e-5)
def test_random_hue(self): torch.manual_seed(42) jitter_param = { 'brightness_factor': torch.tensor([1., 1.]), 'contrast_factor': torch.tensor([1., 1.]), 'hue_factor': torch.tensor([-0.0438 / 2 / pi, 0.0404 / 2 / pi]), 'saturation_factor': torch.tensor([1., 1.]), 'order': torch.tensor([2, 3, 0, 1]) } input = torch.tensor([[[[0.1, 0.2, 0.3], [0.6, 0.5, 0.4], [0.7, 0.8, 1.]], [[1.0, 0.5, 0.6], [0.6, 0.3, 0.2], [0.8, 0.1, 0.2]], [[0.6, 0.8, 0.7], [0.9, 0.3, 0.2], [0.8, 0.4, .5]]]]) # 1 x 1 x 3 x 3 input = input.repeat(2, 1, 1, 1) # 2 x 3 x 3 expected = torch.tensor([[[[0.1000, 0.2000, 0.3000], [0.6000, 0.5000, 0.4000], [0.7000, 0.8000, 1.0000]], [[1.0000, 0.5251, 0.6167], [0.6126, 0.3000, 0.2000], [0.8000, 0.1000, 0.2000]], [[0.5623, 0.8000, 0.7000], [0.9000, 0.3084, 0.2084], [0.7958, 0.4293, 0.5335]]], [[[0.1000, 0.2000, 0.3000], [0.6116, 0.5000, 0.4000], [0.7000, 0.8000, 1.0000]], [[1.0000, 0.4769, 0.5846], [0.6000, 0.3077, 0.2077], [0.7961, 0.1000, 0.2000]], [[0.6347, 0.8000, 0.7000], [0.9000, 0.3000, 0.2000], [0.8000, 0.3730, 0.4692]]]]) assert_allclose(F.apply_color_jitter(input, jitter_param), expected, atol=1e-4, rtol=1e-5)