devmoon

Tacotron2: Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions 본문

AI/논문 리뷰

Tacotron2: Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions

Orca0917 2023. 7. 4. 16:09

https://arxiv.org/abs/1712.05884

 

Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions

This paper describes Tacotron 2, a neural network architecture for speech synthesis directly from text. The system is composed of a recurrent sequence-to-sequence feature prediction network that maps character embeddings to mel-scale spectrograms, followed

arxiv.org

 

Tacotron1에 이어 나온 Tacotron2 논문은 TTS 음성합성에서 사용가능한 기술을 소개한 논문이다. Tacotron1에서는 TTS를 진행할 때, 텍스트로 부터 spectrogram을 생성하고, 생성된 sepctrogram을 다시 실제 음성으로 만들어주는 `GriffinLim` 알고리즘을 적용시켰었다. Tacotron2는 일반 spectrogram이 아닌 mel-spectrogram을 생성하며 mel-spectrogram으로부터 음성을 생성하는 `WaveNet`을 사용한 모델이다.

 

 

 

 

1. Introduction

이전 TTS모델의 SOTA는 음성들을 이어붙여서 만든 concatenative approach의 모델들이 주를 이루었으며, 확률/통계를 기반으로 한 statistical parametric approach는 실제 사람의 목소리와는 거리가 먼 결과들을 보여주고 있었다. 하지만, WaveNet이 등장하면서 생성되는 오디오의 품질이 상승해 실제 사람 목소리와 경쟁할 수 있는 수준에 이르렀다. 이렇게 좋은 WaveNet의 단점은 음성 합성과 관련된 도메인 지식을 상당히 필요로 했다는 것이다.

 

 

 

 

따라서 저자들은 이전에 음성과 스크립트만으로 음성합성을 진행하는 End-to-End TTS모델인 Tacotron을 개선시켜 spectrogram을 mel-spectrogram으로 바꾸고, Griffin-Lim 알고리즘을 조금 수정한 WaveNet 모델로 대치하여 음성합성 모델을 고안하였다.

 

 

 

 

2. Model Architecture

저자들이 제안한 Tacotron2모델은 아래의 Figure 1에 나온 것처럼 2가지 부분으로 구성되어 있다.

  • Recurrent sequence-to-sequence feature prediction network: 입력 문자열로 부터 mel spectrogram 프레임들을 예측
  • modified WaveNet: mel-spectrogram으로부터 waveform 음성을 생성

 

 

 

출처: Tacotron2 논문 (https://arxiv.org/abs/1712.05884)

 

 

 

2.1. Intermediate Feature Representation

Tacotron2에서 저자들이 Acoustic model과 Vocoder model을 잇는 사이의 결과물을 `mel-spectrogram`으로 선정하였다. Mel spectrogram에 대해서 알기 전 spectrogram이 무엇인지 살펴봐야 한다. Spectrogram은 음성 데이터에서 어떤 주파수대역에서 어떤 강도로 소리가 발생하는지 시간(프레임) 단위로 나타낸 것을 말한다.

*Spectrogram을 획득하기 위해서는 Short-Time-Fourier-Transform(STFT)를 사용한다.

 

 

 

임의의 음성파일을 spectrogram으로 변환한 것

더보기

음성파일을 Spectrogram으로 변환하는 코드는 Python의 `librosa` 패키지를 사용하여 간단하게 확인할 수 있다.

audio_path = '오디오 파일 경로 입력'
waveform, sample_rate = librosa.load(audio_path)

stft = librosa.stft(waveform)
spectrogram = np.abs(stft)

librosa.display.specshow(
    librosa.amplitude_to_db(spectrogram, ref=np.max),
    sr=sample_rate,
    x_axis='time',
    y_axis='linear'
)

plt.colorbar(format='%+2.0f dB')
plt.title('Spectrogram')
plt.show()

 

 

 

 

Tacotron2에서 그냥 선형 주파수 대역의 Spectrogram을 사용하지 않고, 비선형 주파수 대역의 Mel-Spectrogram을 사용하는 이유는 사람이 듣는 소리는 저주파 음역대에 민감하게 반응하는데, 이를 강조하는 효과가 있기 때문이다. 이외에도 acoustic model과 vocoder model를 개별적으로 학습할 수 있는 장점, squared error loss를 사용하여 학습하기 용이하다는 장점이 있어서 mel-spectrogram을 사용한다.

 

 

 

 

librosa package를 활용하여 mel spectrogram을 생성한 결과

 

 

 

 

위의 mel spectrogram을 보면 알 수 있듯이 주파수 대역이 선형적으로 증가하는 것이 아니라, 지수적으로 비선형적으로 증가하고 있으며, 저주파 대역이 확장됨에 따라 저주파 음성이 강조되는 것을 확인할 수 있다.

 

 

 

 

 

2.2. Spectrogram Prediction Network

Tacotron처럼, mel spectrogram은 50ms의 프레임 크기, 12.5ms의 프레임 간격, Hann window 함수를 사용한 SFTF로 계산된다. STFT의 결과인 주파수의 강도는 mel-scale로 변환되며 이때, 125Hz ~ 7.6kHz에 해당하는 80개 채널의 mel filterbank를 사용한다. 이후에는 log를 취해 더 넓은 동적 범위를 얻는다.

 

 

 

 

Tacotron2의 모델은 attention 메커니즘을 적용한 encoder와 decoder로 구성되어 있다. Encoder에서는 문자열을 hidden feature representation으로 변환하고, decoder는 이를 사용하여 spectrogram을 예측한다. Encoder에 대한 구조를 시각화하면 아래와 같다. (Bi-LSTM 까지가 Encoder 부분)

 

 

 

 

Tacotron2의 Encoder 구조

 

 

 

 

Encoder의 출력은 decoder의 step마다 고정 길이의 컨텍스트 벡터로 요약해주는 attention network의 입력으로 들어간다. Attention mechanism에서 이전의 attention weight를 추가 정보로 고려하여 가중치를 누적합하기 위해 저자는 `location sensitive attention`을 사용하였다. 추가적으로 Location sensitive attetion을 사용하면, decoder로 음성을 복원할 때 음성이 반복되거나 일부가 무시되는 현상을 줄이는 효과도 존재한다.

 

 

 

 

Decoder는 자기 회귀 RNN이며 인코딩 된 입력 sequence로부터 mel spectrogram을 예측한다. 이전 timestep에서 예측한 mel spectrogram은 먼저 256차원의 Fully Connected 레이어와 ReLU가 2층으로 쌓여있는 `pre-net` 으로 전달된다.

 

 

 

 

Decoder의 Pre-Net 구조 (실제 구현부에서 각 activation function 이후 dropout(p=0.5) 적용)

 

 

 

 

PreNet은 구현에서 Fully Connected Layer, ReLU를 거치고 나서 dropout을 설정해 주었다. Prenet의 결과는 decoder의 시작 부분으로 전달되며 아래는 Decoder의 전반적인 구조를 보여준다.

 

 

 

 

Tacotron2에서 사용된 Decoder의 전체 구조

 

 

 

Pre-net의 출력은 attention에서 획득한 context vector와 concatenation 된 후, 2개의 층으로 쌓인 LSTM 레이어를 거친다. LSTM의 출력은 다시 attetion의 context vector와 concatenation 한 뒤, 현재 step의 mel spectrogram예측을 위한 linear transformation layer인 `post-net`을 통과한다. 예측한 mel spectrogram은 이전 step의 결과와 이어 붙이고, 현재 예측된 결과는 다시 다음 예측을 위해 prenet으로 전달하게 된다. 또한, 현재 음성합성이 끝났는지를 판단하기 위해 또 다른 선형 변환 레이어와 시그모이드 함수를 사용한다.

 

 

 

 

이전에 발표한 Tacotron과 달리 Tacotron2는 CBHG와 GRU대신 LSTM과 Convolution 레이어를 쌓은 인코더와 디코더를 사용하였다. 다음 파트에서는 만들어진 mel-spectrogram을 waveform으로 생성하는 WaveNet vocoder에 대해 소개한다.

 

 

 

 

2.3. WaveNet Vocoder

Tacotron2의 저자들은 원본 WaveNet을 수정하여 mel spectrogram으로부터 waveform을 생성하고자 하였다. 원본 WaveNet은 3개의 dilated convolution layer를 쌓아 upsampling을 진행했는데, 이번에는 2개의 dilated convolution layer만 사용하여 음성을 합성하였다.

 

 

 

 

WaveNet에서는 디저털화된 주파수 값을 예측 및 분류하기 위해서 softmax 레이어를 사용했었는데, 이번에는 PixelCNN++ 와 병렬 WaveNet, 그리고 24kHz의 16비트 샘플링을 한 음성을 생성하기 위해 MoL을 사용하였다. MoL 분포를 예측하기 위해 WaveNet의 결과를 ReLU를 거치게 하고 이후 여러 개의 linear projection 레이어를 두어 음성 생성에 필요한 파라미터들을 예측하도록 하였다(mean, log scale, mixture weight). Vocoder 모델의 오차를 계산할 때는 negative 로그가능도 함수를 사용하였다.

Comments