@@ -154,7 +154,7 @@ def test_int_to_int_consistency(self, input_dtype, output_dtype):
154
154
@pytest .mark .skipif (accimage is None , reason = "accimage not available" )
155
155
class TestAccImage :
156
156
def test_accimage_to_tensor (self ):
157
- trans = transforms .ToTensor ()
157
+ trans = transforms .PILToTensor ()
158
158
159
159
expected_output = trans (Image .open (GRACE_HOPPER ).convert ("RGB" ))
160
160
output = trans (accimage .Image (GRACE_HOPPER ))
@@ -174,7 +174,8 @@ def test_accimage_resize(self):
174
174
trans = transforms .Compose (
175
175
[
176
176
transforms .Resize (256 , interpolation = Image .LINEAR ),
177
- transforms .ToTensor (),
177
+ transforms .PILToTensor (),
178
+ transforms .ConvertImageDtype (dtype = torch .float ),
178
179
]
179
180
)
180
181
@@ -192,10 +193,7 @@ def test_accimage_resize(self):
192
193
193
194
def test_accimage_crop (self ):
194
195
trans = transforms .Compose (
195
- [
196
- transforms .CenterCrop (256 ),
197
- transforms .ToTensor (),
198
- ]
196
+ [transforms .CenterCrop (256 ), transforms .PILToTensor (), transforms .ConvertImageDtype (dtype = torch .float )]
199
197
)
200
198
201
199
# Checking if Compose, CenterCrop and ToTensor can be printed as string
@@ -457,26 +455,24 @@ class TestPad:
457
455
def test_pad (self ):
458
456
height = random .randint (10 , 32 ) * 2
459
457
width = random .randint (10 , 32 ) * 2
460
- img = torch .ones (3 , height , width )
458
+ img = torch .ones (3 , height , width , dtype = torch . uint8 )
461
459
padding = random .randint (1 , 20 )
462
460
fill = random .randint (1 , 50 )
463
461
result = transforms .Compose (
464
462
[
465
463
transforms .ToPILImage (),
466
464
transforms .Pad (padding , fill = fill ),
467
- transforms .ToTensor (),
465
+ transforms .PILToTensor (),
468
466
]
469
467
)(img )
470
468
assert result .size (1 ) == height + 2 * padding
471
469
assert result .size (2 ) == width + 2 * padding
472
470
# check that all elements in the padded region correspond
473
471
# to the pad value
474
- fill_v = fill / 255
475
- eps = 1e-5
476
472
h_padded = result [:, :padding , :]
477
473
w_padded = result [:, :, :padding ]
478
- torch .testing .assert_close (h_padded , torch .full_like (h_padded , fill_value = fill_v ), rtol = 0.0 , atol = eps )
479
- torch .testing .assert_close (w_padded , torch .full_like (w_padded , fill_value = fill_v ), rtol = 0.0 , atol = eps )
474
+ torch .testing .assert_close (h_padded , torch .full_like (h_padded , fill_value = fill ), rtol = 0.0 , atol = 0.0 )
475
+ torch .testing .assert_close (w_padded , torch .full_like (w_padded , fill_value = fill ), rtol = 0.0 , atol = 0.0 )
480
476
pytest .raises (ValueError , transforms .Pad (padding , fill = (1 , 2 )), transforms .ToPILImage ()(img ))
481
477
482
478
def test_pad_with_tuple_of_pad_values (self ):
@@ -509,23 +505,23 @@ def test_pad_with_non_constant_padding_modes(self):
509
505
# edge_pad, edge_pad, edge_pad, constant_pad, constant value added to leftmost edge, 0
510
506
edge_middle_slice = np .asarray (edge_padded_img ).transpose (2 , 0 , 1 )[0 ][17 ][:6 ]
511
507
assert_equal (edge_middle_slice , np .asarray ([200 , 200 , 200 , 200 , 1 , 0 ], dtype = np .uint8 ))
512
- assert transforms .ToTensor ()(edge_padded_img ).size () == (3 , 35 , 35 )
508
+ assert transforms .PILToTensor ()(edge_padded_img ).size () == (3 , 35 , 35 )
513
509
514
510
# Pad 3 to left/right, 2 to top/bottom
515
511
reflect_padded_img = F .pad (img , (3 , 2 ), padding_mode = "reflect" )
516
512
# First 6 elements of leftmost edge in the middle of the image, values are in order:
517
513
# reflect_pad, reflect_pad, reflect_pad, constant_pad, constant value added to leftmost edge, 0
518
514
reflect_middle_slice = np .asarray (reflect_padded_img ).transpose (2 , 0 , 1 )[0 ][17 ][:6 ]
519
515
assert_equal (reflect_middle_slice , np .asarray ([0 , 0 , 1 , 200 , 1 , 0 ], dtype = np .uint8 ))
520
- assert transforms .ToTensor ()(reflect_padded_img ).size () == (3 , 33 , 35 )
516
+ assert transforms .PILToTensor ()(reflect_padded_img ).size () == (3 , 33 , 35 )
521
517
522
518
# Pad 3 to left, 2 to top, 2 to right, 1 to bottom
523
519
symmetric_padded_img = F .pad (img , (3 , 2 , 2 , 1 ), padding_mode = "symmetric" )
524
520
# First 6 elements of leftmost edge in the middle of the image, values are in order:
525
521
# sym_pad, sym_pad, sym_pad, constant_pad, constant value added to leftmost edge, 0
526
522
symmetric_middle_slice = np .asarray (symmetric_padded_img ).transpose (2 , 0 , 1 )[0 ][17 ][:6 ]
527
523
assert_equal (symmetric_middle_slice , np .asarray ([0 , 1 , 200 , 200 , 1 , 0 ], dtype = np .uint8 ))
528
- assert transforms .ToTensor ()(symmetric_padded_img ).size () == (3 , 32 , 34 )
524
+ assert transforms .PILToTensor ()(symmetric_padded_img ).size () == (3 , 32 , 34 )
529
525
530
526
# Check negative padding explicitly for symmetric case, since it is not
531
527
# implemented for tensor case to compare to
@@ -535,7 +531,7 @@ def test_pad_with_non_constant_padding_modes(self):
535
531
symmetric_neg_middle_right = np .asarray (symmetric_padded_img_neg ).transpose (2 , 0 , 1 )[0 ][17 ][- 4 :]
536
532
assert_equal (symmetric_neg_middle_left , np .asarray ([1 , 0 , 0 ], dtype = np .uint8 ))
537
533
assert_equal (symmetric_neg_middle_right , np .asarray ([200 , 200 , 0 , 0 ], dtype = np .uint8 ))
538
- assert transforms .ToTensor ()(symmetric_padded_img_neg ).size () == (3 , 28 , 31 )
534
+ assert transforms .PILToTensor ()(symmetric_padded_img_neg ).size () == (3 , 28 , 31 )
539
535
540
536
def test_pad_raises_with_invalid_pad_sequence_len (self ):
541
537
with pytest .raises (ValueError ):
@@ -1625,12 +1621,12 @@ def test_random_crop():
1625
1621
width = random .randint (10 , 32 ) * 2
1626
1622
oheight = random .randint (5 , (height - 2 ) / 2 ) * 2
1627
1623
owidth = random .randint (5 , (width - 2 ) / 2 ) * 2
1628
- img = torch .ones (3 , height , width )
1624
+ img = torch .ones (3 , height , width , dtype = torch . uint8 )
1629
1625
result = transforms .Compose (
1630
1626
[
1631
1627
transforms .ToPILImage (),
1632
1628
transforms .RandomCrop ((oheight , owidth )),
1633
- transforms .ToTensor (),
1629
+ transforms .PILToTensor (),
1634
1630
]
1635
1631
)(img )
1636
1632
assert result .size (1 ) == oheight
@@ -1641,14 +1637,14 @@ def test_random_crop():
1641
1637
[
1642
1638
transforms .ToPILImage (),
1643
1639
transforms .RandomCrop ((oheight , owidth ), padding = padding ),
1644
- transforms .ToTensor (),
1640
+ transforms .PILToTensor (),
1645
1641
]
1646
1642
)(img )
1647
1643
assert result .size (1 ) == oheight
1648
1644
assert result .size (2 ) == owidth
1649
1645
1650
1646
result = transforms .Compose (
1651
- [transforms .ToPILImage (), transforms .RandomCrop ((height , width )), transforms .ToTensor ()]
1647
+ [transforms .ToPILImage (), transforms .RandomCrop ((height , width )), transforms .PILToTensor ()]
1652
1648
)(img )
1653
1649
assert result .size (1 ) == height
1654
1650
assert result .size (2 ) == width
@@ -1658,7 +1654,7 @@ def test_random_crop():
1658
1654
[
1659
1655
transforms .ToPILImage (),
1660
1656
transforms .RandomCrop ((height + 1 , width + 1 ), pad_if_needed = True ),
1661
- transforms .ToTensor (),
1657
+ transforms .PILToTensor (),
1662
1658
]
1663
1659
)(img )
1664
1660
assert result .size (1 ) == height + 1
@@ -1676,7 +1672,7 @@ def test_center_crop():
1676
1672
oheight = random .randint (5 , (height - 2 ) / 2 ) * 2
1677
1673
owidth = random .randint (5 , (width - 2 ) / 2 ) * 2
1678
1674
1679
- img = torch .ones (3 , height , width )
1675
+ img = torch .ones (3 , height , width , dtype = torch . uint8 )
1680
1676
oh1 = (height - oheight ) // 2
1681
1677
ow1 = (width - owidth ) // 2
1682
1678
imgnarrow = img [:, oh1 : oh1 + oheight , ow1 : ow1 + owidth ]
@@ -1685,7 +1681,7 @@ def test_center_crop():
1685
1681
[
1686
1682
transforms .ToPILImage (),
1687
1683
transforms .CenterCrop ((oheight , owidth )),
1688
- transforms .ToTensor (),
1684
+ transforms .PILToTensor (),
1689
1685
]
1690
1686
)(img )
1691
1687
assert result .sum () == 0
@@ -1695,7 +1691,7 @@ def test_center_crop():
1695
1691
[
1696
1692
transforms .ToPILImage (),
1697
1693
transforms .CenterCrop ((oheight , owidth )),
1698
- transforms .ToTensor (),
1694
+ transforms .PILToTensor (),
1699
1695
]
1700
1696
)(img )
1701
1697
sum1 = result .sum ()
@@ -1706,7 +1702,7 @@ def test_center_crop():
1706
1702
[
1707
1703
transforms .ToPILImage (),
1708
1704
transforms .CenterCrop ((oheight , owidth )),
1709
- transforms .ToTensor (),
1705
+ transforms .PILToTensor (),
1710
1706
]
1711
1707
)(img )
1712
1708
sum2 = result .sum ()
@@ -1729,12 +1725,12 @@ def test_center_crop_2(odd_image_size, delta, delta_width, delta_height):
1729
1725
delta_height *= delta
1730
1726
delta_width *= delta
1731
1727
1732
- img = torch .ones (3 , * input_image_size )
1728
+ img = torch .ones (3 , * input_image_size , dtype = torch . uint8 )
1733
1729
crop_size = (input_image_size [0 ] + delta_height , input_image_size [1 ] + delta_width )
1734
1730
1735
1731
# Test both transforms, one with PIL input and one with tensor
1736
1732
output_pil = transforms .Compose (
1737
- [transforms .ToPILImage (), transforms .CenterCrop (crop_size ), transforms .ToTensor ()],
1733
+ [transforms .ToPILImage (), transforms .CenterCrop (crop_size ), transforms .PILToTensor ()],
1738
1734
)(img )
1739
1735
assert output_pil .size ()[1 :3 ] == crop_size
1740
1736
@@ -1893,13 +1889,13 @@ def test_randomperspective():
1893
1889
perp = transforms .RandomPerspective ()
1894
1890
startpoints , endpoints = perp .get_params (width , height , 0.5 )
1895
1891
tr_img = F .perspective (img , startpoints , endpoints )
1896
- tr_img2 = F .to_tensor (F .perspective (tr_img , endpoints , startpoints ))
1897
- tr_img = F .to_tensor ( tr_img )
1892
+ tr_img2 = F .convert_image_dtype (F .pil_to_tensor ( F . perspective (tr_img , endpoints , startpoints ) ))
1893
+ tr_img = F .convert_image_dtype ( F . pil_to_tensor ( tr_img ) )
1898
1894
assert img .size [0 ] == width
1899
1895
assert img .size [1 ] == height
1900
- assert torch .nn .functional .mse_loss (tr_img , F . to_tensor ( img )) + 0.3 > torch . nn . functional . mse_loss (
1901
- tr_img2 , F .to_tensor ( img )
1902
- )
1896
+ assert torch .nn .functional .mse_loss (
1897
+ tr_img , F .convert_image_dtype ( F . pil_to_tensor ( img ) )
1898
+ ) + 0.3 > torch . nn . functional . mse_loss ( tr_img2 , F . convert_image_dtype ( F . pil_to_tensor ( img )))
1903
1899
1904
1900
1905
1901
@pytest .mark .parametrize ("seed" , range (10 ))
0 commit comments