티스토리 뷰

반응형

DiffVoice: Text-to-Speech with Latent Diffusion


  • Text-to-Speech 모델의 성능 향상을 위해 latent diffusion을 활용할 수 있음
  • DiffVoice
    • Adversarial training을 활용한 variational autoencoder를 통해 speech signal을 phoneme-rate representation으로 encode
    • Diffusion model을 통한 latent representation과 duration의 joint modelling
  • 논문 (ICASSP 2023) : Paper Link

1. Introduction

  • Diffusion model은 합성 작업에서 뛰어난 성능을 보이고 있음
    • Text-to-Speech (TTS)에서는 acoustic model에 적용되어 text input이 주어졌을 때, log mel-spectrogram을 생성함
    • 이때 diffusion model을 사용하여 $x_{0} \in \mathbb{R}^{d}$에 대한 data density $p(x_{0})$를 직접 modelling하는 것은 여러 문제점이 있음
      1. Intermediate latent variable $x_{t}$가 $x_{0}$와 같은 shape을 가지도록 제한됨
        - Diffusion sampling은 score estimator $s_{\theta}(x_{t}, t)$에 대한 반복적인 평가를 필요로 하기 때문
      2. Diffusion model은 $p(x_{0})$의 모든 mode를 capture 하려고 하므로, imperceptible detail에 대해 많은 modelling capacity를 소비함
    • Latent Diffusion Model은 위 문제점들을 완화할 수 있음
      - Encoder $f_{\phi}(\cdot)$을 적용하여 data를 latent code $z_{0} = f_{\phi}(x_{0})$로 encoding 한 다음,

      - Diffusion model로 latent density $p_{\phi}(z_{0})$를 modelling하여 decoder로 $g_{\psi}(z_{0})$를 생성 가능

-> 그래서 Latent Diffusion Model을 기반으로한 diffusion TTS model인 DiffVoice를 제안

 

  • DiffVoice
    • VAE-GAN 기반의 autoencoder를 활용하여 time에 따른 down-sampling을 지원
      - 이를 통해 mel-spectrogram $y \in \mathbb{R}^{N \times D_{mel}}$을 latent code $z_{0} \in \mathbb{R}^{M \times D_{latent}}$로 encoding
      - $N$ : frame 수, $M$ : phoneme 수
    • Dynamic-rate down-sampling을 통해 latent space에서 single diffusion model을 사용하여 phoneme duration과 mel-spectrogram을 joint modelling
      - 이때 phoneme duration이 다른 factor들과 함께 joint modelling되므로 generic inverse problem solving algorithm을 DiffVoice에 결합할 수 있음

< Overall of DiffVoice >

  • Adversarial training을 통해 speech signal을 phoneme-rate representation으로 encode
  • Latent Diffusion Model을 활용하여 latent representation과 phoneme duration 간의 joint modelling을 지원
  • 결과적으로 우수한 TTS 품질을 달성하고 zero-shot 문제로의 확장이 가능

2. DiffVoice

  • $y \in \mathbb{R}^{N \times D_{mel}}$이 log mel-spectrogram이라고 하자.
    - $N$ : frame 수, $D_{mel}$ : mel filter-bank size
    - 이때 $w \in \Sigma^{M}$은 $\Sigma$가 모든 phoneme의 집합이라고 했을 때, 해당하는 phoneme sequence

- Dynamic Down-Sampling of Speech

  • DiffVoice는 Variational AutoEncoder (VAE)를 사용하여 speech를 compact latent space로 encoding 함
    • DiffVoice는 $w$와 $y$ 사이의 alignment를 얻기 위해 phoneme sequence에 대해 학습된 CTC based ASR model을 활용
      - Minimal-CTC를 사용하여 각 phoneme에 대해 단 하나의 sharp spike가 생성되도록 보장
    • $w=(w_{i})_{i=1}^{M}$의 각 $w_{i}$에 대해 CTC-alignment의 position은, $a= (a_{i})^{M}_{i=1}$의 $a_{i}$
      - $a$는 strictly increasing 하므로 $a_{0} :=0$, $d_{i} := (a_{i} - a_{i-1})$로 둘 수 있음
      - Positive sequence $d = (d_{i})^{M}_{i=1}$은 phoneme duration을 포함
    • 근사 posterior $q_{\phi}(z_{0}|y,a)$는 다음과 같이 정의됨:
      1. Encoder Conformer에 의해 $y$를 처리한 다음,
      2. Output frame-rate latent representation $e \in \mathbb{R}^{N \times D_{enc}}$는 frame $(a_{i})_{i=1}^{M}$에서 값을 gathering 하여, $\tilde{e} \in \mathbb{R}^{M \times D_{enc}}$로 down-sampling 됨
      3. 이후 $\tilde{e}$는 linear projection 된 다음 split 되어 평균 $\mu \in \mathbb{R}^{M \times D_{latent}}$와 log 분산 $log \, \sigma \in \mathbb{R}^{M \times D_{latent}}$를 생성
      4. 최종적으로 $z_{0} \in \mathbb{R}^{M \times D_{latent}}$는:
        $q_{\phi}(z_{0}|y,a) := \mathcal{N}(z_{0};\mu, \sigma) = \prod_{i=1}^{M} \prod_{k=1}^{D_{latent}} \mathcal{N}((z_{0})_{i,k};\mu_{i,k},\sigma_{i,k})$
    • 이때 prior $p(z_{0})$는 standard Normal density로써:
      $p(z_{0}) := \prod_{i=1}^{M} \prod_{k=1}^{D_latent} \mathcal{N}((z_{0})_{i,k} ;0,1)$
    • Conditional density $p_{\psi} (y|z_{0},a)$는 다음과 같이 정의됨:
      1. $z_{0} \in \mathbb{R}^{M \times D_{latent}}$가 alignment $a$에 따라 $\tilde{z}_{0} \in \mathbb{R}^{N \times D_{latent}}$로 up-sampling 됨
        - 이때 $\forall 1 \leq i \leq M : (\tilde{z}_{0})_{a_{i,\cdot}} = (z_{0})_{i,\cdot}$이고, $\forall j \notin a : (\tilde{z}_{0})_{j,\cdot} =0$ 
      2. 이후 $\tilde{z}_{0}$는 $h \in \mathbb{R}^{N \times D_{dec}}$를 얻기 위해 decoder conformer에 전달되고, 각 frame에서 $\tilde{y} \in \mathbb{R}^{N \times D_{mel}}$로 linear projection 됨
      3. 최종적으로 $p_{\psi}$는:
        $p_{\psi} (y|z_{0}, a) := \prod_{j=1}^{N} \prod_{k=1}^{D_{mel}} \frac{1}{2b} exp \left( - \frac{|y_{j,k}-\tilde{y}_{j,k}|}{b} \right)$
        - $b\in (0,\infty)$ : 학습을 조절하기 위한 hyper-parameter
    • 따라서 DiffVoice의 VAE는 $\mathcal{L}_{VAE} = \mathbf{E}_{(y,a)} [\mathcal{L}_{\phi, \psi} (y,a)]$를 최적화하여 학습됨
      - $\mathcal{L}_{\phi, \psi}(y,a) = -D_{KL} (q_{\phi}(z_{0}|y,a) || p(z_{0})) + \mathbf{E}_{q_{\phi}(z_{0}|y,a)} log \, p_{\psi} (y|z_{0},a)$

DiffVoice Architecture

- Adversarial Training

  • 위의 최적화 식만을 사용하면 VAE는 high-frequency detail이 부족한 spectrogram을 생성하게 됨
    • 따라서 DiffVoice VAE의 high-fidelity reconstruction을 보장하기 위해, adversarial loss를 추가
    • Adversarial training은 VAE가 먼저 수렴한 다음 적용되고 sepctrogram decoder를 통해 수행됨
      1. Spectrogram decoder는 random initialized 2D convolution stack과 linear projection을 통해 spectrogram residual을 생성
      2. 이때 2D convolution은 spectral norm regularization에 의해 regularize 되고, leaky ReLU를 통해 interleave 됨
      3. Discriminator는 leaky ReLU에 의해 interleave 된 spectral norm regularization을 사용하는 2D convolution stack
    • Stochastic map을 $(y,a) \rightarrow \hat{y}$로, generator를 $\mathcal{G}(y,a)$로, discriminator를 $\mathcal{D}(\cdot)$라 하자
      1. Adversarial training을 위해 least square loss $\mathcal{L}_{\mathcal{G}}, \mathcal{L}_{\mathcal{D}}$와 feature matching loss $\mathcal{L}_{\mathcal{G}}^{feat}$를 사용하여 $\mathcal{G}, \mathcal{D}$를 학습
      2. 결과적으로 adversarial training을 위한 최종 loss $\mathcal{L}_{adv}$는 $\mathcal{L}_{\mathcal{G}}, \mathcal{L}_{\mathcal{D}},\mathcal{L}_{\mathcal{G}}^{feat}, \mathcal{L}_{VAE}$의 weighted sum:
        $\mathcal{L}_{\mathcal{D}} := \mathbf{E}_{(y,a)} \left[ \sum_{j,k}(\mathcal{D}_{j,k}(y)-1)^{2}\right]+\mathbf{E}_{(y,a)}\left[ \sum_{j,k}(D_{j,k}(\hat{y}))^{2}\right]$
        $\mathcal{L}_{\mathcal{G}} := \mathbf{E}_{(y,a)}\left[ \sum_{j,k}(\mathcal{D}_{j,k}(\mathcal{G}(y,a))-1)^{2}\right]$
        $\mathcal{L}_{\mathcal{G}}^{feat} := \mathbf{E}_{(y,a)}\left[ \frac{1}{L}\sum_{\ell=1}^{L} \frac{1}{d_{\ell}} || \mathcal{D}^{(\ell)}(y)-\mathcal{D}^{(\ell)}(\mathcal{G}(y,a))||_{1}\right]$
        - Discriminator의 output은 2D matrix이고, $D_{j,k}$는 $j,k$-th value
        - Feature matching loss $\mathcal{L}_{\mathcal{G}}^{feat}$에서 $L$은 $\mathcal{D}$의 layer 수
        - $\mathcal{D}^{(\ell)}$은 $d_{\ell}$ element가 있는 layer $\ell$의 hidden feature map 

Adversarial Training을 위해 수정된 Decoder

- Latent Diffusion Model

  • DiffVoice는 VAE가 완전히 학습된 후, weight를 freeze 하여 음성을 latent representation으로 encoding
    • Diffusion model을 통해 integer duration sequence $d$를 modelling 하기 위해서
      1. $u \sim Uniform[0,1)^{M}$으로 sampling 하여 uniform dequantization을 적용한 다음, $\tilde{d} = d-u$를 정의함
        - 추가적으로 분포를 normalize 하기 위해 선택된 constant $c_{0},c_{1}$에 $l_{j} := log (\tilde{d}_{j}+c_{0})+c_{1}$를 취함
      2. 이때 $l=(l_{j})_{j=1}^{M}$와 $z_{0}$의 concatentation을 $x_{0} := [l;z_{0}] \in \mathbb{R}^{M \times (D_{latent}+1)}$로 정의하면,
      3. Latent Diffusion Model은 density $p_{0} (x_{0}|w)$에서 sampling을 수행하는 것을 목표로 함
    • DiffVoice는 Variance Preserving SDE를 활용하여 generative modelling을 수행
      1. 여기서 Ito SDE는:
        $dX_{t} = \frac{1}{2} \beta (t) X_{t} dt + \sqrt{\beta(t)}dB_{t}$
        - $X_{t}$ : $\mathbb{R}^{M \times (D+1)}$에서의 random process
        - $t \in [0,1]$이고, $B_{t}$ : $\mathbb{R}^{M \times (D+1)}$-valued standard Brownian motion
      2. $\bar{\alpha} (t) := exp (-\int_{0}^{t}\beta(s)ds)$라고 하면, Ito SDE에 대한 transition density는:
        $p_{0t}(x_{t}|x_{0},w) = \mathcal{N}(x_{t};x_{0}\sqrt{\bar{\alpha}(t)}, (1-\bar{\alpha}(t))I)$
      3. Text를 condition으로 하는 score estimator $s_{\theta}(x_{t},t,w)$는, $s_{\theta}(x_{t},t,w) \approx \nabla_{x_{t}} log \, p_{t} (x_{t}|w)$의 denoising score matching으로 학습되고, time에 따른 weight $\lambda_{t}$가 적용됨
      4. 결과적으로 SDE 과정에 대한 loss $\mathcal{L}_{SDE}$는:
        $\mathcal{L}_{SDE} := \mathbf{E}\left \{ \lambda_{t}\mathbf{E}_{(x_{0},w)}\mathbf{E}_{x_{t}|x_{0}}[||s_{\theta}(x_{t},t,w)-\nabla_{x_{t}}log \, p_{0t}(x_{t}|x_{0},w)||_{2}^{2}]\right\} $ 
    • 추론 과정에서는,
      1. Latent Diffusion Model을 사용하여 $p_{0}(x_{0}|w)$에서 $x_{0}$를 sampling
      2. 이후 $x_{0}$를 $l$과 $z_{0}$로 split 하고
      3. $l$에서 alignment $a$를 reconstruct 한 다음, spectrogram decoder를 통해 $(z_{0},a)$에서 log mel-spectrogram $\hat{y}$를 decoding

- Solving Inverse Problems with DiffVoice

  • $\mathcal{A}$가 differentiable 할 때 $o = \mathcal{A}(x_{0}) \in \mathbb{R}^{O}$라고 가정하면,
    $\nabla_{x_{t}} log \, p_{t}(x_{t}|o,w) = \nabla_{x_{t}}log \, p_{t}(x_{t}|w)+\nabla_{x_{t}}log \, p_{t}(o|x_{t},w)$
  • $p_{0}(x_{0}|o,w)$에서 sampling 하기 위해서, $\nabla_{x_{t}} log \, p_{t}(o|x_{t},w)$에 대한 estimator를 추가
    • 여기서 $\mathbf{E}[x_{0}|x_{t},w]$를 근사하는 $\pi_{\theta}(x_{t},t,w)$는:
      $\pi_{\theta}(x_{t},t,w):=\frac{1}{\sqrt{\bar{\alpha}(t)}}(x_{t}+(1-\bar{\alpha}(t))s_{\theta}(x_{t},t,w))$
    • Weighting function $\xi(t) : [0,1] \rightarrow [0,\infty)$를 취하면:
      $\nabla_{x_{t}} log \, p_{t}(o|x_{t},w) \approx -\xi(t)\nabla_{x_{t}}||\mathcal{A}(\pi_{\theta}(x_{t},t,w))-\mathcal{A}(x_{0})||_{2}^{2}$

DiffVoice Conformer Block의 Hyeprparameter 설정

3. Experiments

- Settings

- Results

  • Single Speaker Text-to-Speech
    • LJSpeech dataset에 대해 single speaker TTS 품질을 비교
    • MOS 측면에서 DiffVoice는 가장 우수한 합성 품질을 보임

Single Speaker에 대한 합성 품질 비교

  • Multi-Speaker Text-to-Speech
    • LibriTTS dataset에 대해 multi-speaker TTS 품질을 비교
    • 마찬가지로 DiffVoice는 가장 우수한 합성 품질을 달성

Multi-Speaker에 대한 합성 품질 비교

  • Utterance-level-X-vector를 활용하여 zero-shot adaptation 실험을 진행
    • 이때 DiffVoice는 prompt-based zero-shot adaptation을 활용
    • 결과적으로 zero-shot 환경에서도 DiffVoice는 가장 우수한 합성 품질을 보임

Zero-shot 환경에서의 합성 품질 비교

  • Text-based Speech Editing
    • RetrieverTTS와 비슷하게 text-based speech inpainting에 대한 성능 평가를 진행
    • 결과적으로 DiffVoice가 speech inpainting에 대해서도 우수한 성능을 보임

Speech Inpainting에 대한 실험 결과

 

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/12   »
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