본문 바로가기
A·I

[Voice conversion] 음성 초짜 입장에서 이해하는 Non-Parallel Sequence-to-Sequence Voice Conversion with Disentangled Linguistic and Speaker Representations 논문 리뷰

by 방구석 몽상가 2020. 12. 1.
VC

Non-parallel Voice conversion task에 대한 논문 Non-Parallel Sequence-to-Sequence Voice Conversion with Disentangled Linguistic and Speaker Representations을 리뷰하고자 한다. 필자는 현재 비전 분야를 연구 중이지만, 필요에 의해 읽어보았다. 이 분야를 잘 모르는 사람으로써 이해하고자 노력한 글이기에 음성 분야를 많이 접해보지 않은 사람들이 읽기를 권장한다.

사전 지식

Voice Conversion (VC)은 source speaker의 입력 음성을 말의 의미 (linguistic content) 변화 없이 마치 target speaker가 말하는 것처럼 만드는 task다. VC는 데이터 조건에 따라 parallel VC와 non-parallel VC로 나눌 수 있다.
Parallel VC 방법론은 같은 말 (linguistic content)을 다른 여러 사람들이 발음한 데이터셋에 대해 설계된다. 이 경우, source speakers의 acoustic features를 target speakers의 features로 맵핑하는 acoustic models는 직접적으로 학습될 수 있다. Linguistic features가 동일하다고 생각하면 직관적으로 이해가능하다.
Non-parallel VC은 사람들마다 하는 말이 대부분 다른 데이터셋에 대해 설계된다. 당연히 parallel VC의 경우보다 더욱 challenging하다. Non-parallel VC는 크게 두 가지 카테고리로 나눌 수 있다. 첫 번째 카테고리는 non-parallel 조건을 parallel 조건으로 변환하고 parallel 방식처럼 mapping 함수를 학습하는 것이다. 예로, TTS (text-to-speech synthesis)를 통해 parallel 데이터를 생성하는 방식이 있다. 두 번째 카테고리는 linguistic representations와 speaker related representations를 분해한다 (factorize). 그러면은 conversion stage에서 source speaker의 linguistic content는 보존되는 반면 source speaker의 speaker representation은 target speaker의 representation으로 변형된다. 이것이 이 논문에서 제안하는 방법론의 카테고리다.

모델 아키텍쳐

(a)는 training stage, (b)는 testing stage다. Training stage에서는 linguistic representations과 speaker representations를 잘 분리하도록 학습된다. Testing stage에서는 학습된 encoders와 decoder를 이용하여 source utterance에서는 linguistic representations을, target utterance에서는 speaker representations를 인코딩하여 각각의 인코딩된 벡터들을 decoder를 통해 변환된 음성을 합성한다.

Training stage의 아키텍쳐를 좀 더 자세히 살펴보자.

Text encoder :

입력 Phonemes transcriptions 를 linguistic embeddings 로 변환한다. 이때, 은 각 발음의 one-hot 벡터이며, 에 의해 각각 변환되어 이 되며, 둘의 길이는 으로 같다.

Recognition encoder :

Acoustic feature sequence 을 입력으로 받아 phoneme sequence 를 예측한다. 여기서 은 acoustic frames의 수다. 다만, 은 softmax layer 통과하기 전인 hidden units 를 예측한다. 즉, 은 오디오 신호의 linguistic representations를 의미한다.
따라서 은 Text encoder에 의해 embedding된 벡터 과 같은 linguistic space 상에 존재해야 하며, 동일한 linguistic 정보를 가지고 있어야 한다. Training stage에서는 이 speakers의 speaking rate에 관계없이 와 같은 길이를 가진다 (M >> N). 보통 하나의 phoneme은 10개의 acoustic frames과 대응되므로 이 encoding은 압축 과정이다.

Speaker encoder :

Recognition encoder와 동일하게 acoustic feature sequence 를 입력으로 받아 speaker와 관계된 정보만을 포함하는 speaker identity embedding 을 생성한다.

Auxiliary classifier :

오디오 입력의 linguistic representation 로부터 speaker identity 를 예측한다. 여기서 은 speakers 사이에 예측된 확률 분포다. 이 classifier의 이용 목적은 adversarial training을 통해 linguistic representation 내에 남아있는 speaker와 관계된 정보를 완전히 제거하는 것이다.

Seq2seq decoder : or

위 figure에서 보듯, 훈련 과정에서 는 speaker 정보인 와 함께 또는 을 각각 입력으로 하여 acoustic feature sequence 을 생성해낸다. Speaker embedding과 linguistic embedding은 concat 되어 입력된다. 를 입력으로 하면 text를 음성으로 만드는 text-to-speech과정과 같고, 을 입력으로 하면 두 개의 정보로 분해했다가 다시 합쳐서 입력 acoustic feature와 동일하게 만드는 것이므로 auto-encoding 과정과 같다. 네트워크 구조는 음성 합성 모델인 Tacotron model과 유사하다.

Loss 함수

: cross entropy loss function

1) Phoneme sequence classification loss

Recognition encoder 의 학습을 위한 loss 함수로, 은 음소를 분류함으로써 embedding을 학습한다. 의 trainable weight matrix다.

2) Embedding similarity with text inputs

임베딩 벡터 와 같은 linguistic space를 공유하도록 학습하는 loss로, 일 때 사이의 유사도는 증가시키고 그렇지 않을 때는 감소시키기 위해 margin이 1인 max margin contrastive loss [Hadsell et al. 2006]를 사용했다. 은 indicator matrix로, 이면 1, 이면 0이다. 수식을 간단히 이해해보자.

수식을 풀어쓰면 위와 같고, 여기서 사이의 거리다.
일 때 이면 해당 성분은 이 되어 0이 되고 그렇지 않으면 으로 1이 되고, 일 때를 보면 이면 해당 loss 성분은 0이 되고 그렇지 않으면 계산된 거리만큼의 loss를 할당한다. 거리는 다음 수식에 의해 계산된다.

3) Speaker classification loss of

는 one-hot speaker label이고, 에 의해 예측된 speaker 확률이다. 처음에 수식을 보고 이 한쪽에만 쓰여있어 뭐지 싶었는데 앞의 수식들을 보니 은 sequence 길이고 각각의 frame에 대해 모두 cross entropy를 계산하여 평균을 낸 것이라는 걸 알 수 있었다. 해당 문장은 한 사람이 말했으므로 당연히 모든 frames에 대해 는 고정이다. 이 부분에서 내가 음성 분야에 대해 무지하다는 것을 다시 깨달을 수 있었다.

4) Adversarial loss against speaker classification

는 uniform distribution으로, 는 전체 speaker의 수다. 이 loss는 이므로 이 uniform distribution를 따르도록 유도한다. 이때, 의 parameter는 update되면 안 되므로 frozen 상태다.

5) Speaker classification loss of

Speaker encoder 가 speaker identity를 분류함으로써 speaker embedding을 학습한다. 의 trainable weight matrix다 (1 FC layer).

6) Acoustic feature prediction loss

는 예측된 acoustic feature로, 이다. Decoder는 linguistic representation과 speaker representation 결합을 acoustic feature로 다시 복원시키도록 학습된다.

7) The last frame prediction loss

의 각 frame에 대해 sigmoid를 계산해서 마지막 frame일 확률을 계산하고 loss를 계산한다.

Model training

이 모델은 pre-training > fine-tuning 을 통한 2-stage training을 진행한다. Pre-training 단계에서는 multi-speaker dataset으로 학습되고, 특정 source 및 target speaker의 conversion pair를 학습한다. 이 논문에서는 fine-tuning stage에서 speaker 수를 증가시킨다면 many-to-many VC를 수행할 수 있지만 하나의 speakers pair 간 VC에 집중한다고 한다.

Pre-training 과정은 다음 두 개의 flow가 번갈아가며 학습된다.

If is even then

Else

Fine-tuning 과정은 pre-training 과정과 거의 같으나 multi-speaker dataset 대신 source 및 target speaker 한 쌍으로 대체된다. 즉, 로 재설정된다. 또한, 다음 코드를 보면 직관적으로 알 수 있듯 pre-training 과정에서 학습된 speaker encoder에 의해 각 speaker의 embedding을 미리 계산하여 fine-tuning 과정에서는 speaker encoder 가 사용되지 않는다. 마지막으로, 의 activation function을 softmax에서 sigmoid로 대체하여 binary speaker classification으로 변경한다.

nonparaSeq2seqVC_code/fine-tune/inference_embedding.py

실험

사용된 비교 VC 방법론은 DNN (Parallel VC method based on a DNN acoustic model), Seq2seqVC [J.-X. Zhang et al. 2019] (Parallel VC method), CycleGAN-VC [T. Kaneko et al. 2018] (Non-parallel VC method), VCC2018 [L.-J. Liu et al. 2018] (Non-parallel VC method) 이다.

객관적인 평가로써, MCD (Mel-cepstrum distoration), RMSE (Root of mean square errors of ), VUV (The error rate of voicing/unvoicing flags), CORR (The Pearson correlation factor of )이 사용되었다. 여기서 는 fundamental frequency로, periodic waveform의 가장 낮은 주파수로 정의된다.
MCD는 보통 두 spectral features 간 차이를 측정할 때 사용되며 Mel-cepstral coefficients (MCEPs)를 가지고 계산한다. 보통 MFCC (Mel-Frequency Cepstral Coefficient)라고 하는데 이는 소리의 고유한 특징을 나타내는 수치로 Mel-spectrograms로부터 추출된다 [참고]. MCEPs 벡터의 차원 수를 N이라 하면

이것이 각 frame과 coefficient마다 계산된다.
RMSE와 CORR은 두 speech utterances 간 energy contours 또는 prosody contours의 linear dependence를 측정하기 위해 주로 사용된다. 더 높은 CORR 값은 더 나은 conversion performance를 나타낸다. K는 sequence의 길이다.

Duration modification의 효과를 조사하기 위해, 변환된 음성과 target 음성의 durations 간 평균 차이값인 DDUR을 계산했다. DDUR을 계산할 때, 음성 처음과 끝의 silence 부분은 제거했다.

주관적 평가로 MOS를 사용했다.

당연히 parallel VC model보다 성능은 떨어지지만 non-parallel에서는 어느 정도 최고 성능을 내는 것을 보여준다.


댓글