본문 바로가기

audio/audio generation (tts)

[논문리뷰] Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech (ICML21)

논문제목: Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech
저자: Jaehyeon Kim, Jungil Kong, Juhee Son
소속: Kakao Enterprise, KAIST
발표: ICML 2021

논문: https://arxiv.org/abs/2106.06103
코드: https://github.com/jaywalnut310/vits

오디오샘플: https://jaywalnut310.github.io/vits-demo/index.html 

 

- VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)
- 한번에 깔끔하게 작동하는 원스테이지 TTS. 
- 그러기 위해서 normalizing flows + variational inference + adversarial training을 이용. 많은 기술들이 들어갔지만 결과적으로 투 스테이지 모델들을 뛰어넘는 퀄리티를 보임.
- 좀 더 다양한 결과를 만들기 위하여 flow를 이용한 stochastic duration predictor를 제안. 
- 근데 내용을 보면 Glow-TTS(Jaehyeon Kim씨가 1저자)와 HiFi-GAN(Jungil Kong씨가 1저자)를 VAE로 연결하고 몇 가지 개선사항을 추가하여 만든 모델. 한 팀에서 계속 좋은 연구결과가 나오는 바람직한 모습.

 

Story

많은 TTS는 두단계로 구성됨. 일단 text를 처리하여 intermediate representation(멜이나 liquistic features)를 만들고 그리고 이 representation에서 오디오를 생성함. 번거롭게 이렇게 하지말고 한번에 다해보자는 시도(end-to-end)[Ren21][Donahue21]도 있었지만 아직까지는 2단계 시스템보다는 좀 퀄리티가 좀 떨어짐. 퀄리티만 좀 더 높이면 이렇게 하는게 더 간단하게 좋은데.. 하고 고민하다가 VAE를 써서 두 모델을 연결하고 conditional prior distribution에다가 normalizing flow를 써보고 훈련도 adversarial하게 하면 어떨까 생각이 들었음. 보너스로 좀 더 다양한 오디오를 만들기 위하여 stochastic duration predictor도 만들어봄.

 

Method

먼저 전체적인 시스템 구조도는 아래와 같음.

 

Overview

제안하는 모델(VITS라고 부름)은 conditional VAE 모델을 사용. 따라서 데이터의 marginal log-likelihood $log p_{\theta}(x|c)$의 ELBO를 계산해야 함.

간단하게 보면 $p_{\theta}(z|c)$는 latent variable $z$에 대한 ($c$ conditional) prior distribution, $q_{\theta}(z|x)$는 approximate posterior distribution, $p_{\theta}(x|z)$는 데이터 $x$에 대한 likelihood function임. training loss는 negative ELBO를 사용하고, 이는 reconstruction loss $-\log p_{\theta}(x|z)$와 KL divergence $\log q_{\theta}(z|x) - \log p_{\theta}(z|c)$ 의 합으로 구성되어 있음.

 

Reconstruction Loss

reconstruction loss의 타겟 데이터로는 멜을 이용함($x_{mel}$). 먼저 latent variable $z$를 디코더를 통해 웨이브폼 $y$로 업샘플링하고, 이를 다시 멜스펙트로그램 $x_{mel}$로 변환함. 그리고 이 값의 $L_1$ 로스를 reconstruction loss로 사용. 이러는 이유는 perceptual 퀄리티를 더 높이기 위함임.

KL-Divergence

조건(condition)으로 사용하는 데이터는 텍스트로부터 나온 phoneme $c_{text}$와 phoneme과 latent variable간의 alignment $A$임. alignment는 hard monotonic attention matrix로 각 phoneme이 speech에 어떻게 매칭이 되는지를 나타냄. 또한 이 모델에서는 posterior encoder에게 더욱 높은 resolution을 갖는 정보를 제공하고자 함. 따라서 타겟 스피치의 멜스펙트로그램이 아니라 linear-scale 스펙트로그램 $x_{lin}$을 사용함. 이제 KL divergence를 다시 써보면 아래와 같음.

prior encoder와 posterior encoder에서는 normalizing flow를 사용함. 즉 단순한 normal distribution을 이리저리 변환을 가해 더 복잡한 모양의 distribution으로 만들어서 사용한다는 의미. 이러면 당연히 expressiveness가 증가됨.

 

Alignment Estimation

Monotonic Alignment Search

alignment $A$를 찾기 위해서 monotonic Alignment Search(MAS)[Kim20]를 활용함(어차피 1저자가 같으신 분). 그런데 여기서는 [Kim20]처럼 dynamic programming을 바로 이용하기는 어려움. VAE세팅에서는 정확한 log-likelihood를 이용하는 것이 아니라 ELBO를 이용하기 때문. 따라서 여기에서는 ELBO를 최대화하는 alignment를 찾도록 수정해야 함.

Duration Prediction from Text

$A$가 구해진다면 각 input token들의 길이를 구하는 것은 그냥 매트릭스에서 각 column들의 합을 구하면 됨. 하지만 여기에서 좀 리듬감을 살리기 위하여 여기에 약간 stochastic한 요소를 넣음. 즉 stochastic duration predictor를 flow-based 모델로 만들고 maximum likelihood estimation 방법으로 훈련하면 되는데, 사실 바로는 안됨. 인풋 phoneme들의 길이가 정수이고 스칼라 값이기 때문임. 사실 이를 해결하기 위한 방법 variational dequantization[Ho19]와 variational data augmentation[Chen20]이 있음.

 

이를 어떻게 적용하는지 간단하게 적어보면 일단 duration sequence d와 같은 차원을 갖는 $u$(dequantization를 위한 값)와 $v$(data augmentation를 위한 값)을 도입함. $u$의 범위는 $[0, 1)$로 한정을 하여 $d - u$가 항상 양의 실수가 되게 하고, $v$를 $d$와 연결하여 더 높은 차원의 latent representation이 되게 함. 이 두 변수는 posterior distribution $p_{\theta}(u, v | d, c_{text})$에서 샘플링함. 이제 phoneme duration의 log-likelihood의 variational lower bound는 아래와 같음.

이제 이부분에 대한 training loss $L_{dur}$ 는 negative variational lower bound로 정의할 수 있음. 이 duration predictor부분은 별도의 모듈이기 때문에 훈련시에 다른 모듈에 영향을 끼치지 않게 하기 위하여 stop gradient operator를 가함.

 

Adversarial Training

adversarial training을 사용하기 위하여 디코더 $G$로 생성되는 아웃풋과 ground truth waveform y를 구분하기 위한 $D$를 추가함. 로스는 least-squares loss function[Mao17] 형태를 사용.

또한 feature-matching loss[Larsen16]도 더함. discriminator의 각 레이어마다 피쳐 맵간의 차이를 고려하는 로스임.

Final Loss

많은 로스들이 나타났음. 이제 conditional VAE의 최종 로스는 아래와 같은 모양으로 정의할 수 있음.

 

Model Architecture

Posterior Encoder

Posterior encoder로는 WaveGlow[Prenger19]와 Glow-TTS[Kim20]에서 사용한 non-causal WaveNet residual block을 이용함. 이 block위에 linear projection layer를 추가해 normal posterior distribution의 파라미터를 생성함. multi-speaker의 경우에는 residual block안에 speaker embedding을 더해서 global conditioning을 이용함.

 

Prior Encoder

Prior encoder로는 transformer기반 text encoder를 이용함(relative positional representation 사용). text encoder를 통해 $c_{text}$에 대한 $h_{text}$를 얻고, 여기에 linear projection layer를 더해 prior distribution의 파라미터를 생성함. normalizing flow은 WaveNet residual block을 쌓아서 구성된 affine coupling layer를 이용함. multi-speaker setting에서도 residual block에다가 speaker embedding을 더해서 사용함. 

 

Decoder

decoder는 HiFi-GAN V1[Kong20]을 이용함. 간단하게 말해서 transposed convolution과 multi-receptive field fusion (MRF) 모듈을 쌓아서 사용한 모델임. multi-speaker의 경우에 speaker embedding을 변형하여 input latent variable z에 더하게 됨.

 

Discriminator

discriminator는 HiFi-GAN에서 제안한 multi-period discriminator를 이용. 인풋 웨이브폼의 여러 periodic pattern을 고려하는 방식.

 

Stochastic Duration Predictor

Stochastic duration predictor에서는 parameterization을 효율적으로 하기 위하여 dilated & depth-seperable conv레이어를 쌓아 구성함. 또한 neural spline flows[Durkan19]를 적용했는데, 이는 비슷한 숫자의 파라미터로도 더 좋은 transformation expressiveness를 나타낼 수 있는 방식임. multi-speaker의 경우 speaker embedding을 변형하여 input $h_{text}$에다가 더하게 됨.

 

 

 

Experiments

Datasets: LJ Speech와 VCTK 두가지 데이터셋을 이용함. 

Preprocessing: posterior encoder 입력으로는 STFT를 이용한 linear spectrogram을 사용. reconstruction loss에서는 80 bnads 멜스펙트로그램을 이용. prior encoder의 인풋으로는 International Phonetic Alphabet (IPA)을 이용. 

Training: 여기서도 windowed generator training[Ren21][Donahue21]를 이용. 전체 latent representation을 디코더에게 전부 넣는 것이 아니라 32크기의 윈도우의 크기를 갖는 세그먼트를 랜덤하게 선택하여 넣고 이에 해당하는 ground truth 오디오 세그먼트를 이용하여 훈련하는 방식.

Experimental Setup for Comparison: 비교를 위해서 Tacotron 2와 Glow-TTS를 첫번째 모듈로, HiFi-GAN을 두번째 모듈로 사용함. 실험을 해보니 Tacotron 2에서 생성한 멜로 fine-tuning한 HiFi-GAN의 성능이 더 좋아 이를 사용함. 

 

Results

Speech Synthesis Quality

MOS점수를 비교해볼 차례.

일단 hifi-GAN을 Fine-tuned하면 성능이 확실히 올라감. Tacotron2보다는 Glow-TTS가 조금 더 나은데, 제안하는 모델 VITS이 가장 점수가 좋았음. DDP는 deterministic duration predictor 즉, 랜덤성이 없는 duration predictor를 사용한 것으로, stochastic 버전이 좀 더 좋다는 것을 보여주고 있음. 

 

Ablation study도 해봐야겠지.  

flow를 사용하지 않으면 퀄리티가 확떨어져버렸음. 즉 prior distribution의 모양이 그만큼 중요하다는 것. 만일 posterior에 들어가는 linear-scale 스펙트로그램을 멜로 바꾸니 약간 퀄리티가 감소했음. 생성 모듈에서는 더욱 높은 resolution을 갖는 해상도가 필요한 경우가 있다는 의미.

 

Generalization to Multi-Speaker Text-to-Speech

 이제 멀티 스피커 버전으로 확장한 모델들을 비교해봄. 

싱글 스피커 버전과 유사하게 Tacotron2보다는 Glow-TTS가, 그리고 Glow-TTS보다는 VITS가 더 좋은 결과를 보여주었음. 근데 거의 GT와 동일한 수준이네. 흠.

 

Speech Variation

stochastic duration predictor가 생성하는 스피치의 길이는 얼마나 다양할까? [Valle20]에서처럼 "How much variation is there?"라는 문장으로 생성한 샘플들의 길이를 아래에 나타내었음.

Glow-TTS는 deterministic이기 때문에 길이가 고정되어 있음. Tacotron2과 VITS모두 비슷하게 다양한 분포를 보여줌.

 

다음으로 5명의 다른 스피커들의 phoneme duration을 그려봄. 각기 스피커마다 다른 duration을 잘 학습했다는 것을 알 수 있음.

 YIN알고리즘으로 구한 $F_0$ contour도 그려보았는데, VITS가 가장 다양하다는 것을 알 수 있음.

Synthesis Speed

phoneme sequence에서부터 raw waveform을 생성하는데까지 걸리는 시간을 측정해봄. 예상가능하지만 중간 predefined representation을 따로 만들지 않고 한번에 다 하기 때문에 속도 또한 확실히 빨라짐.

 

VAE+Flow+GAN.
복잡하지만 고퀄 end-to-end TTS시스템을 만들기 위해서라면!

 

  • [Larsen16] Larsen, A. B. L., Sønderby, S. K., Larochelle, H., and Winther, O. Autoencoding beyond pixels using a learned similarity metric. In International Conference on Ma- chine Learning, pp. 1558–1566. PMLR, 2016.
  • [Mao17] Mao, X., Li, Q., Xie, H., Lau, R. Y., Wang, Z., and Paul Smolley, S. Least squares generative adversarial networks. In Proceedings of the IEEE international conference on computer vision, pp. 2794–2802, 2017.
  • [Durkan19] Durkan, C., Bekasov, A., Murray, I., and Papamakarios, G. Neural Spline Flows. In Advances in Neural Information Processing Systems, pp. 7509–7520, 2019.
  • [Ho19] Ho, J., Chen, X., Srinivas, A., Duan, Y., and Abbeel, P. Flow++: Improving flow-based generative models with variational dequantization and architecture design. In International Conference on Machine Learning, pp. 2722– 2730. PMLR, 2019.
  • [Hsu19] Hsu, W.-N., Zhang, Y., Weiss, R., Zen, H., Wu, Y., Cao, Y., and Wang, Y. Hierarchical Generative Modeling for Controllable Speech Synthesis. In International Confer- ence on Learning Representations, 2019.
  • [Prenger19] R.Prenger, R.Valle, B.Catanzaro. WaveGlow: A flow-based generative network for speech synthesis. ICASSP 2019. [논문리뷰]
  • [Chen20] Chen, J., Lu, C., Chenli, B., Zhu, J., and Tian, T. Vflow: More expressive generative flows with variational data augmentation. In International Conference on Machine Learning, pp. 1660–1669. PMLR, 2020.
  • [Kim20] J.Kim, S.Kim, J.Kong, S.Yoon. Glow-TTS: A generative flow for text-to-speech via monotonic alignment search. NeurIPS 2020 [논문리뷰]
  • [Kong20] J.Kong, J.Kim, J.Bae. HiFi-GAN: Generative adversarial networks for efficient and high fidelity speech synthesis. NeurIPS 2020. [논문리뷰]
  • [Valle20] Rafael Valle, Kevin Shih, Ryan Prenger, and Bryan Catanzaro. Flowtron: an autoregressive flow-based generative network for text-to-speech synthesis. arXiv preprint arXiv:2005.05957, 2020.
  • [Donahue21] J.Donahue, S.Dieleman, M.Binkowski, E.Elsen, K.Simonyan. End-to-end adversarial text-to-speech. ICLR 2021. [논문리뷰]
  • [Lee21] Lee, Y., Shin, J., and Jung, K. Bidirectional Variational Inference for Non-Autoregressive Text-to-speech. In International Conference on Learning Representations, 2021.
  • [Ren21] Y.Ren, C,Hu, X.Tan, T.Qin, S.Zhao, Z.Zhao, T.-Y.Liu. FastSpeech 2: Fast and High-Quality End-to-End Text to Speech. ICLR 2021. [논문리뷰]