@@ -678,14 +678,14 @@ def test_rotate(self):
678
678
batch_tensors , F .rotate , angle = 32 , resample = 0 , expand = True , center = center
679
679
)
680
680
681
- def _test_perspective (self , tensor , pil_img , scripted_tranform , test_configs ):
681
+ def _test_perspective (self , tensor , pil_img , scripted_transform , test_configs ):
682
682
dt = tensor .dtype
683
683
for r in [0 , ]:
684
684
for spoints , epoints in test_configs :
685
685
out_pil_img = F .perspective (pil_img , startpoints = spoints , endpoints = epoints , interpolation = r )
686
686
out_pil_tensor = torch .from_numpy (np .array (out_pil_img ).transpose ((2 , 0 , 1 )))
687
687
688
- for fn in [F .perspective , scripted_tranform ]:
688
+ for fn in [F .perspective , scripted_transform ]:
689
689
out_tensor = fn (tensor , startpoints = spoints , endpoints = epoints , interpolation = r ).cpu ()
690
690
691
691
if out_tensor .dtype != torch .uint8 :
@@ -710,7 +710,7 @@ def test_perspective(self):
710
710
from torchvision .transforms import RandomPerspective
711
711
712
712
data = [self ._create_data (26 , 34 , device = self .device ), self ._create_data (26 , 26 , device = self .device )]
713
- scripted_tranform = torch .jit .script (F .perspective )
713
+ scripted_transform = torch .jit .script (F .perspective )
714
714
715
715
for tensor , pil_img in data :
716
716
@@ -733,7 +733,7 @@ def test_perspective(self):
733
733
if dt is not None :
734
734
tensor = tensor .to (dtype = dt )
735
735
736
- self ._test_perspective (tensor , pil_img , scripted_tranform , test_configs )
736
+ self ._test_perspective (tensor , pil_img , scripted_transform , test_configs )
737
737
738
738
batch_tensors = self ._create_data_batch (26 , 36 , num_samples = 4 , device = self .device )
739
739
if dt is not None :
@@ -744,6 +744,114 @@ def test_perspective(self):
744
744
batch_tensors , F .perspective , startpoints = spoints , endpoints = epoints , interpolation = 0
745
745
)
746
746
747
+ def test_gaussian_blur (self ):
748
+ tensor = torch .from_numpy (
749
+ np .arange (3 * 10 * 12 , dtype = "uint8" ).reshape ((10 , 12 , 3 ))
750
+ ).permute (2 , 0 , 1 ).to (self .device )
751
+
752
+ scripted_transform = torch .jit .script (F .gaussian_blur )
753
+
754
+ true_cv2_results = {
755
+ # cv2.GaussianBlur(np_img, ksize=(3, 3), sigmaX=0.8)
756
+ "3_3_0.8" :
757
+ [19 , 20 , 21 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 ,
758
+ 43 , 44 , 45 , 46 , 47 , 48 , 49 , 49 , 50 , 51 , 37 , 38 , 39 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 ,
759
+ 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 68 , 69 , 70 , 73 , 74 , 75 , 75 , 76 , 77 ,
760
+ 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , 96 , 97 , 98 , 99 , 100 , 101 , 102 ,
761
+ 103 , 104 , 104 , 105 , 106 , 109 , 110 , 111 , 111 , 112 , 113 , 114 , 115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 ,
762
+ 123 , 124 , 125 , 126 , 127 , 128 , 129 , 130 , 131 , 132 , 133 , 134 , 135 , 136 , 137 , 138 , 139 , 140 , 140 , 141 ,
763
+ 142 , 145 , 146 , 147 , 147 , 148 , 149 , 150 , 151 , 152 , 153 , 154 , 155 , 156 , 157 , 158 , 159 , 160 , 161 , 162 ,
764
+ 163 , 164 , 165 , 166 , 167 , 168 , 169 , 170 , 171 , 172 , 173 , 174 , 175 , 176 , 176 , 177 , 178 , 181 , 182 , 183 ,
765
+ 183 , 184 , 185 , 186 , 187 , 188 , 189 , 190 , 191 , 192 , 193 , 194 , 195 , 196 , 197 , 198 , 199 , 200 , 201 , 202 ,
766
+ 203 , 204 , 205 , 206 , 207 , 208 , 209 , 210 , 211 , 212 , 212 , 213 , 214 , 217 , 189 , 190 , 204 , 174 , 175 , 176 ,
767
+ 162 , 163 , 164 , 165 , 166 , 167 , 168 , 169 , 170 , 171 , 172 , 173 , 174 , 175 , 176 , 177 , 178 , 179 , 180 , 181 ,
768
+ 182 , 183 , 184 , 185 , 186 , 187 , 187 , 188 , 189 , 192 , 130 , 131 , 162 , 93 , 94 , 95 , 64 , 65 , 66 , 67 , 68 , 69 ,
769
+ 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 89 , 90 , 91 , 94 , 66 , 67 ,
770
+ 81 , 51 , 52 , 53 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 ,
771
+ 61 , 62 , 63 , 64 , 64 , 65 , 66 , 52 , 53 , 54 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 69 ,
772
+ 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 82 , 83 , 84 ],
773
+ # cv2.GaussianBlur(np_img, ksize=(3, 3), sigmaX=0.5)
774
+ "3_3_0.5" :
775
+ [8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 ,
776
+ 35 , 36 , 37 , 38 , 39 , 40 , 40 , 41 , 42 , 37 , 38 , 39 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 ,
777
+ 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 68 , 69 , 70 , 73 , 74 , 75 , 75 , 76 , 77 , 78 , 79 , 80 ,
778
+ 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , 96 , 97 , 98 , 99 , 100 , 101 , 102 , 103 , 104 , 104 ,
779
+ 105 , 106 , 109 , 110 , 111 , 111 , 112 , 113 , 114 , 115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 , 123 , 124 , 125 , 126 ,
780
+ 127 , 128 , 129 , 130 , 131 , 132 , 133 , 134 , 135 , 136 , 137 , 138 , 139 , 140 , 140 , 141 , 142 , 145 , 146 , 147 , 147 ,
781
+ 148 , 149 , 150 , 151 , 152 , 153 , 154 , 155 , 156 , 157 , 158 , 159 , 160 , 161 , 162 , 163 , 164 , 165 , 166 , 167 , 168 ,
782
+ 169 , 170 , 171 , 172 , 173 , 174 , 175 , 176 , 176 , 177 , 178 , 181 , 182 , 183 , 183 , 184 , 185 , 186 , 187 , 188 , 189 ,
783
+ 190 , 191 , 192 , 193 , 194 , 195 , 196 , 197 , 198 , 199 , 200 , 201 , 202 , 203 , 204 , 205 , 206 , 207 , 208 , 209 , 210 ,
784
+ 211 , 212 , 212 , 213 , 214 , 217 , 212 , 213 , 216 , 196 , 197 , 198 , 196 , 197 , 198 , 199 , 200 , 201 , 202 , 203 , 204 ,
785
+ 205 , 206 , 207 , 208 , 209 , 210 , 211 , 212 , 213 , 214 , 215 , 216 , 217 , 218 , 219 , 220 , 221 , 221 , 222 , 223 , 226 ,
786
+ 184 , 185 , 207 , 48 , 49 , 50 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 ,
787
+ 50 , 51 , 52 , 53 , 54 , 55 , 55 , 56 , 57 , 60 , 55 , 56 , 59 , 39 , 40 , 41 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 ,
788
+ 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 64 , 65 , 66 , 61 , 62 , 63 , 63 , 64 , 65 , 66 , 67 , 68 ,
789
+ 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95
790
+ ],
791
+ # cv2.GaussianBlur(np_img, ksize=(3, 5), sigmaX=0.8)
792
+ "3_5_0.8" :
793
+ [21 , 22 , 23 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 ,
794
+ 46 , 47 , 48 , 49 , 50 , 51 , 52 , 51 , 52 , 53 , 39 , 40 , 41 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 ,
795
+ 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 69 , 70 , 71 , 73 , 74 , 75 , 75 , 76 , 77 ,
796
+ 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , 96 , 97 , 98 , 99 , 100 , 101 , 102 ,
797
+ 103 , 104 , 104 , 105 , 106 , 109 , 110 , 111 , 111 , 112 , 113 , 114 , 115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 ,
798
+ 123 , 124 , 125 , 126 , 127 , 128 , 129 , 130 , 131 , 132 , 133 , 134 , 135 , 136 , 137 , 138 , 139 , 140 , 140 , 141 ,
799
+ 142 , 145 , 146 , 147 , 147 , 148 , 149 , 150 , 151 , 152 , 153 , 154 , 155 , 156 , 157 , 158 , 159 , 160 , 161 , 162 ,
800
+ 163 , 164 , 165 , 166 , 167 , 168 , 169 , 170 , 171 , 172 , 173 , 174 , 175 , 176 , 176 , 177 , 178 , 181 , 180 , 181 ,
801
+ 182 , 179 , 180 , 181 , 181 , 182 , 183 , 184 , 185 , 186 , 187 , 188 , 189 , 190 , 191 , 192 , 193 , 194 , 195 , 196 ,
802
+ 197 , 198 , 199 , 200 , 201 , 202 , 203 , 204 , 205 , 206 , 206 , 207 , 208 , 211 , 185 , 186 , 199 , 170 , 171 , 172 ,
803
+ 159 , 160 , 161 , 162 , 163 , 164 , 165 , 166 , 167 , 168 , 169 , 170 , 171 , 172 , 173 , 174 , 175 , 176 , 177 , 178 ,
804
+ 179 , 180 , 181 , 182 , 183 , 184 , 184 , 185 , 186 , 189 , 129 , 130 , 161 , 95 , 96 , 97 , 67 , 68 , 69 , 70 , 71 , 72 ,
805
+ 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 92 , 93 , 94 , 96 , 69 , 70 ,
806
+ 83 , 54 , 55 , 56 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 ,
807
+ 65 , 66 , 67 , 68 , 68 , 69 , 70 , 62 , 57 , 58 , 60 , 55 , 56 , 57 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 ,
808
+ 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 , 79 , 80 , 80 , 81 , 82 ],
809
+ # cv2.GaussianBlur(np_img, ksize=(3, 5), sigmaX=0.5)
810
+ "3_5_0.5" :
811
+ [8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 ,
812
+ 34 , 35 , 36 , 37 , 38 , 39 , 40 , 40 , 41 , 42 , 37 , 38 , 39 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 ,
813
+ 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 68 , 69 , 70 , 73 , 74 , 75 , 75 , 76 , 77 ,
814
+ 78 , 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 , 96 , 97 , 98 , 99 , 100 , 101 , 102 ,
815
+ 103 , 104 , 104 , 105 , 106 , 109 , 110 , 111 , 111 , 112 , 113 , 114 , 115 , 116 , 117 , 118 , 119 , 120 , 121 , 122 ,
816
+ 123 , 124 , 125 , 126 , 127 , 128 , 129 , 130 , 131 , 132 , 133 , 134 , 135 , 136 , 137 , 138 , 139 , 140 , 140 , 141 ,
817
+ 142 , 145 , 146 , 147 , 147 , 148 , 149 , 150 , 151 , 152 , 153 , 154 , 155 , 156 , 157 , 158 , 159 , 160 , 161 , 162 ,
818
+ 163 , 164 , 165 , 166 , 167 , 168 , 169 , 170 , 171 , 172 , 173 , 174 , 175 , 176 , 176 , 177 , 178 , 181 , 182 , 183 ,
819
+ 183 , 184 , 185 , 186 , 187 , 188 , 189 , 190 , 191 , 192 , 193 , 194 , 195 , 196 , 197 , 198 , 199 , 200 , 201 , 202 ,
820
+ 203 , 204 , 205 , 206 , 207 , 208 , 209 , 210 , 211 , 212 , 212 , 213 , 214 , 217 , 212 , 213 , 216 , 196 , 197 , 198 ,
821
+ 196 , 197 , 198 , 199 , 200 , 201 , 202 , 203 , 204 , 205 , 206 , 207 , 208 , 209 , 210 , 211 , 212 , 213 , 214 , 215 ,
822
+ 216 , 217 , 218 , 219 , 220 , 221 , 221 , 222 , 223 , 226 , 184 , 185 , 207 , 48 , 49 , 50 , 30 , 31 , 32 , 33 , 34 , 35 ,
823
+ 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 55 , 56 , 57 , 60 , 55 , 56 ,
824
+ 59 , 39 , 40 , 41 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 , 54 , 55 , 56 , 57 , 58 , 59 , 60 ,
825
+ 61 , 62 , 63 , 64 , 64 , 65 , 66 , 61 , 62 , 63 , 63 , 64 , 65 , 66 , 67 , 68 , 69 , 70 , 71 , 72 , 73 , 74 , 75 , 76 , 77 , 78 ,
826
+ 79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 89 , 90 , 91 , 92 , 93 , 94 , 95 ]
827
+ }
828
+
829
+ for dt in [None , torch .float32 , torch .float64 , torch .float16 ]:
830
+ if dt == torch .float16 and torch .device (self .device ).type == "cpu" :
831
+ # skip float16 on CPU case
832
+ continue
833
+
834
+ if dt is not None :
835
+ tensor = tensor .to (dtype = dt )
836
+
837
+ for ksize in [(3 , 3 ), [3 , 5 ]]:
838
+ for sigma in [[0.5 , 0.5 ], (0.5 , 0.5 ), (0.8 , 0.8 )]:
839
+
840
+ _ksize = (ksize , ksize ) if isinstance (ksize , int ) else ksize
841
+ _sigma = sigma [0 ] if sigma is not None else None
842
+ true_out = torch .tensor (
843
+ true_cv2_results ["{}_{}_{}" .format (_ksize [0 ], _ksize [1 ], _sigma )]
844
+ ).reshape (10 , 12 , 3 ).permute (2 , 0 , 1 )
845
+
846
+ for fn in [F .gaussian_blur , scripted_transform ]:
847
+ out = fn (tensor , kernel_size = ksize , sigma = sigma )
848
+ self .assertEqual (true_out .shape , out .shape , msg = "{}, {}" .format (ksize , sigma ))
849
+ self .assertLessEqual (
850
+ torch .max (true_out .float () - out .float ()),
851
+ 1.0 ,
852
+ msg = "{}, {}" .format (ksize , sigma )
853
+ )
854
+
747
855
748
856
@unittest .skipIf (not torch .cuda .is_available (), reason = "Skip if no CUDA device" )
749
857
class CUDATester (Tester ):
0 commit comments