From ed08f45edb8a4245a4d1c194b5d6539311a79c13 Mon Sep 17 00:00:00 2001 From: Kirill Ignatev Date: Mon, 10 May 2021 15:55:02 +0100 Subject: [PATCH 1/5] Add autograd test for TimeMasking transform Failing now --- .../torchaudio_unittest/transforms/autograd_test_impl.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/torchaudio_unittest/transforms/autograd_test_impl.py b/test/torchaudio_unittest/transforms/autograd_test_impl.py index 717a7bc87b..c6e84c8f1f 100644 --- a/test/torchaudio_unittest/transforms/autograd_test_impl.py +++ b/test/torchaudio_unittest/transforms/autograd_test_impl.py @@ -125,6 +125,15 @@ def test_fade(self, fade_shape): waveform = get_whitenoise(sample_rate=8000, duration=0.05, n_channels=2) self.assert_grad(transform, [waveform], nondet_tol=1e-10) + def test_time_masking(self): + sample_rate = 8000 + n_fft = 400 + spectrogram = get_spectrogram( + get_whitenoise(sample_rate=sample_rate, duration=0.05, n_channels=2), + n_fft=n_fft, power=1) + transform = T.TimeMasking(400) + self.assert_grad(transform, [spectrogram]) + def test_spectral_centroid(self): sample_rate = 8000 transform = T.SpectralCentroid(sample_rate=sample_rate) From d4a0ca72462eeaa7564e42372657129a19485cd8 Mon Sep 17 00:00:00 2001 From: Kirill Ignatev Date: Tue, 11 May 2021 15:04:25 +0100 Subject: [PATCH 2/5] Add wrapper and second masking transform 1. Added `_DeterministicWrapper`. 2. Combined both masking transforms in one test. --- test/torchaudio_unittest/transforms/autograd_test_impl.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/torchaudio_unittest/transforms/autograd_test_impl.py b/test/torchaudio_unittest/transforms/autograd_test_impl.py index c6e84c8f1f..db29139987 100644 --- a/test/torchaudio_unittest/transforms/autograd_test_impl.py +++ b/test/torchaudio_unittest/transforms/autograd_test_impl.py @@ -125,14 +125,15 @@ def test_fade(self, fade_shape): waveform = get_whitenoise(sample_rate=8000, duration=0.05, n_channels=2) self.assert_grad(transform, [waveform], nondet_tol=1e-10) - def test_time_masking(self): + @parameterized.expand([(T.TimeMasking,), (T.FrequencyMasking,)]) + def test_masking(self, masking_transform): sample_rate = 8000 n_fft = 400 spectrogram = get_spectrogram( get_whitenoise(sample_rate=sample_rate, duration=0.05, n_channels=2), n_fft=n_fft, power=1) - transform = T.TimeMasking(400) - self.assert_grad(transform, [spectrogram]) + deterministic_transform = _DeterministicWrapper(masking_transform(400)) + self.assert_grad(deterministic_transform, [spectrogram]) def test_spectral_centroid(self): sample_rate = 8000 From ad2a472beae73da5e1f8110650ac8042ac2c24e7 Mon Sep 17 00:00:00 2001 From: Kirill Ignatev Date: Tue, 11 May 2021 17:48:30 +0100 Subject: [PATCH 3/5] Add assert for iid codepath Also test with `iid_masks=True` parameter. Should test with this param as well, since it's a different codepath. Make a batch of spectrogram by generating two spectrograms separately and concatenating them. --- test/torchaudio_unittest/transforms/autograd_test_impl.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/torchaudio_unittest/transforms/autograd_test_impl.py b/test/torchaudio_unittest/transforms/autograd_test_impl.py index db29139987..09e82b2942 100644 --- a/test/torchaudio_unittest/transforms/autograd_test_impl.py +++ b/test/torchaudio_unittest/transforms/autograd_test_impl.py @@ -132,8 +132,15 @@ def test_masking(self, masking_transform): spectrogram = get_spectrogram( get_whitenoise(sample_rate=sample_rate, duration=0.05, n_channels=2), n_fft=n_fft, power=1) + spectrogram2 = get_spectrogram( + # Add second white noise with another seed, so they are different + get_whitenoise(sample_rate=sample_rate, duration=0.05, n_channels=2, seed=31), + n_fft=n_fft, power=1) deterministic_transform = _DeterministicWrapper(masking_transform(400)) + deterministic_transform_iid = _DeterministicWrapper(masking_transform(400, True)) + self.assert_grad(deterministic_transform, [spectrogram]) + self.assert_grad(deterministic_transform_iid, [spectrogram + spectrogram2]) def test_spectral_centroid(self): sample_rate = 8000 From 66af0fcdcc2a5d37cbdf72668fdf71a3cacaf7f0 Mon Sep 17 00:00:00 2001 From: Kirill Ignatev Date: Wed, 12 May 2021 12:26:40 +0100 Subject: [PATCH 4/5] Split test and use torch.cat Addressed PR comments --- .../transforms/autograd_test_impl.py | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/test/torchaudio_unittest/transforms/autograd_test_impl.py b/test/torchaudio_unittest/transforms/autograd_test_impl.py index 09e82b2942..4065879b0b 100644 --- a/test/torchaudio_unittest/transforms/autograd_test_impl.py +++ b/test/torchaudio_unittest/transforms/autograd_test_impl.py @@ -132,15 +132,22 @@ def test_masking(self, masking_transform): spectrogram = get_spectrogram( get_whitenoise(sample_rate=sample_rate, duration=0.05, n_channels=2), n_fft=n_fft, power=1) - spectrogram2 = get_spectrogram( - # Add second white noise with another seed, so they are different - get_whitenoise(sample_rate=sample_rate, duration=0.05, n_channels=2, seed=31), - n_fft=n_fft, power=1) deterministic_transform = _DeterministicWrapper(masking_transform(400)) - deterministic_transform_iid = _DeterministicWrapper(masking_transform(400, True)) - self.assert_grad(deterministic_transform, [spectrogram]) - self.assert_grad(deterministic_transform_iid, [spectrogram + spectrogram2]) + + @parameterized.expand([(T.TimeMasking,), (T.FrequencyMasking,)]) + def test_masking_iid(self, masking_transform): + sample_rate = 8000 + n_fft = 400 + specs = [get_spectrogram( + get_whitenoise(sample_rate=sample_rate, duration=0.05, n_channels=2, seed=i), + n_fft=n_fft, power=1) + for i in range(3) + ] + + batch = torch.cat(specs) + deterministic_transform = _DeterministicWrapper(masking_transform(400, True)) + self.assert_grad(deterministic_transform, [batch]) def test_spectral_centroid(self): sample_rate = 8000 From b7e9192f72c45ffa2a3eff4721b9dd35b2c3affc Mon Sep 17 00:00:00 2001 From: Kirill Ignatev Date: Wed, 12 May 2021 17:36:19 +0100 Subject: [PATCH 5/5] Add check that tensor is 4D for iid masking Ensure we're going in the right codepath --- test/torchaudio_unittest/transforms/autograd_test_impl.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/torchaudio_unittest/transforms/autograd_test_impl.py b/test/torchaudio_unittest/transforms/autograd_test_impl.py index 4065879b0b..0f7b612482 100644 --- a/test/torchaudio_unittest/transforms/autograd_test_impl.py +++ b/test/torchaudio_unittest/transforms/autograd_test_impl.py @@ -145,7 +145,8 @@ def test_masking_iid(self, masking_transform): for i in range(3) ] - batch = torch.cat(specs) + batch = torch.stack(specs) + assert batch.ndim == 4 deterministic_transform = _DeterministicWrapper(masking_transform(400, True)) self.assert_grad(deterministic_transform, [batch])