FastSpeech1, 2
딥러닝 논문정리

FastSpeech1, 2

[5]Non-Autoregressive TTS Models

[FastSpeech]

기존 모델의 한계:

(1)Attention 불안정성 문제들이 그 전에 해결이 되지 않았었다.

(2)느리고, 에러가 누적된다.

해결법:

Non-autoregressive model을 사용하는 것이다.

그 결과 270배가 빨라 졌다.

Phoneme duration predictor 가 매우 중요한다. 이 개념이 attention의 필요를 없앴다.

TTS는 phoeneme이 embedding이 된다. 그리고 positional embedding이 더해져서, 위의 레이어로 쭉 올라가서 맨 마지막에 spectrogram이 나온다.

출력되는 mel의 길이는 매우 길지만, phoneme의 길이는 캐릭터의 길이는 매우 짧다. 그렇기 때문에 attention을 이용해서 alignment를 계속 하면서 이루어 진다.

 

[FastSpeech2에서는 duration predictor를 이용해서 발상의 전환을 한다]

각 Phoneme이 Duration predictor를 통해서, 각 mel에서 어느정도 길이가 되어야 하는지 길이를 추정한다. 그럼 length regulator를 이용해서, 각 phoeneme을 길이 만큼 복사해서 넣어준다.

이렇게 하면 alignment의 필요성이 없어진다. 즉, 병렬처리가 가능해진다.

이 이후에는 바로 mel의 시퀀스와 같아진다. 그렇기 때문에 이때부터는 병렬처리가 가능하다.

장점: (1) mel 생성까지가, 270배 빨라진다. (2) skipping과 repeating 문제가 훨씬 감소했다. (3) 스피치의 스피드를 조절 할 수 있다. 알파를 통해서 예를들어 1이면 원래 속도 2면 두배 늘어서 말의 속도를 느리게 할 수 있다.

 

[FastSpeech 전체적인 구조]

Feed-forward Transformer 이다. autoregressive한 구조가 아니다.

Phoneme에서 mel-sprctrogram까지를 바로 만들어 낸다.

Transformer 구조:

MLP데신 1d conv를 사용한다. 음성 신호에서 앞쪽 신호와 뒤에서 뽑아야 하는 신호가 비슷하기 때문에 conv를 이용해서 weight sharing 효과를 냈다.

기본적으로는 Multi-head attention과 1D CNN을 사용한다. 그리고 Layernorm, residual connection, dropout after sublayers.

 

duration predictor는 Idea 자체는 deepvoice와 비슷하다.

Duration predictor의 학습 방법:

linear layer, (conv1d + norm)*2의 구조를 가지고 있다.

ground truth를 어떻게 주어야 하는가?

autoregressive transformer tts를 사용했다. phoneme을 주면, attention이 나온다. 그럼 attention을 이용해서 phoneme의 duration을 추정할 수 있다. 추정한 duration을 ground truth로 넣고, phoneme에서 똑같은 duration을 내도록 mse loss로 세팅해서 학습을 한다.

distilation을 했다고 할 수 있다. 오른쪽을 teacher 왼쪽을 student로 두고, student가 teacher을 따라하게 만들었다.

duration prediction는 2 layer의 2d conv + layernorm + dropout + linear layer를 이용했다.

[FastSpeech2]

fastspeech1의 단점 1)Teacher-student distilation이 너무 복잡하다. 2)duration이 충분히 accurate 하지 않다.

개선 방법:

MFA라는 tool을 이용해서, 전통적으로 음성의 duration을 추출하는 방식을 사용했다. 그래서 teacher가 불안정적임을 해결.

다른 variation information(pitch와 energy)를 넣었다. 확장 가능성이 매우 높다.

일반적으로 text에서 mel로 만들고, mel로 vocoder를 사용해서 wav를 만든다.

여기서는 text에서 바로 wav로 가는 시도를 했다.

 

[FastSpeech2 전체 구조]

 

[Length regulator를 확장해서, pitch와 에너지까지 정보를 보강해주는

Variance Adaptor

가 들어간다]

먼저 앞부분은 length regulator이다. duration은 MFA를 이용해서 추출한다.

pitch와 energy predictor가 들어간다. 이 정보는 ground truth에서 바로 추출할 수 있다. ground truth를 분석하면 F0성분을 얻을 수 있다. 이 부분을 음성 신호처리 계산을 하면, pitch와 energy가 나온다. pitch는 F0를 추정하고, energy는 L2norm of amplitude를 추정한다. 그리고 이 정보를 256D 의 one-hot vector로 만든다.

pitch나 energy정보가 음성에 반영되도록 만들었다. 이 정보를 이용해서, decoder를 이용해서 mel-spectrogram을 만들고 vocoder를 통해서 wav를 만든다.

 

[FastSpeechs]

mel을 안거치고, 바로 wav를 만드는 방식.

단점: information gap이 너무 심하다. audio clip이 mel보다 정보 양이 많아서, 메모리나 계산 양이 더 많이 필요하다.

해결법 제시:

1)Adversarial training을 이용한다.

2) mel이 학습이 잘됬다고 가정하고, mel을 분절별로 잘라서 학습을 시킨다. 이렇게 하면 훨씬 계산적으로 더 부담은 덜하다. mel을 이용해서 vocoder로 wav를 만들고, 이걸 ground truth로 이용하는 방식이다.

 

 

 

 

 

 

'딥러닝 논문정리' 카테고리의 다른 글

Transformer TTS  (0) 2021.07.08
[3]Encoder-Decoder TTS_2  (0) 2021.07.08
[2]Encoder-Decoder TTS_1  (0) 2021.07.08
[1]Introduction to Speech Preprocessing  (0) 2021.07.08
ResNet 논문정리  (0) 2021.05.11