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: 텍스트 임베딩 차원, 기본값 512encoder_lstm_units: 인코더 LSTM 유닛 수, 기본값 256decoder_lstm_units: 디코더 LSTM 유닛 수, 기본값 1024postnet_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: 팽창 합성곱 레이어 수, 기본값 20stacks: 팽창 합성곱 스택 수, 기본값 2residual_channels: 잔차 채널 수, 기본값 128upsample_scales: 업샘플링 비율, 기본값 [11, 25], 곱이 hop_size와 같아야 함
모델 통합의 성능 최적화 기법
하드웨어 자원 할당
GPU 자원을 효율적으로 배분하는 것이 학습 효율을 높이는 핵심입니다. hparams.py의 권장 사항에 따르면:
- Tacotron과 WaveNet은 멀티 GPU에서 데이터 병렬 학습이 가능합니다.
- 단일 GPU 시스템에서는 Tacotron을 먼저 학습한 후 WaveNet을 학습하는 것이 좋습니다.
- 멀티 GPU 시스템에서는 두 모델을 병렬로 학습하여 전체 학습 시간을 크게 단축할 수 있습니다.
하이퍼파라미터 튜닝
다음 하이퍼파라미터는 모델 통합 효과에 큰 영향을 미칩니다:
- 멜 스펙트로그램 파라미터:
num_mels: 멜 스펙트로그램 채널 수, 기본값 80sample_rate: 샘플링 레이트, 기본값 22050Hzhop_size: 프레임 이동 크기, 기본값 275 (약 12.5ms)
- 어텐션 메커니즘:
attention_dim: 어텐션 공간 차원, 기본값 128attention_filters: 어텐션 합성곱 필터 수, 기본값 32attention_win_size: 어텐션 윈도우 크기, 기본값 7
- 정규화 파라미터:
tacotron_dropout_rate: Tacotron 드롭아웃 비율, 기본값 0.5wavenet_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 모델 통합의 전체 프로세스 예시입니다:
- 프로젝트 클론:
git clone https://gitcode.com/gh_mirrors/ta/Tacotron-2 cd Tacotron-2 - 의존성 설치:
pip install -r requirements.txt - 데이터 전처리:
python preprocess.py - Tacotron 학습:
python train.py --model='Tacotron' --hparams='tacotron_num_gpus=1' - GTA 멜 스펙트로그램 생성:
python synthesize.py --model='Tacotron' --mode='eval' --GTA=True - WaveNet 학습:
python train.py --model='WaveNet' --hparams='wavenet_num_gpus=1,train_with_GTA=True' - 음성 합성:
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