일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 타코트론
- waveglow
- YOLO
- you only look once
- 보코더
- 노래합성
- 딥러닝
- 딥러닝 음성 합성
- korean tts
- 딥러닝 보코더
- 트레이닝
- tacotron
- TTS
- 한국어 음성 합성
- DCTTS
- 한국어 tts
- Vocoder
- 학습
- melgan
- singing voice synthesis
- deep voice
- 윈도우
- text-to-speech
- 음성 합성
- Today
- Total
chldkato
Tacotron2 정리 본문
기존의 타코트론은 타코트론1로 칭함
타코트론2와 타코트론1의 가장 큰 차이점은 wavenet 보코더의 유무이다
wavenet 보코더는 여기서 따로 설명하지 않는다
타코트론2의 구조는 위와 같다
타코트론1보다 뭔가 복잡해보이지만 구조는 똑같다
타코트론1의 구조에 위의 layer들을 대입하면 된다
parameter 차이는 빼고 구조적인 차이는 다음과 같다
1) 인코더에서 FC - CBHG 구조가 아니라 conv - 양방향 zoneout LSTM으로 바꼈다
2) Attention에 location aware를 적용했다
3) 디코더에서 Attention RNN이 GRU에서 zoneout LSTM으로 바꼈다 (단방향)
4) 어텐션의 출력이 residual 양방향 GRU를 거쳐서 멜스펙트로그램을 출력하던 것에서
단순히 linear net을 거쳐서 멜스펙트로그램과 stop token을 만든다
4-1) 멜스펙트로그램은 다시 5개의 conv를 거친다
residual처럼 linear 출력과 conv 출력을 더해서 최종 멜스펙트로그램을 만든다
4-2) stop token은 audio가 있는 프레임이면 0, 음성이 없는 프레임(padding)이면 1을 출력한다
타코트론1과의 차이점을 중심으로 하나씩 정리한다
아래의 내용은 타코트론2 논문과 nvidia의 타코트론2를 기반으로 한다
1. Zoneout LSTM
타코트론2에 사용된 모든 LSTM에는 zoneout이 적용되있다
zoneout의 구조는 위와 같다
현재 state에 이전 state를 뺀 것에 드롭아웃을 적용하고 이 벡터를 이전 state에 더해서 새로운 state를 만든다
여기서 state는 cell state와 hidden state 둘 다 적용된다
논문에서는 드롭아웃보다 이런식으로 마스킹하는게 RNN에서 더 효과적이라고 한다
식으로 표현하면 이렇다
(1-W) * dropout({h^t} - {h^t-1}, keep_prob=1-W) + {h^t-1}
타코트론2에서는 W가 0.1이고 dropout 안의 확률이 keep_prob이기 때문에 10퍼센트를 드롭아웃한다
위의 식은 학습 때만 적용되고 테스트 단계에서는 아래처럼 작동한다
(1-W) * {h^t} + W * {h^t-1}
Nvidia에서는 zoneout이 dropout이랑 별 차이가 없고 dropout이 더 빠르기 때문에 dropout을 적용했다고 한다
decoder lstm에만 dropout을 적용하고 encoder lstm에는 아예 적용하지 않았다
2. Location Sensitive Attention
어텐션에도 차이가 있는데 기존 어텐션과의 차이는 score 계산에 이전 state가 들어간다
location sensitive attention의 score는 위의 식으로 계산된다
저기서 U*f 부분을 제외하면 기존의 어텐션 score 계산식과 똑같다
f는 이전 state를 conv에 입력하여 얻어낸 feature이다
그리고 어텐션 스코어를 계산할 때 일반적으로 softmax를 사용하던 것에 반해 smoothing이라는 것을 사용했다
σ는 sigmoid이고 다시 말해 위의 식은 softmax의 exponential을 sigmoid로 바꾼 것이다
3. 디코더
인코더는 layer 구조만 바꼈기 때문에 생략한다
타코트론1에는 Decoder RNN이라고 되있던 부분이 linear projection으로 바껴있다
linear projection은 단순한 FC 1개의 층이다
attention과 attention lstm을 concat한 벡터를 입력해서 하나는 80차 멜-스펙트로그램을 만들고
다른 하나는 stop token이라는 것을 만든다
멜-스펙을 만들 때는 activation이 없지만 stop token은 sigmoid가 들어간다
stop token은 스펙트로그램에서 오디오가 있는, 패딩이 아닌 프레임에서는 0을 출력하고
오디오가 없는, 패딩된 프레임에서는 1을 출력한다
이것도 loss에 들어간다
멜-스펙은 다시 5개의 conv layer를 거친다
그리고 residual 처럼 conv 출력과 linear projection의 출력이자 conv 입력이었던 멜-스펙을 더해서
최종 멜-스펙트로그램 출력을 만든다
이후에는 보코더를 적용해서 음성을 복원한다
Nvidia에서 구현한 타코트론2의 구조는 위와 같다
우선 linear projection으로 멜-스펙을 만들고 그걸 다시 linear projection에 입력해서 stop token을 만든다
참고로 location sensitive attention 왼쪽에 있는 ground truth spectrogram은 tearcher forcing 이다
디코더 입력에 정답이 되는 멜-스펙 프레임을 입력하는 건데 타코트론2 논문에도 있는 내용이고 선택사항이다
'딥러닝' 카테고리의 다른 글
Montreal Forced Aligner (MFA) 한국어 사용법 (25) | 2021.06.02 |
---|---|
DCTTS 정리 (0) | 2020.10.28 |
윈도우에서 MelGAN 학습하기 (42) | 2020.04.08 |
Tacotron 정리 (8) | 2020.04.03 |
MelGAN 정리 (4) | 2020.04.03 |