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

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