티스토리 뷰
반응형
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하는 것은 여러 문제점이 있음
- Intermediate latent variable $x_{t}$가 $x_{0}$와 같은 shape을 가지도록 제한됨
- Diffusion sampling은 score estimator $s_{\theta}(x_{t}, t)$에 대한 반복적인 평가를 필요로 하기 때문 - Diffusion model은 $p(x_{0})$의 모든 mode를 capture 하려고 하므로, imperceptible detail에 대해 많은 modelling capacity를 소비함
- Intermediate latent variable $x_{t}$가 $x_{0}$와 같은 shape을 가지도록 제한됨
- 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에 결합할 수 있음
- VAE-GAN 기반의 autoencoder를 활용하여 time에 따른 down-sampling을 지원
< 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)$는 다음과 같이 정의됨:
- Encoder Conformer에 의해 $y$를 처리한 다음,
- 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 됨
- 이후 $\tilde{e}$는 linear projection 된 다음 split 되어 평균 $\mu \in \mathbb{R}^{M \times D_{latent}}$와 log 분산 $log \, \sigma \in \mathbb{R}^{M \times D_{latent}}$를 생성
- 최종적으로 $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)$는 다음과 같이 정의됨:
- $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$ - 이후 $\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 됨
- 최종적으로 $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
- $z_{0} \in \mathbb{R}^{M \times D_{latent}}$가 alignment $a$에 따라 $\tilde{z}_{0} \in \mathbb{R}^{N \times D_{latent}}$로 up-sampling 됨
- 따라서 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는 $w$와 $y$ 사이의 alignment를 얻기 위해 phoneme sequence에 대해 학습된 CTC based ASR model을 활용
- Adversarial Training
- 위의 최적화 식만을 사용하면 VAE는 high-frequency detail이 부족한 spectrogram을 생성하게 됨
- 따라서 DiffVoice VAE의 high-fidelity reconstruction을 보장하기 위해, adversarial loss를 추가
- Adversarial training은 VAE가 먼저 수렴한 다음 적용되고 sepctrogram decoder를 통해 수행됨
- Spectrogram decoder는 random initialized 2D convolution stack과 linear projection을 통해 spectrogram residual을 생성
- 이때 2D convolution은 spectral norm regularization에 의해 regularize 되고, leaky ReLU를 통해 interleave 됨
- 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)$라 하자
- 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}$를 학습
- 결과적으로 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
- Latent Diffusion Model
- DiffVoice는 VAE가 완전히 학습된 후, weight를 freeze 하여 음성을 latent representation으로 encoding
- Diffusion model을 통해 integer duration sequence $d$를 modelling 하기 위해서
- $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}$를 취함 - 이때 $l=(l_{j})_{j=1}^{M}$와 $z_{0}$의 concatentation을 $x_{0} := [l;z_{0}] \in \mathbb{R}^{M \times (D_{latent}+1)}$로 정의하면,
- Latent Diffusion Model은 density $p_{0} (x_{0}|w)$에서 sampling을 수행하는 것을 목표로 함
- $u \sim Uniform[0,1)^{M}$으로 sampling 하여 uniform dequantization을 적용한 다음, $\tilde{d} = d-u$를 정의함
- DiffVoice는 Variance Preserving SDE를 활용하여 generative modelling을 수행함
- 여기서 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 - $\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)$ - 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}$가 적용됨
- 결과적으로 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\} $
- 여기서 Ito SDE는:
- 추론 과정에서는,
- Latent Diffusion Model을 사용하여 $p_{0}(x_{0}|w)$에서 $x_{0}$를 sampling
- 이후 $x_{0}$를 $l$과 $z_{0}$로 split 하고
- $l$에서 alignment $a$를 reconstruct 한 다음, spectrogram decoder를 통해 $(z_{0},a)$에서 log mel-spectrogram $\hat{y}$를 decoding
- Diffusion model을 통해 integer duration sequence $d$를 modelling 하기 위해서
- 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}$
- 여기서 $\mathbf{E}[x_{0}|x_{t},w]$를 근사하는 $\pi_{\theta}(x_{t},t,w)$는:
3. Experiments
- Settings
- Dataset : LJSpeech, LibriTTS
- Comparisons : FastSpeech2, VITS, Grad-TTS
- Results
- Single Speaker Text-to-Speech
- LJSpeech dataset에 대해 single speaker TTS 품질을 비교
- MOS 측면에서 DiffVoice는 가장 우수한 합성 품질을 보임
- Multi-Speaker Text-to-Speech
- LibriTTS dataset에 대해 multi-speaker TTS 품질을 비교
- 마찬가지로 DiffVoice는 가장 우수한 합성 품질을 달성
- Utterance-level-X-vector를 활용하여 zero-shot adaptation 실험을 진행
- 이때 DiffVoice는 prompt-based zero-shot adaptation을 활용
- 결과적으로 zero-shot 환경에서도 DiffVoice는 가장 우수한 합성 품질을 보임
- Text-based Speech Editing
- RetrieverTTS와 비슷하게 text-based speech inpainting에 대한 성능 평가를 진행
- 결과적으로 DiffVoice가 speech inpainting에 대해서도 우수한 성능을 보임
반응형
'Paper > TTS' 카테고리의 다른 글
댓글