Amadeus復刻計劃(AI擬聲篇 二 VITS的訓練)
前言:
前文提到,筆者之前使用so-vits-svc模型,從原游戲中提取角色語音2906條進行訓練,跑了10400個step,效果較為良好。但可惜的是so-vits是用于音色轉(zhuǎn)換的模型,因此需要原始音頻作為輸入,使用不是很方便。輾轉(zhuǎn)考慮后,筆者決定從原始的VITS模型入手,希望達到文本轉(zhuǎn)語音的效果。
簡單介紹:
目前VITS主要有兩個倉庫,一個是該論文提出時原作者開源放出的倉庫(最近更新在兩年前),一個是疑似國人fork維護的一個快速微調(diào)版本(ps:國內(nèi)的二次元濃度很高?。?,筆者使用的是后者提供的腳本參考與預(yù)訓練模型。
二者的github鏈接會放在文章底部。
訓練準備:
1. 前文提到的2906條角色語音數(shù)據(jù)(不過據(jù)colab文件中所說樣本少于100條也有一定效果,實在找不到音頻數(shù)據(jù)的角色也可以試試)
2. GTX 3090顯卡(租賃,原則上不少于8G顯存的N卡即可)
3. 可以訪問外網(wǎng)的設(shè)備
開始訓練:
由于AutoDl中提供的vits鏡像問題很大,因此本文基本上是根據(jù)colab筆記及源代碼訓練的,基本上可以看作不需要前提條件。不過因為是在真實linus系統(tǒng)上訓練的,其中與colab的訓練有些微不同需要注意。
第一種方式:直接使用官網(wǎng)colab進行訓練(鏈接在文尾),基本上不需要考慮太多,上傳完數(shù)據(jù)集就可以直接訓練了,該筆記的擁有者已經(jīng)將大部分腳本封裝起來可以實現(xiàn)打開即用,但是colab使用的是Tesla T4,雖然顯存很大(16G),但訓練速度還是比較慢,而且免費用戶無法后臺訓練,訓練時間也有限制。筆者如此多的數(shù)據(jù)量,一天的免費時間是無法訓練完成的,因此采用了第二種方法。
第二種方法:即租賃一個帶GPU資源的服務(wù)器,筆者使用的AutoDl(不太建議,要搶GPU,但勝在便宜),租賃了3090的服務(wù)器,準備開始訓練。
具體流程(因為是從零開始的所以有些步驟可以跳過):
1. 將項目源文件clone下來,并安裝好可能需要使用的python庫(原文使用的python3.8)
2. 進入項目文件夾并安裝所需依賴,但筆者不建議直接安裝該requirements.txt,因為有些庫可能很難安裝,而報錯了又不知道究竟是哪個庫沒安裝上(點明批評pyopenjtalk)
3. 2中方法可能難以定位錯誤,因此筆者建議手動打開requirements文件,一行一行的安裝依賴庫(雖然有些麻煩,但勝在保險)
ps:其中的torch, torchvision,torchaudio版本不一定要保持一致,因為他們與cuda版本相關(guān),安裝時無須指定版本號
4. 創(chuàng)建一些后面腳本需要用到的文件夾并將輔助訓練集下載下來.
5. 下載預(yù)訓練模型及config文件(中日雙語模型,更多選擇請在colab筆記中尋找)
6. 上傳角色音頻(wav格式),將其放置在如下路徑,其中角色名表示你要訓練的角色,盡量使用英文命名
7. 音頻去噪?colab中沒有提到,但源碼中的寫的是僅通過自動方式上傳的長視頻、長音頻(存儲在raw_audio文件夾的)才會被去噪,因此手動上傳至custom_character_voice/文件夾的并不會(怪不得感覺沒什么變化……)
8. 調(diào)用whisper對音頻進行標注,這個腳本做了兩件事,一件是分割(對長音頻)并將音頻名稱改為process_*.wav的格式,一件是使用whisper對音頻進行標注,并保存音頻與標注的對應(yīng)關(guān)系在short_character_anno.txt文件中,格式見下,由文件路徑+角色名+語種+標注組成
9.重采樣
10. 輔助樣本的添加與否
4中提到預(yù)先下載好了輔助訓練集,該數(shù)據(jù)集包括143名角色的1092條已標注音頻,官方的解釋是“輔助訓練數(shù)據(jù)是從預(yù)訓練的大數(shù)據(jù)集抽樣得到的,作用在于防止模型在標注不準確的數(shù)據(jù)上形成錯誤映射。”不過筆者的考慮是,該輔助訓練集平均下來一個人只有10條不到的音頻,大量的角色混合訓練沖淡了音色的影響,如果你的角色數(shù)據(jù)在一百條左右,既不至于數(shù)據(jù)量太少無法訓練,又不會因為其他數(shù)據(jù)的添加導致音色變形,此時建議使用。如果音頻過少就不建議了,可能會導致訓練出來的音色是底模的音色(未親身嘗試,如有相關(guān)經(jīng)驗的請不吝賜教)
11. 更改訓練配置,在如下文件路徑中修改batch_size與learning_rate以及多少步保存一次模型等設(shè)置,不了解的建議直接默認配置
12. 開始訓練
{Maximum_epochs}視情況改為你所需的最大epoch數(shù),個人建議大數(shù)據(jù)量的話在一千以上,筆者就是訓練了一千多個輪次(幾乎30小時),但是效果很好,沒有過擬合的現(xiàn)象(據(jù)說生成式模型很難過擬合?)。
ps:原項目的VITS配置中默認寫的是10000個epoch,不確定是保證其訓練過程中不會停止還是真的這個數(shù)量質(zhì)量會更好,筆者傾向于后者。
13. 收尾工作
?接下來就是等待訓練完成,訓練過程中的各個loss與歷史模型會保存在OUTPUT_MODE0L/文件夾,可以使用tensorboard查看,或直接用記事本打開train.log查看輸出日志
寫在后面:
原本打算一口氣寫完訓練+部署的,但訓練部分實在太長了,而且linux上部署也并不是一個很簡單的事情,因此還是放在之后寫吧,windows上的部署可以直接下載項目中的release,不過可惜的是該版本僅支持cpu推理,效果會慢一些(不過也更具普遍性?笑)
參考鏈接:
交流群:
723240586