Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
vision
Commits
f7b4cb04
"git@developer.sourcefind.cn:OpenDAS/pytorch3d.git" did not exist on "ebdbfde0cee9d6adca2c0508f1a664c13d3cd65a"
Unverified
Commit
f7b4cb04
authored
Jun 03, 2021
by
Drishti Bhasin
Committed by
GitHub
Jun 03, 2021
Browse files
Port test pad in test_transforms to pytest (#3954)
parent
7daa90ac
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
107 additions
and
104 deletions
+107
-104
test/test_transforms.py
test/test_transforms.py
+107
-104
No files found.
test/test_transforms.py
View file @
f7b4cb04
...
@@ -403,110 +403,6 @@ class Tester(unittest.TestCase):
...
@@ -403,110 +403,6 @@ class Tester(unittest.TestCase):
with
self
.
assertRaisesRegex
(
ValueError
,
r
"Required crop size .+ is larger then input image size .+"
):
with
self
.
assertRaisesRegex
(
ValueError
,
r
"Required crop size .+ is larger then input image size .+"
):
t
(
img
)
t
(
img
)
def
test_pad
(
self
):
height
=
random
.
randint
(
10
,
32
)
*
2
width
=
random
.
randint
(
10
,
32
)
*
2
img
=
torch
.
ones
(
3
,
height
,
width
)
padding
=
random
.
randint
(
1
,
20
)
fill
=
random
.
randint
(
1
,
50
)
result
=
transforms
.
Compose
([
transforms
.
ToPILImage
(),
transforms
.
Pad
(
padding
,
fill
=
fill
),
transforms
.
ToTensor
(),
])(
img
)
self
.
assertEqual
(
result
.
size
(
1
),
height
+
2
*
padding
)
self
.
assertEqual
(
result
.
size
(
2
),
width
+
2
*
padding
)
# check that all elements in the padded region correspond
# to the pad value
fill_v
=
fill
/
255
eps
=
1e-5
h_padded
=
result
[:,
:
padding
,
:]
w_padded
=
result
[:,
:,
:
padding
]
torch
.
testing
.
assert_close
(
h_padded
,
torch
.
full_like
(
h_padded
,
fill_value
=
fill_v
),
check_stride
=
False
,
rtol
=
0.0
,
atol
=
eps
)
torch
.
testing
.
assert_close
(
w_padded
,
torch
.
full_like
(
w_padded
,
fill_value
=
fill_v
),
check_stride
=
False
,
rtol
=
0.0
,
atol
=
eps
)
self
.
assertRaises
(
ValueError
,
transforms
.
Pad
(
padding
,
fill
=
(
1
,
2
)),
transforms
.
ToPILImage
()(
img
))
def
test_pad_with_tuple_of_pad_values
(
self
):
height
=
random
.
randint
(
10
,
32
)
*
2
width
=
random
.
randint
(
10
,
32
)
*
2
img
=
transforms
.
ToPILImage
()(
torch
.
ones
(
3
,
height
,
width
))
padding
=
tuple
([
random
.
randint
(
1
,
20
)
for
_
in
range
(
2
)])
output
=
transforms
.
Pad
(
padding
)(
img
)
self
.
assertEqual
(
output
.
size
,
(
width
+
padding
[
0
]
*
2
,
height
+
padding
[
1
]
*
2
))
padding
=
tuple
([
random
.
randint
(
1
,
20
)
for
_
in
range
(
4
)])
output
=
transforms
.
Pad
(
padding
)(
img
)
self
.
assertEqual
(
output
.
size
[
0
],
width
+
padding
[
0
]
+
padding
[
2
])
self
.
assertEqual
(
output
.
size
[
1
],
height
+
padding
[
1
]
+
padding
[
3
])
# Checking if Padding can be printed as string
transforms
.
Pad
(
padding
).
__repr__
()
def
test_pad_with_non_constant_padding_modes
(
self
):
"""Unit tests for edge, reflect, symmetric padding"""
img
=
torch
.
zeros
(
3
,
27
,
27
).
byte
()
img
[:,
:,
0
]
=
1
# Constant value added to leftmost edge
img
=
transforms
.
ToPILImage
()(
img
)
img
=
F
.
pad
(
img
,
1
,
(
200
,
200
,
200
))
# pad 3 to all sidess
edge_padded_img
=
F
.
pad
(
img
,
3
,
padding_mode
=
'edge'
)
# First 6 elements of leftmost edge in the middle of the image, values are in order:
# edge_pad, edge_pad, edge_pad, constant_pad, constant value added to leftmost edge, 0
edge_middle_slice
=
np
.
asarray
(
edge_padded_img
).
transpose
(
2
,
0
,
1
)[
0
][
17
][:
6
]
assert_equal
(
edge_middle_slice
,
np
.
asarray
([
200
,
200
,
200
,
200
,
1
,
0
],
dtype
=
np
.
uint8
),
check_stride
=
False
)
self
.
assertEqual
(
transforms
.
ToTensor
()(
edge_padded_img
).
size
(),
(
3
,
35
,
35
))
# Pad 3 to left/right, 2 to top/bottom
reflect_padded_img
=
F
.
pad
(
img
,
(
3
,
2
),
padding_mode
=
'reflect'
)
# First 6 elements of leftmost edge in the middle of the image, values are in order:
# reflect_pad, reflect_pad, reflect_pad, constant_pad, constant value added to leftmost edge, 0
reflect_middle_slice
=
np
.
asarray
(
reflect_padded_img
).
transpose
(
2
,
0
,
1
)[
0
][
17
][:
6
]
assert_equal
(
reflect_middle_slice
,
np
.
asarray
([
0
,
0
,
1
,
200
,
1
,
0
],
dtype
=
np
.
uint8
),
check_stride
=
False
)
self
.
assertEqual
(
transforms
.
ToTensor
()(
reflect_padded_img
).
size
(),
(
3
,
33
,
35
))
# Pad 3 to left, 2 to top, 2 to right, 1 to bottom
symmetric_padded_img
=
F
.
pad
(
img
,
(
3
,
2
,
2
,
1
),
padding_mode
=
'symmetric'
)
# First 6 elements of leftmost edge in the middle of the image, values are in order:
# sym_pad, sym_pad, sym_pad, constant_pad, constant value added to leftmost edge, 0
symmetric_middle_slice
=
np
.
asarray
(
symmetric_padded_img
).
transpose
(
2
,
0
,
1
)[
0
][
17
][:
6
]
assert_equal
(
symmetric_middle_slice
,
np
.
asarray
([
0
,
1
,
200
,
200
,
1
,
0
],
dtype
=
np
.
uint8
),
check_stride
=
False
)
self
.
assertEqual
(
transforms
.
ToTensor
()(
symmetric_padded_img
).
size
(),
(
3
,
32
,
34
))
# Check negative padding explicitly for symmetric case, since it is not
# implemented for tensor case to compare to
# Crop 1 to left, pad 2 to top, pad 3 to right, crop 3 to bottom
symmetric_padded_img_neg
=
F
.
pad
(
img
,
(
-
1
,
2
,
3
,
-
3
),
padding_mode
=
'symmetric'
)
symmetric_neg_middle_left
=
np
.
asarray
(
symmetric_padded_img_neg
).
transpose
(
2
,
0
,
1
)[
0
][
17
][:
3
]
symmetric_neg_middle_right
=
np
.
asarray
(
symmetric_padded_img_neg
).
transpose
(
2
,
0
,
1
)[
0
][
17
][
-
4
:]
assert_equal
(
symmetric_neg_middle_left
,
np
.
asarray
([
1
,
0
,
0
],
dtype
=
np
.
uint8
),
check_stride
=
False
)
assert_equal
(
symmetric_neg_middle_right
,
np
.
asarray
([
200
,
200
,
0
,
0
],
dtype
=
np
.
uint8
),
check_stride
=
False
)
self
.
assertEqual
(
transforms
.
ToTensor
()(
symmetric_padded_img_neg
).
size
(),
(
3
,
28
,
31
))
def
test_pad_raises_with_invalid_pad_sequence_len
(
self
):
with
self
.
assertRaises
(
ValueError
):
transforms
.
Pad
(())
with
self
.
assertRaises
(
ValueError
):
transforms
.
Pad
((
1
,
2
,
3
))
with
self
.
assertRaises
(
ValueError
):
transforms
.
Pad
((
1
,
2
,
3
,
4
,
5
))
def
test_pad_with_mode_F_images
(
self
):
pad
=
2
transform
=
transforms
.
Pad
(
pad
)
img
=
Image
.
new
(
"F"
,
(
10
,
10
))
padded_img
=
transform
(
img
)
self
.
assertSequenceEqual
(
padded_img
.
size
,
[
edge_size
+
2
*
pad
for
edge_size
in
img
.
size
])
def
test_lambda
(
self
):
def
test_lambda
(
self
):
trans
=
transforms
.
Lambda
(
lambda
x
:
x
.
add
(
10
))
trans
=
transforms
.
Lambda
(
lambda
x
:
x
.
add
(
10
))
x
=
torch
.
randn
(
10
)
x
=
torch
.
randn
(
10
)
...
@@ -1831,6 +1727,113 @@ class Tester(unittest.TestCase):
...
@@ -1831,6 +1727,113 @@ class Tester(unittest.TestCase):
t
.
__repr__
()
t
.
__repr__
()
class
TestPad
:
def
test_pad
(
self
):
height
=
random
.
randint
(
10
,
32
)
*
2
width
=
random
.
randint
(
10
,
32
)
*
2
img
=
torch
.
ones
(
3
,
height
,
width
)
padding
=
random
.
randint
(
1
,
20
)
fill
=
random
.
randint
(
1
,
50
)
result
=
transforms
.
Compose
([
transforms
.
ToPILImage
(),
transforms
.
Pad
(
padding
,
fill
=
fill
),
transforms
.
ToTensor
(),
])(
img
)
assert
result
.
size
(
1
)
==
height
+
2
*
padding
assert
result
.
size
(
2
)
==
width
+
2
*
padding
# check that all elements in the padded region correspond
# to the pad value
fill_v
=
fill
/
255
eps
=
1e-5
h_padded
=
result
[:,
:
padding
,
:]
w_padded
=
result
[:,
:,
:
padding
]
torch
.
testing
.
assert_close
(
h_padded
,
torch
.
full_like
(
h_padded
,
fill_value
=
fill_v
),
check_stride
=
False
,
rtol
=
0.0
,
atol
=
eps
)
torch
.
testing
.
assert_close
(
w_padded
,
torch
.
full_like
(
w_padded
,
fill_value
=
fill_v
),
check_stride
=
False
,
rtol
=
0.0
,
atol
=
eps
)
pytest
.
raises
(
ValueError
,
transforms
.
Pad
(
padding
,
fill
=
(
1
,
2
)),
transforms
.
ToPILImage
()(
img
))
def
test_pad_with_tuple_of_pad_values
(
self
):
height
=
random
.
randint
(
10
,
32
)
*
2
width
=
random
.
randint
(
10
,
32
)
*
2
img
=
transforms
.
ToPILImage
()(
torch
.
ones
(
3
,
height
,
width
))
padding
=
tuple
([
random
.
randint
(
1
,
20
)
for
_
in
range
(
2
)])
output
=
transforms
.
Pad
(
padding
)(
img
)
assert
output
.
size
==
(
width
+
padding
[
0
]
*
2
,
height
+
padding
[
1
]
*
2
)
padding
=
tuple
([
random
.
randint
(
1
,
20
)
for
_
in
range
(
4
)])
output
=
transforms
.
Pad
(
padding
)(
img
)
assert
output
.
size
[
0
]
==
width
+
padding
[
0
]
+
padding
[
2
]
assert
output
.
size
[
1
]
==
height
+
padding
[
1
]
+
padding
[
3
]
# Checking if Padding can be printed as string
transforms
.
Pad
(
padding
).
__repr__
()
def
test_pad_with_non_constant_padding_modes
(
self
):
"""Unit tests for edge, reflect, symmetric padding"""
img
=
torch
.
zeros
(
3
,
27
,
27
).
byte
()
img
[:,
:,
0
]
=
1
# Constant value added to leftmost edge
img
=
transforms
.
ToPILImage
()(
img
)
img
=
F
.
pad
(
img
,
1
,
(
200
,
200
,
200
))
# pad 3 to all sidess
edge_padded_img
=
F
.
pad
(
img
,
3
,
padding_mode
=
'edge'
)
# First 6 elements of leftmost edge in the middle of the image, values are in order:
# edge_pad, edge_pad, edge_pad, constant_pad, constant value added to leftmost edge, 0
edge_middle_slice
=
np
.
asarray
(
edge_padded_img
).
transpose
(
2
,
0
,
1
)[
0
][
17
][:
6
]
assert_equal
(
edge_middle_slice
,
np
.
asarray
([
200
,
200
,
200
,
200
,
1
,
0
],
dtype
=
np
.
uint8
),
check_stride
=
False
)
assert
transforms
.
ToTensor
()(
edge_padded_img
).
size
()
==
(
3
,
35
,
35
)
# Pad 3 to left/right, 2 to top/bottom
reflect_padded_img
=
F
.
pad
(
img
,
(
3
,
2
),
padding_mode
=
'reflect'
)
# First 6 elements of leftmost edge in the middle of the image, values are in order:
# reflect_pad, reflect_pad, reflect_pad, constant_pad, constant value added to leftmost edge, 0
reflect_middle_slice
=
np
.
asarray
(
reflect_padded_img
).
transpose
(
2
,
0
,
1
)[
0
][
17
][:
6
]
assert_equal
(
reflect_middle_slice
,
np
.
asarray
([
0
,
0
,
1
,
200
,
1
,
0
],
dtype
=
np
.
uint8
),
check_stride
=
False
)
assert
transforms
.
ToTensor
()(
reflect_padded_img
).
size
()
==
(
3
,
33
,
35
)
# Pad 3 to left, 2 to top, 2 to right, 1 to bottom
symmetric_padded_img
=
F
.
pad
(
img
,
(
3
,
2
,
2
,
1
),
padding_mode
=
'symmetric'
)
# First 6 elements of leftmost edge in the middle of the image, values are in order:
# sym_pad, sym_pad, sym_pad, constant_pad, constant value added to leftmost edge, 0
symmetric_middle_slice
=
np
.
asarray
(
symmetric_padded_img
).
transpose
(
2
,
0
,
1
)[
0
][
17
][:
6
]
assert_equal
(
symmetric_middle_slice
,
np
.
asarray
([
0
,
1
,
200
,
200
,
1
,
0
],
dtype
=
np
.
uint8
),
check_stride
=
False
)
assert
transforms
.
ToTensor
()(
symmetric_padded_img
).
size
()
==
(
3
,
32
,
34
)
# Check negative padding explicitly for symmetric case, since it is not
# implemented for tensor case to compare to
# Crop 1 to left, pad 2 to top, pad 3 to right, crop 3 to bottom
symmetric_padded_img_neg
=
F
.
pad
(
img
,
(
-
1
,
2
,
3
,
-
3
),
padding_mode
=
'symmetric'
)
symmetric_neg_middle_left
=
np
.
asarray
(
symmetric_padded_img_neg
).
transpose
(
2
,
0
,
1
)[
0
][
17
][:
3
]
symmetric_neg_middle_right
=
np
.
asarray
(
symmetric_padded_img_neg
).
transpose
(
2
,
0
,
1
)[
0
][
17
][
-
4
:]
assert_equal
(
symmetric_neg_middle_left
,
np
.
asarray
([
1
,
0
,
0
],
dtype
=
np
.
uint8
),
check_stride
=
False
)
assert_equal
(
symmetric_neg_middle_right
,
np
.
asarray
([
200
,
200
,
0
,
0
],
dtype
=
np
.
uint8
),
check_stride
=
False
)
assert
transforms
.
ToTensor
()(
symmetric_padded_img_neg
).
size
()
==
(
3
,
28
,
31
)
def
test_pad_raises_with_invalid_pad_sequence_len
(
self
):
with
pytest
.
raises
(
ValueError
):
transforms
.
Pad
(())
with
pytest
.
raises
(
ValueError
):
transforms
.
Pad
((
1
,
2
,
3
))
with
pytest
.
raises
(
ValueError
):
transforms
.
Pad
((
1
,
2
,
3
,
4
,
5
))
def
test_pad_with_mode_F_images
(
self
):
pad
=
2
transform
=
transforms
.
Pad
(
pad
)
img
=
Image
.
new
(
"F"
,
(
10
,
10
))
padded_img
=
transform
(
img
)
assert_equal
(
padded_img
.
size
,
[
edge_size
+
2
*
pad
for
edge_size
in
img
.
size
],
check_stride
=
False
)
def
test_adjust_brightness
():
def
test_adjust_brightness
():
x_shape
=
[
2
,
2
,
3
]
x_shape
=
[
2
,
2
,
3
]
x_data
=
[
0
,
5
,
13
,
54
,
135
,
226
,
37
,
8
,
234
,
90
,
255
,
1
]
x_data
=
[
0
,
5
,
13
,
54
,
135
,
226
,
37
,
8
,
234
,
90
,
255
,
1
]
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment