본문 바로가기

audio/audio generation (tts)

[논문리뷰] WaveGlow: A Flow-Based Generative Network for Speech Synthesis (ICASSP19)

제목: WaveGlow: A Flow-Based Generative Network for Speech Synthesis

저자: Ryan Prenger, Rafael Valle, Bryan Catanzaro

소속: NVIDIA Corporation

발표: ICASSP 2019

논문: https://ieeexplore.ieee.org/document/8683143

오디오샘플: https://nv-adlr.github.io/WaveGlow

코드: https://github.com/NVIDIA/waveglow

 

- WaveGlow
- flow 방식의 보코더(멜스펙트로그램으로부터 오디오를 생성)
- Glow의 구조를 기본으로 하고 여기에 WaveNet의 아이디어를 결합했음. flow기반이기 때문에 엄청 빠르게 생성됨. 
- 하나의 loss만을 사용한 하나의 네트워크로 구성됨. 따라서 훈련도 빠르고 잘됨.
- 하나의 GPU만으로도 오디오 샘플을 500 kHz 이상으로 빠르게 생성(리얼타임보다 25배 빠름).

Story

보코더 분야에서 WaveNet[Oord16]의 속도를 개선시키기 위한 몇가지 기술들이 나왔음[Oord18][Arik18][Ping19]. 하지만 이 모델들은 다들 너무 복잡함. 훈련하기도 구현하기도 힘듬. 그런데 이미지 분야에서 Flow방식 생성모델이 계속 발전하면서 Glow[Kingma18]라는 좋은 모델이 나왔음. 그래서 Glow를 오디오 분야에 적용하고 WaveNet의 아이디어와 결합하여 구현하기도 훈련하기도 간단한 모델을 제안함. 간단한 모델로도 속도와 퀄리티 두 마리 토끼를 다 잡아보겠음.

 

WaveGlow

일단 Flow의 방식의 기본은 간단한 분포(보통은 가우시안)에서 랜덤 샘플링해서 데이터를 만들고 이를 여러 종류의 레이어를 통해서 원하는 분포의 모양으로 만드는 것. 

하지만 그렇게 쉽지는 않겠지. 따라서 flow-based network연구들에서는 이러한 레이어들이 모두 invertible하도록 만듬. 그러면 likelihood도 이렇게 간단(!)하게 구할 수 있음.

 

물론 더 많은 내용들이 있지만, 더 이상의 내용은 여기에 대한 클래식 논문들[Dinh14][Rezende15][Dinh16]을 참고하는 것을 추천.

 

WaveGlow의 전체 네트워크 구조는 아래와 같음

사실 Glow와 거의 유사한 형태임. 오디오 샘플은 8개씩 벡터로 표현되고(squeeze) 여러 flow step을 거쳐서 변형됨. 이 step은 크게 두 가지 invertible 1x1 convolution과 affine coupling layer로 되어 있음.

 

Affine Coupling Layer

[Dinh16]에서 제안한 레이어로 먼저 채널의 반절 $x_a$은 나머지 채널의 반절 $x_b$을 (곱함으로써) 스케일링하고 (더함으로써) 이동시키는 값을 생성하는 역할을 함.

즉 인풋 $x$는 $x_a$와 $x_b$로 나누어지고 이 $x_a$는 (조건으로 주어지는) 멜스펙트로그램과 함께 $s$, $t$ 값을 만들어냄. 여기서 $WN$은 어떠한 transformation이어도 되는데 심지어 invertible하지 않아도 됨. 왜냐하면 이 $WN$이 $x_a$ 값 자체를 바꾸는 변환이 아니기 때문. 생성된 $s$, $t$ 값은 $x_b$ 데이터를 스케일링하고 이동시키고 마지막으로 $x_a$ 값과 함께 묶여서 아웃풋으로 나가게 됨. 위에 네트워크 구조에서 그림으로도 설명하고 있음.

 

이 논문에서 $WN$은 gated-tanh를 사용한 dilated convolution레이어들임. 딱 봐도 WaveNet 구조임을 알 수 있음. (머 이름도 $WN$이니). 여기에 업샘플링된 멜이 조건으로 들어가는 형태. 

 

affine coupling layer에서는 단지 $s$ 만이 매핑의 볼륨을 변화시키기 때문에 이 부분이 로스에 추가되면 됨. 즉

1x1 Invertible Convolution

위 affine coupling layer에서는 각 채널들은 서로 영향을 끼칠 수가 없음. 따라서 Glow에서 제안한 대로 1x1 Invertible Convolution 레이어를 이용하여 이 채널들의 데이터를 서로 섞음. 웨이트 행렬 $W$는 orthonormal하게 초기화를 시킴. 이 부분 또한 로스에 포함시킴.

 

자, 이제 최종 로스를 정의할 수 있게 되었음. 최종 로스는,

첫번째 텀은 (spherical) 가우시안에서 온 모양. 여기서 시그마 파라미터가 사용됨. 나머지 두 텀은 위에서 소개한 두 종류의 레이어에서 나온 로스임. 이 두 텀은 각 레이어의 변환이 invertible하게 만들어주는 효과가 있음. 로스를 이렇게만 정의해서 단일 네트워크에 훈련시키면 끝. 

 

Early outputs

모든 레이어로 모든 채널이 전부 이동하는 것보다는, 4개의 coupling layer마다 2개의 채널 아웃풋들을 따로 이용하는 것이 더 효과적이라는 사실을 발견함. 즉 최종 벡터는 이전 아웃풋 벡터들을 모두 더한 형태로 구성됨. 이렇게 하면 네트워크가 multiple time scale 정보를 이용하는 효과가 있고 그래디언트 전파에도 도움이 됨(사실  skip connection과 비슷). 이러한 테크닉은 [Dinh16][Kingma18]의 multi-scale architecture에서 제안된 내용과 유사함.

 

Inference

네트워크가 훈련되고 나면 인퍼런스는 단순히 가우시안에서 $z$하나 랜덤하게 샘플링하고 네트워크를 통과시키면 됨. [Kingma18]에서 제안한 대로 훈련시에 $\sigma$를 좀 더 작게 하는 것이 좀 더 좋은 결과를 얻을 수 있었음. 여기에서는 훈련에서는 $\sigma$를 $\sqrt{0.5}$, 인퍼런스에서는 0.6을 사용함. affine layer의 변환은 affine transformation이니 쉽게 inverse계산이 가능하고 1x1 convolution또한 역행렬 계산을 통해 얻을 수 있음.

 

Experiments

훈련 데이터로 LJ speech data를 이용.

Griffin-Lim: 베이스라인으로 Griffin-Lim[Griffin84]알고리즘을 이용. 이 알고리즘은 전체 스펙트램을 입력으로 받아 반복적으로 페이즈 정보를 복원시키는 방법으로 오디오를 생성.

WaveNet: 오픈소스(https://zenodo.org/record/1472609#.YtYFquzlJqs)를 이용.

WaveGlow: WaveGlow 네트워크에서는 12개의 coupling layer와 12개의 invertivle 1x1 convolution을 이용. WN은 8개의 dilated convolution을 사용. 

 

Audio quality comparison

AMT을 이용하여 구한 MOS의 결과는 아래와 같음. 

WaveGlow가 비교 모델 중에서 가장 좋았음. 

 

Speed of inference comparison

속도 차이를 확인해봄. Griffin-Lim은 60번 반복으로 구현했을 때 507kHz의 속도가 나왔음. WaveNet은 0.11kHz. 역시나 느렸음. WaveGlow는 520kHz (하나의 NVIDIA V100 GPU)의 속도가 나왔음. Parallel WaveNet[Oord18]의 경우는 500kHz가 나왔는데 약간 더 빠른 결과임. 

 

역시 Flow기반 모델 빠름빠름. 오디오 보코더에 사용해도 빠름빠름.

 

 

  • [Griffin84] Daniel Griffin and Jae Lim, “Signal estimation from modified short-time fourier transform,” IEEE Transactions on Acoustics, Speech, and Signal Processing, vol. 32, no. 2, pp. 236–243, 1984.
  • [Dinh14] Laurent Dinh, David Krueger, and Yoshua Bengio, “Nice: Non-linear independent components estimation,” arXiv preprint arXiv:1410.8516, 2014.
  • [Rezende15] Danilo Jimenez Rezende and Shakir Mohamed, “Variational inference with normalizing flows,” arXiv preprint arXiv:1505.05770, 2015.
    [Dinh16] Laurent Dinh, Jascha Sohl-Dickstein, and Samy Bengio, “Density estimation using real nvp,” arXiv preprint arXiv:1605.08803, 2016.
  • [Oord16] A.van den Oord, S.Dieleman, H.Zen, K.Simonyan, O.Vinyals, A.Graves, N.Kalchbrenner, A.Senior, K.Kavukcuoglu. WaveNet: A generative model for raw audio. arXiv preprint arXiv:1609.03499, 2016. [논문리뷰]
  • [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. [논문리뷰]
  • [Ping19] W.Ping, K.Peng, J.Chen. ClariNet: Parallel wave generation in end-to-end text-to-speech. ICLR 2019. [논문리뷰]
  • [Arik18] Sercan O Arik,Heewoo Jun, Gregory Diamos. Fast spectrogram inversion using multi-head convolutional neural networks. arXiv preprint arXiv:1808.06719, 2018.
  • [Kingma18] Diederik P Kingma, Prafulla Dhariwal. Glow: Generative flow with invertible 1x1 convolutions. arXiv preprint arXiv:1807.03039, 2018.