Tacotron-2 아키텍처 심층 분석: 텍스트-음성 합성에서 Tacotron과 WaveNet의 결합 원리

Tacotron-2는 DeepMind가 개발한 종단간(end-to-end) 음성 합성 시스템으로, Tacotron의 텍스트-멜 스펙트로그램 변환 모델과 WaveNet 보코더를 결합하여 고품질 음성을 생성합니다. 이 글에서는 두 모델의 통합 전략과 핵심 설정 방법을 상세히 설명합니다.

Tacotron과 WaveNet의 상호 작용 메커니즘

Tacotron-2 시스템은 2단계 구조로 동작합니다. 첫 단계에서 Tacotron이 입력 텍스트를 멜 스펙트로그램으로 변환하고, 두 번째 단계에서 WaveNet이 이 멜 스펙트로그램을 최종 오디오 파형으로 변환합니다. 이 분업 구조는 각 모델의 강점을 최대한 활용합니다:

  • Tacotron: 텍스트 이해와 운율 모델링에 특화되어 입력 텍스트 시퀀스를 멜 스펙트로그램 특징으로 변환합니다.
  • WaveNet: 고충실도 오디오 합성을 담당하며, 멜 스펙트로그램을 자연스러운 음성 파형으로 변환합니다.

이 결합 방식은 전통적인 음성 합성 시스템의 복잡한 중간 단계를 생략하고 텍스트에서 음성으로의 직접 생성을 가능하게 합니다.

모델 통합을 위한 핵심 설정 파라미터

Tacotron-2 프로젝트에서 hparams.py 파일은 Tacotron과 WaveNet의 효율적인 협업을 제어하는 주요 파라미터를 포함합니다.

멀티 GPU 병렬 학습 설정

여러 GPU를 사용할 수 있는 시스템에서는 Tacotron과 WaveNet에 별도의 자원을 할당하여 병렬 학습을 수행할 수 있습니다:

# 2 GPU 구성 예시
tacotron_num_gpus = 1  # Tacotron이 사용할 GPU 수
wavenet_num_gpus = 1   # WaveNet이 사용할 GPU 수

4개 이상의 GPU 시스템에서는 각 모델에 2개의 GPU를 할당하여 학습 속도를 높일 수 있습니다:

# Tacotron 학습 명령어
CUDA_VISIBLE_DEVICES=0,1 python train.py --model='Tacotron' --hparams='tacotron_num_gpus=2'

# WaveNet 학습 명령어
CUDA_VISIBLE_DEVICES=2,3 python train.py --model='WaveNet' --hparams='wavenet_num_gpus=2'

배치 크기 조정

멀티 GPU 자원을 최대한 활용하려면 GPU 수에 따라 배치 크기를 조정해야 합니다:

# 단일 GPU 설정
tacotron_batch_size = 32  # Tacotron 배치 크기
wavenet_batch_size = 8    # WaveNet 배치 크기

# 멀티 GPU 설정 (2개 GPU 가정)
tacotron_batch_size = 64  # 32 * 2
wavenet_batch_size = 16   # 8 * 2

GTA 합성 모드

Tacotron-2는 GTA(Ground-Truth Aligned) 합성 모드를 도입하여 Tacotron이 생성한 멜 스펙트로그램으로 WaveNet을 학습시킵니다. 이를 통해 두 모델 간의 원활한 연결이 가능해집니다:

train_with_GTA = True  # GTA 멜 스펙트로그램으로 WaveNet 학습

GTA 모드를 활성화하면 WaveNet은 실제 오디오의 멜 스펙트로그램 대신 Tacotron이 생성한 멜 스펙트로그램에서 음성을 합성하는 방법을 학습하게 되어 전체 시스템의 일관성이 향상됩니다.

단계별 학습 프로세스

Tacotron-2 학습은 일반적으로 두 단계로 나뉘어 진행됩니다:

1. Tacotron 모델 학습

먼저 텍스트를 멜 스펙트로그램으로 변환하는 Tacotron 모델을 학습합니다:

python train.py --model='Tacotron'

학습 과정에서 Tacotron은 텍스트를 멜 스펙트로그램으로 변환하는 방법을 학습합니다. 주요 파라미터는 다음과 같습니다:

  • embedding_dim: 텍스트 임베딩 차원, 기본값 512
  • encoder_lstm_units: 인코더 LSTM 유닛 수, 기본값 256
  • decoder_lstm_units: 디코더 LSTM 유닛 수, 기본값 1024
  • postnet_num_layers: 후처리 네트워크 레이어 수, 기본값 5

2. GTA 멜 스펙트로그램 생성

학습된 Tacotron을 사용하여 GTA 멜 스펙트로그램을 생성하고 WaveNet 학습에 사용합니다:

python synthesize.py --model='Tacotron' --mode='eval' --GTA=True

3. WaveNet 보코더 학습

마지막으로 GTA 멜 스펙트로그램을 사용하여 WaveNet 보코더를 학습합니다:

python train.py --model='WaveNet'

WaveNet의 주요 파라미터는 다음과 같습니다:

  • layers: 팽창 합성곱 레이어 수, 기본값 20
  • stacks: 팽창 합성곱 스택 수, 기본값 2
  • residual_channels: 잔차 채널 수, 기본값 128
  • upsample_scales: 업샘플링 비율, 기본값 [11, 25], 곱이 hop_size와 같아야 함

모델 통합의 성능 최적화 기법

하드웨어 자원 할당

GPU 자원을 효율적으로 배분하는 것이 학습 효율을 높이는 핵심입니다. hparams.py의 권장 사항에 따르면:

  • Tacotron과 WaveNet은 멀티 GPU에서 데이터 병렬 학습이 가능합니다.
  • 단일 GPU 시스템에서는 Tacotron을 먼저 학습한 후 WaveNet을 학습하는 것이 좋습니다.
  • 멀티 GPU 시스템에서는 두 모델을 병렬로 학습하여 전체 학습 시간을 크게 단축할 수 있습니다.

하이퍼파라미터 튜닝

다음 하이퍼파라미터는 모델 통합 효과에 큰 영향을 미칩니다:

  1. 멜 스펙트로그램 파라미터:
    • num_mels: 멜 스펙트로그램 채널 수, 기본값 80
    • sample_rate: 샘플링 레이트, 기본값 22050Hz
    • hop_size: 프레임 이동 크기, 기본값 275 (약 12.5ms)
  2. 어텐션 메커니즘:
    • attention_dim: 어텐션 공간 차원, 기본값 128
    • attention_filters: 어텐션 합성곱 필터 수, 기본값 32
    • attention_win_size: 어텐션 윈도우 크기, 기본값 7
  3. 정규화 파라미터:
    • tacotron_dropout_rate: Tacotron 드롭아웃 비율, 기본값 0.5
    • wavenet_dropout: WaveNet 드롭아웃 비율, 기본값 0.05

합성 품질 향상

더 높은 품질의 합성 음성을 얻으려면 다음 파라미터를 조정할 수 있습니다:

# Griffin-Lim 파라미터 최적화
power = 1.5  # 권장값 1.2-1.5
griffin_lim_iters = 60  # 반복 횟수, 30-60회

# 출력 범위 제어
clip_outputs = True  # 스펙트로그램 출력 범위 제한
max_abs_value = 4.0  # 최대 절대값 제한

전체 모델 통합 예시

다음은 Tacotron-2 모델 통합의 전체 프로세스 예시입니다:

  1. 프로젝트 클론:
    git clone https://gitcode.com/gh_mirrors/ta/Tacotron-2
    cd Tacotron-2
    
  2. 의존성 설치:
    pip install -r requirements.txt
    
  3. 데이터 전처리:
    python preprocess.py
    
  4. Tacotron 학습:
    python train.py --model='Tacotron' --hparams='tacotron_num_gpus=1'
    
  5. GTA 멜 스펙트로그램 생성:
    python synthesize.py --model='Tacotron' --mode='eval' --GTA=True
    
  6. WaveNet 학습:
    python train.py --model='WaveNet' --hparams='wavenet_num_gpus=1,train_with_GTA=True'
    
  7. 음성 합성:
    python synthesize.py --model='Tacotron-2' --text_list='sentences.txt'
    

프로젝트의 핵심 코드 구조는 다음과 같습니다:

  • Tacotron 모델 구현: tacotron/models/tacotron.py
  • WaveNet 모델 구현: wavenet_vocoder/models/wavenet.py
  • 하이퍼파라미터 설정: hparams.py
  • 학습 스크립트: train.py
  • 합성 스크립트: synthesize.py

태그: Tacotron-2 WaveNet 음성합성 멜스펙트로그램 GTA

7월 10일 00:39에 게시됨