티스토리 뷰

반응형

AVQVC: One-Shot Voice Conversion by Vector Quantization with Applying Contrastive Learning


  • Voice conversion은 speech signal에서 timbre와 linguistic content를 disentangle 하여 수행될 수 있음
  • AVQVC
    • VQVC와 AutoVC를 결합한 one-shot voice conversion framework
    • Content, timbre를 분리하기 위한 training method를 VQVC에 적용
  • 논문 (ICASSP 2022) : Paper Link

1. Introduction

  • Voice Conversion (VC)는 original utterance의 content를 유지하면서 target speaker로 변환하는 것을 목표로 함
    • StarGANv2-VC와 같은 Generative Adversarial Network (GAN)-based 방식은 discriminator를 통해 generator가 indistinguishable speech를 생성하도록 유도함
    • VQVC, VQVC+와 같이 Vector Quantization (VQ)을 사용하여 content, speaker information을 disentangle 하는 방법을 활용할 수도 있음
      - BUT, VQ-based 방식은 간단한 training을 지원하지만 상대적으로 합성 품질이 떨어진다는 문제가 있음
    • 한편으로 AutoVC는 GE2E loss로 pre-train 된 speaker encoder를 사용하여 ideal speaker embedding을 얻을 수 있고, 보다 reasonable 한 speaker/content disentanglement가 가능함

-> 그래서 AutoVC와 VQVC의 장점을 결합한 AVQVC를 제안

 

  • AVQVC
    • AutoVC를 기반으로 VQVC의 training을 재설계하여 speaker/content information을 disentangle 하도록 유도
    • Disecrete vector는 content representation에 가까워지고, encoder output과 discrete vector 간의 mean difference는 speaker information에 가까워짐

< Overall of AVQVC >

  • VQVC와 AutoVC를 결합한 voice conversion model
  • 결과적으로 기존보다 뛰어난 conversion 성능을 달성

2. Method

- VQVC

  • VQVC는 하나의 reconstruction loss 만으로 content embedding과 speaker embedding을 disentangle 함
    • 구조적으로는 encoder, codebook, decoder로 구성됨
      1. Encoder는 input speech에서 latent feature를 추출하는 역할
      2. Learnable codebook은 continuous data를 discrete data로 quantize 하는 역할
      3. Decoder는 content, speaker embedding으로부터 converted speech를 생성하는 역할
    • 이때 codebook에서 생성된 discrete data를 content embedding으로 취급하고, encoder output과 discrete data 간의 mean difference로 speaker embedding을 얻을 수 있음
      1. Discrete content embedding $\mathbf{C}_{x}$와 speaker embedding $\mathbf{S}_{x}$는:
        (Eq. 1) $\mathbf{C}_{x}=\text{VQ}(\text{enc}(x)),\,\,\, \mathbf{S}_{x}=\mathbb{E}_{t}[\text{enc}(x)-\mathbf{C}_{x}]$
        - $\text{enc}(\cdot)$ : encoder, $\mathbf{E}_{t}$ : latent space에서 segment length에 대한 expectation
        - $\text{VQ}$ : continuous data sequence를 closest discrete code로 quantize 하는 quantization function
      2. $\mathbf{V}$를 continuous data sequence $\mathbf{V}=v_{1},v_{2},...,v_{T}$라고 하면, $\text{VQ}(\mathbf{V})$는:
        (Eq. 2) $\text{VQ}(\mathbf{V})=q_{1},q_{2},...,q_{T}$
        (Eq. 3) $q_{j}=\arg\min_{q\in \text{Codebook}}(|| v_{j}-q||_{2}^{2})$
    • Training 중에 하나의 utterance $x_{i}$가 reconsturction을 위해 randomly select 되면, latent-code loss는 discrete code와 continuous embedding 간의 distance를 최소화하도록 최적화됨
    • 여기서 self-reconstruction loss는 speaker information을 제거하고 linguistic content를 retaining 하도록 model을 constrain 함:
      (Eq. 4) $\mathcal{L}_{latent}=\mathbb{E}[|| \text{enc}(x)-\mathbf{C}_{x}||_{2}^{2}]$
      (Eq. 5) $\mathcal{L}_{recon}=\mathbb{E}[|| \hat{x}_{i\rightarrow i}-x_{i}||_{1}^{1}]$
      (Eq. 6) $\hat{x}_{i\rightarrow i}=\text{Decoder}(c_{x_{i}}+s_{x_{i}})$
    • Conversion 시에는 서로 다른 speaker에 대한 2개의 utterance가 source/target speech로 사용
      1. 이때 각 utterance를 trained model에 전달하면 content, speaker embedding을 얻을 수 있음
      2. 이후 source speaker의 content embedding과 target speaker의 speaker embedding을 decoder에 전달하여 conversion을 수행함

VQVC Framework

- AVQVC

  • AVQVC는 VQVC의 architecture를 따르는 대신 AutoVC의 training method를 활용함
    • 먼저 AVQVC에는 3개의 sentence $x_{1}, x_{2},x_{3}$가 전달됨
      1. $x_{1}, x_{2}$는 동일한 speaker의 서로 다른 text content, $x_{3}$는 다른 speaker의 sentence
      2. 이때 VQ model이 content, speaker embedding을 올바르게 disentangle 할 수 있다고 하면, $x_{1}, x_{2}$가 전달되었을 때 얻어지는 speaker embedding은 동일해야 함
        - 반대로 $x_{1}, x_{3}$이나 $x_{2}, x_{3}$이 전달되면 얻어지는 speaker embedding이 서로 달라야 함
    • 그러면, training phase에서 $x_{1},x_{2},x_{3}$이 전달되면 $\mathbf{C}_{x_{i}}, \mathbf{S}_{x_{i}}$를 얻을 수 있음 ($i=1,2,3$)
      1. 이때 $\mathbf{S}_{x_{1}}, \mathbf{S}_{x_{2}}$를 exchange하여 reconstruction task를 수행한다고 하자
        - $\mathbf{S}_{x_{1}}, \mathbf{S}_{x_{2}}$는 동일해야 하므로 reconstruction speech $x'_{1},x'_{2}$는 $x_{1},x_{2}$에 가까워야 함
      2. 따라서 VQ model을 constrain 하기 위해 self-reconstruction loss와 latent-code loss를 적용할 수 있음:
        (Eq. 7) $\mathcal{L}_{recon}=||x'_{1}-x_{1}||_{1}^{1}+ ||x'_{2}-x_{2}||_{1}^{1}+|| x'_{3}-x_{3}||^{1}_{1}$
        (Eq. 8) $\mathcal{L}_{latent}=|| \text{enc}(x_{1})-\mathbf{C}_{x_{1}}||^{2}_{2}+|| \text{enc}(x_{2})-\mathbf{C}_{x_{2}}||^{2}_{2}+|| \text{enc}(x_{3})-\mathbf{C}_{x_{3}}||^{2}_{2}$
        - $x'_{1}$은 $\mathbf{C}_{x_{1}}, \mathbf{S}_{x_{2}}$로 얻어지고, $x'_{2}$는 $\mathbf{C}_{x_{2}},\mathbf{S}_{x_{1}}$로 얻어짐
      3. $x'_{3}$은 $\mathbf{C}_{x_{3}}, \mathbf{S}_{x_{3}}$으로 얻어짐:
        (Eq. 9) $x'_{3}=\text{Decoder}(\mathbf{C}_{x_{3}}+\mathbf{S}_{x_{3}})$
    • 추가적으로 논문은 speaker-loss function과 diff-speaker-loss function을 도입해 discrete data가 content embedding과 유사해지도록 함 
      1. 이를 통해 continuous data와 discrete data 간의 mean difference가 speaker embedding에 가까워지도록 함
      2. 즉, $\mathbf{S}_{X_{1}},\mathbf{S}_{X_{2}}$는 speaker가 동일하므로 speaker embedding이 최대한 가까워야하고, $\mathbf{S}_{X_{1}}, \mathbf{S}_{X_{3}}$와 $\mathbf{S}_{X_{2}}, \mathbf{S}_{X_{3}}$은 서로 다른 speaker이므로 speaker embedding이 달라야 함:
        (Eq. 10) $\mathcal{L}_{speaker}=|| \mathbf{S}_{x_{2}}-\mathbf{S}_{x_{1}}||_{1}^{1}$
        (Eq. 11) $\mathcal{L}_{diff}=-\left( || \mathbf{S}_{x_{2}}-\mathbf{S}_{x_{3}}||_{1}^{1}+|| \mathbf{S}_{x_{1}}-\mathbf{S}_{x_{3}}||_{1}^{1}\right)$
      3. 결과적으로 얻어지는 full objective는:
        (Eq. 12) $\mathcal{L}=\mathcal{L}_{recon}+\alpha \mathcal{L}_{latent}+\beta\mathcal{L}_{speaker}+\lambda\mathcal{L}_{diff}$
    • 추론 시에는 source/target speaker의 utterance를 select 해 각각의 content/speaker embedding을 얻은 다음, decoder에 전달하여 conversion을 수행함

Overall of AVQVC

3. Experiments

- Settings

- Results

  • 전체적으로 AVQVC가 가장 우수한 성능을 보임

모델 성능 비교

  • One-Shot VC 측면에서도 AVQVC의 성능이 가장 뛰어남

One-Shot VC 성능 비교

  • Codebook size가 커질수록 성능이 향상되지만 너무 큰 size를 사용하는 경우 성능이 저하될 수 있음
    - 논문에서는 512 codebook size를 채택

Codebook Size에 따른 성능 비교

 

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
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
Total
Today
Yesterday