본문 바로가기

audio/audio generation (tts)

[논문리뷰] Deep Voice 2: Multi-Speaker Neural Text-to-Speech (NeurIPS17)

제목: Deep Voice 2: Multi-Speaker Neural Text-to-Speech
저자: Sercan Ö. Arık, Gregory Diamos, Andrew Gibiansky, John Miller, Kainan Peng, Wei Ping, Jonathan Raiman, Yanqi Zhou
소속: Baidu Research
발표: NeurIPS 2017

논문: https://arxiv.org/abs/1705.08947

 

- Deep Voice 2
- 싱글 스피커 TTS모델인 Deep Voice 1[Arik17]의 멀티 스피커 버전.
- 스피커 임베딩을 훈련시켜서 모델 여기저기에 넣어서 완성함.
- 이것만 한 것은 아니고 Deep Voice 1의 여러 부분에 손을 데서 오디오 품질도 더 높임.
- 거기에다가 Tacotron[Wang17]까지 손을 데서 이 모델도 멀티 스피커 버전을 만듬.
- 멀티스피커의 경우엔 Deep Voice 2가 결과가 더 좋음. 하지만 싱글스피커의 경우엔 Tacotron이 점수가 더 좋은 반전의 결과가..

 

Story

대부분 TTS시스템은 한 명의 스피커 목소리로 만들어지기 때문에 다른 스피커 목소리를 만들려면 다른 데이터로 다시 훈련해야 함. 하지만 스피커 사이에는 공통되는 것이 많을 거임. 그래서 싱글 모델로 여러 목소리를 만들 수 있는 모델을 만들어봄. 그러면서 Deep Voice 1과 Tacotron을 각각 개선해봄.

 

물론 멀티 스피커 모델을 여기서 처음 제안하는 것은 아님. 하지만 이전 논문들[Fan15][Yang16]이 평균 보이스 모델을 구해서 스피커별로 각기 다른 아웃풋 레이어를 사용하는 것에 반해, 여기서는 아예 처음부터 스피커 임베딩을 훈련시켜 얻게 됨. 그랬더니 더욱 품질도 좋으면서도 적은 데이터로도 훈련이 가능해짐.

 

Single-Speaker Deep Voice 2

일단 Deep Voice 1(DV1)[Arik17]을 개선시킨 모델을 소개함. 일단 차이점 중에 하나는 phoneme duration model과 frequency model을 분리한 것(원래는 같이 있었음). 전체 시스템은 이렇게 생김.

 


Segmentation model

각 phoneme의 위치를 알아내는 모델. phoneme pair들을 사용하여 CRNN 모델에 CTC 로스를 사용했었음. DV2(Deep Voice 2)에서는 DV1모델에 Batch normalization을 더하고 residual 연결을 더함. 그리고 silence phoneme이 있는 경우 실수가 나오는 경우가 있었는데 이를 휴리스틱을 사용하여 개선.

 

Duration model

원래는 continous-valued duration을 예측했었는데, DV2에서는 sequence labeling problem으로 품. 먼저 phoneme duration은 log-scaled bucket으로 discretize를 하고 bucket label을 할당함. 그래고 이 시퀀스들을 conditional random field (CRF)!!!로 모델링함. 인퍼런스할 때 디코딩은 Viterbi 알고리즘을 이용. 이렇게 quantization과 CRF모델링을 하니 결과가 더 좋아졌다고 함.

 

Frequency Model

앞에 모델에서 예측된 phoneme duration은 프레임 단위로 업샘플링됨. 인풋은 일단 GRU 레이어를 통과하여 hidden state로 변환되는데, 일단 voiced 인지 확률을 구하고, $F_0$ 예측을 함($f_{GRU}$). 또한 인풋은 여러 크기의 convolution을 통과하여 또 다른 예측($f_{CONV}$)을 만듬. 그리고 hidden state는 두 예측간의 mixture ratio 오메가도 예측함. 최종적으로 오메가를 웨이트로 하여 두 예측이 더해짐

그리고 최종 $F_0$은 스피커에 대한 $F_0$의 평균과 표준편차를 이용하여 결정됨.

이전에 비해 복잡해지긴 했지만 이렇게 RNN과 CNN을 다 쓰면 결과가 더 좋아졌다고 함.

 

Vocal Model

DV1처럼 WaveNet[Oord16]을 기반으로 하지만,  gated tanh와 residual connection사이에 1x1 convolution을 사용하지 않고, 각 레이어마다 동일한 conditioner bias를 사용한다는 것이 차이점.

 

Multi-Speaker Models with Trainable Speaker Embeddings

이제 여러 명의 스피커를 모델링 하기 위하여, 기본 모델에다가 스피커당 하나의 low-dimensional speaker embedding을 더함. 여기에 스피커 고유의 파라미터가 저장이 되는데, 저차원이기 때문에 대부분의 파라미터들은 스피커들끼리 함께 공유한다는 의미. 이 임베딩은 모델 훈련시 함께 훈련됨.

 

그런데 하나의 임베딩을 전체 모델에 사용하는 것이 아니고 모델마다 다른 임베딩을 사용(site-specific speaker embedding라고 표현). 그냥 단순하게 임베딩을 인풋에 더해서 사용하면 결과가 별로 안좋아서 이렇게 시행착오 끝에 복잡한 모델을 구성하게 됨.

 

Segmentation model

BN 엑티베이션에 스피커 임베딩($g_s$)을 곱한 형태를 사용. CNN 레이어마다 같은 임베딩을 사용하게 함. 그리고 RNN 레이어들끼리도 동일한 임베딩을 사용하게 함(초기화할 때 사용).

Duration model

스피커 임베딩은 RNN 초기화할 때 사용하고, 인풋에 함께 들어가는 형태로 사용됨.

 

Frequency model

역시 RNN초기화할때 스피커 임베딩을 사용. 사실 $F_0$을 결정할 때 스피커 임베딩이 중요함(남자와 여자는 확실히 다를거임). 따라서 F0의 평균과 표준편차에다가 임베딩에 대한 정보가 곱해져서 모델링됨. 여기서 모든 변수들은 전부 훈련으로 얻어지는 파라미터들.

Vocal model

보컬 모델에서는 스피커 임베딩은 그냥 인풋에 더해서(concatenated) 사용됨. 사실 보컬 모델에서는 임베딩을 안사용해도 어느정도 구분된 소리가 나오긴 했는데, 보컬 모델까지 더하니 결과가 더 좋아졌음.

 

Multi-Speaker Tacotron

남의 회사(구글)에서 만든 Tacotron[Wang17]까지 손을 데서 멀티 스피커 모델을 만들어버림. 사실은 구글에서 하고 있었지만 먼저 선수를 친 느낌. 그 전에 일단 자기네가 타코트론을 만들어서 실험해봤는데, 모델 하이퍼파라미터에 매우 민감하고 모든 오디오 클립에서 스피치가 동일한 시간에 시작되어야지 제대로 된다고 열심히 깐 후에 시작함.

 

 

Character-to-Spectrogram Model

Tacotron의 구조는 크게 CBHG(convolution-bank-highway-GRU라고 타코트론에서 제안한 모듈) 인코더, 어텐션 디코더, CBHG 포스트-프로세싱 네트워크로 구성되어 있음. 먼저 CBHG 인코더에 스피커 임베딩을 넣어야 하는데, CBHG 모듈에 하이웨이 레이어 인풋과 GRU 초기화 때 넣어줌. 어텐션 디코더에도 넣어줘야함. 어텐션 초기화와 GRU  초기화 단계에서 넣어줌. 제일 마지막 포스트-프로세싱 네트워크에 스피커 임베딩을 넣으면 결과가 더 안좋아졌음. 

 

Spectrogram-to-Waveform Model

원래 타코트론에서는 (꼬진) Griffin-Lim 알고리즘[Griffin84]을 썼었음. 그래서 이를 DV2에서 사용한 것과 유사한 WaveNet 기반 보코더로 바꿈. 이로서 오디오 품질이 많이 향상됨.

 

Results

Single-Speaker Speech Synthesis

내부 영어 스피치 데이터(20시간 가량, 싱글 스피커)로 훈련을 했음. AMT을 이용한 MOS점수는 아래와 같음. 

DV2가 DV1보다 성능 향상이 많았다는 것을 알 수 있음(DV1의 점수가 워낙 낮긴 했음). 그리고 타코트론 WaveNet버전이 Griffin-Lim 버전보다 훨씬 낫다는 것도 알 수 있음. 근데 잘 보면 DV2보다 타코트론 점수가 훨씬 높음. 아마도 예상치 못한 결과였겠지만 그래서 마음이 좀 쓰렸겠지만 논문에는 이 내용에 대한 말은 아무엇도 없음ㅋ 

 

Multi-Speaker Speech Synthesis

VCTK(44시간 가량, 108명의 스피커)로 훈련 시킴. 또한 내부 오디오북 데이터(477명 스피커 각각 30분 가량의 오디오)으로도 훈련시킴. 몇 백명의 다른 목소리에 대해서도 잘 훈련이 되었고, 임베딩도 나름 잘 되었음. 아래는 보컬 모델(a)과 VCTK로 훈련시킨 character-to-spectrogram 모델에서 남/녀 목소리가 얼마나 잘 구분되는지 PCA의 1,2번 축을 통해 시각화한 결과.

이제 MOS점수를 보겠음. 

웨이브넷을 만들때 레이어를 더 많이 쌓을 수록 오디오 품질이 많이 올라간다는 것을 알 수 있음. GT와 아직 차이는 많이 나지만 타코트론 보다는 점수가 높음.  멀티 스피커에 대한 실험이니, 각 스피커에 대한 classification 모델을 만들어서 정확도 또한 측정했는데 거의 다 맞춤. 타코트론 웨이브넷 모델만 점수가 낮음.

 

그런데 잘 보면 타코트론 웨이브넷 모델에서는 20레이어만 사용했음. 80레이어를 사용해야지 공정한 비교가 아님? 이에 대한 언급은 없음. 아마도 앞에 실험에서 마음이 상해서 여기서는 어떻게라도 타코트론 점수를 낮게 만들고 싶어한 듯.

 

TTS 시스템의 발전방향을 볼 수 있는 Deep Voice 시리즈 2탄. 
그런데 어쩌다보니 Tacotron이 참 잘 만든 모델이라는 것도 알 수 있는..

 

  • [Griffin84] Daniel Griffin and Jae Lim. Signal estimation from modified short-time fourier transform. IEEE Transactions on Acoustics, Speech, and Signal Processing, 32(2):236–243, 1984.
  • [Fan15] Y. Fan, Y. Qian, F. K. Soong, and L. He. Multi-speaker modeling and speaker adaptation for DNN-based TTS synthesis. In IEEE ICASSP, 2015.
  • [Oord16] A. v. d. Oord, S. Dieleman, H. Zen, K. Simonyan, O. Vinyals, A. Graves, N. Kalchbrenner, A. Senior, and K. Kavukcuoglu. Wavenet: A generative model for raw audio. arXiv:1609.03499, 2016. [논문리뷰]
  • [Yang16] S. Yang, Z. Wu, and L. Xie. On the training of DNN-based average voice model for speech synthesis. In Signal and Information Processing Association Annual Summit and Conference (APSIPA), Asia-Pacific, 2016.
  • [Arik17] S. O. Arik, M. Chrzanowski, A. Coates, G. Diamos, A. Gibiansky, Y. Kang, X. Li, J. Miller, J. Raiman, S. Sengupta, and M. Shoeybi. Deep Voice: Real-time neural text-to-speech. In ICML, 2017. [논문리뷰]
  • [Wang17] Y. Wang, R. Skerry-Ryan, D. Stanton, Y. Wu, R. J. Weiss, N. Jaitly, Z. Yang, Y. Xiao, Z. Chen, S. Bengio, et al. Tacotron: Towards end-to-end speech synthesis. In Interspeech, 2017. [논문리뷰]