Voice Conversion

Що це?

Вокодінг Спектральний мапінг

Вокодінг

Звичайний голос:
$F_0 = F_0 \cdot 0.5$:
$F_0 = F_0 \cdot 6$:
Крокова $F_0$:
Warping #1:
Warping #2:

Спектральні фічі

Фіча Розмір Алгоритми
Спектральна густина: $\mathbb{R}^{513}$ NMF, FW
MCEP (Mel-cepstrum envelope): $\mathbb{R}^{24}$ GMM, Kernel, DNN

Паралельний корпус

Спектральний мапінг

  • Наївне застосування регресії призводить до незадовільних результатів
  • JDGMM: Joint Density Gaussian Mixture Models

[Toda et al. 2007]

Join Density GMM

  • GMM - метод кластеризації
  • Акустичний простір має природнє розділення на кластери
  • JDGMM дозволяє моделювати локальну функцію перетворення для кожного кластера
$\{\mathbf{x}_t\}_1^T$ та $\{\mathbf{y}_t\}_1^T$ початковий та цільовий голоси та $\mathbf{z}_t := (\mathbf{x}_t, \mathbf{y}_t)$ $P(\mathbf{x}_t, \mathbf{y}_t) = P(\mathbf{z}_t) = \color{green}{w_1\mathcal{N}(\mathbf{z}_t; \mathbf{\mu}_1^{(z)}, \mathbf{C}_1^{(zz)}}) + \color{red}{w_2\mathcal{N}(\mathbf{z}_t; \mathbf{\mu}_2^{(z)}, \mathbf{C}_2^{(zz)})}$ $\mathbf{\mu}_m^{(z)} = \begin{bmatrix} \mathbf{\mu}_m^{(x)}\\ \mathbf{\mu}_m^{(y)}\end{bmatrix}; \mathbf{C}_m^{(z)} = \begin{bmatrix} \mathbf{C}_m^{(xx)} & \mathbf{C}_m^{(xy)}\\ \mathbf{C}_m^{(yx)} & \mathbf{C}_m^{(yy)}\end{bmatrix}$ $\color{purple}{P(\mathbf{y}_t | \mathbf{x}_t)} = \color{green}{P(m=1|\mathbf{x}_t)P(\mathbf{y}|\mathbf{x}_t, m=1)} + \color{red}{P(m=2|\mathbf{x}_t)P(\mathbf{y}|\mathbf{x}_t, m=2)}$ $\color{blue}{\hat{\mathbf{y}}_t(\mathbf{x}_t)} = E_y[\color{purple}{P(\mathbf{y}_t | \mathbf{x}_t)}]$

Недоліки

  • Не враховується динамічна природа сигналу
  • Надмірне згладжування $\hat{\mathbf{y}}_t$


Приклад звуку:

Динамічні фічі

  1. Замість $\mathbf{y}_t \in \mathbb{R}^{D}$ використовуємо $\mathbf{Y}_t = (\mathbf{y}_t, \Delta\mathbf{y}_t) \in \mathbb{R}^{2D}$, де $$\Delta\mathbf{y}_t := 0.5 \cdot (\mathbf{y}_{t-1} - \mathbf{y}_{t+1})$$
  2. Тренуємо JDGMM $\implies P(\mathbf{Y}_t|\mathbf{X}_t)$
  3. Збираємо послідовності у один вектор:
    $\mathbf{y} = (\mathbf{y}_1, \dots, \mathbf{y}_{T_{tst}}) \in \mathbb{R}^{DT_{tst}}$
    $\mathbf{Y} = (\mathbf{Y}_1, \dots, \mathbf{Y}_{T_{tst}}) = (\mathbf{y}_1, \Delta\mathbf{y}_1, \dots, \mathbf{y}_{T_{tst}}, \Delta\mathbf{y}_{T_{tst}}) \in \mathbb{R}^{2DT_{tst}}$
    Можна записати: $\mathbf{Y} = \mathbf{W}\mathbf{y}$
  4. Знаходимо найкращу (maximum likelihood) послідовність для цільового голосу: $$\hat{\mathbf{y}} = \underset{\mathbf{y}}{\operatorname{argmax}}P(\mathbf{W}\mathbf{y}|\mathbf{X}_{tst}) = (\mathbf{W}^T\mathbf{D}\mathbf{W})^{-1}\mathbf{W}^T\mathbf{D}\color{blue}{\mathbf{e}}$$

Недоліки

  • Не враховується динамічна природа сигналу
  • Надмірне згладжування $\hat{\mathbf{y}}_t$


Приклад звуку:
Приклад звуку (ДФ):

Глобальна дисперсія

  1. Моделюємо розподіл дисперсій цільового спікера простим нормальним розподілом: $P(\mathbf{v})$
  2. Враховуємо дисперсію під час оптимізації: $$\hat{\mathbf{y}} = \underset{\mathbf{y}}{\operatorname{argmax}}P(\mathbf{W}\mathbf{y}|\mathbf{X})\cdot P(var(\mathbf{y}))$$
  3. На жаль, немає аналітичного рішення для максимуму ¯\_(ツ)_/¯
Приклад звуку:
Приклад звуку (DF):
Приклад звуку (DF + GV):

Інші підходи

  • Non-negative Matrix Factorization (NMF) - кожен новий фрейм моделюється як лінійна комбінація фреймів з тренувальної вибірки
  • Frequency warping (FW) - кожен новий цільовий фрейм моделюється як викривлення відповідного фрейму початкового спікера
  • Kernel Partial Least Squares - Лінійна регресія з нелінійним ядром
  • Neural Networks

Take home message:

Use domain knowledge, Luke!

Скрябін

$\mathbf{x}_{train}$
$\mathbf{y}_{train}$
$\hat{\mathbf{y}}$

Thanks!

bielievtsov@ibdi.pro