Chapter2-2_Voice Conversion(CycleGAN and StarGAN)

本文为李弘毅老师【Voice Conversion - CycleGAN and StarGAN】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。

下文中用到的图片均来自于李宏毅老师的PPT,若有侵权,必定删除。

文章索引:

上篇 - 2-1 Feature Disentangle

下篇 - 待更新

总目录

1 内容简述

上一篇主要讲了我们在没有多个说话人说同一句话这样的数据集的情况下,用feature disentangle来做voice conversion。这篇来讲一下另一种direct transformation,也就只直接转换的意思,不用像上一篇那样要考虑content和speaker。而用到的方法就是图像中的CycleGAN和StarGAN。
ch2-2-1

2 CycleGAN

假设我们现在有一堆李老师的音频,又有一堆新垣结衣的音频。我们希望李老师在给我们上课的时候,听到的是新垣结衣的声音。于是,我们就需要一个GXYG_{X \rightarrow Y}来输入李老师的声音,吐出新垣结衣的声音。然还需要一个DYD_Y来判断输出的声音是不是新垣结衣说的。但是,这样,我们并无法保证GXYG_{X \rightarrow Y}出来的声音的内容是保持一致的,也许所有的XX进来,都变成了同一个YY,这样也可以骗过DYD_Y

所以,我们需要cycle。
ch2-2-2
所谓的cycle就是说,我们现在有四个网络GXYG_{X \rightarrow Y}GYXG_{Y \rightarrow X}DXD_XDYD_Y,然后把speaker X说的话塞进GXYG_{X \rightarrow Y}之后,它会吐出一个Y^\hat{Y},我们会把$Y^\hat{Y}塞进DYD_Y中,企图骗过DYD_Y,让DYD_Y认为这个是真的YY。同时,我们也会把Y^\hat{Y}塞进GYXG_{Y \rightarrow X}当中,输出X^\hat{X},希望XXX^\hat{X}越接近越好。这就是下图中上半部分的过程,下班过程也是如是,这里不赘述了。
ch2-2-3

这里还有一个训练时的技巧就是,我们也会把YY塞进GXYG_{X \rightarrow Y}当中,希望它吐出的Y^\hat{Y}YY是一致的。

3 StarGAN

通过上文的叙述不难推测出,CycleGAN只能把X的声音转成Y的声音,或者把Y的声音转成X的声音,如果我们要有一个Z的话,这个方法就不灵了。理论上来说,如果有nn个speaker的话,就需要n(n1)n(n-1)个generator。那这种方法显然在实际场景中是不适用的。为了解决这个问题,就需要StarGAN。

StarGAN是CycleGAN的进阶版。如下图所示,StarGAN的generator(G)和Discriminator(D)都会多一个代表着是哪个speaker的输入。这个speaker的输入可以认为和feature disentangle中的speaker encoder的输出是一致的。
ch2-2-4
然后整个StarGAN的框架如下图的下半部分所示,上半部分是CycleGAN,放在一起方便做一个直观的比较。可以看出,本质上就是多了一个表示speaker信息的输入而已,但却一下子可以转换成任意一个speaker的声音了。
ch2-2-5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章