基于vits合成神里綾華語音合成模型——小白的模型合成過程的自我復(fù)盤
????????今天,2023.2.22,我自己的vits模型——MyAyaka_ZH在我自己的電腦上基本完成了合成,本文是復(fù)盤我,一個非計算機專業(yè)小白,在本地從零開始一步步本地合成神里綾華語音的vits模型的過程,有技巧,有小雜感,記敘我自己的小小成就,以期未來回想起來,嘴角能有意思上揚。
????????首先介紹本人成分:16年入站,第一只視頻是瓶子的柯南劇場版吐槽,從ID上也能看出來我對柯南的喜愛(雖說現(xiàn)在已經(jīng)不看了就是了),當(dāng)時的動畫區(qū)還是小而美的,誰又能想到當(dāng)初和大家差不多的泛式,最后成為了動畫區(qū)最大的up之一……此外,我還是一個ai愛好者,當(dāng)初AI繪畫爆火,我第一時間下載了@秋葉aaaki這位up整理的繪畫模型,并在自己的本地跑(怎么說呢,中文互聯(lián)網(wǎng)東西存不住,不到本地不放心),產(chǎn)生立了不少美圖,這些圖現(xiàn)在還在我SSD上面,這是我自學(xué)python基礎(chǔ)以后最先接觸到的大型python應(yīng)用。最后本人還是一個聲優(yōu)豚,看番劇對于聲優(yōu)比較執(zhí)著,對好聽的聲線沒有抵抗力,常見的一線聲優(yōu)我都有所涉獵(少數(shù)在DLsite上買過音聲)。
????????我第一次接觸到vits是在1月28日,首頁刷到的"日和莉帶你訓(xùn)練VITS模型"這只視頻,由文字生成角色聲線對我產(chǎn)生了無與倫比的吸引力。是不是經(jīng)過調(diào)整(jiao)模型是否也能達到音聲作品里近耳輕語的效果?如果是的話,那可真是讓人無法拒絕心潮澎湃。于是我著手在站內(nèi)搜索找到了包含2890名動畫角色的VITS語音合成模型,從視頻內(nèi)容找到了相關(guān)鏈接和GUI下載來使用,大佬的技術(shù)力沒話說,但是就是他在視頻中自己說的,模型中的中文模型部分因為訓(xùn)練集比較小,效果并不理想。此時我產(chǎn)生了此次計劃的雛形,我曾經(jīng)研究過原神的文件結(jié)構(gòu),PC很多文件是存儲在本地的,雖然加密過了,但是原神作為業(yè)界黑暗擔(dān)當(dāng)(doge),樹大招風(fēng),肯定已經(jīng)有人對她下手了吧,那么提取角色語音就是可能的,于是我開始了行動。加上當(dāng)時對于神里綾華傳說任務(wù)的驚艷還留存在心中,所以決定為神里凌華了!

1.語音提取????????
????????說干就干,首先是提取語音和文本,搜索后,我找到了(https://blog.jixiaob.cn/?post=49)這篇文章,之后按圖索驥,PC上的原神似乎加過密,所以我從手機上導(dǎo)出了有pck的文件夾。經(jīng)過逐一解包和試聽,大概了解了原神音頻文件的命名規(guī)則(不一定對):
10開頭的是主線劇情(蒙德、璃月、稻妻、間章、須彌)
20開頭的是傳說任務(wù),其中神里的是2021。
30開頭的是邀約任務(wù)
50開頭5001(我們終將重逢)5002(煙緋個人)
External是各版本活動的劇情音頻

????????經(jīng)過大約提取了600條語音,手動篩掉派蒙和雜七雜八的NPC的語音大約剩下300條左右(我解包的版本中,2021_441是空哥在看完跳舞后哼的歌,印象深刻。其他人解包的版本似乎和我解包的順序不一樣,比如"原神語音文本整理"這個篇文章的結(jié)果和我解包的順序出入很大)長短參差不齊,而且部分語音明顯帶有情緒(害羞,不好意思等),按理來說這樣的音頻應(yīng)當(dāng)剔除,不過鑒于篩選時間成本大,還是沒做。
????????但是只有三百條還是有點少于是,我去b站的原神wiki上把凌華所有語音扒下來了(待機語言那些,50條左右)加起來得到350條左右的語音。自從學(xué)了點前端,老是想點開F12(笑)。
2.參考文章處理音頻和制作訓(xùn)練集
????????我參考的是在本地(Windows/Linux)從零開始訓(xùn)練VITS中文AI語音模型到TTS推理的避坑教程指南這篇文章,關(guān)于全流程講的很詳細也很實在,這里僅僅說我在中間遭遇到的麻煩和解決方法。
????????首先是音頻處理,兩種方法,第一種參考全提瓦特最好的語音合成向?qū)?二中Python處理,比較快且方便,再比如直接用AU的批處理,我采用的第二種。
????????然后是訓(xùn)練集的制作,首先用python生成一個在每行開頭有標(biāo)準(zhǔn)格式的txt文件,然后再進行音頻文件的批量重命名,關(guān)于文本部分,我一開始想的是調(diào)用python相關(guān)的語音識別庫,但遺憾的是我找到的庫(PocketSphinx)對于中文的識別很不準(zhǔn)確,于是我就想干脆聽寫吧,大概做了70個,突然想到語音識別領(lǐng)域也是有AI的呀,于是我找到了這只視頻能離線使用的語音識別工具:Buzz,使用OpenAI Whisper神經(jīng)網(wǎng)路,正確率高,按照上面的視頻安裝了軟件,識別正確率非常高,大大優(yōu)化了我的工作??上也粫慳pi,不然可能直接python導(dǎo)出更快。不過有個問題,就是BUZZ軟件輸出的文字一會是簡體一會是繁體,所以手邊還要準(zhǔn)備簡繁轉(zhuǎn)換工具。此外軟件輸出的是英文標(biāo)點,因此訓(xùn)練集txt全部寫完以后還要復(fù)制到word查找替換,這里不得不感嘆AI時代的到來呀。

3.搭建conda虛擬環(huán)境——和error斗爭
????????按照在本地(Windows/Linux)從零開始訓(xùn)練VITS中文AI語音模型到TTS推理的避坑教程指南的方法搭建環(huán)境,這里重點關(guān)注torch的安裝,本地安裝版本多且雜,很容易裝錯,不推薦,建議到官網(wǎng)pip安裝的,有幾個注意點:
pip莫名其妙報錯可以嘗試關(guān)掉代理,并更換清華鏡像。
官網(wǎng)得到的pip命令很容易卡在solving environment,這時候別著急建議放下去干點別的,這里確實慢,但是并不是卡死,當(dāng)然cnds社區(qū)有一些方法加速(用mamba),不過我沒有試。
pyopenjtalk真的人容易報錯,我訓(xùn)練的中文單人模型用不到,可以刪除。
OSError: [WinError 127] 找不到指定的程序。 Error loading?"D:\anaconda3\envs\vits\lib\site-ackages\torch\lib\caffe2_detectron_ops_gpu.dll" or one of its dependencies.這個莫名其妙,文件在路徑里就有的,解決方法更離譜,直接把這個文件刪了就沒事了……
此外還要改文件,每個人電腦不一樣,我是改了就好了:torch.backends.cudnn.benchmark = False;batch_szie改小,說白了就是報錯了就好好利用,搜索引擎很多時候換換關(guān)鍵詞都能找到答案。
大佬說的cd到某某文件夾,我當(dāng)時不太明白,后來才知道cd是干什么的。
4.訓(xùn)練和調(diào)試ing
????????目前跑到了G_33000版本第三十三個,600多epochs,受到訓(xùn)練集情緒化的影響,成品模型還是有點不自然,和大佬們發(fā)出來的成果演示視頻還存在差距,我準(zhǔn)備使用統(tǒng)一的文本對比一下,看看哪個版本最合適,后續(xù)可能把訓(xùn)練集擴成一下到所有神里相關(guān)語音都包含的版本,比如主線和2.6容彩祭和3.4的花時來信活動,鑒于工作量,可能放假前不會吧。
????????

5.總結(jié)
????????這次活動無疑建立在互聯(lián)網(wǎng)上各位大佬的開源精神,無私的分享詳細的方法,幫助電腦小白如我完成這樣一項工作,把精力用在愛好上是意見幸福的事情,希望看到這里的你和我擁有幸福下去的權(quán)利。