Skip to content

Commit 178ebc8

Browse files
Fix AttributeError in 'PerceptualLoss' (#7693)
Fixes #7692 ### Description Fix AttributeError in 'PerceptualLoss' ### Types of changes <!--- Put an `x` in all the boxes that apply, and remove the not applicable items --> - [x] Non-breaking change (fix or new feature that would not break existing functionality). - [ ] Breaking change (fix or new feature that would cause existing functionality to change). - [ ] New tests added to cover the changes. - [ ] Integration tests passed locally by running `./runtests.sh -f -u --net --coverage`. - [ ] Quick tests passed locally by running `./runtests.sh --quick --unittests --disttests`. - [ ] In-line docstrings updated. - [ ] Documentation updated, tested `make html` command in the `docs/` folder. --------- Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
1 parent c6bf8e9 commit 178ebc8

3 files changed

Lines changed: 18 additions & 18 deletions

File tree

monai/losses/perceptual.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ def __init__(
125125
self.perceptual_function = LPIPS(pretrained=pretrained, net=network_type, verbose=False)
126126
self.is_fake_3d = is_fake_3d
127127
self.fake_3d_ratio = fake_3d_ratio
128+
self.channel_wise = channel_wise
128129

129130
def _calculate_axis_loss(self, input: torch.Tensor, target: torch.Tensor, spatial_axis: int) -> torch.Tensor:
130131
"""

tests/test_clip_intensity_percentiles.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def test_hard_clipping_two_sided(self, p):
3131
result = hard_clipper(im)
3232
lower, upper = percentile(im, (5, 95))
3333
expected = clip(convert_to_tensor(im), lower, upper)
34-
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0)
34+
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0)
3535

3636
@parameterized.expand([[p] for p in TEST_NDARRAYS])
3737
def test_hard_clipping_one_sided_high(self, p):
@@ -40,7 +40,7 @@ def test_hard_clipping_one_sided_high(self, p):
4040
result = hard_clipper(im)
4141
lower, upper = percentile(im, (0, 95))
4242
expected = clip(im, lower, upper)
43-
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0)
43+
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0)
4444

4545
@parameterized.expand([[p] for p in TEST_NDARRAYS])
4646
def test_hard_clipping_one_sided_low(self, p):
@@ -49,7 +49,7 @@ def test_hard_clipping_one_sided_low(self, p):
4949
result = hard_clipper(im)
5050
lower, upper = percentile(im, (5, 100))
5151
expected = clip(im, lower, upper)
52-
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0)
52+
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0)
5353

5454
@parameterized.expand([[p] for p in TEST_NDARRAYS])
5555
def test_soft_clipping_two_sided(self, p):
@@ -89,7 +89,7 @@ def test_channel_wise(self, p):
8989
for i, c in enumerate(im):
9090
lower, upper = percentile(c, (5, 95))
9191
expected = clip(c, lower, upper)
92-
assert_allclose(result[i], p(expected), type_test="tensor", rtol=1e-7, atol=0)
92+
assert_allclose(result[i], p(expected), type_test="tensor", rtol=1e-4, atol=0)
9393

9494
def test_ill_sharpness_factor(self):
9595
with self.assertRaises(ValueError):
@@ -121,7 +121,7 @@ def test_hard_clipping_two_sided(self, p):
121121
result = hard_clipper(im)
122122
lower, upper = percentile(im, (5, 95))
123123
expected = clip(im, lower, upper)
124-
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0)
124+
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0)
125125

126126
@parameterized.expand([[p] for p in TEST_NDARRAYS])
127127
def test_hard_clipping_one_sided_high(self, p):
@@ -130,7 +130,7 @@ def test_hard_clipping_one_sided_high(self, p):
130130
result = hard_clipper(im)
131131
lower, upper = percentile(im, (0, 95))
132132
expected = clip(im, lower, upper)
133-
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0)
133+
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0)
134134

135135
@parameterized.expand([[p] for p in TEST_NDARRAYS])
136136
def test_hard_clipping_one_sided_low(self, p):
@@ -139,7 +139,7 @@ def test_hard_clipping_one_sided_low(self, p):
139139
result = hard_clipper(im)
140140
lower, upper = percentile(im, (5, 100))
141141
expected = clip(im, lower, upper)
142-
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-7, atol=0)
142+
assert_allclose(result, p(expected), type_test="tensor", rtol=1e-4, atol=0)
143143

144144
@parameterized.expand([[p] for p in TEST_NDARRAYS])
145145
def test_soft_clipping_two_sided(self, p):
@@ -179,7 +179,7 @@ def test_channel_wise(self, p):
179179
for i, c in enumerate(im):
180180
lower, upper = percentile(c, (5, 95))
181181
expected = clip(c, lower, upper)
182-
assert_allclose(result[i], p(expected), type_test="tensor", rtol=1e-7, atol=0)
182+
assert_allclose(result[i], p(expected), type_test="tensor", rtol=1e-4, atol=0)
183183

184184

185185
if __name__ == "__main__":

tests/test_clip_intensity_percentilesd.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
from monai.transforms import ClipIntensityPercentilesd
2020
from monai.transforms.utils import soft_clip
2121
from monai.transforms.utils_pytorch_numpy_unification import clip, percentile
22-
from monai.utils.type_conversion import convert_to_tensor
2322
from tests.utils import TEST_NDARRAYS, NumpyImageTestCase2D, NumpyImageTestCase3D, assert_allclose
2423

2524

@@ -32,8 +31,8 @@ def test_hard_clipping_two_sided(self, p):
3231
im = p(self.imt)
3332
result = hard_clipper({key: im})
3433
lower, upper = percentile(im, (5, 95))
35-
expected = clip(convert_to_tensor(im), lower, upper)
36-
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0)
34+
expected = clip(im, lower, upper)
35+
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0)
3736

3837
@parameterized.expand([[p] for p in TEST_NDARRAYS])
3938
def test_hard_clipping_one_sided_high(self, p):
@@ -43,7 +42,7 @@ def test_hard_clipping_one_sided_high(self, p):
4342
result = hard_clipper({key: im})
4443
lower, upper = percentile(im, (0, 95))
4544
expected = clip(im, lower, upper)
46-
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0)
45+
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0)
4746

4847
@parameterized.expand([[p] for p in TEST_NDARRAYS])
4948
def test_hard_clipping_one_sided_low(self, p):
@@ -53,7 +52,7 @@ def test_hard_clipping_one_sided_low(self, p):
5352
result = hard_clipper({key: im})
5453
lower, upper = percentile(im, (5, 100))
5554
expected = clip(im, lower, upper)
56-
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0)
55+
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0)
5756

5857
@parameterized.expand([[p] for p in TEST_NDARRAYS])
5958
def test_soft_clipping_two_sided(self, p):
@@ -97,7 +96,7 @@ def test_channel_wise(self, p):
9796
for i, c in enumerate(im):
9897
lower, upper = percentile(c, (5, 95))
9998
expected = clip(c, lower, upper)
100-
assert_allclose(result[key][i], p(expected), type_test="tensor", rtol=1e-7, atol=0)
99+
assert_allclose(result[key][i], p(expected), type_test="tensor", rtol=1e-4, atol=0)
101100

102101
def test_ill_sharpness_factor(self):
103102
key = "img"
@@ -135,7 +134,7 @@ def test_hard_clipping_two_sided(self, p):
135134
result = hard_clipper({key: im})
136135
lower, upper = percentile(im, (5, 95))
137136
expected = clip(im, lower, upper)
138-
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0)
137+
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0)
139138

140139
@parameterized.expand([[p] for p in TEST_NDARRAYS])
141140
def test_hard_clipping_one_sided_high(self, p):
@@ -145,7 +144,7 @@ def test_hard_clipping_one_sided_high(self, p):
145144
result = hard_clipper({key: im})
146145
lower, upper = percentile(im, (0, 95))
147146
expected = clip(im, lower, upper)
148-
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0)
147+
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0)
149148

150149
@parameterized.expand([[p] for p in TEST_NDARRAYS])
151150
def test_hard_clipping_one_sided_low(self, p):
@@ -155,7 +154,7 @@ def test_hard_clipping_one_sided_low(self, p):
155154
result = hard_clipper({key: im})
156155
lower, upper = percentile(im, (5, 100))
157156
expected = clip(im, lower, upper)
158-
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-7, atol=0)
157+
assert_allclose(result[key], p(expected), type_test="tensor", rtol=1e-4, atol=0)
159158

160159
@parameterized.expand([[p] for p in TEST_NDARRAYS])
161160
def test_soft_clipping_two_sided(self, p):
@@ -199,7 +198,7 @@ def test_channel_wise(self, p):
199198
for i, c in enumerate(im):
200199
lower, upper = percentile(c, (5, 95))
201200
expected = clip(c, lower, upper)
202-
assert_allclose(result[key][i], p(expected), type_test="tensor", rtol=1e-7, atol=0)
201+
assert_allclose(result[key][i], p(expected), type_test="tensor", rtol=1e-4, atol=0)
203202

204203

205204
if __name__ == "__main__":

0 commit comments

Comments
 (0)