├── ARTICLE.md
├── DEPENDENCIES.md
├── Figures
├── Fig1_9.ipynb
├── Fig5.ipynb
├── Fig6_left.ipynb
├── Fig6_right.ipynb
├── Fig7.ipynb
├── Fig8_left.ipynb
├── Fig8_right.ipynb
└── PNGs
│ ├── Fig6l_1.png
│ ├── Fig6l_2.png
│ ├── Fig6l_3.png
│ ├── Fig6l_signal.png
│ ├── Fig6r_1.png
│ ├── Fig6r_2.png
│ ├── Fig6r_3.png
│ ├── Fig6r_signal.png
│ ├── Fig7_1.png
│ ├── Fig7_2.png
│ ├── Fig7_3.png
│ ├── Fig7_signal.png
│ ├── Fig8l_1.png
│ ├── Fig8l_2.png
│ ├── Fig8l_3.png
│ ├── Fig8l_signal.png
│ ├── Fig8r_1.png
│ ├── Fig8r_2.png
│ ├── Fig8r_3.png
│ ├── Fig8r_signal.png
│ ├── Figure2.png
│ ├── Figure3.png
│ ├── Figure4.png
│ ├── Figure5.png
│ ├── demucs.png
│ ├── demucs_mod.png
│ ├── linear.png
│ ├── melgan.png
│ ├── nearest.png
│ ├── signal_Fig1_22kHz.png
│ ├── signal_Fig1_44kHz.png
│ ├── subpixelcnn.png
│ └── subpixelcnn_mod.png
├── LICENSE.md
└── README.md
/ARTICLE.md:
--------------------------------------------------------------------------------
1 | # Upsampling Artifacts in Neural Audio Synthesis
2 |
3 | **[!] This article contains links to ipython notebooks where you can experiment with the figures below. All ipython notebooks are at: [Figures/](Figures/).**
4 |
5 | A number of recent advances in neural audio synthesis rely on upsampling layers, which can introduce undesired artifacts. In computer vision, upsampling artifacts have been studied and are known as checkerboard artifacts (due to their characteristic visual pattern). However, their effect has been overlooked so far in audio processing. Here, we address this gap by studying this problem from the audio signal processing perspective.
6 |
7 | We first show that the main sources of upsampling artifacts are: (i) the tonal and filtering artifacts introduced by problematic upsampling operators, and (ii) the spectral replicas that emerge while upsampling. We then compare different upsampling layers, showing that nearest neighbor upsamplers can be an alternative to the problematic (but state-of-the-art) transposed and subpixel convolutions which are prone to introduce tonal artifacts.
8 |
9 | ## 1: Introduction
10 |
11 | Feed-forward neural audio synthesizers **[1–4]** were recently proposed as an alternative to Wavenet **[5]**, which is computationally demanding and slow due to its dense and auto-regressive nature **[6]**. Among the different feed-forward architectures proposed for neural audio synthesis **[6–8]**, generative adversarial networks (GANs) **[1, 4, 9]** and autoencoders **[2, 3, 10]** heavily rely on upsampling layers. GANs allow for efficient feed-forward generation, by upsampling low-dimentional vectors to waveforms. Autoencoders also allow for feed-forward generation, and their bottleneck layers are downsampled – requiring less computational and memory footprint around the bottleneck. While GANs and autoencoders allow for fast feed-forward architectures, the upsampling layers that are typically embedded in these models can introduce upsampling artifacts **[1, 2]**.
12 |
13 | Three main types of upsampling layers exist: transposed convolutions **[1, 3, 9]**, interpolation upsamplers **[2, 11]**, and subpixel convolutions **[10, 12, 13]**. These can introduce upsampling artifacts, as shown in Fig. 1—where we plot a spectrogram of their output after random initialization, to stress that upsampling artifacts are already present before training. We experiment with state-of-the-art neural synthesizers based on transposed convolutions (MelGAN and Demucs autoencoder) or on alternative upsampling layers (interpolation and subpixel convolutions). MelGAN uses transposed convolutions for upsampling **[4]**. We implement it as Kumar et al. **[4]**: with 4 transposed convolution layers of length=16,16,4,4 and stride=8,8,2,2 respectively. Demucs is an autoencoder employing transposed convolutions. We implement it as De ́fossez et al. **[3]**: with 6 transposed convolution layers of length=8 and stride=4. Transposed convolutions in MelGAN and Demucs introduce what we call “tonal artifacts” after initialization (Fig. 1: a, b, and Sec. 2). Next, we modify Demucs’ upsampling layers to rely on nearest neigbor interpolation **[14]** or subpixel convolution **[12]** upsamplers. Interpolation upsamplers can introduce what we describe as “filtering artifacts” (Fig. 1: c, and Sec. 3), while subpixel convolution can also introduce the above mentioned “tonal artifacts” (Fig. 1: d, and Sec. 4).
14 |
15 | In sections 2, 3 and 4, we describe the origin of these upsampling artifacts. In section 5, we note that spectral replicas can introduce additional artifacts. Finally, in section 6, we discuss the effect that training can have on such artifacts.
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
MelGAN: tonal artifacts (horizontal lines) after initialization.
24 |
Demucs: tonal artifacts (horizontal lines) after initialization.
25 |
26 |
27 |
28 |
29 |
30 |
31 |
Nearest neighbor: filtering artifacts (horizontal valleys) after initialization.
32 |
Subpixel convolution: tonal artifacts (horizontal lines) after initialization.
33 |
34 |
35 |
Fig. 1. Upsampling artifacts after initialization: tonal artifacts (horizontal lines: a,b,d) and filtering artifacts (horizontal valley: c). Input: white noise. MelGAN operates at 22kHz, Demucs at 44.1kHz.
41 |
42 |
43 |
44 | ## 2: Transposed Convolutions
45 |
46 | Transposed CNNs are widely used for audio synthesis **[1, 3, 9]** and can introduce tonal artifacts due to **[15]**: (i) their weights’ initialization, (ii) overlap issues, and (iii) the loss function. Issues (i) and (ii) are related to the model’s initialization and construction, respectively, while issue (iii) depends on how learning is defined. In this article, we use the terms length and stride for referring to the transposed convolution filter length and stride, respectively. Three situations arise:
47 |
48 | * **No overlap**: length=stride. No overlap artifacts are introduced, but the weight initialization issue can introduce tonal artifacts.
49 | * **Partial overlap**: length is not a multiple of stride. Overlap and weight initialization issues can introduce tonal and boundary artifacts.
50 | * **Full overlap**: length is a multiple of stride. Overlap artifacts can be introduced (as boundary artifacts at the borders) and the weight initialization issue introduces tonal artifacts after initialization.
51 |
52 | ### Issue (i): Weight Initialization
53 |
54 | It is caused by the transposed convolution weights that repeat across time, generating a periodic pattern (tonal artifacts) after random initialization. To understand this issue, we leave the overlap and loss function issues aside and consider an example of a randomly initialized transposed convolution with no overlap (length=stride=3, see Fig. 2). Given that the filter Wd is shared across time, the resulting feature map includes a periodicity related to the temporal structure of the (randomly initialized) weights. Fig. 2 (bottom) exemplifies this behavior by feeding ones to the above-mentioned transposed convolution: the temporal patterns present in the (random) weights introduce high-frequency periodicities that call to be compensated by training. Note that with stride=length, the emerging periodicities are dominated by the stride and length parameter. Solutions to this issue involve using constant weights or alternative upsamplers. Sections 3 and 4 focus on describing alternative upsamplers, since using constant weights can affect expressiveness — and learning due to a poor (constant) initialization.
55 |
56 |
57 |
58 |
59 |
60 |
61 |
Fig. 2. Transposed convolution: length=stride=3, w/o bias. The example depicts a periodicity every 3 samples, at the stride length.
62 |
63 |
64 |
65 |
66 | ### Issue (ii): Overlap
67 |
68 | It arises because, when stridelength setup is generally not desirable because parts of the upsampled signal are not defined. Due to the stride
74 |
75 |
76 |
77 |
78 |
Fig. 3. Transposed convolution: length=stride=3, w/o bias. The example depicts a periodicity every 3 samples, at the stride length.
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
Fig. 4. Transposed convolution: length=stride=3, w/o bias. The example depicts a periodicity every 3 samples, at the stride length.
88 |
89 |
90 |
91 | Fig. 5 (row 1) shows that high-frequencies emerge due to partial overlap, which can be avoided using a full overlap setup (row 3). However, as noted above, constant (ones) transposed convolution filters are rarely used. Fig. 5 (rows 2, 4) illustrates the effect of using non-constant filters. Note that even when using a full overlap setup, a periodic pattern appears at the frequency of the stride. Hence, importantly, the weight initialization issue remains. Also note that boundary artifacts are introduced in both cases: for partial and full overlap setups. Stoller et al. **[2]** also described boundary artifacts.
92 |
93 |
94 |
95 |
96 |
97 |
98 |
Fig. 5. Transposed convolutions, w/o bias, with input set as ones.
104 |
105 | ### Issue (iii): Loss Function
106 |
107 | Loss-related tonal artifacts can appear when using adversarial losses **[1]** and/or deep feature losses **[16]**, since using CNNs as a loss involves a transposed convolution in the backpropagation step that can cause high-frequency patterns in the gradient **[15]**. For example, loss-related high-frequency artifacts are noticeable when visualizing the learnt features of a neural network via optimization, since strided convolutions and pooling operations create high-frequency patterns in the gradient that impact the resulting visualizations **[17]**. Solutions proposed in the feature visualization literature involve relying on learnt priors **[19]** and/or regularizers **[20, 21]**. Alternative solutions may consist in not using losses that involve a backpropagation step that is a transposed convolution.
108 |
109 | In the context of adversarial training, Donahue et al. **[1]** argued that high-frequency patterns are less common in images than in audio. Note that tonal artifacts may be similar to the (high) frequencies already present in real audio, which makes the discriminator’s objective more challenging for audio **[1]**. Accordingly, adversarial losses might be more effective at removing transposed convolution artifacts for images than for audio **[1]**. In addition, they also note that transposed convolution artifacts (tonal noise) will have a specific phase, allowing the discriminator to learn a trivial policy to detect fake audio. As a solution, they randomly perturb the phase of the discriminator’s feature maps **[1]**.
110 |
111 | Finally, note that the loss function issue remains understudied for audio (but also for computer vision **[15, 25]**). Hence, the impact of training models with such losses has yet to be fully described.
112 |
113 | ## 3: Interpolation Upsamplers
114 |
115 | Interpolation + convolution was proposed as an alternative to avoid transposed convolution artifacts **[15]**. It has been used, e.g., for music source separation **[2]**, speech enhancement **[22]** and neural vocoding **[14]**. While interpolation (e.g., linear or nearest neighbor) is effectively upsampling the signal, the subsequent convolution further transforms the upsampled signal with learnable weights. Hence, the problematic transposed convolution is replaced by interpolation + convolution with the goal to avoid the above-described tonal artifacts (see Fig. 6 or Odena et al. **[15]**). Its main downsides are: (i) interpolation + convolution upsamplers require two layers instead of a single tranposed convolution layer, which increases the memory and computational footprint of the upsampler; and (ii) it can introduce filtering artifacts. Observe the filtering artifacts in Fig. 6 and 8 (right): these de-emphasize the high-end frequencies of the spectrum. To understand filtering artifacts, note that interpolations can be implemented using convolutions — by first interpolating with zeros, an operator known as stretch **[23]**, and later convolving with a pre-defined (non-learnable) filter. Linear interpolations can be implemented with triangular filters, a sinc2(·) in the frequency domain; and nearest neighbor interpolation with rectangular filters, a sinc(·) in the frequency domain. The side lobes of the linear interpolation filter, sinc2(·), are lower than the nearest neighbor ones, sinc(·). For that reason, linear upsampling attenuates more the high-end frequencies than nearest neighbor upsampling (Fig. 6). Unless using learnable interpolation filters **[2]**, interpolation filters cannot be fine-tuned and additional layers (like its subsequent learnable convolution) will have to compensate, if necessary, for the frequency response of the interpolation filter that introduces filtering artifacts. Hence, filtering artifacts color **[24]** the signal and are introduced by the frequency response of the interpolation upsampler.
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
Nearest neighbor interpolation: input music signal.
124 |
Linear interpolation: input (white) noise.
125 |
126 |
127 |
128 |
129 |
130 |
131 |
Nearest neighbor interpolation: layer 1.
132 |
Linear interpolation: layer 1.
133 |
134 |
135 |
136 |
137 |
138 |
Nearest neighbor interpolation: layer 2.
139 |
Linear interpolation: layer 2.
140 |
141 |
142 |
143 |
144 |
145 |
146 |
Nearest neighbor interpolation: layer 3.
147 |
Linear interpolation: layer 3.
148 |
149 |
150 |
Fig. 6. Interpolation upsamplers: filtering artifacts, but no tonal
151 | artifacts, after initialization. Each consecutive layer (top to bottom):
152 | nearest neighbor or linear interpolation (x2) + CNN (filters of length
153 | 9, stride 1). Inputs at 4kHz: music (left), white noise (right).
159 |
160 | ## 4: SUBPIXEL CONVOLUTIONS
161 |
162 | Based on convolution + reshape, subpixel CNN was proposed as an efficient1 upsampling layer **[25, 26]**. It has been used, e.g., for speech enhancement **[10]**, bandwidth extension **[12]** and voice conversion **[13]**. The convolution upsamples the signal along the channel axis, and reshape is an operation called periodic shuffle **[26]** that reorders the convolution output to match the desired (upsampled) output shape. Subpixel CNNs advantages are: (i) it avoids overlap issues by construction, since convolution + reshape constrain it to disallow overlapping; and (ii) it is computationally efficient because its convolutions operate over the original (non-upsampled) signal. main drawback is that it can introduce tonal artifacts via the periodic shuffle operator (see Fig. 7 or Aitken et al. **[25]**). Tonal artifacts emerge because it upsamples consecutive samples based on convolutional filters having different weights, which can cause periodic patterns **[25]**. Aitken et al. **[25]** proposed addressing these artifacts with an alternative initialization. However, nothing prevents these weights to degenerate into a solution that produces artifacts again — i.e., tonal artifacts can emerge during and after training.
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
Input: ones at 4kHz.
171 |
Subpixel convolution: layer 1.
172 |
173 |
174 |
175 |
176 |
177 |
178 |
Subpixel convolution: layer 2.
179 |
Subpixel convolution: layer 3.
180 |
181 |
182 |
Fig. 7. Subpixel CNN: tonal artifacts after initialization. Each consecutive layer consists of a CNN (w/ filters of length 3 and stride of 1) + reshape via the periodic shuffle operation (upsample x2)..
188 |
189 | ## 5: Spectral Replicas
190 |
191 | Figs. 6, 7 and 8 are illustrative because several artifacts interact: (i) tonal and filtering artifacts introduced by problematic upsampling operations; and (ii) spectral replicas due to the bandwidth extension performed by each upsampling layer. From signal processing, we know that spectral replicas appear when discretizing a signal. Accordingly, when upsampling discrete signals one has to be vigilant of spectral replicas. Given that upsampling layers are effectively performing bandwidth extension, spectral replicas emerge while upsampling (see Fig. 6, left). Importantly, spectral replicas introduced by deeper layers (e.g., layers 2 & 3) also include replicas of the artifacts introduced by previous layers (e.g., layer 1 in Figs. 7 and 8):
192 |
193 | * **Spectral replicas of tonal artifacts**. Upsampling tonal artifacts are introduced at a frequency of “sampling rate / upsampling factor”, the sampling rate being the one of the upsampled signal. For example: layer 1 outputs in Figs. 7 and 8 (left) are at a sampling rate of 8kHz, because the 4kHz input was upsampled x2. Accordingly, these upsampling layers introduce a tone at 4kHz. When upsampling with upcoming layers, the spectral replicas of previously introduced tones are exposed—plus the employed upsampler introduces new tones. In Figs. 7 and 8 (left), the spectral replicas (at 8, 12, 16 kHz) interact with the tones introduced by each layer (at 4, 8, 16 kHz).
194 | * **Spectral replicas of filtering artifacts**. Similarly, filtering artifacts are also replicated when upsampling—see Figs. 1 (c), 6 (right), 8 (right). This phenomenon is clearer in Fig. 8 (right) because the interleaved convolutions in Fig. 6 (right) further color the spectrum.
195 | * **Spectral replicas of signal offsets**. Deep neural networks can include bias terms and ReLU non-linearities, which might introduce an offset to the resulting feature maps. Offsets are constant signals with zero frequency. Hence, its frequency transform contains an energy component at frequency zero. When upsampling, zero-frequency components are replicated in-band, introducing audible tonal artifacts. These signal offset replicas, however, can be removed with smart architecture designs. For example, via using the filtering artifacts (introduced by interpolation upsamplers) to attenuate the spectral replicas of signal offsets. Fig. 8 (right) shows that linear (but also nearest neigbor) upsamplers attenuate such problematic frequencies, around “sampling rate / upsampling factor” where those tones appear. Further, minor modifications to Demucs (just removing the ReLUs of the first layer2 and the biases of the model) can also decrease the tonal artifacts after initialization (Fig. 1 vs. Fig. 9). While the modified Demucs architectures can still introduce tonal artifacts, via the problematic upsamplers that are used, the energy of the remaining tones is much less when compared to the tones introduced by the spectral replicas of signal offsets (Fig. 1 vs. Fig. 9). Note that mild tonal artifacts could be perceptually masked, since these are hardly noticeable under the presence of wide-band noise (Fig. 9).
196 |
197 | In signal processing, spectral replicas are normally removed with low-pass filters **[23]**. Yet, upsampling layers are oftentimes stacked without those—so that upsamplers process the spectral replicas generated by previous upsampling layers **[2, 3]**. Note the effect of stacking upsamplers in Fig. 6: the model colors **[24]** the spectral replicas from previous layers. For wide-band synthesis, however, it seems natural to allow that high-frequencies are available along the model.
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
Transposed convolution: ones input signal.
211 |
Linear interpolation: noise input signal.
212 |
213 |
214 |
215 |
216 |
217 |
218 |
Transposed convolution: layer 1.
219 |
Linear interpolation: layer 1.
220 |
221 |
222 |
223 |
224 |
225 |
226 |
Transposed convolution: layer 2.
227 |
Linear interpolation: layer 1.
228 |
229 |
230 |
231 |
232 |
233 |
234 |
Transposed convolution: layer 3.
235 |
Linear interpolation: layer 1.
236 |
237 |
238 |
Fig. 8. Transposed CNN, linear interpolation: tonal and filtering artifacts, after initialization. Transposed convolution layers:
239 | length=4, stride=2. Linear interpolation layers: without the interleaved convolutions. Inputs at 4kHz: ones (left), white noise (right).
264 |
265 |
266 | ## 6: The role of training
267 |
268 |
269 | So far, we discussed that upsampling artifacts emerge because upsampling operators with problematic initializations are stacked one on top of another. However, nothing prevents the model from learning to compensate such artifacts. While some did not use, e.g., transposed CNNs to avoid tonal artifacts **[2, 22]** — others aim at learning to correct these problematic initializations via training **[3, 10]**. We found that most speech upsamplers are based on transposed CNNs, with just a few exceptions **[10, 14, 22]**. Only from the speech literature, we were unable to assess the impact of training one upsampler or another. Yet, music source separation works provide additional insights. WaveUnets (autoencoders based on linear upsamplers) are widely used, but their performance is poor compared to state-of-the-art models: ≈3 vs. ≈5 dB SDR (signal-to-distortion ratio), see Table 1. However, Demucs (a modified waveUnet relying on transposed convolutions) achieved competitive results: ≈5 dB SDR. According to the literature, then, it seems that transposed CNNs are preferrable: these are widely used and achieve competitive results.
270 |
271 | Here, we further study the role of learning when training neural upsamplers under comparable conditions. We study Demucs-like models with 6 encoding blocks (with strided CNN, ReLU, GLU) and 6 decoding blocks (with GLU, full overlap transposed CNN, ReLU), connected via skip connections [3], with two LSTMs in the bottleneck (3200 units each). Strided and transposed convolution layers have 100, 200, 400, 800, 1600, 3200 filters of length=8 and stride=4, respectively **[3]**. For our experiments, we change the transposed convolutions in Demucs for the different upsampling layers listed in Table 1 (top). Like the original Demucs, we use: very large models, of ≈700M parameters **[3]**; weight rescaling, so that input and output signals are of the same magnitude after initialization **[3]**; and their data augmentation schema, creating new mixes on-the-fly **[3, 27]**. We also use the MUSDB **[28]** benchmark, that is composed of stereo songs at 44.1 kHz. For each song, four stereo sources are extracted: vocals, bass, drums, other. In Table 1 we report the average signal-to-distorion ratio (SDR) over all sources **[29]**. We optimize the L1 loss with Adam **[30]** for 600 epochs at a learning rate of 0.0002 (0.0001 for the modified subpixel CNN) with x4 v100 GPUs, using a batch size of 32.
272 |
273 | Despite their architectural issues and poor initialization, transposed and subpixel CNNs achieve the best SDR scores (see Table 1). However, differently from what the literature conveys, interpolation-based models follow closely—with nearest neighbor upsamplers obtaining the best results. The proposed modifications (without strong tones after initialization, see Fig. 9) perform similarly to their poorly initialized counterparts. These results unveil the role of training: it helps overcoming the noisy initializations, caused by the problematic upsampling operators, to get state-of-the-art results. Informal listening, however, reveals that tonal artifacts can emerge even after training, especially in silent parts and with out-of-distribution data (e.g., with sounds and conditions not seen during training). We find that nearest neighbor and linear interpolation models do not have this disadvantage, although they achieve worse SDR scores.
274 |
275 |
276 |
318 |
319 |
320 | ## 7: SUMMARY & REMARKS
321 |
322 | Upsamplers are a key element for developing computationally efficient and high-fidelity neural audio synthesizers. Given their importance, together with the fact that the audio literature only provides sparse and unorganized insights **[1,2,4,10]**, our work is aimed at advancing and consolidating our current understanding of neural upsamplers. We discussed several sources of tonal artifacts: some relate to the transposed convolution setup or weight initialization, others to architectural choices not related to transposed convolutions (e.g., with subpixel CNNs), and others relate to the way learning is defined (e.g., with adversarial or deep feature losses). While several works assume to resolve the tonal artifacts via learning from data, others looked at alternative possibilities which, by construction, omit tonal artifacts—these include: interpolation upsamplers, that can introduce filtering artifacts. Further, upsampling artifacts can be emphasized by deeper layers via exposing their spectral replicas.
323 |
324 | We want to remark that any transposed convolution setup, even with full or no overlap, produces a poor initialization due to the weights initialization issue. Further, subpixel CNNs can also introduce tonal artifacts. In both cases, training is responsible to compensate for any upsampling artifact. Finally, the interpolation upsamplers we study do not introduce tonal artifacts, what is perceptually preferable, but they achieve worse SDR results and can introduce filtering artifacts.
325 |
326 | ## REFERENCES
327 |
328 | **[1]** Chris Donahue, Julian McAuley, and Miller Puckette, “Adversarial audio synthesis,” in ICLR, 2019.
329 |
330 | **[2]** Daniel Stoller, Sebastian Ewert, and Simon Dixon, “Wave-unet: A multi-scale neural network for end-to-end audio source
331 | separation,” ISMIR, 2018.
332 |
333 | **[3]** Alexandre Défossez, Nicolas Usunier, Léon Bottou, and Francis Bach, “Music source separation in the waveform domain,”
334 | arXiv, 2019.
335 |
336 | **[4]** Kundan Kumar, Rithesh Kumar, Thibault de Boissiere, Lucas
337 | Gestin, Wei Zhen Teoh, Jose Sotelo, Alexandre de Brébisson,
338 | Yoshua Bengio, and Aaron C Courville, “Melgan: Generative
339 | adversarial networks for conditional waveform synthesis,” in
340 | NeurIPS, 2019.
341 |
342 | **[5]** Aaron van den Oord, Sander Dieleman, Heiga Zen, Karen Simonyan, Oriol Vinyals, Alex Graves, Nal Kalchbrenner, Andrew Senior, and Koray Kavukcuoglu, “Wavenet: A generative
343 | model for raw audio,” arXiv, 2016.
344 |
345 | **[6]** Dario Rethage, Jordi Pons, and Xavier Serra, “A wavenet for
346 | speech denoising,” in ICASSP, 2018.
347 |
348 | **[7]** Ryan Prenger, Rafael Valle, and Bryan Catanzaro, “Waveglow: A flow-based generative network for speech synthesis,”
349 | in ICASSP, 2019.
350 |
351 | **[8]** Joan Serrà, Santiago Pascual, and Carlos Segura Perales,
352 | “Blow: a single-scale hyperconditioned flow for non-parallel
353 | raw-audio voice conversion,” in NeurIPS, 2019.
354 |
355 | **[9]** Santiago Pascual, Antonio Bonafonte, and Joan Serrà, “Segan:
356 | Speech enhancement generative adversarial network,” Interspeech, 2017.
357 |
358 | **[10]** Ashutosh Pandey and DeLiang Wang, “Densely connected
359 | neural network with dilated convolutions for real-time speech
360 | enhancement in the time domain,” in ICASSP, 2020.
361 |
362 | **[11]** Mikolaj Binkowski, Jeff Donahue, Sander Dieleman, Aidan
363 | Clark, Erich Elsen, Norman Casagrande, Luis C Cobo, and
364 | Karen Simonyan, “High fidelity speech synthesis with adversarial networks,” in ICLR, 2019.
365 |
366 | **[12]** Volodymyr Kuleshov, S Zayd Enam, and Stefano Ermon, “Audio super resolution using neural networks,” arXiv, 2017.
367 |
368 | **[13]** Ju-chieh Chou, Cheng-chieh Yeh, Hung-yi Lee, and Lin-shan
369 | Lee, “Multi-target voice conversion without parallel data
370 | by adversarially learning disentangled audio representations,”
371 | arXiv, 2018.
372 |
373 | **[14]** Alexey A Gritsenko, Tim Salimans, Rianne van den Berg,
374 | Jasper Snoek, and Nal Kalchbrenner, “A spectral energy distance for parallel speech synthesis,” arXiv, 2020.
375 |
376 | **[15]** Augustus Odena, Vincent Dumoulin, and Chris Olah, “Deconvolution and checkerboard artifacts,” Distill, vol. 1, no. 10, pp.
377 | e3, 2016.
378 |
379 | **[16]** Francois G Germain, Qifeng Chen, and Vladlen Koltun,
380 | “Speech denoising with deep feature losses,” Interspeech,
381 | 2019.
382 |
383 | **[17]** Chris Olah, Alexander Mordvintsev, and Ludwig Schubert,
384 | “Feature visualization,” Distill, vol. 2, no. 11, pp. e7, 2017.
385 |
386 | **[18]** Keunwoo Choi, George Fazekas, Mark Sandler, and Jeonghee
387 | Kim, “Auralisation of deep convolutional neural networks:
388 | Listening to learned features,” ISMIR late-breaking/demo,
389 | 2015.
390 |
391 | **[19]** Anh Nguyen, Alexey Dosovitskiy, Jason Yosinski, Thomas
392 | Brox, and Jeff Clune, “Synthesizing the preferred inputs for
393 | neurons in neural networks via deep generator networks,” in
394 | NeurIPS, 2016.
395 |
396 | **[20]** Aravindh Mahendran and Andrea Vedaldi, “Understanding
397 | deep image representations by inverting them,” in CVPR, 2015.
398 |
399 | **[21]** Alexander Mordvintsev, Christopher Olah, and Mike Tyka,
400 | “Inceptionism: Going deeper into neural networks,” Google
401 | Research Blog, 2015.
402 |
403 | **[22]** Ritwik Giri, Umut Isik, and Arvindh Krishnaswamy, “Attention wave-u-net for speech enhancement,” in WASPAA, 2019.
404 |
405 | **[23]** Julius Orion Smith, Mathematics of the discrete Fourier transform (DFT): with audio applications, Julius Smith, 2007.
406 |
407 | **[24]** Jordi Pons, Olga Slizovskaia, Rong Gong, Emilia Gómez, and
408 | Xavier Serra, “Timbre analysis of music audio signals with
409 | convolutional neural networks,” in EUSIPCO, 2017.
410 |
411 | **[25]** Andrew Aitken, Christian Ledig, Lucas Theis, Jose Caballero,
412 | Zehan Wang, and Wenzhe Shi, “Checkerboard artifact free
413 | sub-pixel convolution: A note on sub-pixel convolution, resize
414 | convolution and convolution resize,” arXiv, 2017.
415 |
416 | **[26]** Wenzhe Shi, Jose Caballero, Ferenc Husz´ar, Johannes Totz,
417 | Andrew P Aitken, Rob Bishop, Daniel Rueckert, and Zehan
418 | Wang, “Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural network,” in
419 | CVPR, 2016.
420 |
421 | **[27]** Stefan Uhlich, Marcello Porcu, Franck Giron, Michael Enenkl,
422 | Thomas Kemp, Naoya Takahashi, and Yuki Mitsufuji, “Improving music source separation based on deep neural networks through data augmentation and network blending,” in
423 | ICASSP, 2017.
424 |
425 | **[28]** Zafar Rafii, Antoine Liutkus, Fabian-Robert Stöter,
426 | Stylianos Ioannis Mimilakis, and Rachel Bittner, “The
427 | MUSDB18 corpus for music separation,” 2017.
428 |
429 | **[29]** Emmanuel Vincent, Rémi Gribonval, and Cédric Févotte,
430 | “Performance measurement in blind audio source separation,”
431 | IEEE Transactions on Audio, Speech, and Language Processing, vol. 14, no. 4, pp. 1462–1469, 2006.
432 |
433 | **[30]** Diederik P Kingma and Jimmy Ba, “Adam: A method for
434 | stochastic optimization,” arXiv, 2014.
435 |
436 | **[31]** Fabian-Robert Stöter, S. Uhlich, A. Liutkus, and Y. Mitsufuji,
437 | “Open-unmix - a reference implementation for music source
438 | separation,” Journal of Open Source Software, 2019.
439 |
440 | **[32]** Haowen Hou Ming Li Tingle Li, Jiawei Chen, “Sams-net: A
441 | sliced attention-based neural network for music source separation,” arXiv, 2019.
442 |
--------------------------------------------------------------------------------
/DEPENDENCIES.md:
--------------------------------------------------------------------------------
1 | This repository depends on the following Python packages:
2 | * numpy
3 | * matplotlib
4 | * librosa
5 | * pytorch
6 |
7 | These are all easily installable via, e.g., `pip install numpy`. Any reasonably recent version of these packages should work.
--------------------------------------------------------------------------------
/Figures/Fig5.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## Figure 5\n",
8 | "\n",
9 | "Figure 5 (row 1) shows that high-frequencies emerge due to partial overlap, which can be avoided using a full overlap setup (row 3). \n",
10 | "\n",
11 | "However, constant (ones) transposed convolution filters are rarely used. Figure 5 (rows 2, 4) illustrates the effect of using non-constant filters. \n",
12 | "\n",
13 | "Note that even when using a full overlap setup, a periodic pattern appears at the frequency of the stride. Hence, importantly, the weight initialization issue remains. \n",
14 | "\n",
15 | "Also note that boundary artifacts are introduced in both cases: for partial and full overlap setups."
16 | ]
17 | },
18 | {
19 | "cell_type": "code",
20 | "execution_count": 1,
21 | "metadata": {},
22 | "outputs": [],
23 | "source": [
24 | "# Importing libraries..\n",
25 | "import numpy as np\n",
26 | "\n",
27 | "import matplotlib.pyplot as plt\n",
28 | "from matplotlib import rcParams\n",
29 | "plt.rcParams[\"font.family\"] = \"Times New Roman\"\n",
30 | "plt.rcParams[\"figure.figsize\"] = (7,6.25)\n",
31 | "\n",
32 | "import torch\n",
33 | "import torch.nn"
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": 2,
39 | "metadata": {},
40 | "outputs": [
41 | {
42 | "data": {
43 | "image/png": "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/vnnbDIHk3379jF48GDq1auXzb158+a8/fbbbN++nWeffTYksr300kts3bqVw4cPU6FCBe677z769+8PwKhRo5g5cyYZGRmULJmfszkKl9TUVHbv3k3v3r256qqrAKhVq5bb7+DBg/zxxx/06tUr6LKpKklJSRw7dowPPvggl//WrVtJSkpi0KBBQZcNYPTo0VSsWJHHHnvM7fbMM8+wb98+EhMT+eyzz3jhhRdCIltaWhotWrSgZcuW9OzZ0+1esmRJbrjhBj799FN2794dEq3Z6tWradWqFXfffTePP/54trz96quvOHjwIMeOeTsG/MyiWDTgmC0Wcy2cV9X3gfcB2rdvf0ash5s5cyYrV66kXLlydOnShS5durj9wsPNngyhUrX++eefZGVl0a1bN2677eReEzExMfTo0YOffvqJ5OTkkMimznLJBg0aeK3Mn3jiCebOnUtCQgIREcH/LFavXk3t2rXdasHevd3HGbNp0ybatGlDZmagzl3xz7Fjx2jcuDF9+/bNlq8A8fHxfP755yQnJ4ekAV+6dCn33XcfgwcP5qWXXsrl//7777Nx48agywWmzLkaoksuucTtfsUVVwDw3XffMXnyZNLS0kKi5j/nnHN46KGHAHJ9E3XrmiPd58yZk032YJGcnMyxY8eoWrUq1atXz1buXPVczo74mUjRmejwgYhcDkxUcxRf9VDLE2qSk5OJiYnxORLbtGkTU6dODbJUhvT0dOrWrUvDhg29+jdu3Jg5c+a4G9Ng8scff/DII4+wbp338wcaN25Meno6S5cu9eofSDIzM1m7di2NGzf26h8bG0v37t0pU6ZMkCUzdOvWjWHDhhEdnfvAujJlylCnTp2QdcySk5M5dOiQz1HihAkTePbZZ8nIyAiyZLBmzRrS0tJ85mvbtm25+uqrQ6YxO3DggE+/+vXrEx4eHtJ8jYqKombNml79s7KyWLlyZZClKnoU6QZcRAZjNqX/TkSWYLawO2M5duwYf/75p88KAWDy5MnccccdQZTqJBdddBHPPPMMUVFRXv179erFl19+GZIGPDk52a860JWmoaiwli1bxtGjR/3m686dO5kxY0YQpTKoajZjOm80atSIuXPncuLECb/hAsHvv/9OdHQ0Vat636CwUaNGnDhxgpSUgG7v7RVVpUuXLjRt6n3TtNjYWPr06eO1YxRoNm/eTMWKFfn999+9+pcoUYJ69eqFtAFv1KiRT2O67777jhYtWuQy4j3TKNINuKq+o6r1VbW9qp6tqmNCLVMoWbhwIenp6TRq1MhnmMaNG7N58+agqw1VNU8Vb7169ejRo0dILFyTk5OpWrWqz8qycuXKVKxYMSQVlqrSrl07mjRp4jPM5MmTufbaa4Pe+Vm7di3R0dF+V3h069aNTz75JGQds8aNG+PrBFTXtxKKfG3SpAl33HEHNWp4O5LbcODAAX777bcgSmVITk5GVd22DN5o3Lgx8+fPD7r2Ys+ePfz9999+67mGDRuSmZnJH3/8EUTJih5FugG3ZCcrK4uePXv6HamFaiT5119/UalSJZYtW+Y33KxZs5g4cWJwhHJQVXdF7wsRoVGjRiGp6Fu3bs29995LlSpVfIZp1KgRu3btYvXq1UGU7ORcpL9GKDY2lssuu4zIyEifYQLBli1b2LBhg9+KPjo6mmrVqoUkXzds2JBnp2bSpEn069cv6PYNycnJlClTxq/xb+fOnRk9enTQO2aqSmJiIq1bt/YZpmHDhohIyDQERQXbgBcjOnfuzPTp0/2uf6xbty5RUVFBL9jJyckcPHjQpyrTxciRI7NZ5AaDtWvXsnPnTr8VPcAll1zC999/H/QKa9euXXmGCdVIMjk5mQoVKvgdqQEsWLCAyZMnB0mqkzz88MO0bNnSb5hQ2F7s3buX2NhYpk2b5jdco0aNSEtLC7rtRXJyMh07dvRrsFmvXj1uvPFGSpUqFUTJzP4RTz/9tNuQzhtlypShZcuWtgEPtQCW/KGqpKWl5RkuPDycTp06MXfu3CBIdZLk5GSqV6+eZwMeHx/PypUr2b17d5AkM6PrO++8k2bNmvkNV7duXVq1auVTHRsItmzZQrVq1Zg9e7bfcDVr1gyJij85OZnOnTvnOe0xYsQI7rnnniBJZahduzavvPIKtWvX9huud+/eTJw4MagN+Jw5cwCjnfBHKDRmhw4dYvHixcTHx+cZ9u+//w66Uewff/zh18DORXx8PHPnzg3Z6oyigG3Aiwnr1q2jQoUKjB8/Ps+wo0eP5pdffgmCVCdJTk4mPj4+z8bPVWm4Krhg0LBhQ/7v//7PrxrYxVdffcUXX3wRBKkMrnTwN9oACAsLo0uXLkGt6Pfu3cvy5cvzVdHHx8ezceNGNm/eHATJDEuWLMnX/GxMTAxdunQJqu1FcnIyERER1K9f32+4KlWqUKtWraDmq6ry1ltvMWDAgDzDvvDCC9x0001B6/xkZGTQvXt3nnnmmTzD3nXXXXz11Vchsb0oKtgGvJiQnJxMVlZWnqNIMEtAgrm15datW/nnn3/yVdG3b9+eyMjIoFZYq1atyvdSnffee4+XX345wBKdJDk5mdKlS+drI6JXX3016B2zF198MV/rgF15H6x8PXToEO3atcv3xjtTp07lq6++CrBUJ0lOTqZdu3Z5brwjIsTHxwf1eyhXrhx33303bdq0yTNsfHw8u3btYs2aNYEXDLMxUEZGRr7qktatW9OnT5+Q7NtQVLANeDEhOTmZ6OhoWrRokWdYVeXZZ5/lk08+CYJkZnT4xBNP0KdPnzzDli5dmnPOOYfU1NQgSGZGkWeddVa+G+X4+HgWL16cr+mKwiA5OZkOHTrkqxJq0qRJvrQIhUWlSpX473//695Rzx+tW7cOqu3Fn3/+SWZmZr4qejC72T39dK69oALCsWPHmD9/fr5lS0xMZPr06QGW6iQzZszI9yqVYHfMXM/Jb9rNmTOHb7/9NpAiFWlsA15MyO9cJJhe/TfffMO4ceOCIJk52OK5557LV+cCzOYawZpXc9kCdOrUKV/h4+PjycrKCsrylMOHD7Nw4cJ8V1YAb731VtA6Zr/99lu+bRUiIiLo2LFj0Jb1JCcnIyJ07tw5X+Hj4+P5+++/2bNnT4AlMx3ojz/+mJtvvjlf4Zs1a+Z3hURhkpmZSf/+/fO9fWuzZs2oUKFCUBvwhg0bug9+yYvXXnvNvZvcmYhtwIsB+/btY9myZQWq6OPj45k3b15QNteYP39+rhON/FGjRg33doiBxjUX2aFDh3yF79SpU1CXp4wePZqrr7463+E//fRT/u///i+AEhmOHTtG7969+d///pfve5KSkpg1a1bghPIgOTmZFi1a5PtEqmDaXpQsWZKBAwf6XQaVk48//phPP/00gFIZ/vrrL9LS0vJdl7hsL4KRbq7lngWt5zZs2MCWLVsCKFnRxTbgxYCwsDDeeOMNLrvssnzfEx8fz6FDhwK+POXw4cN07tyZ559/Pt/3ZGZmMmTIED7++OMASmZITk6mbdu2+d6GNDo6mlatWgVlvXVUVBS33HJLvlTULuLj44OyuYZr06CCVKZ169aldOnSAZTKkJmZydy5cwskW1xcXNBsLyZPnszixYsLdM/YsWN59dVXAyTRSQqqogaj9fG1Y1thM23aNB555JF8hw+2ir+oYRvwYkB0dDT33XcfrVq1yvc9wSrYBZ2LBLPU7aeffuKbb74JoGQnt54tiGxg0iwYauoff/yRtWvXFuie+Ph4MjIyAr416KlU9KrKE088wUcffRQosdxMnjyZIUOG5Dt86dKladeuXcA7tKrK7bffzsiRIwt0n8v2ItBbgyYnJ1OzZs08l7d50qBBA/c59YFERGjbtm2e6/o9adOmDWXKlLENuKXoMnPmTLZu3Vqge2JiYjjrrLPYv39/YIRycH04+Z2LdBEfHx/wzTVEhK+++opbbrmlQPeVLVs2QBKdJCsri2uuuabAFu/B6pglJydTv359n4dJeENEmDx5csBVweHh4XTr1q1AHVqA77//nilTpgRIKoNr06CCdhrj4+ODsjVofpd75mTEiBEBt6n5/PPPC7xLY2RkJB06dPC71e+/GduAF3GOHz/OxRdfXOCKXkRYsWIFTz75ZIAkM7jmIgvaQ3ctTwmkqjoyMpKLL764QCpqgCNHjnDllVcGdBS+bNkyDh48SNeuXQt0X/Xq1WnatCk7duwIkGSnNhfpIhiba4wfP56ZM2cW+L7KlSsHfJOeU9FcgOkAB8P24vfffy+QXYOLr7/+mg8//DAAEp3k2WefZfTo0QW+77PPPgua7UVRwzbgRZyFCxdy9OjRU6pMA11ZZWVlFXgu0oXrnkDOrX3zzTfMnz+/wPeVLl2aOXPm8MMPPwRAKsOpVvRgDJFeeeWVwhYpG7/88gvDhg0r8H3x8fGkpaXx119/BUAqw3//+1/eeeedAt934sQJbrvttoCOJF1bzzZv3rxA97lsLzZs2BAgyQx16tTxe2iOLwJte7F3715WrFhxSt9DzZo1g74Pf1HBNuBFnNOp6Lds2UK7du0CuoHFtGnTuP/++wt8X9OmTWndujXHjx8PgFRmFDlkyBDefPPNAt8bjM01kpOTqVGjRp47dXkj0Bb8IkKzZs3ytWlQTgKt4t+6dSvr168/pe8hIiKC2bNnB/QwnT/++CPfyz293RvIUe64ceN4//33T+ne+Ph40tPTA7Z/g8vK/VTyVVV56KGHGDt2bGGLVeSxDXgRJzk5mdjY2DwPk/BG9erVWbVqFb/++msAJDPW8R07dizwaMN176JFi/jPf/4TAMnM1rM7duw4pQoBAr816Jw5c05pLhLMcYvnnXcen332WQAkM0uavvzyy1O6NzY2lpYtWxZoWWFBOJ0Ores+11GagWDOnDm89957p3RvoA8Neeutt/j8889P6d5Ad8xcyz3j4uIKfK+I8PPPP59ymS3O2Aa8CHM6c5FwcnONQH10n376KT/++ONpxxOIyrQwKnrPeAqbefPmnfKWrRUrVmTJkiWnNA+cH1566SWSkpJO6V4RYenSpQVaClQQXFvPtm3b9pTuD/TWoFFRUfnaFtcbhw4d4pJLLgmIFf+hQ4dYtGjRKX8PNWrUoEWLFuzbt6+QJTOsXLmSdu3a5Xu5Z07O1INNbANexJk7d+5pbQEZyK1Bn3rqKT744INTvv/vv/+mbt26ATmGsiBbz3qjdevWdOnSJWD7LFetWpUGDRqc0r2BPNjkVDYNCiaLFy+mQ4cOpzznGciO2ZgxY0hMTDzl+6OiokhJScnzCNJT4VSWe+ZkyZIlp2QAlx+++eYbfv7551O+Pz4+noMHD7Js2bJClKroYxvwIoyIEBsbe0pGJy4CtTXotm3b8n2AiS/q1avHjh07AlKZzp8//5TnIgH3ph/5ObGpoIwZM+aU5uY9CdTWoKczF+li48aNtGjRIiC2FzNmzODrr78+5fubNWtG+/btA6L1SUpK4vvvvz/l+wNpe1HQrWe9EcjT3ETktA5gOlM3dLENeBFm7Nixp20x26lTJ6688krKlStXSFIZTldFDSc31wjERzd37txCMQg6ceJEoW9H+9577532JjaB2ho0OTmZ8PDwfG89642aNWuyfv36gKwwCAsLo0qVKqd1//z58wu8N0BeFPQAE18EamvQHTt20Lp163xvPeuNnTt30rFjx0Jf5z9mzBiuu+46jh07dspx1K9fn7Zt255WHMUR24AXYV599dVTNjpxER0dzfjx4+nYsWMhSWVITk6mVKlSpzwX6aJr164sWLCg0JenlCxZ8pQM/zz5888/iY6OZvbs2YUklVljXtADTLwRFxdH3759T3nO0Bfr16+nbdu2REVFnXIcrs01Crtj9uGHH3L33Xfn+2hYf6hqoc6Xpqamkp6eXuB1/TkJ1Ehy1KhRp7Sk0pMqVaqwatWqQl9zPWXKFP744w9KlChxynGICKmpqae0IqY4U+QbcBHpJiIzQi1HsCnsucgtW7YUaoW1YsUKOnTocFofHQRma9D333+fxx9//LTVpGeddRZHjx4t1Mr0zz//5MSJE6edr6VLl+b777+nZ8+ehSSZ4bPPPiuUVQvx8fEsWrSoULcG/frrr/ntt99OW5W7bNkyqlevXqjr/AtDIwVma9Dzzz8/IBbpp2vPERYWRufOnQv1ezhdQ11fcZ4pFPkGXFV/BQJ/QkIRY+7cuahqoRTsr7/+mjp16hTqPtA//vgjkyZNOu144uPjGTx48Gmp9nLy2WefMX369NPeyCY6OpqWLVsWaoV1qlvP+mL//v2FruIvjANJXFuD/vnnn4Ug0eltGpST+vXrs2/fvkKdfjhy5Aht27Y97fPaIyMjmTlzJpdeemkhSWbWf/fq1YuDBw+edlzx8fGsWLGCvXv3FoJkp771rDf++ecfGjRocFo2EsWNwJjYFj5Bn9h48803c+2bXLJkSbfF9EsvvcSMGdkVAxUqVGD8+PEADB8+PFcFUbNmTfec9qOPPsqiRYuy+Tdo0MC9hvS+++5DRApF9d2+fXsAbrrpJncF8+6779KwYUO+++47Ro0aleuepKQkatWqxZdfful1Lnn8+PGF0uhWq1aNt99+m3379tG7d+9c/rfffjtXXXUVW7Zs8Tpvee+993LJJZewZs0aBg8eDJjOz913333asoGpsJKSkrj33nt56623ALjrrrtYt25dtnBt27blpZdeAuDmm29m27Zt2fy7dOnC8OHD2bt3L23btqVSpUqnLdtPP/3EhRdeSJcuXbKp0idMmEBUVBSjR4/2akg2depUwsLCcpXxlJQUunTpwtdff03JkiVPS7bOnTtz4403Eh0dzd9//819992XK8yTTz5Jt27dSE1N5bHHHsvl/9xzz7lV8cOGDePAgQOFUtGXKVOGdu3a8eGHH5KSkkL37t154oknALj88ss5cuRItvAXXnih+8zpPn365BrhXXHFFTz11FOFum3xyJEjc1mjly1blm+//RYw247+9ttv2fyrVq3qnp8eNmyYe3/wlStXcuzYsUKxg3Gl/+TJk7n55puZNWuW15MI33rrLc466yx+/PFHXnvttVz+H3zwATExMe6jcQsjX+vUqcP27dt5/PHH3VuyXn311dx2222kpaV5NUgdNGgQ1113HTt37uSGG27I5X/33XfTv39/1q9fz5133pnL/6GH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LM/5vLxGGlWrVmXOnDnccccdecp29OhRfvzxRy677DLCwsKIiIhg2rRpXo0AO3funGdFU6dOHapXr+61Ac/MzOS6667ju+++Y+jQofk6Heyll17igQcecI8O4+Pj2b9/f64OQEpKCpUrV86zN7948WJGjRrl1W///v2MGDEi31MUaWlp9O7dm7Zt2wJw7bXXUqtWrVxq9DJlyvDaa6/Rt29fv/Gdc845HDp0yH1usyfz589n4MCB/Prrr/maM1y6dCnr1q3L1lF98cUXadSoEQcOHHC77dmzhw0bNuSrQxsREeHVsnj//v3Ex8fz6KOPkpSUlKdsAL1792bGjBlERkYSFhbGww8/zOLFi3PZOKxduzZfqvEOHTpw5513evUbOnQon3/+OQkJCdne3RcTJkygcuXKNG7cGDDTVqqaSyWckpJCiRIlaNGihd/4/O2P8NFHHzF06NB87zW/ZcuWbNNv/fr1o2nTprk0P3PmzKFJkyZ+DfBcHDp0yGe6zJw5k+TkZN58880849m0aRMLFizg8ssvp0mTJjz55JN+69lQrQGHIDfgIvKwiNwoIvfkcG8iIk85/k18uYWS3r17AxR4OVmfPn249957CQ8P55133skz/MSJE+nevbt7pAHw559/0rp1a/755x+3W+3atbnqqqvy7PX5MvBYvnw5V1xxBbVr1+bJJ5/M1/KHDz74gEGDBmWriIYOHcr27dv57LPP3G55GZ14ct111+Uyhjty5Ah//fUXERERXHTRRSxatMi9VaEv9u3bR58+fbjyyivdbi1atKBEiRK5KpVHHnnE59I7F/62LR06dCjfffcdPXr04KabbsqzI3Lw4EFmzJjB5Zdf7m7A27ZtS8+ePXnjjTeyzbOnpqbSrl27PNd5+5qamDRpEvXr12fXrl2sXr2at99+2288YDpi06ZNc59oV6JECWbPns0HH3yQLdy2bdvyZRPgq8xlZWVx++23Ex0dTcOGDXn33XfzXDvtmpt3dS7AnJB18ODBbPLlZxQJZnVHWloaN9xwQzb3Y8eOMWDAABYsWMD27dv53//+l+ec5q5du3JNg1x//fVUr17dPb8LZp68WbNmPPXUU37jA1MufC3Du++++7jgggvIyMhg3LhxfuM5fvw4U6ZM4dJLL81WPp966ilatWqVTe7t27dz9tlnU6JECb9xurQXOVcYzJ49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jh8/ni3Mww8/rBEREbplyxavsj399NMaFhamO3fu9PusMWPGaIUKFfQ///lPvmT77LPPFNDExER95513FNB77rknWzrMnDlT//vf/+qBAwe8yvbrr7/6TY/rr79ey5Ytq2+//ba2b99eGzRokC/ZPJ+zcOFCffLJJzUzMzOb//79+zUqKkoHDRrkVbasrCxt3ry53n777V7jnz9/vm7ZssV9T3p6uqanp+dLtjZt2miLFi30nXfe0VatWmn58uX1r7/+yhbm/PPP13r16umJEye8ynfxxRdrbGys13K3fv16DQ8P14cfflhfeuklBfS9997Ll2wzZszQRx55RMeMGaN33HGHAjpjxoxsYXbs2KEPPPCALl++3KtsqqrHjh3Tw4cP54o/MzNTmzdvrvHx8X6/SW9MmzZNAX3kkUc0KytLb7jhBr3uuuuypcGff/6pgL711lteZVu2bJkC+s4773h9xtdff60VKlTQkSNH6nnnnacVKlTw+W17cvToUQ0PD9e+ffvqqlWrtHLlytqkSRPds2eP3/sKkgaTJ09WQD/99FN98MEH9eyzz9atW7fm6963335bu3bt6n5WZmam/vPPP9nCDBw4UCtWrJgt3zzlu/nmm7VixYp67Ngxn885ePCgjho1yl3n5YcXXnjBnWePPfaYAvrKK69kC5OcnKwrV67M5uYp26effqpdu3bVHTt2uP3HjRungC5btszrPbfddps+/vjj+ZLxVPFsDz3/gjkHvgtwHbxcDtjjXO8BPHUtZYBDXtz2B1i+fDFt2jTefvttJk6cyObNm7PNVR0/fpw333yTrVu38t1337nVQC5UlTlz5nidW9u2bRtNmjThjTfe8Prcs88+m969e/Pmm2+6jeF8rbHOyYwZM/j44495//33eeihh8jKyspltHb33XeTmZnp06p6yZIldO3aNZsK0JONGzfSv39/NmzYwCuvvJJvS1nXfOn06dO599576devH6+99lq2OeDzzz+fF198kfLly3uNY+LEiZQoUcLnxitDhw7l0KFDzJo1K1+GTp6sXbuW2bNn069fP5KSknJtnhIdHc2NN97I559/zp49e3LdLyIsXbqUV1991Wv87du3z6ZJKVmyZL63Y4yLi2P9+vVERETQsWNHvv7661yGSP/973+56667vM5dHzp0iJ9//jnb3Lwn9erV46qrruL9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3HLLLanVU5s2baJSpUpBjWnRokWcOHGCsLAwateuTdeuXSlYsGDmL/SzEiVK4HA4UhP32bNngxyRlSw3btxI0aJFWbNmDX379g16NXpkZCSPPfYYFStW5Pvvv2fw4MFcuHAhaPHEx8czevRobrrpJho2bEidOnXYtGkTe/bsyfzFfpKUlMSwYcOoXr06HTp0oGnTppw6dYoff/wxaDEBDB8+nEKFCtGjRw+aNGmCMYaFCxcGNaaxY8dy9uxZXn31VUSE3r17s3fvXj744IOgxhUMwU7gS7BmKQJrovplIhIJqXNKNzTGfCEihe0pD5Uf/fzzz8yZM4e2bdsiIhQtWpQGDRoEtRp2//799OvXj3//+9+pyy5cuMC8efOClpji4+O59dZbWbPmn6mGv/nmG0qXLs3p08EZfTElJYWjR48iItSoUQOAc+fOMW/ePLZu3ZrJq/3L4XDw1ltvAdC0aVPOnz/PihUrghZPoUKFmDVrFpMmTUJEaNKkCUBQm4s2b97M3r17GT9+PBEREdStW5cCBQrwn//8J2gxffvttyxevJiRI0dStGhRKlasSPXq1YMa086dO5k8eTL3338/9erVA6BevXq0b9+evXv3Bi2uYAlqAjfGxAIJIjIIaxq4U8AUe17YZcC/RWQ98APWdHfKT4wxPP3005QtWza1sxjA1q1bue+++whWH4NRo0YB8MILL6Qu27hxI3379g1a79PXX3+dr7/++rKOM5UrVyYhIYGvv/46KDF98sknVK9end9//z11WePGjQGCdsJdv349X3311WUXWrVr1yYyMjJoMRljEBG6dOlCgwZW2aF06dLUr18/qImpUaNG7Nmzh969ewOQL18+OnfuzPz580lJSQlKTIUKFaJnz5488cQTAIgI0dHRxMXFBa3T2NixY8mXLx9jxoxJXSYiLF++PNe0zwdSsEvgGGPGGWOmG2PeMMZsMsb0N8bEGWMaudq3jTFNTbDrAf3o3LlzbN++PagxzJs3j59//plx48ZRuHDh1OUJCQnMnDkzKNVmGzZsYNasWTz55JOX3fvdsGFDwsPDg3LCPXz4MK+++ip9+/aldevWqctr1KhB6dKlgxLThQsXGDlyJNdeey1169ZNXV68eHGuv/76oMRkjGHIkCEMHjyYhISE1OURERHcdtttLFq0iKSkpIDHNXjw4NRe+mlFR0ez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95juu+8+2rRp43XpJDY2NsfD1WZm//79vP/++yQkJHi1/nPPPee30rdLTEwMq1at4sCBA16tP2PGDKZMmZL5ijmM6ejRo1meXc6f1ZwxMTEkJSV5fZyLCOPHj+fuu+/2W0y9e/cmPDzc6yprYwxz587Nck/srGjfvj1RUVF8+eWXXq2fmJjI9u3b/X4+cBk8eDCdOnXKdL3k5GTWrFnjl6ZHX9EE7sagQYPo2LEjkydP5v777w92OFf49ttvufPOO706sFxtS/7uNT9p0iRiYmK8KvH+8ssvXLhwwe8/2BYtWrB161avZls6ceJEQE4iMTExnD17lqVLl2a6bkpKCqtWrQpITIDX/RjeeeedbPV5yIrbbruNggULep2YHnjgAe677z6/xtS0aVOuueYar2Pav3+/1xdq2RUVFUWnTp28vpUzLCyMm266ya81TRERESxdupSpU6d6tX7evHk5ceIEI0aM8FtMaaWkpLB+/fpMzwurV6/m+uuvz9ZdGoGiCdwNEeG1117j0UcfDXYobh07doxPP/00NTlnZMOGDRQuXJj69ev7NaaYmBguXbrk1bzAgeqw0rt3b8LCwrw64brutfZ3TB06dKBUqVJexbR161ZOnTrl94uv6tWr07RpU69iio+PZ9OmTX7fT4UKFeK2227jiy++ICnJ4xxGwD/t+P7uwyAiDB8+nG7dunm1/t13352tHv5ZtWjRIqZNm+bVuv/5z3+8bv/NiSZNmmTp1rk8efL4bJ5zb3Tp0iXT22oXLFhAnjx5vCqtB4sm8BDUvXt3ChQo4NUJ97XXXmPbtm05nu4xM82aNaNatWpexRQREcGNN96YpaaA7ChdujQ33XSTV518YmNjyZMnD82aXTHhj0+57p1ftGhRpvc6+2NQGU9iYmI4fPhwptPW+npI3ow8//zz/Pe//820458/huT15MEHH/Rq8JTExETWrl0bkMGeXPvHm05jI0aMYNKkSX6OyDJlyhSeffbZTNd78sknmTBhQgAisoSFhdG+fftML2QWLFhA+/btfTr4la9pAg9BhQsXplu3bsybNy/TTj4i4vXMPjnh6uTzzTffcPLkyQzXHTJkSJYHU8iumJgYdu3alemY37fccgtjx46lgD0tpj8NGDCAPn36ZDpHeGxsLKVLl6Z69ep+j2nIkCHs378/05OVP4bk9aRevXrUr18/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\n",
44 | "text/plain": [
45 | ""
46 | ]
47 | },
48 | "metadata": {
49 | "needs_background": "light"
50 | },
51 | "output_type": "display_data"
52 | }
53 | ],
54 | "source": [
55 | "# Additional examples with full- and partial-overlap..\n",
56 | "\n",
57 | "length_signal = 10\n",
58 | "\n",
59 | "t_conv86 = torch.nn.ConvTranspose1d(in_channels=1, out_channels=1, kernel_size=8, stride=6, bias=False)\n",
60 | "t_conv86.weight.data = torch.ones(1,1,8) # this filter is initialized with ones.\n",
61 | "o86 = t_conv86(torch.ones(1,1,length_signal))\n",
62 | "np86 = np.squeeze(o86.detach().numpy())\n",
63 | "\n",
64 | "t_conv86r = torch.nn.ConvTranspose1d(in_channels=1, out_channels=1, kernel_size=8, stride=6, bias=False)\n",
65 | "o86r = t_conv86r(torch.ones(1,1,length_signal)) # this filter is initialized at random.\n",
66 | "np86r = np.squeeze(o86r.detach().numpy())\n",
67 | "\n",
68 | "t_conv84 = torch.nn.ConvTranspose1d(in_channels=1, out_channels=1, kernel_size=8, stride=4, bias=False)\n",
69 | "t_conv84.weight.data = torch.ones(1,1,8) # this filter is initialized with ones.\n",
70 | "o84 = t_conv84(torch.ones(1,1,length_signal))\n",
71 | "np84 = np.squeeze(o84.detach().numpy())\n",
72 | "\n",
73 | "t_conv84r = torch.nn.ConvTranspose1d(in_channels=1, out_channels=1, kernel_size=8, stride=4, bias=False)\n",
74 | "o84r = t_conv84r(torch.ones(1,1,length_signal)) # this filter is initialized at random.\n",
75 | "np84r = np.squeeze(o84r.detach().numpy())\n",
76 | "\n",
77 | "ax1 = plt.subplot(4, 1, 1)\n",
78 | "ax1.set_title('Transposed convolution: init. with ones, partial-overlap (length=8, stride=6)', fontsize=12.8)\n",
79 | "t = np.arange(0, len(np86))\n",
80 | "plt.stem(t, np86, 'gray', markerfmt='k--')\n",
81 | "\n",
82 | "ax2 = plt.subplot(4, 1, 2)\n",
83 | "ax2.set_title('Transposed convolution: init. at random, partial-overlap (length=8, stride=6)', fontsize=12.8)\n",
84 | "t = np.arange(0, len(np86r))\n",
85 | "plt.stem(t, np86r, 'gray', markerfmt='k--')\n",
86 | "\n",
87 | "ax3 = plt.subplot(4, 1, 3)\n",
88 | "ax3.set_title('Transposed convolution: init. with ones, full-overlap (length=8, stride=4)', fontsize=12.8)\n",
89 | "t = np.arange(0, len(np84))\n",
90 | "plt.stem(t, np84, 'gray', markerfmt='k--')\n",
91 | "\n",
92 | "ax4 = plt.subplot(4, 1, 4)\n",
93 | "ax4.set_title('Transposed convolution: init. at random, full-overlap (length=8, stride=4)', fontsize=12.8)\n",
94 | "t = np.arange(0, len(np84r))\n",
95 | "plt.stem(t, np84r, 'gray', markerfmt='k--')\n",
96 | "ax4.set_xlabel('Discrete time-steps', fontsize=14, color=\"gray\")\n",
97 | "ax4.set_ylabel(' Amplitude', fontsize=14, color=\"gray\")\n",
98 | "\n",
99 | "plt.tight_layout()\n",
100 | "plt.savefig('PNGs/Figure5.png')\n"
101 | ]
102 | }
103 | ],
104 | "metadata": {
105 | "kernelspec": {
106 | "display_name": "Python 3",
107 | "language": "python",
108 | "name": "python3"
109 | },
110 | "language_info": {
111 | "codemirror_mode": {
112 | "name": "ipython",
113 | "version": 3
114 | },
115 | "file_extension": ".py",
116 | "mimetype": "text/x-python",
117 | "name": "python",
118 | "nbconvert_exporter": "python",
119 | "pygments_lexer": "ipython3",
120 | "version": "3.7.3"
121 | }
122 | },
123 | "nbformat": 4,
124 | "nbformat_minor": 4
125 | }
126 |
--------------------------------------------------------------------------------
/Figures/PNGs/Fig6l_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig6l_1.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig6l_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig6l_2.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig6l_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig6l_3.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig6l_signal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig6l_signal.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig6r_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig6r_1.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig6r_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig6r_2.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig6r_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig6r_3.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig6r_signal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig6r_signal.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig7_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig7_1.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig7_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig7_2.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig7_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig7_3.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig7_signal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig7_signal.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig8l_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig8l_1.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig8l_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig8l_2.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig8l_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig8l_3.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig8l_signal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig8l_signal.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig8r_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig8r_1.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig8r_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig8r_2.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig8r_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig8r_3.png
--------------------------------------------------------------------------------
/Figures/PNGs/Fig8r_signal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Fig8r_signal.png
--------------------------------------------------------------------------------
/Figures/PNGs/Figure2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Figure2.png
--------------------------------------------------------------------------------
/Figures/PNGs/Figure3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Figure3.png
--------------------------------------------------------------------------------
/Figures/PNGs/Figure4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Figure4.png
--------------------------------------------------------------------------------
/Figures/PNGs/Figure5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/Figure5.png
--------------------------------------------------------------------------------
/Figures/PNGs/demucs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/demucs.png
--------------------------------------------------------------------------------
/Figures/PNGs/demucs_mod.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/demucs_mod.png
--------------------------------------------------------------------------------
/Figures/PNGs/linear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/linear.png
--------------------------------------------------------------------------------
/Figures/PNGs/melgan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/melgan.png
--------------------------------------------------------------------------------
/Figures/PNGs/nearest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/nearest.png
--------------------------------------------------------------------------------
/Figures/PNGs/signal_Fig1_22kHz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/signal_Fig1_22kHz.png
--------------------------------------------------------------------------------
/Figures/PNGs/signal_Fig1_44kHz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/signal_Fig1_44kHz.png
--------------------------------------------------------------------------------
/Figures/PNGs/subpixelcnn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/subpixelcnn.png
--------------------------------------------------------------------------------
/Figures/PNGs/subpixelcnn_mod.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/DolbyLaboratories/neural-upsampling-artifacts-audio/ab496c7987c393e20f29bec4d2a701a260568682/Figures/PNGs/subpixelcnn_mod.png
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Dolby Laboratories
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Upsampling Artifacts in Neural Audio Synthesis
2 |
3 | This repository contains a markdown copy of our article ([ARTICLE.md](ARTICLE.md)) and code to experiment with its figures:
4 | * **[Figures 1 and 9](Figures/Fig1_9.ipynb)**: experiment with several neural audio synthesizers that can produce upsampling artifacts.
5 | * **Figures 2, 3, 4**: conceptual figures, with no code to experiment with them.
6 | * **[Figure 5](Figures/Fig5.ipynb)**: understand that any transposed convolution setup, even with full or no overlap setups, produces a poor initialization (with tonal artifacts) due to the weights initalization.
7 | * **[Figure 6 (left column)](Figures/Fig6_left.ipynb)**: experiment with nearest neighbor interpolation upsampling layers, that introduce filtering artifacts.
8 | * **[Figure 6 (right column)](Figures/Fig6_right.ipynb)**: experiment with linear interpolation upsampling layers, that introduce filtering artifacts.
9 | * **[Figure 7](Figures/Fig7.ipynb)**: experiment with subpixel convolution upsampling layers, that can introduce tonal artifacts.
10 | * **[Figure 8 (left column)](Figures/Fig8_left.ipynb)**: experiment with transposed convolution upsampling layers, that can introduce tonal artifacts.
11 | * **[Figure 8 (right column)](Figures/Fig8_right.ipynb)**: experiment with linear interpolation layers, without the interleaved (learnable) convolutions. This figure is used as reference to discuss the spectral replicas of filtering artifacts.
12 |
13 | #### Abstract:
14 |
15 | A number of recent advances in neural audio synthesis rely on upsampling layers, which can introduce undesired artifacts. In computer vision, upsampling artifacts have been studied and are known as checkerboard artifacts (due to their characteristic visual pattern). However, their effect has been overlooked so far in audio processing. Here, we address this gap by studying this problem from the audio signal processing perspective.
16 |
17 | In our study, we show that the main sources of upsampling artifacts are: (i) the tonal and filtering artifacts introduced by problematic upsampling operators, and (ii) the spectral replicas that emerge while upsampling.
18 | We then compare different upsampling layers, showing that nearest neighbor upsamplers can be an alternative to the problematic (but state-of-the-art) transposed and subpixel convolutions which are prone to introduce tonal artifacts.
19 |
20 | See the complete article at [ARTICLE.md](ARTICLE.md) or on [arXiv](https://arxiv.org/pdf/2010.14356.pdf).
21 |
22 | #### Reference:
23 | ```
24 | @inproceedings{pons2021upsampling,
25 | title={Upsampling artifacts in neural audio synthesis},
26 | author={Pons, Jordi and Pascual, Santiago and Cengarle, Giulio and Serr{\`a}, Joan},
27 | booktitle={IEEE international conference on acoustics, speech and signal processing (ICASSP)},
28 | year={2021},
29 | organization={IEEE}
30 | }
31 | ```
32 |
--------------------------------------------------------------------------------