復(fù)現(xiàn)so-vits模型合成ai月之美兔過程中遇到的一些問題及處理方法及模型開源
復(fù)現(xiàn)模型:https://github.com/PlayVoice/so-vits-svc
訓(xùn)練后得到的模型:https://pan.baidu.com/s/1rDBiX496T6irnMgK8ZBxjg?pwd=9r41? 提取碼:9r41
這篇文章可能適合什么讀者:對sovits的復(fù)現(xiàn)感興趣,但本地設(shè)備顯卡算力不足,打算通過autodl等平臺租借顯卡,在anaconda+linuxs平臺上復(fù)現(xiàn)sovits4.0的讀者。(雖然后文也有涉及一點(diǎn)win系統(tǒng)上復(fù)現(xiàn)可能出現(xiàn)問題)
以下內(nèi)容視作讀者具備基本的代碼復(fù)現(xiàn)知識,不過如果閱讀中有不理解的地方或者問題歡迎私信與我討論,也歡迎喜歡ai技術(shù)和nijisanji的各位在評論區(qū)交流心得。
筆者的復(fù)現(xiàn)平臺:linuxs系統(tǒng)+anaconda。顯卡是3090 cuda=11.6 顯存24g
torch的版本我選用:pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu116。這里建議大伙選用符合你自己設(shè)備cuda版本的torch,把我這段的最后幾個數(shù)字改成你的cuda版本即可,不清楚自己的cuda版本可以用nvidia-smi指令查看。cuda一般是向上兼容的。
py我選用python=3.8
其他環(huán)境配置參照github文檔中的requirements.txt,不過不建議直接pip install -r requirements.txt,因?yàn)閜yworld的安裝需要在先安裝好torch的基礎(chǔ)之上。實(shí)際運(yùn)行過程中發(fā)現(xiàn)requirements文檔也不太完整,可能還需要補(bǔ)充pip install一些東西,比如pip install librosa=0.8.0(如果最新版本或過早版本都會導(dǎo)致問題),tensorboard,另外starlette我用的也是0.26.1,因?yàn)閳箦e沖突了
linuxs系統(tǒng)直接pip install pyaudio可能出錯。因?yàn)樵诎惭bPyAudio之前需要先安裝pyproject.toml-based projects,方法如下:
yes|sudo apt-get install portaudio19-dev
yes|sudo apt-get install python3-all-dev
pip install pyaudio
(參考自:https://blog.csdn.net/weixin_38369492/article/details/125992255。在sudo之前補(bǔ)充了yes|以免確認(rèn))
執(zhí)行時preprocess_hubert_f0.py,如果出現(xiàn)no moudle found 'parselmouth'或者在parselmouth的安裝中報錯,請pip install?praat-parselmouth
dataset raw/ 中的語音文件必須為wav格式否則無法進(jìn)行預(yù)處理,建議選用每條長度為6秒的主播的無背景噪音且音色清晰的語音60條-100條(此處參考https://github.com/SUC-DriverOld/so-vits-svc-Chinese-Detaild-Documents)。推薦的方法是下載一段主播的無背景音雜談,然后用剪切工具如“音頻編輯專家”等分成幾秒的小片段
我猜想加入一些消除bgm的歌回或是歌曲可以提高生成效果,有待驗(yàn)證
和本文無關(guān)不過順口一提我個人pip install比較喜歡用pypi源(即pip install (moudle name ) -i http://pypi.douban.com/simple --trusted-host pypi.douban.com)
有關(guān)人聲和背景音樂的分離,我一開始用到的網(wǎng)站是https://www.media.io/zh/vocal-remover.html,每日非會員可以進(jìn)行10次100m以內(nèi)的人聲分離(考慮到網(wǎng)站分離長音頻容易崩建議每次放進(jìn)去的音頻不要過長),輸出時也可以以wav格式輸出。另外一種方法是下載ultimate vocal remover (鏈接:https://github.com/Anjok07/ultimatevocalremovergui),這個程序的人聲分離性能很好但是體積不?。?g)且分離時燒cpu??焖俜蛛x可用前一種方法,追求效果可用后者方法。
windows系統(tǒng)下開始訓(xùn)練時如果出現(xiàn)報錯RuntimeError: Distributed package doesn't have NCCL built in,請將train.py第60行的dist.init_process_group(backend='nccl', init_method='env://', world_size=n_gpus, rank=rank)改為dist.init_process_group(backend="gloo", init_method='env://', world_size=n_gpus, rank=rank)
開始訓(xùn)練時如果出現(xiàn)爆顯存(error: cuda out of memory),建議調(diào)小batch_size,通過修改configs文件夾下的configs文件內(nèi)batch_size后跟的那個值來調(diào)整(沒有ide的話就用記事本打開就可以改),默認(rèn)為12,我24g顯存的3090是可以滿足。8g顯存的設(shè)備可以考慮batch_size調(diào)為4。
進(jìn)行推理時如果爆顯存,可以嘗試增大slice_db,如果依舊存在問題可以將要推理的raw分段
后續(xù)想到啥再補(bǔ)充