DiffSinger(OpenVPI 維護版)v2.0.0 更新日志
v2.0.0:完全重構(gòu)、全新唱法模型、通用詞典支持、半精度/多卡訓(xùn)練支持與諸多改進
項目開源地址:https://github.com/openvpi/DiffSinger
交流QQ群:907879266

不兼容更改及遷移指南
數(shù)據(jù)集制作
舊功能移除
MIDI-A/B 模式的訓(xùn)練和推理
PitchExtracter (xiaoma_pe) 的訓(xùn)練和推理
環(huán)境依賴
環(huán)境依賴已重置,需要重新安裝依賴。ONNX 導(dǎo)出依賴已從 PyTorch 1.8 更改為 PyTorch 1.13。
模型加載
舊的聲學(xué)模型權(quán)重在加載前需要根據(jù)報錯信息使用腳本進行遷移:
若要使用舊權(quán)重繼續(xù)訓(xùn)練,需要在配置文件添加一行:
數(shù)據(jù)集
配置文件
g2p_dictionary => dictionary
max_tokens => max_batch_frames
max_sentences => max_batch_size
max_eval_tokens => max_val_batch_frames
max_eval_sentences => max_val_batch_size
lr => optimizer_args.lr
optimizer_adam_beta1 -> optimizer_args.beta1
optimizer_adam_beta2 -> optimizer_args.beta2
weight_decay -> optimizer_args.weight_decay
warmup_updates -> lr_scheduler_args.warmup_steps
decay_steps => lr_scheduler_args.step_size
gamma => lr_scheduler_args.gamma
數(shù)據(jù)增強相關(guān)配置新增開關(guān)屬性,需要額外設(shè)置開啟才可啟用,例如:
DS 文件
全新唱法模型、參數(shù)與機制
唱法模型
包含功能(可自由搭配):
自動預(yù)測音素長度(Duration Predictor)
自動預(yù)測音高曲線(Pitch Diffusion)
自動聯(lián)合預(yù)測其他唱法參數(shù)(Multi-Variance Diffusion)
若要訓(xùn)練唱法模型,現(xiàn)有的數(shù)據(jù)標(biāo)注需要進行遷移。根據(jù)選配功能與所用詞典的不同,需要采取的措施有所區(qū)別(部分情況需要人工進行補充標(biāo)注),詳情可見:
在 DS 文件中,可使用 energy?和 energy_timestep?
氣聲(Breathiness)定義為唱段中非周期性部分的 RMS 響度曲線,單位為 dB,可控制演唱的氣流強度與清輔音的發(fā)聲強度。
在 DS 文件中,可使用 breathiness 和 breathiness_timestep 對氣聲參數(shù)進行控制。
所有唱法模型支持的參數(shù)(音素時長、音高參數(shù)、其他唱法參數(shù))均適配動態(tài)唱法融合。其中,音素時長序列以音素為單位融合,其余參數(shù)以幀為單位融合。不同參數(shù)的唱法融合、唱法融合與聲學(xué)模型的聲線融合之間互相獨立,互不影響。
唱法融合在 DS 文件中的控制方式與聲線融合類似:
使用 ph_spk_mix?對音素時長融合比例進行控制。
使用 spk_mix 與 spk_mix_timestep 對其余參數(shù)融合比例進行控制。
在重錄音高參數(shù)時,需要給定完整音素信息、需要重錄的片段位置、非重錄部分的音高參數(shù)。重錄音高參數(shù)時,將根據(jù)給定條件重新生成對應(yīng)區(qū)間的音高曲線。
每次推理時靈活自定義耦合順序。以下為使用場景示例:
聯(lián)合預(yù)測參數(shù) A、參數(shù) B 與參數(shù) C,三者一次性生成,但彼此無耦合關(guān)系,修改其中一種參數(shù)不會影響另外兩種參數(shù);
使參數(shù) C 耦合于參數(shù) A 與 B,即先一次性生成參數(shù) A 與 B,再根據(jù)前置條件與參數(shù) A、B 匹配預(yù)測參數(shù) C,對參數(shù) A 與 B 進行修改后參數(shù) C 將隨之改變,但參數(shù) A 與 B 互不影響;
全新的唱法模型與音素標(biāo)注方案支持任意詞典與音素系統(tǒng)(包括兩段式與任意多段式)。具體請查看唱法標(biāo)注遷移指南 (https://github.com/openvpi/MakeDiffSinger/tree/main/variance-temp-solution)?與自定義詞典說明?(https://github.com/openvpi/DiffSinger/blob/main/docs/BestPractices.md#using-custom-dictionaries)。
混合精度、多 GPU 與梯度累積
項目已適配最新版本的 Lightning 框架,并新增了對混合精度(FP16、BF16 AMP)、多 GPU 訓(xùn)練(DDP)、梯度累積的支持,可提速訓(xùn)練過程或節(jié)省顯存。詳情請見性能調(diào)優(yōu)說明 (https://github.com/openvpi/DiffSinger/blob/main/docs/BestPractices.md#performance-tuning)。
其他新增內(nèi)容與調(diào)整
代碼結(jié)構(gòu)與依賴項進行了大幅重構(gòu)和化簡,對部分依賴進行了更新。
預(yù)處理、訓(xùn)練、推理與導(dǎo)出的腳本已重構(gòu)并統(tǒng)一移至 scripts/ 目錄下。
新增一個可從模型權(quán)重文件中刪除特定說話人標(biāo)簽的腳本(drop_spk.py)。
從命令行執(zhí)行預(yù)處理與訓(xùn)練時,不再需要設(shè)置 PYTHONPATH?與 CUDA_VISIBLE_DEVICES。
現(xiàn)可通過 spk_ids?配置項自定義控制每個數(shù)據(jù)集分配到的說話人 ID,并支持為多個數(shù)據(jù)集賦予相同的說話人 ID。
支持了多進程加速預(yù)處理,并可自定義進程數(shù)量。
數(shù)據(jù)集二進制格式已更改為 HDF5,并移除了冗余內(nèi)容。
學(xué)習(xí)率與優(yōu)化器現(xiàn)可通過 lr_scheduler_args?與 optimizer_args?進行更靈活的自定義。
新增 DDIM、DPM-Solver++(替代 DPM-Solver)、UniPC 擴散加速算法支持。
ONNX 模型中集成的擴散加速算法已更改為 DDIM。
導(dǎo)出 ONNX 多說話人模型時,若不指定 --export_spk?參數(shù),將默認(rèn)導(dǎo)出所有說話人。
ONNX 模型算子版本號已升級至 15。
錯誤修復(fù)
修復(fù)了讀取數(shù)據(jù)集時可能存在的文件句柄爭用。
修復(fù)了聯(lián)合數(shù)據(jù)增強實現(xiàn)結(jié)果與公式不一致的問題。
修復(fù)了部分終端無法渲染超參顏色的問題。
許可證
本項目的許可證由 MIT 許可證更改為 Apache 2.0 許可證。
特別鳴謝
免費提供的實驗計算資源。