全解讀:從實(shí)時變聲 GUI 到 RMVPE 與 DML 多端推理)
Retrieval-based-Voice-Conversion-WebUI 迭代演進(jìn)全解讀從實(shí)時變聲 GUI 到 RMVPE 與 DML 多端推理【免費(fèi)下載鏈接】Retrieval-based-Voice-Conversion-WebUIEasily train a good VC model with voice data 10 mins!項(xiàng)目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI本文以倉庫內(nèi) docs/kr/Changelog_KO.md2023 年 4 月至 10 月期間的韓文更新日志為主干逐條還原每個版本背后的真實(shí)改動并結(jié)合當(dāng)前倉庫快照中的實(shí)現(xiàn)代碼定位對應(yīng)功能落點(diǎn)。閱讀本文后你將能按時間線理解 RVC 的架構(gòu)演進(jìn)動機(jī)訓(xùn)練效率、推理精度、跨平臺支持并能直接從 gui_v1.py、config.py、train-index-v2.py、rmvpe.py 等源碼入口復(fù)現(xiàn)這些設(shè)計而不是把更新日志當(dāng)作過期的流水賬。需要先說明的一點(diǎn)是這份日志本身按最新在前倒序排列且所記錄的功能以 2023 年為時間基準(zhǔn)本文在梳理時會保留其倒序結(jié)構(gòu)同時以當(dāng)前倉庫快照作為佐證來源。凡是從源碼結(jié)構(gòu)推得的結(jié)論文中均使用從當(dāng)前源碼看對應(yīng)實(shí)現(xiàn)位于等表述避免把舊版行為與現(xiàn)版行為混淆。更新日志總覽與倉庫中的并行版本該日志不是倉庫唯一的變更記錄。在 docs 目錄下同一份 Changelog 同時維護(hù)了中文Changelog_CN.md、英文Changelog_EN.md、日文、法文、韓文、土耳其文、葡萄牙文等多語言版本本文對應(yīng)的韓文版正是 5 月 28 日更新中新增韓文更新日志的產(chǎn)物。各條目整理為下表日期主題關(guān)鍵詞核心方向2023-10-06go-realtime-gui / gui_v1.py實(shí)時變聲界面全面優(yōu)化熱更新、懶加載、降噪2023-08-13RMVPE、PyTorch/ONNX/DirectML音高提取換代 AMD/Intel 顯卡支持2023-06-18v2 預(yù)訓(xùn)練、minibatch-kmeans、ONNX 導(dǎo)出數(shù)據(jù)量與索引效率擴(kuò)展2023-05-28/14/13UVR5 模型、音量包絡(luò)、Harvest 緩存音頻處理與推理體驗(yàn)打磨2023-04-09/16/28訓(xùn)練效率、多語言、faiss 升級訓(xùn)練體系與硬件適配2023-10-06實(shí)時變聲界面 go-realtime-gui.bat / gui_v1.py 全面成型日志指出實(shí)時變聲用的go-realtime-gui.bat/gui_v1.py此前已經(jīng)存在本次的核心工作是與 0813 版本相比的性能與體驗(yàn)優(yōu)化具體集中在三點(diǎn)。界面操作優(yōu)化參數(shù)熱更新、模型懶加載與音量包絡(luò)日志列出的三項(xiàng)界面級改進(jìn)都能在當(dāng)前 gui_v1.py 中找到對應(yīng)實(shí)現(xiàn)參數(shù)熱更新調(diào)整參數(shù)無需中斷推理再重啟。從源碼看GUI 通過事件循環(huán)對滑塊/開關(guān)事件做增量處理例如index_rate事件直接調(diào)用self.rvc.change_index_rate(values[index_rate])gui_v1.py 約 L628-L631而底層 tools/rvc_for_real-time 思路對應(yīng)的實(shí)時實(shí)現(xiàn)類 提供了change_key、change_index_rate這類運(yùn)行時改參數(shù)的方法避免重建整個推理對象。模型懶加載 / 復(fù)用已加載的模型不必重新載入。實(shí)時推理類RVC.__init__接收last_rvc參數(shù)當(dāng)last_rvc非空且pth_path與當(dāng)前一致時直接復(fù)用hubert特征提取器與net_gsynthesizer等已加載權(quán)重只有當(dāng)路徑變化時才走set_synthesizer()/set_jit_model()重新加載。這正是切換模型才重載、不切換則零開銷的實(shí)現(xiàn)依據(jù)。音量包絡(luò)參數(shù)新增按輸入音頻動態(tài)校準(zhǔn)輸出音量的參數(shù)。gui_v1.py 中對應(yīng)rms_mix_rate滑塊L128 附近self.rms_mix_rate: float 0.0推理末端當(dāng)rms_mix_rate 1時用 librosa 分別計算輸入與輸出的 RMS 短時能量曲線再按pow(rms1/rms2, 1 - rms_mix_rate)對輸出加權(quán)約 L931-L963。從表達(dá)式可推斷該值越接近 1輸出越接近合成結(jié)果本身的包絡(luò)越接近 0輸出越貼合輸入音頻的音量起伏。日志同時提醒若輸入背景噪聲較大建議關(guān)閉該功能避免把噪聲能量傳染給輸出。內(nèi)置降噪效果與速度優(yōu)化GUI 的降噪并非簡單的前置濾波而是引入了一個獨(dú)立的譜門模塊 tools/torchgate/torchgate.pyTorchGate基于 STFT 做譜掩碼支持 stationary / non-stationary 模式含頻率與時間維度平滑gui_v1.py 中通過I_noise_reduce輸入端降噪與O_noise_reduce輸出端降噪兩個開關(guān)啟用前者會同步參與音量包絡(luò)的 RMS 計算后者直接作用于合成輸出。速度優(yōu)化方面日志所述推理速度大幅提升與代碼中流式緩存cache_pitch/cache_pitchf、SOLA 重疊拼接及phase_vocoder相位聲碼器銜接gui_v1.py L964-L997等機(jī)制吻合。同一類型的輸入輸出設(shè)備如 MME日志特別強(qiáng)調(diào)實(shí)時變聲的輸入與輸出設(shè)備應(yīng)選擇同一 API 類型例如同為 MME。從 GUI 設(shè)備枚舉邏輯update_devicesgui_v1.py L1010 附近按 hostapi 列出設(shè)備看混用不同類型設(shè)備會導(dǎo)致時鐘源不一致與延遲抖動這是使用層面的硬性約束。1006 整體更新RMVPE 低音優(yōu)化與推理界面布局日志將 1006 的整體更新概括為兩項(xiàng)一是繼續(xù)改進(jìn) RMVPE 音高提取效果尤其是男性低音區(qū)提升明顯二是優(yōu)化推理界面布局。前者與 0813 的 RMVPE 主線一脈相承見下一節(jié)后者屬于 WebUI 的可用性迭代。2023-08-13RMVPE 音高提取換代與 AMD/Intel 顯卡DML支持0813 是日志中信息量最大的一次發(fā)布分為常規(guī) Bug 修復(fù)與關(guān)鍵更新兩部分。常規(guī)修復(fù)清單及其背后的設(shè)計約束日志列出的修復(fù)項(xiàng)中多數(shù)都能在現(xiàn)行工程結(jié)構(gòu)里看到長期沉淀的痕跡訓(xùn)練輪數(shù)下限調(diào)整日志原文記錄總 epoch 相關(guān)下限被調(diào)整分別調(diào)至 1 與 2 兩處配合訓(xùn)練更小數(shù)據(jù)集、更快收斂的方向。不使用預(yù)訓(xùn)練模型時的訓(xùn)練錯誤修復(fù)保證無 pretrain 的冷啟動路徑可用。伴奏人聲分離后清理顯存避免 UVR5 干聲分離后顯存持續(xù)占用。檢查點(diǎn)保存路徑由絕對路徑改為相對路徑讓模型可在不同機(jī)器/目錄間遷移。支持含空格的路徑訓(xùn)練集目錄與實(shí)驗(yàn)名均不再因空格報錯。從 configs/config.py 的加載邏輯看配置與路徑均基于os.path拼接本身具備空格兼容性。文件列表不再強(qiáng)制要求 utf8 編碼降低非 UTF-8 環(huán)境的數(shù)據(jù)處理門檻。解決實(shí)時變聲過程中 faiss 檢索導(dǎo)致的 CPU 消耗實(shí)時路徑必須把逐幀檢索的代價壓到最低。當(dāng)前實(shí)時推理代碼中 faiss 索引在初始化時一次性reconstruct_n出big_npy檢索后按index_rate與特征加權(quán)融合見 tools/rvc_for_realtime.py 的infer流程避免每幀重復(fù)做高開銷操作可視為該問題的工程化答案。關(guān)鍵更新RMVPE 訓(xùn)練與全鏈路替換日志稱團(tuán)隊(duì)訓(xùn)練并集成了開源音高提取模型 RMVPE并將其用于RVC 訓(xùn)練、離線推理、實(shí)時推理三條鏈路同時支持PyTorch / ONNX / DirectML三種后端。RVC 倉庫中可交叉印證的點(diǎn)包括RMVPE 權(quán)重資源目錄 assets/rmvpe推理代碼按assets/rmvpe/rmvpe.pt加載完整權(quán)重文件需按倉庫提供的腳本下載實(shí)時/離線推理側(cè)對 RMVPE 的調(diào)用封裝如get_f0_rmvpe底層實(shí)現(xiàn)位于 infer/lib/rmvpe.py訓(xùn)練側(cè) F0 提取腳本獨(dú)立成模塊infer/modules/train/extract/extract_f0_rmvpe.py并額外提供 DirectML 變體 extract_f0_rmvpe_dml.py與日志中通過 Onnx_Dml 在 GPU 上做 RMVPE 推理呼應(yīng)WebUI 的 F0 方法下拉中可切換 harvest / crepe / rmvpe / pm 等infer-web.py的extract_f0_feature入口會根據(jù)所選方法分流。AMD / Intel 顯卡支持torch_dml日志明確通過torch_dml為 AMD 與 Intel 顯卡提供 (1) 實(shí)時變聲、(2) 推理、(3) 人聲伴奏分離能力訓(xùn)練暫不支持 DML只能退回 CPU 訓(xùn)練同時 RMVPE 推理可經(jīng) ONNX_DML 上 GPU。當(dāng)前倉庫保留了一整套對應(yīng)資產(chǎn)啟動腳本區(qū)分 CUDA 與 DMLgo-web.bat vs go-web-dml.bat、go-realtime-gui.bat vs go-realtime-gui-dml.batDML 依賴清單與 Conda 環(huán)境定義requirements-dml.txt、environment_dml.yaml后端適配集中在 configs/config.py通過--dml命令行參數(shù)arg_parse進(jìn)入 DML 分支將device切換為torch_directml.device(...)并把半精度強(qiáng)制置為False文件同時負(fù)責(zé)在 CUDA 版與 DML 版 onnxruntime 之間切換 DLL。實(shí)時 GUI 中針對 DML 特殊處理的代碼路徑如privateuseone in str(device)的判斷也出現(xiàn)在 torchgate 與 crepe/fcpe 等模塊里說明 DML 平臺有專門的低內(nèi)存/CPU 回退策略。2023-06-18v2 預(yù)訓(xùn)練模型、大數(shù)據(jù)量索引與 ONNX 導(dǎo)出v2 新增 32k / 48k 預(yù)訓(xùn)練與 non-f0 修復(fù)日志顯示 v2 路線新增 32k 與 48k 采樣率的預(yù)訓(xùn)練模型并修復(fù) non-f0不帶音高條件模型的推理錯誤。當(dāng)前 configs 的version_config_list同時包含v1/32k、v1/40k、v1/48k、v2/48k、v2/32k五檔配置 JSONconfigs/config.py L24-L30各版本權(quán)重目錄 assets/pretrained 與 assets/pretrained_v2 并列存在——這正是 v1/v2 雙版本并行時代的產(chǎn)物。訓(xùn)練集超 1 小時minibatch-kmeans 加速索引當(dāng)訓(xùn)練集時長超過 1 小時索引構(gòu)建步驟改用MiniBatchKMeans以加速。實(shí)現(xiàn)位于 tools/infer/train-index-v2.py腳本會先判斷樣本量若超過閾值則打印Trying doing kmeans ... shape to 10k centers.提示并以MiniBatchKMeans(n_clusters10000, ...)對高維特征做聚類中心化cluster centers 替代原始向量參與 faiss 索引從算法上把大規(guī)模特征庫的建庫/檢索成本壓下來。相比之下單文件腳本 tools/infer/train-index.py 承載的是早期輕量版流程可對照閱讀版本差異。數(shù)據(jù)處理異常值自動剔除與 ONNX 導(dǎo)出標(biāo)簽頁日志還包含兩條數(shù)據(jù)處理鏈路更新數(shù)據(jù)預(yù)處理階段自動剔除異常值防止爆音/空數(shù)據(jù)污染特征提取新增 ONNX 導(dǎo)出選項(xiàng)標(biāo)簽頁WebUI 中提供模型導(dǎo)出入口底層由 tools/export_onnx.py 與infer-web.py的export_onnx函數(shù)實(shí)現(xiàn)并與 infer/lib/infer_pack/models_onnx.py、infer/modules/onnx/export.py 及配套的 tools/onnx_inference_demo.py 演示腳本構(gòu)成完整的導(dǎo)出—推理鏈路。日志還坦誠記錄了若干嘗試過但未采用的技術(shù)路線這些信息對理解模型設(shè)計邊界極具價值為特征檢索引入時序維度和 PCA 降維均無顯著效果NSF 聲碼器因依賴 PyTorch 算子而難以完整支持 ONNX 推理對訓(xùn)練輸入做音高/性別/EQ/噪聲等隨機(jī)增強(qiáng)也未見收益。同期還標(biāo)注了后續(xù)計劃集成小型聲碼器 Vocos-RVC、訓(xùn)練階段引入 Crepe 音高識別、將 Crepe 精度與 REC-config 同步以及支持 F0 編輯器。2023-05批量轉(zhuǎn)換、UVR5、音量包絡(luò)與 Harvest 緩存5 月 28 日多功能并發(fā)更新新增 v2 Jupyter Notebook倉庫根目錄的 Retrieval_based_Voice_Conversion_WebUI_v2.ipynb與 v1 版 Retrieval_based_Voice_Conversion_WebUI.ipynb 并列即其產(chǎn)物同一批更新還包含依賴模塊調(diào)整與多語言更新日志本韓文日志即當(dāng)時新增。無聲/氣聲保護(hù)模式改善清音段與呼吸聲的還原質(zhì)量。支持 crepe-full 音高檢測當(dāng)前實(shí)時推理類get_f0_crepe中torchcrepe.predict(..., full, ...)即使用 full 模型配合torchcrepe.filter.median/mean與周期性掩碼pd 0.1置零抑制抖動。UVR5 人聲分離支持去混響de-reverb與去回聲de-echo模型對應(yīng) infer/modules/uvr5 模塊體系vr.py / mdxnet.py 兩條推理后端與 assets/uvr5_weights 權(quán)重目錄。索引文件名帶實(shí)驗(yàn)名與版本避免多實(shí)驗(yàn)相互覆蓋。批量變聲與 UVR5 分離可手動選擇導(dǎo)出格式倉庫提供了獨(dú)立批量腳本 tools/infer_batch_rvc.py。v1 的 32k 訓(xùn)練模型支持終止結(jié)合 6 月日志中 v2 重新引入 32k 看這是 v1 產(chǎn)線的收尾動作。5 月 13/14 日預(yù)處理的隱性成本優(yōu)化修復(fù)訓(xùn)練集預(yù)處理的偽多進(jìn)程 Bug并把多進(jìn)程n_cpu的作用范圍從僅 F0 提取擴(kuò)展到數(shù)據(jù)預(yù)處理 F0 提取——日志原文記錄了該參數(shù)語義的遷移Harvest 算法增加中位濾波半徑調(diào)節(jié)現(xiàn)行g(shù)et_f0中signal.medfilt(f0, 3)即濾波應(yīng)用導(dǎo)出音頻支持后處理重采樣自動檢測 logs 目錄下的索引文件并提供下拉列表省去手動輸入索引路徑WebUI 標(biāo)簽頁新增常見問題與解答倉庫同時在 docs 下以多語言維護(hù) FAQ如 docs/cn/faq.md、docs/en/faq_en.md 等此即FAQ 頁的資料沉淀相同輸入音頻路徑下緩存 Harvest 音高日志特別解釋該緩存的價值——Harvest 全流程長、重復(fù)提取代價高若不緩存第一次推理后調(diào)整音色/索引/中位濾波半徑等參數(shù)時等待會極長音量包絡(luò)以輸入音量包絡(luò)混入或替換輸出包絡(luò)可緩解輸入靜音或輸出帶噪的問題默認(rèn)關(guān)閉值 1 為關(guān)閉輸入底噪大時不建議開啟按指定頻率保存小模型ckpt 抽取適合想觀察不同 epoch 效果、又不想每次手動抽取小模型再清理大檢查點(diǎn)的場景模型檢查點(diǎn)處理邏輯集中在 infer/lib/train/process_ckpt.py通過環(huán)境變量規(guī)避服務(wù)器全局代理導(dǎo)致的連接錯誤支持 v2 預(yù)訓(xùn)練模型當(dāng)時僅 40k 公開測試另兩檔采樣率因未完全訓(xùn)練而暫緩?fù)评砬跋拗瞥^ 1 的過載音量并微調(diào)了數(shù)據(jù)預(yù)處理參數(shù)。2023-04訓(xùn)練效率調(diào)優(yōu)與 WebUI 多語言起步4 月 9 日訓(xùn)練參數(shù)重構(gòu)與顯存利用率日志給出了一組訓(xùn)練顯存利用率數(shù)字A100 由約 25% 提至約 90%V100 由 50% 提至約 90%2060S 由 60% 提至約 85%P40 由 25% 提至約 95%訓(xùn)練速度隨之顯著提升。圍繞它發(fā)生了三處語義變更total_batch_size語義改為每張 GPU 的 batch_size——這是分布式/DDP 訓(xùn)練常見的口徑統(tǒng)一total_epoch上限由 100 提至 1000默認(rèn)值由 10 提至 20修復(fù) ckpt 抽取時音高識別錯誤導(dǎo)致的異常推理、分布式訓(xùn)練中每個 rank 各自存 ckpt 的問題對特征提取加入 NaN 過濾并修復(fù)靜音輸入/輸出隨機(jī)產(chǎn)生噪聲的問題——日志注明舊模型需在新數(shù)據(jù)集上重訓(xùn)才可徹底消除該問題。4 月 16 日實(shí)時小 GUI 問世與低頻細(xì)節(jié)處理新增本地實(shí)時變聲 mini-GUI雙擊 go-realtime-gui.bat內(nèi)容為調(diào)用runtime\python.exe gui_v1.py啟動——這正是 10 月日志中其實(shí)早已存在、本次重在優(yōu)化的那個界面的起點(diǎn)訓(xùn)練與推理時過濾 50Hz 以下頻段并把 pyworld 的最低音高由默認(rèn) 80Hz 下探到 50Hz避免 50–80Hz 的男低音被靜音?,F(xiàn)行代碼中f0_min 50 / f0_max 1100的設(shè)定可在實(shí)時推理實(shí)現(xiàn)中直接看到WebUI 語言隨系統(tǒng)地區(qū)自動切換當(dāng)時支持 en_US、ja_JP、zh_CN、zh_HK、zh_SG、zh_TW不支持時回退 en_US。如今倉庫 i18n/locale 已擴(kuò)展至 ko_KR、es_ES、fr_FR、it_IT、pt_BR、ru_RU、tr_TR 等更多語言由 i18n/i18n.py 統(tǒng)一加載修復(fù)部分 GPU 識別失敗如 V100-16G、P4。從當(dāng)前 configs/config.py 的device_config可看到同類適配邏輯對 1060/1070/1080、P40/P10 及含16的 GPUV100 除外強(qiáng)制切回 FP32 并改寫配置同時按total_memory計算gpu_mem為低顯存設(shè)備分配更小的分塊參數(shù)x_pad/x_query/x_center/x_max。4 月 28 日faiss 索引換代與低顯存推理設(shè)置faiss 索引設(shè)置升級檢索更快、質(zhì)量更好去除對total_npy的依賴此后分享模型不再要求附帶total_npy輸入文件放開 GTX 16 系限制并為 4GB 顯存 GPU 提供 4GB 推理配置。當(dāng)前 config.py 在gpu_mem 4時會把preprocess_per降為 3.0 并套用最小化的分塊參數(shù)x_pad1、x_query5、x_center30、x_max32正是低顯存推理預(yù)設(shè)的落地形態(tài)修復(fù)部分音頻格式的 UVR5 人聲分離 Bug實(shí)時 mini-GUI 開始支持非 40k 及非 lazy pitch 模型。從更新日志到當(dāng)前倉庫后續(xù)計劃與演進(jìn)收束日志末尾的后續(xù)計劃板塊同樣值得保留為研發(fā)方向參考多用戶訓(xùn)練標(biāo)簽頁最多 4 人屬于 WebUI 的并發(fā)可用性規(guī)劃訓(xùn)練集中加入氣聲 wav解決人聲呼吸被轉(zhuǎn)換成噪聲的底層數(shù)據(jù)問題為歌聲訓(xùn)練集推出基礎(chǔ)模型當(dāng)時標(biāo)注為進(jìn)行中后續(xù)發(fā)布。與此同時若想從代碼層面驗(yàn)證上述任意一條歷史改動建議優(yōu)先按以下路徑快速定位實(shí)時推理 UI 邏輯看 gui_v1.py推理/后端設(shè)備適配看 configs/config.py 與 tools/rvc_for_realtime.pyF0 提取harvest/crepe/rmvpe/fcpe看對應(yīng)get_f0_*方法及 infer/lib/rmvpe.py索引構(gòu)建看 tools/infer/train-index-v2.py降噪看 tools/torchgate/torchgate.py人聲分離看 infer/modules/uvr5多語言看 i18n。以此對照更新日志逐項(xiàng)閱讀即可把歷史變更還原為仍在演化的工程結(jié)構(gòu)?!久赓M(fèi)下載鏈接】Retrieval-based-Voice-Conversion-WebUIEasily train a good VC model with voice data 10 mins!項(xiàng)目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考