본문 바로가기

audio/audio generation (tts)

[논문리뷰] WaveFlow: A Compact Flow-based Model for Raw Audio (ICML20)

논문: WaveFlow: A Compact Flow-based Model for Raw Audio

저자: Wei Ping, Kainan Peng, Kexin Zhao, Zhao Song

소속: Baidu Research

발표: ICML 2020

논문: https://proceedings.mlr.press/v119/ping20a.html

오디오샘플: https://waveflow-demo.github.io/

코드: https://github.com/PaddlePaddle/Parakeet/tree/develop/examples/waveflow

 

- WaveFlow
- 기존 Flow방식 보코더들이 데이터를 1D로만 squeeze해서 다루기 때문에 비효율적이라고 여김. 2D로 표현하고 dilated 2D convolutional로 다루니 더 효율적으로도 생성이 가능해졌음. 
- 그러다보니 기존 1D 방식들은 이 방식의 special case라고 주장할 수도 있게 됨.
- 가볍고(5.91M 파라미터) 빠름. WaveNet과 비슷한 MOS가 나오면서도 WaveGlow보다 15배 빠름. 리얼타임보다 42.6배 빠름.

Story

이미지 분야에서 개발된 flow-based 모델들이 오디오 생성 분야에서도 속속히 이용되고 있음.  일단 flow-based모델은 크게 두 그룹으로 구분할 수 있는데, 먼저 autoregressive transformation가 있음. 여기에는 autoregressive flow(AF)와 inverse autoregressive flow(IAF)가 있는데, AF는 훈련을 병렬로 할 수 있는 반면 생성은 sequential하게 하고, IAF는 반대로 훈련은 sequential하게 하지만 생성은 병렬로 할 수 있음. 따라서 IAF의 빠른 생성속도만을 이용하기 위하여 별도의 WaveNet을 먼저 훈련시키고 이를 distillation방법을 이용하여 IAF 모델을 만들어 오디오 생성을 매우 빠르게 하는 연구들이 소개되었음[Oord18][Ping19].

 

또 다른 그룹으로는 bipartite transformation그룹이 있음. 이는 likelihood-based 훈련과 병렬 생성이 가능한 모델임. WaveGlow[Prenger19]과 FloWaveNet[Kim19]에서 사용했는데, 이 모델들의 단점은 autoregressive 그룹 모델들과 비슷한 수준을 내려면 레이어와 파라미터등이 많이 필요하다는 것임. 그리고 time-domain 샘플들을 채널에 squeeze 하게 되는데 이때 시간정보를 잃게 되어 모델링에 효율성이 떨어진다는 단점도 있음.

 

그래서 첫 번째 그룹의 방법(AF)를 이용하여 훈련을 빠르게 하지만 몇 가지 개선사항을 이용하여 생성도 빠르게 만들어 보겠음. 즉 더욱 적은 파라미터를 가진 가벼운 모델로도 더 빠르고 좋은 모델을 만들어보겠음.

 

Flow-based generative models

[Dinh14][Rezende15][Dinh17]등에서 소개한 flow-based 모델은 가우시안처럼 간단한 분포 $p(z)$를 bijection $x=f(z)$를 적용하여 복잡한 데이터 분포 $p(x)$로 변환시키는 방법임. $p(x)$는 $p(z)$로부터 아래와 식으로 얻을 수 있음.

이 식에서는 Jacobian의 determinant을 계산해야 할 필요가 있음. 일반적으로 determinant를 계산하는 것은 $O(n^3)$이 필요한 시간이 많이 걸리는 작업이므로 이를 더 빨리해결해야함. 그래서 autoregressive 그룹 모델들은 이를 triangular Jacobian으로 만들어 계산을 간단하게 만들고(이러면 대각선 값들만 곱하면 됨), bipartite 그룹 모델들은 간단한 $f$를 사용하여 (곱과 덧셈등) 계산을 쉽게 만들도록 함. 

autoregressive(a) 그룹과 bipartite(b)그룹의 Jacobian의 모양.

 

Autoregressive transformation

autoregressive flow(AF)는 인풋 $x_t$에 scaling variable $\sigma_t$를 곱하고 shifting variable $\mu_t$를 더해 $z_t$를 생성함

여기서 시그마와 뮤는 모두 autoregressive 구조로 되어 있음. 그렇기 때문에 자코비안은 triangular matrix로 만들수가 있음. 따라서 $p(x)$는 빠르게 구할 수 있지만(가장 위의 식을 참고) 생성할 때는 sequential하게 하나씩 해야하므로 참 느림. 만대로 IAF[Kingma16]는 $x$와 $z$를 바꾸어 표현함으로써 $p(x)$를 구하는건(훈련) 매우 느리지만 생성은 빠르게 할 수 있음. 그래서 Parallel WaveNet[Oord18]이나 ClariNet[Ping19]에서는 별도의 WaveNet 모델을 훈련시키고 이와 비슷한 IAF모델을 만들어서 생성속도가 빠른 IAF의 장점을 활용하였음.

 

Bipartite transformation

RealNVP[Dinh17]와 Glow[Kingma18]에서는 bipartite transformation을 제안함. 먼저 $x$는 $x_a$와 $x_b$두 부분으로 나뉘고 inverse mapping은 아래와 같이 정의됨.

여기서 $\mu$와 $\sigma$는 feed-foward 네트워크로 모델링 됨. 따라서 Jacobian은 네모 모양의 특별한 triangular 형태를 띄게 됨. 이제 $x$는 아래와 같이 계산될 수 있고,

훈련과 생성 모두 병렬적으로 빠르게 이루어질 수 있음. WaveGlow[Prenger19]과 FloWaveNet[Kim19] 모두 이 방식을 사용.

 

Connections

autoregressive 방식이 더 비쌈. 위의 그림을 봐도 알 수 있듯이 autoregressive 모델들이 non-linear dependency (진한 파란색 네모)들과 linear dependency(연한 파란색 네모)들의 수가 더 많음. 그런데 사실 잘보면 autoregressive 모델의 dependency를 줄여서 bipartite 모양으로 만들 수 있음. 즉 autoregressive order를 줄이고 shifting과 scaling 변수를 바꾸면 됨.

하지만 bipartite 블락의 표현력이 더 약하므로, autoregressive 모델과 동등한 성능을 내기 위해서는 더 많은 레이어와 어 많은 히든 사이즈가 필요함.

 

WaveFlow

Definition

먼저 1D waveform x는 $h$-높이의 2D matrix로 squeeze됨. 그리고 같은 크기의 2D $Z$는 가우시안 분포에서 샘플링된다고 가정함. 이제 $X$는 $\mu$와 $\sigma$로 인하여 $Z$로 변형될 운명.

여기에서 (a)WaveFlow, (b)WaveGlow, (c)WaveNet(autoregressive flow)의 차이를 정의하면, 먼저 (a)WaveFlow는 $i$번째 row위의 모든 element를 고려함. 따라서 항상 (b)WaveGlow보다는 넓은 부분을 고려하게 됨. (c)WaveNet은 autoregressive이기 때문에 그 전까지 모든 element를 보게 됨. 하지만 causal이기 때문에 미래의 element는 보지 못함. 반면 WaveFlow와 WaveGlow는 미래의 element도 고려하게 됨.

여기에서 $\mu$와 $\sigma$는 2D CNN을 이용하여 모델링 됨. definition에 따라 Jacobian은 여전히 triangular행렬이고 determinant는 여전히 대각선 값들의 곱임.

 

이제 이 부분을 넣어서 log-likelihood를 정리하면 아래와 같음.

 

따라서 효율적으로 계산할 수 있는 모양으로 정리할 수 있음. 합성할 때는, autoregressive 방법으로 진행하게 됨. 

하지만 합성 시간은 height 차원인 $h$에 좌우됨. 보통 $h$는 8 혹은 16정도여도 잘 작동하기 때문에 매우 긴 waveform도 몇번의 스텝만으로 생성할 수 있음.

 

Implementation with dilated 2D convolutions

이 논문에서는 뮤와 시그마를 계산하기 위한 모델로 dilated 2D convolutional 네트워크를 사용함. 즉 WaveNet과 유사한 형태지만 1D가 아닌 2D를 사용한다는 것이 차이점임(레이어도 8개를 사용함). 그 외에 gated-tanh나 skip이나 residual connection은 동일하게 사용. 필터사이즈는 3, width차원에서는 non-causal로 구성된다는 것도 차이점임.  height차원에서는 여전히 causal을 사용하고(그래야지 autoregressive constraint를 만족함) dilation cycle도 신중하게 선택함. 여러가지를 고려해서 h에 따른 dilation cycle은 다음과 같이 정의하였음.

그리고 속도 향상을 위하여 convolution queue[Paine16]를 구현하였음. 여기서 잘 보면 WaveFlow는 만일 $h=n$으로 놓고 width차원에서 필터크기를 1로 두면 Gaussian WaveNet[Ping19]과 같아짐. 만일 $h$=2, 그리고 height차원의 필터크기를 1로 둔다면 채널크기가 2인 WaveGlow와 동일한 모델이 됨.

 

Local conditioning for speech synthesis

이 논문에서도 조건(condition)으로 멜스펙트로그램을 이용함. transposed 2D convolution을 이용하여 samplign rate으로 업샘플링함. $c$(=mel bands) x $h$ x $w$로 squeeze시켜서 크기를 맞추고, input 채널을 residual 채널로 맞추기 위하여 1x1 convolution을 하고 각 레이어마다 바이어스 텀도 하나씩 추가함.

 

Staking multiple flows with permutations on height dimention

flow-based model은 $X$에 여러번에 $Z$를 적용하여 원하는 분포 모양으로 변형하게 됨($Z^{(0)}, Z^{(1)}, \cdots $). 따라서 $P(X)$는 $Z$에 대한  chain rule로 표현할 수 있음.

그런데 각 transformation이 끝난 후에 height 차원에서 $Z^{(i)}$를 섞어주면(permute) likelihood 점수가 크게 향상된다는 것을 발견했음. 두 종류의 permutation starategy를 테스트해봤는데 먼저 a) 각 transformation후에 8개의 flow($Z^0, Z^1,\cdots, Z^7$)를 reverse 시켜봤음($Z^7, Z^6, \cdots, Z^0$). 그다음으로 b) 중간 반절을 reverse시키고 또 다른 중간 반절을 reverse 시켰음($Z^3, Z^2, Z^1, Z^0, Z^7, Z^6, Z^5, Z^4$). 결과는 다음과 같음.

 

즉 둘다 도움이 되었는데 b)가 조금 더 나은 결과를 보여주었음.

 

Experiment

LJ speech 데이터셋 사용. WaveFlow와 비교 모델로는 Gaussian WaveNet, WaveGlow, autoregressive flow(AF)를 이용하였음. 여기서 AF는 WaveFlow에서 웨이브폼을 그냥 자신의 길이로 squeeze하고 필터사이즈를 1로 설정하였음. WaveFlow와 WaveGlow의 경우는 여러 세팅으로 실험함.

 

Likelihood

log-likelihoods (LLs)를 비교해봄. 

정리하면 1) flow 방식에서는 많이 쌓으면 많이 쌓을 수록 LLs가 좋아짐. 2) 만일 파라미터수가 동등하다면 WaveFlow는 WaveGlow보다 LLs가 더 좋음. 3) WaveFlow에서 높이 h를 증가할 수록 더 좋아짐. 하지만 인퍼런스 시간은 늘어날거임. 4) WaveNet가 동일한 채널(128)의 경우 WaveFlow가 더 나았음. 채널수를 늘리면 더 좋아짐. 현재까지는 autoregressive model과 flow-based model 같에 likelihood gap이 있었는데, 여기에서 보면 그런 gap이 거의 없어진 것을 알 수 있음. 

 

Speech fidelity and synthesis speed

비교 모델 사이즈를 더 넓이고 ClariNet도 추가하여 샘플을 생성하여 AMT에서 MOS를 측정해봤음. 또한 NVidia V100 GPU 하나에서 속도를 측정해봤음. FP16으로 돌렸는데 오디오 품질저하없이 2배만큼 빨라졌음. 또한 convolution queue를 사용하니 h값에 따라 3-5배 속도 상승이 있었음.

정리해보면 1)  5.91M 파라미터를 갖는 작은 WaveFlow도 리얼타임보다 42.6배 빠르면서 높은 MOS(4.32)를 받았음. 반면 작은 크기의 WaveGlow는 점수가 확실히 낮았음(2.17). 2)큰 WaveFlow(채널 256)은 동일한 크기의 WaveGlow보다 더 높은 점수(4.43 vs 4.34)를 받음. 이는 WaveNet의 점수와 동등한 수준임. 하지만 생성시간은 비교가 안됨. 3) ClariNet은 가장 작은 파라미터를 가지면서도 꽤 좋은 점수(4.22)를 받았음. 하지만 다른 모델들은 충분한 model capacity가 있다면 더 좋은 결과를 만들어 냈음. 

 

MOS점수와 LLs 값도 positive correlation을 보여주었음. 즉 LLs 값도 모델 성능을 평가할 때 제법 좋은 메트릭으로 생각할 수 있음.

Text-to-Speech

이제 Deep Voice 3[Ping18]을 이용하여 mel을 생성하고 이를 WaveNet, WaveGlow, WaveFlow를 이용하여 오디오를 생성하여 MOS비교를 해보았음. 

즉 WaveFlow는 충분히 좋은 보코더임을 알 수 있음. 

 

 

Flow-based 보코더의 또다른 업그레이드.
그나저나 이름들이 다들 이렇게 비슷해서리...

 

 

 

  • [Dinh14] Dinh, L., Krueger, D., and Bengio, Y. NICE: Non-linear independent components estimation. arXiv preprint arXiv:1410.8516, 2014.
  • [Rezende15] Rezende, D. J. and Mohamed, S. Variational inference with normalizing flows. In ICML, 2015.
  • [Kingma16] Kingma, D. P., Salimans, T., Jozefowicz, R., Chen, X., Sutskever, I., and Welling, M. Improving variational inference with inverse autoregressive flow. In NIPS, 2016.
  • [Paine16] Paine, T. L., Khorrami, P., Chang, S., Zhang, Y., Ramachandran, P., Hasegawa-Johnson, M. A., and Huang, T. S. Fast wavenet generation algorithm. arXiv preprint arXiv:1611.09482, 2016.
  • [Dinh17] Dinh, L., Sohl-Dickstein, J., and Bengio, S. Density estima- tion using Real NVP. In ICLR, 2017.
  • [Ping18] W.Ping, K.Peng, A.Gibiansky, S.O.Arık, A.Kannan, S.Narang, J.Raiman, J.Miller. Deep Voice 3: Scaling Text-to-Speech with Convolutional Sequence Learning. ICLR 2018. [논문리뷰]
  • [Oord18] A.van den Oord, Y.Li, I.Babuschkin, K.Simonyan, O.Vinyals, K.Kavukcuoglu, G.van den Driessche, E.Lockhart, L.C.Cobo, F.Stimberg et al., Parallel WaveNet: Fast high-fidelity speech synthesis. ICML 2018. [논문리뷰]
  • [Kingma18] Kingma, D. P. and Dhariwal, P. Glow: Generative flow with invertible 1x1 convolutions. In Advances in Neural Information Processing Systems, pp. 10215–10224, 2018.
  • [Kim19] S.Kim, S.Lee, J.Song, J.Kim, S.Yoon. FloWaveNet: A Generative flow for raw audio. ICML 2019. [논문리뷰]
  • [Ping19] W.Ping, K.Peng, J.Chen. ClariNet: Parallel wave generation in end-to-end text-to-speech. ICLR 2019. [논문리뷰]
  • [Prenger19] R.Prenger, R.Valle, B.Catanzaro. WaveGlow: A flow-based generative network for speech synthesis. ICASSP 2019. [논문리뷰]