【AI變聲/翻唱】so-vits-svc指南
這篇專欄針對(duì)Windows系統(tǒng),不過(guò)用GNU Linux的想必也不需要教程。
這不是一鍵包教程。
在開始之前,請(qǐng)先確保你有顯存在6GB以上的N卡,10GB以上的可用磁盤空間(SSD),和足夠的耐心。一次訓(xùn)練(包括淺擴(kuò)散模型)可能要耗費(fèi)數(shù)天時(shí)間。
環(huán)境準(zhǔn)備
下載并安裝Python(https://www.python.org/downloads/)
Python3.8.9為so-vits-svc官方推薦版本,但實(shí)測(cè)3.8.9到3.9.13均能正常運(yùn)行,3.10及之后版本未測(cè)試,個(gè)人推薦3.9.13。在安裝時(shí)請(qǐng)勾選Add to Path。安裝完成后,在命令提示符(cmd)中執(zhí)行python -V 和 pip -V,若正常輸出版本則安裝沒(méi)有問(wèn)題
可選項(xiàng):安裝Git(https://gitforwindows.org)
下載so-vits-svc(https://github.com/svc-develop-team/so-vits-svc)
如果你下載了git,請(qǐng)直接將倉(cāng)庫(kù)clone到本地。如果沒(méi)有,點(diǎn)擊綠色的Code,選擇Download ZIP,下載壓縮包并解壓到本地。
搜索安裝自己顯卡對(duì)應(yīng)的Cuda
在命令提示符(cmd)中導(dǎo)航到解壓得到的so-vits-svc-4.1-Stable文件夾中,執(zhí)行下面的命令,安裝所需的第三方庫(kù):
pip install wheel
pip install -i https://pypi.douban.com/simple -r requirements_win.txt
注:這里使用的是豆瓣源,如果下載速度過(guò)慢請(qǐng)更換為其它源
由于pip會(huì)安裝cpu版本的pytorch,因此需要卸載后重新安裝Cuda版本的Pytorch
打開命令提示符,執(zhí)行pip uninstall torch -y 和 pip uninstall torchvision -y
到https://pytorch.org/選擇自己Cuda版本對(duì)應(yīng)的Pytorch,執(zhí)行Run this Command:后面的命令
至此,環(huán)境搭建完畢
訓(xùn)練、推理:
https://github.com/svc-develop-team/so-vits-svc/blob/4.1-Stable/README_zh_CN.md
這是官方的教程,很詳細(xì),請(qǐng)?jiān)谕暾喿x后看看下面的幾點(diǎn)補(bǔ)充:
在確定使用某個(gè)聲音編碼器后最好不要再改,若想試試別的編碼器請(qǐng)復(fù)制一份源碼后重新添加預(yù)訓(xùn)練模型
若無(wú)法訪問(wèn)hugging face請(qǐng)看我之前的專欄
文章提供的預(yù)訓(xùn)練底模文件不全,這里提供部分底模下載
https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12
這里有vec768l12編碼器的底模,若需要響度嵌入請(qǐng)下載vol_emb里的文件。下載后將它們重命名為D_0.pth和G_0.pth,放到logs/44k下。
https://github.com/CNChTu/Diffusion-SVC#21-訓(xùn)練完整過(guò)程的擴(kuò)散預(yù)訓(xùn)練模型
請(qǐng)一并復(fù)制后邊的中文后訪問(wèn)。這里有擴(kuò)散模型的下載鏈接,請(qǐng)選擇與你的聲音編碼器對(duì)應(yīng)的版本。下載后將model_0.pt放到logs/44k/diffusion下。
訓(xùn)練
數(shù)據(jù)集質(zhì)量比數(shù)量更重要,請(qǐng)一定不要為了數(shù)量而添加低質(zhì)量/帶混響的音頻,這即會(huì)拖慢訓(xùn)練也會(huì)降低質(zhì)量
請(qǐng)務(wù)必在運(yùn)行preprocess_flist_config.py后修改config.json 與 diffusion.yaml
config.json
將all_in_mem改為true,除非數(shù)據(jù)集過(guò)大,你的內(nèi)存實(shí)在不夠用
將batch_size改為你的顯存大小,以GB為單位(batch_size≠消耗的顯存量,但我實(shí)測(cè)大致相等,不必是2的n次方)
diffusion.yaml
cache_all_data和config.json中的all_in_mem意思一樣,默認(rèn)開啟,若你的內(nèi)存不夠用可改為false
batch_size默認(rèn)48,實(shí)測(cè)大概2~5G顯存占用,可適當(dāng)調(diào)大
訓(xùn)練途中不要再更改參數(shù),若要訓(xùn)練新模型請(qǐng)解壓源碼到新的目錄并添加預(yù)訓(xùn)練模型和數(shù)據(jù)集
關(guān)于loss
tensorboard可視化:
打開命令提示符,執(zhí)行tensorboard --logdir [你的模型輸出路徑,如.\logs\44k或.\logs\44k\diffusion]
若想在外部訪問(wèn),請(qǐng)?zhí)砑?-bind_all參數(shù)
在瀏覽器中訪問(wèn)127.0.0.1:6006
這絕不是衡量模型的唯一標(biāo)準(zhǔn),最好的loss計(jì)算器就是你自己。tensorboard網(wǎng)頁(yè)中的audio選項(xiàng)卡里有評(píng)估樣本,gen是推理得到的音頻,gt是源音頻。
loss/g/total上升,loss/d/total收斂:考慮數(shù)據(jù)集質(zhì)量問(wèn)題
floss/g/fm上升為正?,F(xiàn)象
loss/g/total先下降后上升:考慮是否過(guò)擬合
loss/g/lf0應(yīng)收斂在1e-4以下,loss/g/kl應(yīng)收斂在0.5以下,loss/g/mel應(yīng)震蕩下降
推理
請(qǐng)確保你要用于推理的源音頻很“干凈”,沒(méi)有雜音/伴奏,若無(wú)法除去請(qǐng)使用crepe作為f0預(yù)測(cè)器
僅支持單聲道,若需要推理多聲道音頻請(qǐng)拆分后分別推理
對(duì)于歌聲轉(zhuǎn)換,個(gè)人推薦rmvpe f0預(yù)測(cè)器,效果相當(dāng)好。需要下載預(yù)訓(xùn)練的 RMVPE 模型。
若效果不滿意請(qǐng)更換參數(shù)反復(fù)測(cè)試,后期處理也是必要的,這里沒(méi)有“一鍵處理”
f0預(yù)測(cè)器說(shuō)明:
crepe:一種數(shù)據(jù)驅(qū)動(dòng)的音高(f0)跟蹤算法,它基于直接在時(shí)域波形上運(yùn)行的深度卷積神經(jīng)網(wǎng)絡(luò)。自帶均值濾波。
pm:蛇佬腔,默認(rèn)f0預(yù)測(cè)器,效果不錯(cuò),有時(shí)會(huì)有啞音
dio:基于歌聲與語(yǔ)音聲帶振動(dòng)周期提取的F0估計(jì)方法。
harvest: 語(yǔ)音的高性能f0估計(jì)。低音專精,推薦用于男聲或語(yǔ)音轉(zhuǎn)換。
rmvpe:復(fù)調(diào)音樂(lè)中f0估計(jì)的魯棒模型。
此專欄在CC BY-SA 4.0下提供