본문 바로가기

audio/audio generation (tts)

[논문리뷰] FloWaveNet: A Generative Flow for Raw Audio (ICML19)

논문제목: FloWaveNet: A Generative Flow for Raw Audio

저자: Sungwon Kim, Sang-gil Lee, Jongyoon Song, Jaehyeon Kim, Sungroh Yoon

소속: Seoul National University, Kakao Corporation

발표: ICML 2019

논문: https://proceedings.mlr.press/v97/kim19b.html

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

코드: https://github.com/ksw0306/FloWaveNet

 

- FloWaveNet
- flow기반 보코더. 따라서 하나의 네트워크, 로스만으로도 훈련이 가능하고 병렬로 빠른 생성이 가능.
- 거의 비슷한 시기에 진행된 WaveGlow[Prenger19]와 상당히 유사한 모델. 방법론은 거의 비슷한데 MOS점수가 약간은 낮다는 느낌. 두 개를 함께 보면 이해하는 데에 도움이 될 듯(이 논문의 길이가 길어서 flow방식등이 좀 더 자세히 설명되어 있음)

 

Story

WaveNet[Oord16]의 속도를 개선하기 위한 모델들, 예를 들어 Parallel WaveNet[Oord18]이나 ClariNet[Ping19]등은 inverse autoregressive flow을 이용하여 리얼타임에 오디오를 만들어낼 수 있음. 하지만 이 모델들은 teacher-student 방식을 이용하기 때문에 별도의 (복잡한) 로스를 사용하고 mode collapse등에 빠질 수도 있음. 직접 해보니 생각보다 어려웠음. 그래서 단일모델로도 훈련이 가능한 flow기반 방식을 제안함.

 

FloWaveNet

제안하는 모델의 구조는 아래와 같음.

 

Flow-based generative model

FloWaveNet은 normalizing flows[Rezende15]을 기본으로 함. 오디오 시그널 $x$는 invertible 변환 $f(x)$을 통해서 좀 더 심플한 prior $P_Z$로 이동하게 됨. 그리고 $P_X$와 $P_Z$ 사이에는 다음과 같은 관계가 성립함.

만일 1) $f$에 대한 Jacobian determinant 계산이 가능하고, 2) $f$의 역변환이 가능하고 충분히 빠르다면, 효율적인 샘플링도 훈련도 가능함. 이를 위해서 FloWaveNet에서는 affine coupling layers[Dinh16]를 이용. 또한 변환을 더욱 flexible하게 하기 위하여 affine coupling layer $f_{AC}$와 activation normalization $f_{AN}$을 여러 층으로 쌓아서 사용함. 따라서 이 $f$의 log determinant는 다음과 같음.

여기서 $M$은 flow의 수, $N$은 block의 수. 이 식은 conditional distribution에도 성립함. 여기에서도 다른 보코더들과 동일하게 멜스펙트로그램을 condition으로 주어지게 됨.

 

Affine Coupling Layer

위에서 언급한대로 affine coupling layers[Dinh16]은 $f$를 bijective function으로 만들어 인버스도 가능하고 계산도 쉽게 되는 형태로 고안된 레이어. 각 레이어에서 채널의 반절은 변화가 없는 대신, 나머지 반절을 변환시키는데 사용됨.

즉 odd에 해당하는 데이터는 결과로 그대로 나오는데, 이 데이터와 조건 데이터(멜스펙트로그램)와 함께 $m$과 $s$ 함수를 통과하여 even 데이터를 변환하게 됨. 여기서 $m$과 $s$는 non-causal WaveNet 구조를 사용함. 이를 역변환하는 것도 간단함

역시나 odd 데이터는 변화가 없고, $s$와 $m$ 값을 거꾸로 곱하고 더해주면 됨. 즉 역변환도 간단하게 계산이 가능함. 위에서 설명한 2)번 조건을 만족한다는 의미. 1)번 조건은 Jacobian determinant 계산이 가능해야 한다는 것이었음. 사실 이 모양의 Javobian 행렬은 lower trianglar형태이기 때문에 determinant는 그냥 대각선에 있는 값 곱해주면 됨.

따라서 affine coupling layer는 중요한 성질 두 가지를 다 만족함. 그런데 이 구조상 만절에 해당하는 채널 데이터는 변하지 않고 항상 일정함. 따라서 이를 좀 더 flexible하게 만들기 위해서 affine coupling이 끝난 후에 $y_{odd}$와 $y_{even}$의 순서를 바꿔주는 작업을 별도로 진행함. 이러면 모든 채널 데이터가 서로 영향을 끼칠 수 있게 됨

 

Context Block

각 Context block은 먼저 인풋 데이터 $x$와 조건 $c$를 받아서 채널 차원 $C$를 두 배로 뻥튀기함(squeeze).

이러면 WaveNet에서 receptive field를 두배로 늘리는 효과가 있음. 즉 스텍이 쌓아질 수록 좀 더 오디오의 long-term 적인 특징을 배울 수 있게 함. 그 다음으로는 앞에서 소개한 flow(activation normalization + affine coupling layer + change order)가 진행됨.

 

[Dinh16]에서 소개한 multi-scale architecture도 사용함. 이는 한번 아웃풋으로 나온 데이터 채널에서 반절은 빼내고 나머지 채널들이 다음 context block으로 들어가게 하는 것으로 skip connection 혹은 identity mapping을 더하는 것과 유사한 효과를 얻을 수 있음. 그리고 이는 더 나은 오디오 퀄리티를 만들게 됨.

 

Activation Normalization

[Kingma18]에서 제안한 ActNorm(activation normalization) 레이어는 여러 flow로 되어 있는 네트워크에서 훈련을 더욱 안정적으로 만들어주는 효과가 있음. 이 레이어는 각 채널마다 affine transformation을 먼저 수행하고 flow가 진행되게 함.

 여기서 $s$와 $b$는 훈련가능한 파라미터임. 그런데 스케일링 파라미터인 $s$가 있기 때문에 이 연산은 볼륨을 변화시키는 연산임. 따라서 이 연산에 대한 log-determinant를 로스에 추가해야 함

Experiments

훈련은 LJSpeech 데이터셋을 이용. 멜을 만들기 위한 모델로는 Tacotron 2[Shen18]을 이용함. 비교를 위해서 WaveNet[Oord16][Oord18]과 Clarinet[Ping19]을 사용. 

 

Autoregressive WaveNet: 두가지 버전의 WaveNet을 구현함. 하나는 MoL 버전, 그리고 Gaussian 버전. 각 논문을 참고하여 정확히 같은 구조를 사용했음.

Gaussian Inverse Autoregressive Flow(IAF): 위에서 가장 성능이 좋은 WaveNet 모델이 선생님이 되어 Gaussian IAF 학생 모델을 만듬. 역시나 논문을 참고하여 정확히 같은 구조를 구현함. 실제 구현된 오픈소스를 찾지 못하여 직접 열심히 구현했다고 함ㅠㅜ 그리고 구현된 모델은 공개되어 있음.

FloWaveNet: 8개의 context block을 이용. 각 block은 6개의 flow로 구성. 따라서 flow는 총 48개를 사용. affine coupling layer에서는 2-layer non-causal WaveNet 구조를 사용함. 4개의 context block마다 반절씩 채널데이터를 빼내는 구조를 사용. 이 반절데이터를 가우시안으로 모델링하기 위한 모델도 2-layer WaveNet 구조를 사용함. 

 

Results and Analysis

Model Comparisons: 자 이제 MOS를 비교할 차례.

WaveNet 모델들의 결과가 좋음. 정말 열심히 구현한듯. 두 버전 사이에서도 Gaussian 버전이 좀 더 좋은데 ClariNet의 성능이 더 좋다는 것을 나타내기도 함. 효율성을 위해서 flow로 만든 버전은 이들 보다는 결과가 좋지 않았음. 그래도 FloWaveNet이 Gaussian IAF(Guaissan WaveNet의 학생버전)보다 더 좋은 결과를 보였음. Gaussian IAF의 경우 전체적으로 화이트 노이즈가 깔리는 경향이 있었음. 

 

시간의 차이도 알아봐야겠지.

 

당연히 autoregressive 방식과는 엄청난 차이를 보임. FloWaveNet은 리얼타임보다 약 20배정도 더 빨랐음. 다른 non-autoregressive 모델들도 속도는 당연히 빠름(역시나 구현을 잘했는듯). 훈련 속도 또한 FlowWaveNet이 더 빨랐음(한단계로 끝낼 수 있으니)

 

Temperature Effect on Audo Quality Trade-off

[Kingma18]와 유사하게 오디오를 생성할 때 temperature의 효과에 대해서도 분석해보았음. 간단하게 말해서 zero vector $O$와 prior $z$ 사이에서 어느정도로 랜덤샘플을 생성하는가를 조정하는 값임.

temperature를 0으로 두면 zero vector로부터 샘플이 생성되기 때문에 멜스펙트럼에서 여러 horizontal line이 보임. 이는 피치가 있는 노이즈로 들리는데, 사실 어느정도 harmonic structure를 모델링한다고도 볼 수 있음. 반면에 temperature를 1로 두면 분명 퀄리티가 더 좋은 오디오가 생성되긴 하지만 harmonic structure가 부족해 좀 떨리는 듯한 목소리가 생성됨

 

즉 여기에 trade-off가 있음. 여기서는 별도의  temperature optimization으로 후처리를 했는데, 이는 하나의 future work으로 생각할 수 있음.

 

Analysis of ClariNet Loss Terms

(친절하게) ClariNet에서 사용하는 두 가지 Loss 텀(KL + frame)에 대한 분석을 진행함. 먼저 KL 로스만 사용하면 KL점수는 물론 가장 작아짐. 하지만 전체적으로 에너지가 적고 하모닉을 제대로 살리지를 못했음. 오디오를 만들때는 distribution의 유사성만으로는 부족하다는 의미. 그리고 mode collapse에 빠질 수 있다고도 생각할 수 있음. 반면 frame loss만 사용하면 프레임 모양은 좀 비슷해질지 모르지만 노이즈의 양이 증가함. 따라서 두 개를 다 사용하는 것이 가장 좋았음.

Causality of WaveNet Dilated Convolutions

원본 WaveNet에서는 causal dilated convolution을 이용했지만 FloWaveNet에서는 이미 각방향으로 모두 병렬적으로 계산할 수 있는 flow를 사용하기 때문에 구지 causal하게 할 필요가 없음. 따라서 non-causal 버전으로 바꾸었는데 결과가 더 좋아졌음. 이는 예상가능한 결과라고도 볼 수 있음. 양쪽을 다 보면 그만큼 이득이 있기 때문.

Flow를 사용한 또 하나의 보코더.
WaveGlow와 거의 비슷한 시기에 나온지라 비교하면서 읽어도 재미있음

 

 

  • [Rezende15] Rezende, D. J. and Mohamed, S. Variational inference with normalizing flows. arXiv preprint arXiv:1505.05770, 2015.
  • [Dinh16] Dinh, L., Sohl-Dickstein, J., and Bengio, S. 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. [논문리뷰]
  • [Kingma18] Kingma, D. P. and Dhariwal, P. Glow: Generative flow with invertible 1x1 convolutions. arXiv preprint arXiv:1807.03039, 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. [논문리뷰]
  • [Shen18] J.Shen, R.Pang, R.J.Weiss, M.Schuster, N.Jaitly, Z.Yang, Z.Chen, Y.Zhang, Y.Wang, RJ S.Ryan, R.A.Saurous, Y.Agiomyrgiannakis, Y.Wu. Natural TTS synthesis by conditioning WaveNet on mel spectrogram predictions. ICASSP 2018. [논문리뷰]
  • [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. [논문리뷰]