iT邦幫忙

2021 iThome 鐵人賽

DAY 10
1
AI & Data

AI Voice Conversion系列 第 10

【Day10】 聲音轉換概述 - 再次出發!

前言

  • 在經過前面 9 天的準備之後,我們終於有些本錢可以涉足這個領域了,整理一下我們現在所掌握的
  1. 知道聲音的特徵資訊藏在 Mel 裡,也知道怎麼算
  2. 知道怎麼從 Mel 回到 Waveform,而且是用 MelGan 做到,避開了 Griffin Lim 的機器音問題
  3. 知道怎麼用 D_VECTOR 抽取出說話的人的資訊,然後用來分辨是誰在說話,而且就算有沒看過的人也可以把它嵌入到空間裡的不同位置

好耶! /images/emoticon/emoticon42.gif/images/emoticon/emoticon42.gif/images/emoticon/emoticon42.gif

聲音轉換可以幹嘛?

在做之前總要先知道你做這個能幹嘛吧

  1. 可能有些聲帶受損的人能透過這個技術變成正常的聲音
  2. 可以個人化出自己喜歡的聲音然後使用在有聲書上之類的
  3. 可以用聲音轉換技術把原本的男聲轉換成女聲,瞬間讓你的資料變成 2 倍
  4. 可能有壞人會拿去做詐騙 XD
  5. 好玩

聲音轉換面臨的主要問題

  1. 大部分的語音轉換系統都假設有並行訓練數據,就是兩個說話的人必須要說出相同句子的語音對,無法接受非並行數據的訓練,這樣在聲音轉換的任務上就出現了第一道門檻 - 資料蒐集與對齊的困難。

  2. 在少數幾個能處理非並行數據的現有算法中,能夠用於多對多轉換的算法就又更少了,但還是有像是 CycleGAN, StarGAN-VC 可以做到 (而且這兩篇還是同一個作者)。

  3. 而在 AutoVC (2019)出現以前,沒有任何語音轉換系統能夠執行零樣本轉換 (他們這樣宣稱),就是僅通過觀察一個沒聽過的人的少數話語就可以轉換成另一個人的聲音。

傳統的語音轉換 ( 例如:用 NMF 將頻譜分解為與說話人有關的和說話人無關的特徵 ) 的問題正被重新定位為風格轉換問題,將音質視為風格 (style),將說話的人視為領域 (domains)。

解決非並行數據的方法

  • 一段聲音訊號裏頭,包含了很多不同面相的資訊,它包含了 "講話內容" 的資訊,也包含了 "說話的人" 的資訊,要是可以把一段聲音 "說話的人" 的資訊以及 "講話內容" 的資訊給取出來,那我就可以隨意的組合出我想要的聲音,也完全不用管訓練內容是否並行了。(這種做法也被稱為 Feature Disentangle)

我們昨天做的 D_VECTOR 就是萃取出 "說話的人" 的資訊模型

  • 整個流程看起來就會像下面一樣,這大概就是 AutoVC 的架構,其中 Content Encoder 跟 Decoder 就是一組 AutoEncoder

  • 然而 CycleGAN 與 StarGAN-VC 的作法並不是這樣做的,他們在訓練的時候就希望能夠直接從 A 的聲音轉成 B 的聲音,也正因為這樣的原因,他們是無法做零樣本轉換的。你可以參考這篇看他們怎麼做,但其實就跟在處理圖片的時候一樣,只是資料換成聲音而已。

聲音轉換的問題描述

我們假設語音是由以下隨機過程產生的。

   說話的人身份 U 是從一群人 pU(·) 中抽取的隨機變量 

內容是指語音和韻律信息

   內容向量 Z = Z(1 : T) 是由聯合內容分佈 pZ(·) 得出的隨機過程。      

在給定說話的人身份和內容的情況下,X(t) 就可以代表語音波形的一個樣本,或者語音頻譜圖的 1 幀

語音片段 X = X(1 : T) = pX(·|U, Z)  它表示了發出 Z 內容的說話人語音的分佈情況   

接著,再假設大家講話的長度一樣

H(X|U = u) = hspeech = constant, 

現在,假設兩組變量 (U1 , Z1 , X1) 和 (U2 , Z2 , X2) 是獨立且同分佈的隨機樣本則 (U1 , Z1 , X1) 屬於源說話的人,(U2 , Z2 , X2) 屬於目標說話的人。

聲音轉換模型的目標就是設計一個轉換器,它產生轉換輸出 X1 → X2 ,保留 X1 中的 "講話內容" (Z1),但匹配目標 "說話的人" 的聲音特徵 (X2)。

# 理想的語音轉換器應該具有以下理想的性質
pXˆ1→2 (·|U2 = u2, Z1 = z1) = pX(·|U = u2, Z = z1)
  • 當 U1 和 U2 都出現在訓練集中時,問題就是一個標準的多說話人轉換問題,已經有一些模型解決這個問題了。

  • U1 或 U2 不在訓練集中時,問題就變成了零樣本語音轉換問題,這就是 AutoVC 解決的困難。

小結

今天我們了解到聲音轉換的困難,也知道非並行數據的解決辦法了,就是兩種,Feature Disentangle 跟直接硬轉,但硬轉的下場就是不能夠做零樣本轉換,接著就等明天讓我們更詳細的鑽研 AutoVC 吧!

參考資料

AutoVC 論文

/images/emoticon/emoticon09.gif/images/emoticon/emoticon13.gif/images/emoticon/emoticon14.gif/images/emoticon/emoticon22.gif/images/emoticon/emoticon28.gif


上一篇
【Day9】 Speaker Identification 介紹與 D_VECTOR 實做
下一篇
【Day11】 AutoVC 簡介
系列文
AI Voice Conversion30

尚未有邦友留言

立即登入留言