DiffSinger(三)
聲庫(kù)制作
這一部分主要為從訓(xùn)練到推理的全部流程,不打算自己訓(xùn)練的同學(xué)無(wú)須此部分
最新的語(yǔ)雀更新:https://www.yuque.com/sunsa-i3ayc/sivu7h

硬件需求
1.推理目前分為命令行推理和onnx推理,對(duì)速度要求不高的話CPU和GPU均可使用
2.如果想要訓(xùn)練Demo視頻級(jí)別的模型至少需要20G以上顯存的NVIDIA顯卡(如RTX3090)
3.云端一般常見(jiàn)的為V100(16G)、V100(32G)、A100(40G)、A100(80G)等顯卡,部分云端提供RTX3090等顯卡,請(qǐng)確保你使用的顯卡為20G以上顯存的NVIDIA顯卡
4.云端訓(xùn)練請(qǐng)首選Linux系統(tǒng)鏡像,不推薦云端使用Windows系統(tǒng)進(jìn)行訓(xùn)練
模型分為數(shù)據(jù)集處理、模型訓(xùn)練、模型推理三部分
*實(shí)時(shí)速度指電腦每秒可以使用模型處理n秒的音頻,如4分鐘音頻耗時(shí)1分鐘處理完畢,實(shí)時(shí)速度為4x
*加速推理為模型自帶功能,同硬件下?tīng)奚糍|(zhì),提高推理速度
以i5-8300H為例,CPU的實(shí)時(shí)速度約0.1-0.5x,3分鐘歌曲轉(zhuǎn)換耗時(shí)5-30min不等
以1060-6G為例,GPU的實(shí)時(shí)速度約1-10x(取決于不同模型和加速設(shè)置),3分鐘歌曲耗時(shí)30s-5min
*onnx模型搭配openutau可以使用AMD顯卡加速推理

準(zhǔn)備工作
為了訓(xùn)練模型你需要提前準(zhǔn)備好以下數(shù)據(jù)
一、對(duì)應(yīng)訓(xùn)練類型的分支代碼
目前常用的分支為
https://github.com/openvpi/DiffSinger/tree/refactor
二、對(duì)應(yīng)訓(xùn)練類型的聲碼器
最新聲碼器的下載地址:https://github.com/openvpi/vocoders/releases/download/nsf-hifigan-v1/nsf_hifigan_20221211.zip
如果加載過(guò)慢可以使用https://d.serctl.com/搭配idm等多線程下載程序進(jìn)行加速下載
或者下載群內(nèi)【實(shí)驗(yàn)權(quán)重】下的文件

解壓后放到倉(cāng)庫(kù)目錄下的checkpoints文件夾
三、數(shù)據(jù)準(zhǔn)備
我們推薦各位對(duì)高質(zhì)量音聲授權(quán)素材進(jìn)行訓(xùn)練,實(shí)際訓(xùn)練中請(qǐng)注意素材來(lái)源的版權(quán)問(wèn)題。
*制作流程不涉及顯卡且云端CPU性能一般較弱,建議本地制作

數(shù)據(jù)要求
一、單人模型
準(zhǔn)備總長(zhǎng)度約為2~5h(或以上)的獲得授權(quán)的單人漢語(yǔ)普通話干聲素材,盡量不要有混響和底噪,否則建議使用其他工具先進(jìn)行預(yù)處理;干聲保存為單聲道wav格式,至少16bit位深,并需要保證16kHz以下頻段完整。如想達(dá)到較好的效果,建議覆蓋更廣的音域、曲速和發(fā)音,但盡量保證所有素材的風(fēng)格、聲線相近。歌聲最佳,語(yǔ)音亦可,但純語(yǔ)音數(shù)據(jù)需要注意音域問(wèn)題。(推薦進(jìn)行響度匹配)
二、組合模型
如果多人訓(xùn)練組合模型,部分?jǐn)?shù)據(jù)可以時(shí)長(zhǎng)要求降低,但是需要進(jìn)行響度匹配

數(shù)據(jù)處理
一、響度匹配教程
請(qǐng)確保你在本地安裝好AU(需要自行獲得),本教程使用AU2018演示

啟動(dòng)AU

點(diǎn)擊紅框部分

若你的版本在工具欄中沒(méi)有響度匹配,請(qǐng)按照以下步驟來(lái)走
點(diǎn)擊效果

點(diǎn)擊匹配響度

拖拽音頻到如圖所示處


點(diǎn)擊導(dǎo)出設(shè)置

點(diǎn)擊瀏覽

選定你存放音頻的文件夾并點(diǎn)擊選擇文件夾

點(diǎn)擊確定

點(diǎn)擊運(yùn)行并耐心等待處理完成


二、數(shù)據(jù)切分
數(shù)據(jù)集制作流程中已包括切分,但為了效果,我們?nèi)越ㄗh先行切分
使用自動(dòng)音頻切片機(jī)將干聲素材切為每片5-15s的小片段
請(qǐng)注意:為了后續(xù)使用方便且避免后續(xù)報(bào)錯(cuò),使用切片機(jī)前請(qǐng)將文件重命名為英文或英文數(shù)字組合形式
例如:song.wav ? song2023020001.wav等,請(qǐng)不要含有()外的字符
GitHub:https://github.com/flutydeer/audio-slicer
下載點(diǎn)擊方框內(nèi)鏈接下載GUI并等待下載完成


若下載過(guò)慢,可以使用https://d.serctl.com/搭配idm等多線程下載程序進(jìn)行加速下載(群內(nèi)同樣可以獲得)

打開(kāi)文件夾并雙擊啟動(dòng)slicer-gui.exe

點(diǎn)擊 Add Adudio Files 或者將音頻文件拖入窗口

Ctrl+A全選你的音頻并點(diǎn)擊打開(kāi)或者拖入窗口

接下來(lái)是一些參數(shù)介紹
請(qǐng)根據(jù)自己的需求調(diào)整,若完全不懂這些參數(shù)是做什么的,請(qǐng)不要隨意修改,以免造成切片效果不佳
該數(shù)值表示:以 dB 表示的 RMS 閾值。所有 RMS 值都低于此閾值的區(qū)域?qū)⒈灰暈殪o音。如果音頻有噪音,請(qǐng)?jiān)黾哟酥?。默認(rèn)值為 -40。

該數(shù)值表示:每個(gè)切片的最小長(zhǎng)度,以毫秒為單位。默認(rèn)值為 5000。
該數(shù)值表示:要切片的靜音部分的最小長(zhǎng)度,以毫秒為單位。如果音頻僅包含短暫的中斷,請(qǐng)將此值設(shè)置得更小。此值越小,應(yīng)用生成的切片音頻剪輯可能就越多。請(qǐng)注意,此值必須小于 min_length 且大于 hop_size。默認(rèn)值為 300。
該數(shù)值表示:每個(gè) RMS 幀的長(zhǎng)度,以毫秒為單位。增加此值將提高切片的精度,但會(huì)減慢該過(guò)程。默認(rèn)值為 10。
該數(shù)值表示:在切片音頻周圍保持的最大靜音長(zhǎng)度,以毫秒為單位顯示。根據(jù)需要調(diào)整此值。請(qǐng)注意,設(shè)置此值并不意味著切片音頻中的靜音部分具有完全給定的長(zhǎng)度。如上所述,該算法將搜索要切片的最佳位置。默認(rèn)值為 1000。
該選項(xiàng)為選定音頻輸出文件夾,請(qǐng)點(diǎn)擊Browse點(diǎn)擊并選擇你的導(dǎo)出文件夾。留空則輸出到源文件的位置。
強(qiáng)烈建議導(dǎo)出到其他文件夾以防止數(shù)據(jù)混淆
點(diǎn)擊start并耐心等待切片完成
接下來(lái)請(qǐng)將你的數(shù)據(jù)按照大小排序,使用AU手動(dòng)切片15s以上的長(zhǎng)音頻分別導(dǎo)出
對(duì)應(yīng)教程鏈接:
https://blog.csdn.net/topia_csdn/article/details/115405605
請(qǐng)注意,導(dǎo)出音頻格式應(yīng)當(dāng)統(tǒng)一為WAV,采樣率默認(rèn)為原音頻采樣率!
請(qǐng)確保你的數(shù)據(jù)無(wú)混響,聽(tīng)感清晰并無(wú)噪音,這些都將影響你的最終模型成果!
三、數(shù)據(jù)標(biāo)注
現(xiàn)在,你需要按照上面的示例進(jìn)行標(biāo)注,并且滿足以下條件:
在標(biāo)注文件中,你需要寫下對(duì)應(yīng)音頻中演唱或說(shuō)出的所有音節(jié)
音節(jié)需要用空格分開(kāi),并且只允許出現(xiàn)在字典中的音節(jié)
特別說(shuō)明:請(qǐng)不要標(biāo)注AP(呼吸) 和 SP (停頓)在標(biāo)注文件中
注意事項(xiàng):請(qǐng)不要標(biāo)注漢語(yǔ)拼音以外的拼音序列
Tips.略要標(biāo)注為lve
下載群文件里的MinLabel
Windows下解壓即用
它可以讀取音頻和同名【.lab】,如果同目錄沒(méi)有【.lab】會(huì)自動(dòng)在同目錄創(chuàng)建同名文件
使用時(shí)需要選擇你使用的默認(rèn)播放
輸入中文歌詞,粘貼,點(diǎn)擊Replace(快捷鍵是回車)自動(dòng)生成對(duì)應(yīng)拼音(需要自行檢查)
點(diǎn)擊Append會(huì)在已有拼音后面新增歌詞欄的拼音

按PgUp和PgDn可以切換上下音頻,切換后會(huì)自動(dòng)保存

數(shù)據(jù)集制作
1.下載并安裝Anaconda
如果你擅長(zhǎng)于此也可以選擇MiniConda
*MFA在Windows下必須使用Conda虛擬環(huán)境
點(diǎn)擊鏈接,下載windows64版anaconda:
https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2022.10-Windows-x86_64.exe

雙擊啟動(dòng)

點(diǎn)擊next

點(diǎn)擊 I agree

點(diǎn)擊just me

默認(rèn)安裝在C盤(如果空間緊張也可使用其他路徑,避免中文路徑)

請(qǐng)務(wù)必選擇add path!

點(diǎn)擊install并耐心等待下載完成

下載完成,點(diǎn)擊next退出
2.Anconda換源
如果官方源過(guò)慢,可以自行搜索anconda換源進(jìn)行操作,本教程不對(duì)此部分進(jìn)行答疑
3.打開(kāi)終端
后續(xù)Windows下所有打開(kāi)終端均是指此操作
1.點(diǎn)擊桌面【W(wǎng)in】徽標(biāo)或按下鍵盤上【W(wǎng)in】徽標(biāo)鍵

2.找到Anaconda3

3.找到Anaconda Prompt(Anaconda3)

4.打開(kāi)


為了避免和其他項(xiàng)目產(chǎn)生依賴沖突,我們需要為數(shù)據(jù)集制作創(chuàng)建一個(gè)虛擬環(huán)境,該虛擬環(huán)境通用于接下來(lái)所有制作相關(guān)教程。
如果你已經(jīng)創(chuàng)建了適用于DiffSinger的虛擬環(huán)境,你通常無(wú)須再次創(chuàng)建
一、創(chuàng)建個(gè)Python 3.8的虛擬環(huán)境
如果你已經(jīng)創(chuàng)建了適用于DiffSinger的虛擬環(huán)境,你通常無(wú)須再次創(chuàng)建
請(qǐng)直接下滑到【二、安裝jupyter】
1.輸入:
conda create -n diff python=3.8
按下回車鍵 ,diff是虛擬環(huán)境的名字可以換成任何英文和拼音名,只要你記得住就行。

等待conda查找所需組件,完畢后會(huì)顯示下圖內(nèi)容

輸入:
y
按回車鍵開(kāi)始安裝,等待下載和安裝完成

輸入:
activate diff
回車,切換到剛剛創(chuàng)建的虛擬環(huán)境
每次重新打開(kāi)conda終端都要切換到項(xiàng)目對(duì)應(yīng)的虛擬環(huán)境,看到開(kāi)頭由base變?yōu)閐iff就說(shuō)明切換到虛擬環(huán)境了

二、安裝jupyter
pip install jupyter -i https://pypi.tuna.tsinghua.edu.cn/simple
回車,安裝jupyter(這里你也可以選擇下載VSCode等支持jupyter的項(xiàng)目)

三、創(chuàng)建kernel
為了讓我們部署過(guò)的環(huán)境在ipynb中也能使用
輸入
conda install ipykernel
回車(如果剛剛運(yùn)行了jupyter使用快鍵鍵Ctrl+C即可終止運(yùn)行)

conda查找完成后輸入
y
回車

等待安裝完成后輸入
ipython kernel install --user --name diff
回車(這里的diff也是選擇你自己喜歡的名字)

五、獲取制作數(shù)據(jù)集的notebook
OpenVPI團(tuán)隊(duì)維護(hù)的DiffSinger-refactor倉(cāng)庫(kù)地址
https://github.com/openvpi/DiffSinger/tree/refactor
推薦使用git指令以獲取最新更新
git clone https://github.com/openvpi/DiffSinger/tree/refactor
如果點(diǎn)擊code下載zip

如果你無(wú)法流暢訪問(wèn)GitHub導(dǎo)致下載過(guò)慢,你可以右鍵【Download ZIP】復(fù)制鏈接到
https://d.serctl.com
下載

把下載完成的壓縮包解壓到任意目錄(路徑不能有中文)

Conda輸入:
cd 你解壓的DiffSinger-refactor倉(cāng)庫(kù)的地址
切換到DiffSinger-refactor倉(cāng)庫(kù)

這里如果你解壓在非C盤路徑,可能會(huì)出現(xiàn)cd后無(wú)變化的情況

這時(shí)你可以輸入對(duì)應(yīng)盤符,例如
f:
回車
*請(qǐng)根據(jù)自己情況操作


前言
已更新多歌手/聲線,更新最新代碼后參閱第五條進(jìn)行設(shè)置即可
注:若聲線變化豐富,推薦區(qū)分聲線;若多個(gè)人需要制作,推薦使用多人組合
(若未制作過(guò)單人數(shù)據(jù)集,請(qǐng)按照流程繼續(xù))
如果您完成數(shù)據(jù)集制作和聲庫(kù)訓(xùn)練后認(rèn)為此教程對(duì)您有幫助或者DiffSinger的合成效果令您滿意,歡迎您在發(fā)布相關(guān)聲庫(kù)作品時(shí)在簡(jiǎn)介中附帶本教程鏈接和DiffSinger(OpenVPI維護(hù)版)的GitHub倉(cāng)庫(kù)鏈接。
同時(shí),我們也歡迎您在簡(jiǎn)介中簡(jiǎn)要說(shuō)明聲庫(kù)的大致情況,例如:
訓(xùn)練數(shù)據(jù)總時(shí)長(zhǎng)
數(shù)據(jù)類型(歌聲還是語(yǔ)音、數(shù)據(jù)來(lái)源、數(shù)據(jù)質(zhì)量等)
訓(xùn)練使用的設(shè)備
訓(xùn)練總步數(shù)
更改過(guò)的超參配置
這將有助于我們考察模型在更多樣化的數(shù)據(jù)集上的表現(xiàn)。
以上內(nèi)容僅僅是建議性的,沒(méi)有強(qiáng)制要求。歡迎與我們分享您在制作數(shù)據(jù)集與訓(xùn)練聲庫(kù)過(guò)程中的任何感受。
一、打開(kāi)notebook
*執(zhí)行下列操作前請(qǐng)確保你已經(jīng)按照前面教程cd到代碼目錄

(圖片僅供參考,具體為你的路徑)
在命令行輸入
jupyter notebook
回車
點(diǎn)擊pipelines

點(diǎn)擊no_midi_preparation.ipynb

點(diǎn)擊Kernel


點(diǎn)擊Change Kernel,選擇diff(之前環(huán)境準(zhǔn)備中你創(chuàng)建的)
二、運(yùn)行notebook
0.使用說(shuō)明
點(diǎn)擊“代碼所在格子”,被選中的“格子”會(huì)改變顏色,點(diǎn)擊上方的【run】即可運(yùn)行相應(yīng)代碼
1.前期準(zhǔn)備
1.2安裝依賴
*僅在初次運(yùn)行時(shí)需要使用


MFA安裝較慢,需要耐心等待,你也可以分別復(fù)制!后內(nèi)容在conda命令行中手動(dòng)安裝
安裝完成后

這里會(huì)有顯示
*手動(dòng)安裝前記得點(diǎn)擊【run】旁邊的停止來(lái)停止運(yùn)行
*手動(dòng)安裝需要重新打開(kāi)一個(gè)命令行
1.3初始化環(huán)境
每次使用時(shí)都需要運(yùn)行

運(yùn)行成功后會(huì)輸出

2.數(shù)據(jù)處理和切片
請(qǐng)保證你的數(shù)據(jù)滿足以下條件
位于同一個(gè)文件夾中,暫不支持多層結(jié)構(gòu)。
格式為【. wav】。
采樣率高于 32000Hz。
只包含來(lái)自人類的聲音,并且只包含一個(gè)人的聲音,暫不支持多說(shuō)話人訓(xùn)練
沒(méi)有明顯的噪音或混響
*可選步驟提示
原始數(shù)據(jù)必須切成單個(gè)文件大約 5-15 秒,如果前面你已經(jīng)完成此操作,從第 2.3 開(kāi)始
2.1配置數(shù)據(jù)路徑
你需要將''中的內(nèi)容修改為你的原始數(shù)據(jù)路徑

這邊的做法是在項(xiàng)目根目錄創(chuàng)建raw文件夾,在里面創(chuàng)建recordings文件夾并將音頻復(fù)制進(jìn)去

*需要注意的是直接在windows文件管理器中復(fù)制的話,路徑中是【\】需要手動(dòng)修改成【/】

2.2切分?jǐn)?shù)據(jù)
你需要將''中的內(nèi)容修改為你想要的切分后的數(shù)據(jù)保存路徑
*請(qǐng)不要和上面一致

這邊的做法是在raw文件夾中新建sliced文件夾

可能需要一段時(shí)間,具體時(shí)間取決于你原始音頻的數(shù)量和時(shí)長(zhǎng)

完成后

2.3驗(yàn)證數(shù)據(jù)
這一部分將檢查你的數(shù)據(jù)是否可用
*可選步驟提示
如果你前面跳過(guò)了2.1和2.2,請(qǐng)先在這里設(shè)定你存放數(shù)據(jù)的路徑

路徑示例為:F:/Diffsinger-no-midi/raw/sliced
運(yùn)行后

該格的作用為檢測(cè)是否有2s以下或者20s以上的音頻

*手動(dòng)步驟提示
這里你需要手動(dòng)去除過(guò)短語(yǔ)音或者將其拼湊成長(zhǎng)語(yǔ)音,過(guò)長(zhǎng)語(yǔ)音需要手動(dòng)裁短,直到運(yùn)行后顯示下面內(nèi)容
3.標(biāo)記數(shù)據(jù)
3.1標(biāo)注拼音序列
運(yùn)行此格查看示例
*手動(dòng)步驟提示
如果你已完成請(qǐng)直接運(yùn)行3.1.1
現(xiàn)在,你需要按照上面的示例進(jìn)行標(biāo)注,并且滿足以下條件:
每個(gè)音頻都有一個(gè)與其文件名相同的 【.lab】標(biāo)注文件,并放置在相同的目錄中
在標(biāo)注文件中,你需要寫下對(duì)應(yīng)音頻中演唱或說(shuō)出的所有音節(jié)
音節(jié)需要用空格分開(kāi),并且只允許出現(xiàn)在字典中的音節(jié)
同時(shí),標(biāo)注中需要包含字典中的所有音素
特別說(shuō)明:請(qǐng)不要標(biāo)注AP 和 SP 在標(biāo)注文件中
注意事項(xiàng):請(qǐng)不要標(biāo)注漢語(yǔ)拼音以外的拼音序列
P.S.運(yùn)行以下代碼塊會(huì)自動(dòng)生成所有音頻對(duì)應(yīng)的空白【.lab】文件
P.P.S.這里由【zjzj】和【YQ之神】為大家提供了一個(gè)小工具
Windows下解壓即用
,它可以讀取音頻和同名【.lab】,如果沒(méi)有【.lab】會(huì)自動(dòng)創(chuàng)建同名文件
初次使用如果沒(méi)有聲音,需要選擇你使用的默認(rèn)播放
輸入中文歌詞,粘貼,點(diǎn)擊Replace(快捷鍵是回車)自動(dòng)生成對(duì)應(yīng)拼音(需要自行檢查)
點(diǎn)擊Append會(huì)在已有拼音后面新增歌詞欄的拼音
按方向鍵可以切換上下音頻
3.1.1標(biāo)注檢測(cè)
運(yùn)行以下代碼塊檢查是否所有語(yǔ)音都已標(biāo)注以及所有標(biāo)注是否有效
如果檢查失敗,請(qǐng)修改并重新運(yùn)行檢查
同時(shí)會(huì)生成音素覆蓋范圍的摘要
如果某些音素的出現(xiàn)次數(shù)極少(例如,少于 20 次),強(qiáng)烈建議添加更多錄音以涵蓋這些音素
3.2強(qiáng)制對(duì)齊
通過(guò)給定每個(gè)片段的標(biāo)注,能夠?qū)⒁羲匦蛄信c其相應(yīng)的音頻對(duì)齊,從而獲得每個(gè)音素的位置和持續(xù)時(shí)間的信息
這里使用MFA進(jìn)行強(qiáng)制音素對(duì)齊
運(yùn)行以下代碼塊,將會(huì)把重新采樣的錄音將和音素標(biāo)簽保存于你pipelines/segments路徑下,同時(shí)會(huì)創(chuàng)建臨時(shí)用于存儲(chǔ)的pipelines/textgrids/文件夾
*請(qǐng)勿修改路徑
*此操作將會(huì)覆蓋這兩個(gè)文件夾的全部?jī)?nèi)容,請(qǐng)?zhí)崆皞浞?/span>
運(yùn)行以下代碼塊,將會(huì)下載并解壓縮預(yù)訓(xùn)練的 MFA 聲學(xué)模型并進(jìn)行強(qiáng)制對(duì)齊,如果運(yùn)行失敗可將命令復(fù)制到終端繼續(xù)運(yùn)行
*可能會(huì)有錯(cuò)誤,報(bào)錯(cuò)一般意味著你的數(shù)據(jù)集切片過(guò)長(zhǎng)、部分切片字?jǐn)?shù)過(guò)多或者存在很離譜的標(biāo)注錯(cuò)誤,請(qǐng)先檢查你的數(shù)據(jù)和標(biāo)注;
*加大beam前可以嘗試先重新運(yùn)行一下,有概率解決
如果確定標(biāo)注無(wú)誤,可以調(diào)大--beam后面的數(shù)字再次嘗試(會(huì)導(dǎo)致精度下降)
*下一步如果報(bào)錯(cuò)某個(gè)(些)TextGrid文件not found的話,缺少的文件對(duì)應(yīng)的音頻和拼音標(biāo)注也可能存在很嚴(yán)重的標(biāo)注錯(cuò)誤,同樣請(qǐng)檢查數(shù)據(jù)后回到這一步重新處理
*如果你檢查后修改了個(gè)別標(biāo)注和音頻,你需要重新從2.3節(jié)開(kāi)始運(yùn)行程序


3.3優(yōu)化對(duì)齊結(jié)果
運(yùn)行前根據(jù)實(shí)際情況修改參數(shù)
*如果你的數(shù)據(jù)集是男聲,你可以調(diào)小f0_min和f0_max這兩個(gè)值(Hz),女聲反之,這樣音高分析會(huì)更加準(zhǔn)確
*br_db可以根據(jù)實(shí)際情況來(lái)修改,如果你的數(shù)據(jù)集錄音有底噪(尤其是中高頻的底噪)實(shí)在沒(méi)有去除,你可以把這個(gè)值適當(dāng)調(diào)大
*其他的參數(shù)除非你看懂了是干什么用的,否則不要亂動(dòng),保持默認(rèn)即可

*保存在pipelines/textgrids/的TextGrid可以通過(guò)Praat進(jìn)行編輯。如果您想要更準(zhǔn)確的模型和更高的性能,可以檢查這些文件并自行修復(fù)標(biāo)簽錯(cuò)誤。(非必須,仍需耗費(fèi)大量時(shí)間)
*但仍然建議有條件的話隨機(jī)打開(kāi)幾個(gè)TextGrid大致看一下音素時(shí)長(zhǎng)有沒(méi)有標(biāo)準(zhǔn)了,尤其是呼吸AP有沒(méi)有識(shí)別準(zhǔn)確,SP空白的位置有沒(méi)有出現(xiàn)特別離譜的錯(cuò)誤。如果你覺(jué)得標(biāo)得不準(zhǔn),請(qǐng)調(diào)整一下參數(shù)再重新運(yùn)行
運(yùn)行下面單元格可以獲得大致音域分布

P.S.如果你的音域過(guò)窄
在按照【4.1】制作完單人數(shù)據(jù)集后
1.申請(qǐng)OpenCPoP數(shù)據(jù)集(https://wenet.org.cn/opencpop/download/)
2.按照之前流程進(jìn)行響度匹配
3.下載群里標(biāo)注文件

4.把數(shù)據(jù)按照


結(jié)構(gòu)放置
*注意:其中【transcriptions.txt】要使用群里標(biāo)注文件的內(nèi)容(改成這個(gè)名字就行)
5.然后在下面按照【5】繼續(xù)運(yùn)行
4.數(shù)據(jù)集的最終構(gòu)建
恭喜,只要再完成以下幾個(gè)步驟就能完成數(shù)據(jù)集的最終構(gòu)建
4.1數(shù)據(jù)集的名稱和格式
請(qǐng)為您的數(shù)據(jù)集創(chuàng)建一個(gè)唯一的名稱,通常是歌手/中之人的名稱(無(wú)論是真名的還是圈名的)。例如,opencpop。您還可以添加標(biāo)簽來(lái)表示數(shù)據(jù)集版本、模型容量或改進(jìn)。例如,v2表示版本、large表示模型規(guī)模,fix_br表示相比于上次訓(xùn)練的模型修復(fù)了呼吸聲問(wèn)題
*請(qǐng)?jiān)谶\(yùn)行之前編輯以下單元格
*請(qǐng)記住只能使用字母、數(shù)字和下劃線

運(yùn)行下方單元格進(jìn)行清理
*該操作會(huì)清空pipelines/segments和pipelines/textgrids/文件夾,如果你想備份,請(qǐng)指定一個(gè)備份用的目錄再運(yùn)行

4.2超參文件配置
在這里,你可以配置一些用于預(yù)處理、訓(xùn)練時(shí)所需的神經(jīng)網(wǎng)絡(luò)的參數(shù)。
*如果提示CUDA out of memory,先檢查是否有15s以上過(guò)長(zhǎng)數(shù)據(jù),如果沒(méi)有優(yōu)先修改max_tokens和max_sentens,請(qǐng)不要修改residual_channels和residual_layers,除非你確定有能力進(jìn)行后續(xù)處理。
eg.最長(zhǎng)數(shù)據(jù)20s,max_tokens52000,max_sentences48的情況下顯存占用大概22G左右,使用3090即可訓(xùn)練
*如果需要制作多人數(shù)據(jù)集,請(qǐng)?zhí)D(zhuǎn)到5
閱讀下面的說(shuō)明并運(yùn)行以下單元格。
4.2.1 神經(jīng)網(wǎng)絡(luò)參數(shù)
1. residual_channels和residual_layers
這兩個(gè)參數(shù)是指擴(kuò)散解碼器網(wǎng)絡(luò)的寬度和深度。一般來(lái)說(shuō),表示模型容量。較大的模型在訓(xùn)練和推理時(shí)消耗更多的 GPU 內(nèi)存并且運(yùn)行速度較慢,但它們會(huì)產(chǎn)生更好的結(jié)果
基礎(chǔ)的版本384x20
大網(wǎng)絡(luò)版本512x20
訓(xùn)練所需的 GPU 內(nèi)存:
基礎(chǔ)的版本 - 至少 6 GB(建議 12 GB)
大網(wǎng)絡(luò)版本 - 至少 12 GB(建議 24 GB)
2. f0_embed_type
f0有【離散】和【連續(xù)】?jī)煞N嵌入方式。離散(discrete)嵌入采用從 50Hz 到 1100Hz 的 256 個(gè)bin,并使用 torch.nn.Embedding 嵌入,連續(xù)(continuous)嵌入將 f0 轉(zhuǎn)換為連續(xù) mel 頻率,并使用 torch.nn.Linear嵌入。
離散嵌入已經(jīng)過(guò)長(zhǎng)時(shí)間的測(cè)試,并保證穩(wěn)定。連續(xù)嵌入尚未經(jīng)過(guò)廣泛測(cè)試,但在音高范圍的極端邊緣觀察到一些改進(jìn)。
4.2.2 數(shù)據(jù)增強(qiáng)
數(shù)據(jù)增強(qiáng)可提高模型的性能或功能,但可能會(huì)增加訓(xùn)練數(shù)據(jù)的大小
1.random_pitch_shifting
啟用后,對(duì)數(shù)據(jù)進(jìn)行隨機(jī)變調(diào),而不是在預(yù)處理時(shí)保留共振峰。此外,每條數(shù)據(jù)被變調(diào)的key將被嵌入到網(wǎng)絡(luò)中。這將擴(kuò)大音高范圍,并允許在推理時(shí)控制幀級(jí)鍵移動(dòng)(如 VOCALOID 中的 GEN 參數(shù))。
這種類型的擴(kuò)充接受以下參數(shù):
range控制將隨機(jī)移動(dòng)的音高鍵的范圍。
scale控制將應(yīng)用擴(kuò)充的數(shù)據(jù)量。
??????????????????????????=(1+??????????)???????????????????
2.fixed_pitch_shifting
啟用后,數(shù)據(jù)的音高將固定變調(diào)。這些帶有變調(diào)的數(shù)據(jù)將被標(biāo)記為與原始數(shù)據(jù)不同的說(shuō)話人,從而使模型成為組合模型。這也將擴(kuò)大音高的范圍(可能比隨機(jī)音高轉(zhuǎn)換略好)。這種增強(qiáng)與隨機(jī)變高不兼容。
這種類型的擴(kuò)充接受以下參數(shù):
targets控制變調(diào)的目標(biāo)數(shù)量以及將向每個(gè)目標(biāo)移動(dòng)的鍵數(shù)。
scale控制每個(gè)增強(qiáng)目標(biāo)將應(yīng)用于的數(shù)據(jù)量。
??????????????????????????=(1+?????????????????????(??????????????))???????????????????
4.2.3 訓(xùn)練和驗(yàn)證
1. test_prefixes
此列表中指定的名稱前綴的所有文件都將放入測(cè)試集中。每次保存檢查點(diǎn)時(shí),程序?qū)⑹紫仍跍y(cè)試集上運(yùn)行推理,并將結(jié)果放在 TensorBoard 上。因此,你可以收聽(tīng)這些演示并判斷模型的質(zhì)量。如果添加的測(cè)試用例少于 10 個(gè),則會(huì)自動(dòng)隨機(jī)選擇更多用例。
2. max_tokens和max_sentences
這兩個(gè)參數(shù)共同確定訓(xùn)練時(shí)的batch size(bs),前者表示一個(gè)batch中的最大幀數(shù),后者限制最大batch。較大的bs在訓(xùn)練時(shí)消耗更多的 GPU 內(nèi)存。此值可以根據(jù)你的 GPU 內(nèi)存進(jìn)行調(diào)整。切記不要將此值設(shè)置得太低,因?yàn)樾s可能導(dǎo)致模型不收斂。
3. lr 和decay_steps
這兩個(gè)值是指每次學(xué)習(xí)率衰減時(shí)的學(xué)習(xí)率和步數(shù)。如果你減小了bs大小,則可以考慮使用較小的學(xué)習(xí)率和更多的衰減步數(shù)。
4. val_check_interval, num_ckpt_keep和max_updates
這三個(gè)值是指驗(yàn)證和保存檢查點(diǎn)之間的訓(xùn)練步驟、保留的最新檢查點(diǎn)數(shù)以及最大訓(xùn)練步驟數(shù)。使用默認(rèn)bs大小和 5 小時(shí)的訓(xùn)練數(shù)據(jù),250k ~ 300k 的訓(xùn)練步長(zhǎng)是合理的。如果減小bs大小,則可能會(huì)增加訓(xùn)練步驟。
5. permanent_ckpt_start和permanent_ckpt_interval
這兩個(gè)值負(fù)責(zé)控制訓(xùn)練中永久檢查點(diǎn)的保存。通常情況下,只有最新的 num_ckpt_keep 個(gè)模型會(huì)被保存,其他的模型會(huì)全部被清理。這是為了在程序報(bào)錯(cuò)、崩潰或進(jìn)程被殺、設(shè)備故障、實(shí)例被收回等造成訓(xùn)練意外中止的情況下能夠保存最新的訓(xùn)練結(jié)果。但這樣的機(jī)制無(wú)法應(yīng)對(duì)模型意外過(guò)擬合(訓(xùn)練過(guò)頭)的情況,也不方便進(jìn)行不同訓(xùn)練步數(shù)的對(duì)比。
設(shè)置這兩個(gè)值后,程序?qū)牡?permanent_ckpt_start 步開(kāi)始(最開(kāi)始的若干步通常沒(méi)什么意義,全是噪聲和缺陷),每隔 permanent_ckpt_interval 步保存一個(gè)永久的模型。這樣的模型不會(huì)被當(dāng)作舊模型刪除,因此你無(wú)需時(shí)刻盯著煉丹爐,這些模型可以供你事后對(duì)比和選擇。
要啟用永久模型保存,請(qǐng)確保這兩個(gè)值都是 val_check_interval 的正倍數(shù)。
保存永久模型會(huì)占用更多硬盤空間,所以你也可以把 permanent_ckpt_interval 設(shè)置成 -1 來(lái)關(guān)閉這個(gè)功能。

5.組合模型的配置
*如果你僅使用一份數(shù)據(jù),無(wú)需執(zhí)行此操作
如果你有多個(gè)數(shù)據(jù)集,則可以使用它們訓(xùn)練組合模型,以獲得更好的性能和覆蓋率。此外,你還可以通過(guò)一個(gè)模型在不同的演唱者/風(fēng)格/音色等之間切換,甚至可以隨著時(shí)間的推移以任何比例、靜態(tài)或動(dòng)態(tài)混合它們中的任何一個(gè)。
本節(jié)將指導(dǎo)你為此類模型創(chuàng)建配置文件,以便你可以從多個(gè)數(shù)據(jù)集運(yùn)行聯(lián)合預(yù)處理和訓(xùn)練。
注意:在訓(xùn)練組合模型之前,你必須獲得每個(gè)數(shù)據(jù)集的版權(quán)所有者的許可,并確保所有這些提供者都完全了解你將從他們的數(shù)據(jù)中訓(xùn)練組合模型,你是否會(huì)分發(fā)合成的聲音和模型權(quán)重,他們的聲音是否會(huì)被用于混合, 以及其他的潛在風(fēng)險(xiǎn)。
5.1.選擇數(shù)據(jù)集
在以下單元格,你可以選擇數(shù)據(jù)集并為你的組合模型命名
1.model_name和model_tags
類似于第 4.1 節(jié)中描述的dataset_name和dataset_tags,但在這里您可以在模型名稱中使用 +。例如,female_triplet 和 alice+bob 。
2.datasets
你可以使用數(shù)據(jù)集的全名指定數(shù)據(jù)集,并為每個(gè)數(shù)據(jù)集設(shè)置說(shuō)話人名稱(speaker)。例:

注意:必須鍵入dataset的全名(data/ 目錄中的文件夾名稱)。你可以在speaker中使用字母、數(shù)字、下劃線 (_) 和連字符 (-)。

5.2 配置參數(shù)
組合模型的大多數(shù)參數(shù)與第 4.2 節(jié)中所述相同,但存在以下差異。
1.test_prefixes
您可以使用波形文件的前綴或全名,在此參數(shù)中帶或不帶說(shuō)話人 ID。例如:
xxx 將完全匹配任何選定數(shù)據(jù)集中的一個(gè)文件名,如果沒(méi)有,則匹配以 xxx開(kāi)頭的所有文件名。
0:xxx 將完全匹配第一個(gè)數(shù)據(jù)集中的一個(gè)文件名,如果沒(méi)有,則匹配該數(shù)據(jù)集中以 xxx 開(kāi)頭的所有文件名。
如果未指定,將從所有數(shù)據(jù)集中隨機(jī)選擇測(cè)試用例。

6.完成
現(xiàn)在你可以參考輸出結(jié)果進(jìn)行訓(xùn)練步驟了
*請(qǐng)參考你自己的輸出結(jié)果

