2021. 7. 15. 12:21ㆍ실천해본것들
Text to Speech(TTS)
text 입력을 audio 출력으로 변환하는 기술. 음성 합성
예시
- AI 스피커
- 전자책 읽어주기
- 음성 도네이션
기존의 음성합성 과정 - HARD
- 문자열 처리 -> 운율 후보 검색 -> 음성 조각 선택 -> 음성 합성
- 복잡한 작업
- 전문지식 필요
- 분리된 개발과정 때문에 합쳤을 때 품질이 떨어짐
개선된 음성합성 과정 - EASY
- 딥러닝 아키텍처
- <문장, 음성> 쌍 데이터셋으로 개발 가능
- 전문지식 불필요
- end-to-end (전체 문제를 부분적인 네트워크 없이 한번에 해결) -> 높은 품질
음성 기초
소리 : 진동의 세기, 주기로 표현
- 주파수 : 소리의 주기(높은 음 / 낮은 음)
- 진폭 : 소리의 세기(큰 소리 / 작은 소리)
음성 데이터
- 디지털 신호로 측정된 말소리 데이터(기압)
- X축 : 시간
- Y축 : 진폭
- 표본화 : 일정시간 마다 표본을 취하는 것
- 양자화 : 표본화된 점들을 어느정도 정밀하게 표현할지 정하는 과정
- 부호화 : 표본화 - 양자화를 거친 디지털 정보를 2진수로 표현, 압축, 저장하는 과정
음성데이터의 특징
- 다양한 주파수의 혼합 -> 분해가 필요
Fourier Transform - 주파수 단위로 분해
- 하지만 시간에 따른 주파수 변화를 알 수 없다
STFT(Short Time Fourier Transform)
- Sliding window(일정한 구간) 단위로 자름
- 자른 다음에 주파수를 분해
- 분해 결과물 - Spectrogram
- X축 : 시간
- Y축 : 주파수
- Z축(색깔) : 진폭
Mel Spectrogram
- mel scale을 반영한 Spectrogram
- 사람의 달팽이관 특성을 고려
- 저주파 감지영역 굵음, 고주파 대역 감지로 갈 수록 얇아짐
- 저주파 민감, 고주파 둔감
- Mel Filter Bank를 사용
- log 단위 변환
- 사람의 달팽이관 특성을 고려
- 각 mel bank에 해당하는 주파수를 가중합한 후 spectrogram data 변환
음성합성 과정
- 과정1 - Text to mel-spectrogram
- Tacotron2
- 과정2 - mel-spectrogram to WAV
- Wavenet
Tacotron2
- 전처리 : text -> character 단위 정수로 변환
- (초/중/종성, 특수문자 ) -> 음절 단위 분리
- 분리 후 one-hot encoding으로 정수 표현
- Encoder : character에서 특징 추출
- Embedding matrix - (전처리 후 Matrix 형태 변환)
- 3 convolution network - (정보 축약)
- bi-LSTM - (encoder 특징정보로 변환)
- Attention : decoder에서 쓰일 encoder 정보 mapping
- 시점마다 decoder에서 집중해서 사용할 정보를 encoder에서 추출, 할당
- 매 시점에서 사용하는 정보는 이전시점의 attention alignment 정보를 사용
- 따라서 alignment graph는 학습되었을 경우 우상향으로 연속되어 있다.
- Decoder: mel spectrogram 생성
- 이전시점 mel spectrogram + attention 정보 이용해서 현재시점 mel spectrogram 생성
- 이전시점 mel spectrogram + attention 정보 이용해서 종료확률을 계산
- mel spectrogram 품질 향상
Attention
- addictive attention(bahdanau attention)
- attention score - 이전시점 decoder 정보 + encoder 정보의 가중합에 tanh 적용후 가중치를 곱한 것
- attention - attention score 에 softmax 적용해서 정규화함(0 ~ 1 범위)
- encoder의 정보를 얼마나 할당할 것인지에 대한 정보
- context - attention 추출 결과 . 해당 시점 까지의 attention * encoder의 총합
- local sensitive attention(Tacotron2 TTS에 활용)
- bahdanau 와의 차이점 - 이전 시점의 attention을 attention score 계산에 이용
Decoder
- mel spectrogram 생성
- Pre - net : 이전시점의 mel-vector에서 정보 추출
- decoder LSTM : 단방향, attention + pre-net 결과를 이용 현재시점의 정보 추출
- Fully Connected Layer : 현재시점의 정보를 이용한 mel-spectrogram 생성
- 종료확률 계산
- Fully Connected Layer + sigmoid
- decoder LSTM에서 나온 정보를 바탕으로 현재 시점의 종료확률 계산(0 ~ 1)
- Fully Connected Layer + sigmoid
- mel-spectrogram 품질 향상
- Post-Net : 1D Convolution Layer(5x1) + Batch Normalization
- decoder를 통해 melspectrogram 모두 생성후 적용
- 생성된 mel spectrogram의 품질 보정(residual connection을 이용한 smoothing)
- Post-Net : 1D Convolution Layer(5x1) + Batch Normalization
loss function
전체 loss = MSE + BCE
- MSE - 원본 mel spectrogram과 tacotron으로 예측한 mel spectrogram간 차이
- BCE(binary cross entropy) - 실제 종료확률 - 예측 종료확률 간 차이
MelGAN
MelGAN - mel spectrogram을 입력받고 오디오를 생성하는 GAN 기반 보코더이다.
TTS 종류
- text -> audio 직접 변환
- text -> mel spectrogram(중간 결과) -> audio 두 단계 변환
Mel Spectrogram 변환 종류
- 순수 신호 처리 기법(Griffin-Lim) - 빠르고 간단한 모델. artifact 느낌
- 자기 회귀(wavenet) - rnn 사용. 순차처리되어야 해서 추론이 느리고 비효율적
- 비 자기회귀(parallel wavenet,waveglow) - 병렬 처리 가능(GPU 충분한 활용) -> 빠르다
- GAN - MelGAN. 더 적은 parameter로 학습했을 때 더 높은 성능을 기대할 수 있다. 추론도 빠르다.
MelGAN의 특징
- GAN 기반 (생성모델)
- non-autoregressive
- feed forward convolution(1차원 convolution)
- 최초의 성공적인 GAN Vocoder
- 빠른 추론시간, 적은 학습 파라미터, 간단한 구조 대비 뛰어난 성능 -> 효율적
용어
vocoder : spectrogram에서 음성 신호로 바꿔주는 변환기
artifact : 쉿 소리, 기계같은 음성, 반복되는 음성, 의도 하지 않았던 생성된 음성
non-autoregressive(비자기회귀적) : 이전의 자료가 현재의 자료에 영향을 주지 않는다. <-> rnn
feed forward(순방향) - 순환 X, loop X
생성된 출력물이 다음 시간의 입력이 되는 autoregressive flow <-> 이것과는 다르다?
평가 방법 : audio는 MOS(Mean Opinion Score)이라는 주관적인 metric을 사용한다. 여러사람들의 음성에 대한 품질 평가를 해서 통계를 낸다.
ablation study : 만약 이게 없을 때 성능에 얼마나 변화가 있을지 알아보는 실험
non-autoregressive : 이전 시점의 자료가 현재 자료에 영향을 주지 않음
mel-spectrogram inversion : mel spectrogram -> audio
Temporal resolution : 시간 해상도 , 무리없이 부드러운 음성을 출력하는 정도.
Generator
구조
convolution layer를 통과한 후 4 단계에 걸쳐 upsampling이 진행. 마지막으로 convolution layer를 통과
- upsampling - 특징(mel spectrogram)을 가지고 음성 생성. 사이즈 늘리기.(8 x 8 x 2 x 2 = 256배. mel-spectrogram의 256배 낮은 음성 해상도를 여기서 처리)
- residual stack - dilation convolution stack을 통해 넓은 범위의 정보를 반영
inductive bias : 지금까지 학습하지 않았던 새로운 상황에서 정확한 예측을 하기위해 사용하는 추가적인 가정. 가정이 맞으면 성능 대폭 향상/ 틀리면 성능 하락
inductive bias in MelGAN : cnn 기반의 generator에서는 인접한 픽셀이 관련성이 크다란 inductive bias가 있다.
audio time step에서 긴 범위의 상관관계가 발생하는 것을 가정. 따라서 upsampling에 따르는 residual block(dilation) 적용. 그래야만 이어지는 layer들의 output들이 상당히 일치하는 input을 가질수있다. 동일한 계산비용으로 더 넓은 시야를 제공
deconvolution : feature map의 크기를 증가시킴. upsamplling
dilated convolution : 적용할 filter 내부 stride (dilation) 적용. 같은 kernel size로 더 넓은 범위의 convolution 수행할 수 있다. 똑같은 비용으로 넓은 범위의 정보를 뽑을 수 있다. 중복 적용시 dilation이 곱해지며 증가한다.(1,3,9)
residual stack : 가중치를 그대로 더해서 Overfitting, Vanishing Gradient 문제를 해결하는 block
residual stack in MelGAN : audio time step은 넓은 범위에서의 상관관계가 존재하므로 이를 inductive bias로 적용하기 위해 일반 convolution이 아닌 dilated convolution을 적용. activation function은 leaky relu 사용. 쉿쉿거리는 noise를 해결하기 위해 stride의 2배인 kernel size로 설정.
Discriminator
discriminator - 총 세개의 multi scale 구조가 있다. multi scale을 통해 각기 다른 범위에서 계산한다.
6개의 feature map과 output이 나와서 loss를 계산하는데 합산되어 쓰인다.
multi-scale architecture : 각각의 discriminator는 다른 주파수 범위에서의 특징을 학습한다는 inductive bias를 적용. down sample 될 수록 저 주파수 범위의 특징만 남는다.
link
Tacotron
- 고려대 김정희님 발표
- 책 읽어주는 딥러닝
MelGAN
- 원문
- MelGAN 정리 블로그
음성 기술
happy 하다
'실천해본것들' 카테고리의 다른 글
[JQuery] select box 에 option을 동적으로 추가해보자 (0) | 2021.09.12 |
---|---|
<TR> onclick 이벤트에서 선택한 <TD>의 index를 얻어보자 (0) | 2021.09.02 |
TensorflowTTS 한국어 예제 써보기 (KSS dataset) (7) | 2021.06.15 |
monday.com 탈퇴하기 (0) | 2021.04.21 |
[MongoDB] Java driver 연동 & quickstart (0) | 2021.03.27 |