:StarGANv2-VC 語音轉(zhuǎn)換的推理與訓練完整指南)
人工智能語音音頻NLP媒體生成【免費下載鏈接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.項目地址https://gitcode.com/paddlepaddle/PaddleSpeech點擊查看免費下載導讀本文以 PaddleSpeech 倉庫中 examples/vctk/vc3 示例為主線完整講解基于 StarGANv2-VC 模型的**多說話人語音轉(zhuǎn)換Voice Conversion**實戰(zhàn)流程從下載官方測試音頻、一條命令完成聲音轉(zhuǎn)換推理到讀懂特征提取、模型結(jié)構(gòu)、對抗損失與優(yōu)化器全套配置再到數(shù)據(jù)預處理與模型訓練。讀完本文你將能獨立運行 vc3 的推理腳本產(chǎn)出轉(zhuǎn)換音頻并能理解其底層模型組件Generator、StyleEncoder、MappingNetwork、JDCNet、ASR 輔助模型與 PWG 聲碼器的協(xié)作方式。一、認識 vc3 示例StarGANv2-VC 在 VCTK 上的落地examples/vctk/vc3是 PaddleSpeech 提供的多說話人語音轉(zhuǎn)換示例recipe其目錄結(jié)構(gòu)如下examples/vctk/vc3/run.sh一鍵入口按 stage 編排數(shù)據(jù)預處理、訓練、推理examples/vctk/vc3/path.sh環(huán)境與 PATH 配置指向模型實現(xiàn)目錄paddlespeech/t2s/exps/starganv2_vcexamples/vctk/vc3/conf/default.yaml特征提取、模型結(jié)構(gòu)、損失權(quán)重、優(yōu)化器等全部參數(shù)examples/vctk/vc3/local/preprocess.sh、local/train.sh、local/voice_conversion.sh三個 stage 的具體執(zhí)行腳本。從 path.sh 可以看出BIN_DIR指向paddlespeech/t2s/exps/starganv2_vc其中包含 preprocess.py、normalize.py、train.py、vc.py 四個核心 Python 入口模型結(jié)構(gòu)則定義在 paddlespeech/t2s/models/starganv2_vc/starganv2_vc.py 中Generator、MappingNetwork、StyleEncoder、Discriminator、Discriminator2D并配套 JDCNet 基頻模型 與 AuxiliaryASR 輔助模型。語音轉(zhuǎn)換的任務(wù)目標是保持源說話人的內(nèi)容語音內(nèi)容與韻律將音色轉(zhuǎn)換為任意目標說話人的聲音。StarGANv2-VC 通過風格編碼 內(nèi)容保持 對抗訓練實現(xiàn)任意說話人之間的轉(zhuǎn)換不要求源/目標說話人在訓練數(shù)據(jù)中成對出現(xiàn)。二、快速體驗下載測試音頻并完成一次語音轉(zhuǎn)換vc3 的推理stage 2開箱即用無需自己準備數(shù)據(jù)官方提供了測試音頻包test_wav.zip模型權(quán)重會在運行時自動下載。完整命令如下即原 README 的核心操作wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/starganv2vc/test_wav.zip unzip test_wav.zip ./run.sh --stage 2 --stop-stage 2 --gpus 0逐條說明下載測試音頻test_wav.zip解壓后得到test_wav/目錄其中g(shù)oat_01.wav是默認的源音頻由 run.sh 中source_pathtest_wav/goat_01.wav指定運行推理./run.sh --stage 2 --stop-stage 2 --gpus 0表示只執(zhí)行 stage 2語音轉(zhuǎn)換使用 GPU 0。運行結(jié)束后結(jié)果輸出在 run.sh 中output_dirvc_output指定的目錄里。從推理源碼 vc.py 的輸出邏輯可以知道vc_output下會生成三類文件文件含義orig_voc.wav源音頻的 Mel 特征經(jīng)聲碼器重建的原始語音用于對比vc_result_p{speaker}.wav轉(zhuǎn)換到對應參考說話人音色后的結(jié)果語音ref_voc_p{speaker}.wav參考說話人參考音頻經(jīng)聲碼器重建的語音用于對比其中{speaker}對應 10 個預置的 VCTK 參考說話人vc.py 中selected_speakers [273, 259, 258, 243, 254, 244, 236, 233, 230, 228]即一次推理會產(chǎn)出同一段內(nèi)容、10 種不同音色的轉(zhuǎn)換結(jié)果非常適合快速驗證模型效果。三、讀懂 run.sh三階段流水線與參數(shù)約定run.sh 是整個 recipe 的編排核心。它先source path.sh初始化環(huán)境再定義一組默認變量變量默認值說明gpus0,1使用的 GPU 列表推理時通常指定單卡stage/stop_stage0/100起止階段通過--stage/--stop-stage覆蓋conf_pathconf/default.yaml模型與訓練配置train_output_pathexp/default訓練輸出目錄ckpt_namesnapshot_iter_331.pdz訓練檢查點文件名約定source_pathtest_wav/goat_01.wav推理時的源音頻路徑output_dirvc_output推理輸出目錄三個 stage 的職責與對應腳本如下stage 0數(shù)據(jù)預處理調(diào)用 local/preprocess.sh 提取特征并做歸一化產(chǎn)出dump/目錄下的 metadata.jsonl 與 Mel 特征腳本中標注# not ready now說明該流程當前主要用于配合后續(xù)訓練鏈路純推理場景無需執(zhí)行stage 1訓練調(diào)用 local/train.sh所有 checkpoint 保存在train_output_path/checkpoints/下stage 2語音轉(zhuǎn)換推理調(diào)用 local/voice_conversion.sh注釋明確指出vocoder 默認使用 pwgan。run.sh支持靈活的 stage 組合例如./run.sh --stage 0 --stop-stage 0只做預處理、./run.sh --stage 2 --stop-stage 2只做推理這在 PaddleSpeech 各示例中是統(tǒng)一約定。3.1 推理腳本的調(diào)用鏈local/voice_conversion.sh 內(nèi)部實際執(zhí)行的是python3 ${BIN_DIR}/vc.py \ --config_path${config_path} \ --source_path${source_path} \ --output_dir${output_dir}BIN_DIR來自 path.shpaddlespeech/t2s/exps/starganv2_vc。因此直接手動推理也可以寫成python3 paddlespeech/t2s/exps/starganv2_vc/vc.py \ --config_pathexamples/vctk/vc3/conf/default.yaml \ --source_pathtest_wav/goat_01.wav \ --output_dirvc_output四、配置詳解conf/default.yaml 五大模塊conf/default.yaml 是理解模型與訓練流程的關(guān)鍵文檔分為五大模塊下面逐一解讀。4.1 特征提取設(shè)置FEATURE EXTRACTION SETTINGfs: 16000 n_fft: 2048 n_shift: 300 win_length: 1200 # Window length.(in samples) 50ms window: hann fmin: 0 fmax: 8000 n_mels: 80 norm: # None here htk: True power: 2.0提取 80 維對數(shù) Mel 特征FFT 長度 2048、幀移 300 個采樣點、窗長 1200 個采樣點50msfmax: 8000即sr // 2奈奎斯特頻率htk: True、power: 2.0、norm為空不歸一化這些設(shè)置與 vc.py 中g(shù)et_mel_extractor()的LogMelFBank參數(shù)完全一致文件頭部的注釋給出一個重要事實源碼加載音頻時使用 24k 采樣率而提取 Mel 用 16k這是官方預訓練模型StarGANv2-VC 原版、JDCNet、ASR 輔助模型、PWG 聲碼器的數(shù)據(jù)預處理約定重新訓練或微調(diào)時需保持一致。4.2 模型結(jié)構(gòu)設(shè)置MODEL SETTINGgenerator_params: dim_in: 64 style_dim: 64 max_conv_dim: 512 w_hpf: 0 F0_channel: 256 mapping_network_params: num_domains: 20 latent_dim: 16 style_dim: 64 hidden_dim: 512 style_encoder_params: dim_in: 64 style_dim: 64 num_domains: 20 max_conv_dim: 512 discriminator_params: dim_in: 64 num_domains: 20 max_conv_dim: 512 repeat_num: 4 asr_params: input_dim: 80 hidden_dim: 256 n_token: 80 token_embedding_dim: 256從源碼 starganv2_vc.py 的類定義可以對應理解Generator源碼 L276內(nèi)容編碼器 解碼器的 U-Net 結(jié)構(gòu)解碼端使用 AdaINAdainResBlk注入風格F0_channel: 256時會在瓶頸處拼接基頻特征F0_convadaptive_avg_pool2dw_hpf: 0表示不啟用高通濾波分支MappingNetwork源碼 L410將隨機隱變量latent_dim: 16映射為說話人風格num_domains: 20對應 StarGANv2 中 20 個 VCTK 說話人StyleEncoder源碼 L465從參考語音中提取風格向量Discriminator源碼 L534用于對抗訓練的判別器repeat_num: 4控制下采樣層數(shù)asr_params定義 ASRCNN 輔助模型結(jié)構(gòu)input_dim: 80對應 80 維 Mel 輸入它作為內(nèi)容保持的監(jiān)督信號保證轉(zhuǎn)換前后語音內(nèi)容不變。一個值得注意的細節(jié)配置文件默認num_domains: 20而訓練腳本 train.py 會讀取--speaker-dictdump/speaker_id_map.txt統(tǒng)計實際說話人數(shù)量并動態(tài)覆蓋mapping_network_params、style_encoder_params、discriminator_params三處的num_domains——也就是說換用其他說話人數(shù)量的數(shù)據(jù)集時無需手工改配置。4.3 對抗損失設(shè)置ADVERSARIAL LOSS SETTINGloss_params: g_loss: lambda_sty: 1. lambda_cyc: 5. lambda_ds: 1. lambda_norm: 1. lambda_asr: 10. lambda_f0: 5. lambda_f0_sty: 0.1 lambda_adv: 2. lambda_adv_cls: 0.5 norm_bias: 0.5 d_loss: lambda_reg: 1. lambda_adv_cls: 0.1 lambda_con_reg: 10. adv_cls_epoch: 50 con_reg_epoch: 30生成器損失包含多個分量風格一致性lambda_sty、循環(huán)一致性lambda_cyc、域風格分類lambda_ds、歸一化約束lambda_norm、ASR 輔助內(nèi)容保持lambda_asr: 10權(quán)重最高、基頻保持lambda_f0、基頻風格化lambda_f0_sty以及對抗損失lambda_adv與對抗分類lambda_adv_cls。判別器側(cè)則包含梯度懲罰lambda_reg、分類lambda_adv_cls與條件回歸lambda_con_reg。adv_cls_epoch與con_reg_epoch控制對應損失項在訓練第幾個 epoch 后才啟用屬于課程式訓練curriculum設(shè)計。4.4 數(shù)據(jù)加載設(shè)置DATA LOADER SETTINGbatch_size: 5 num_workers: 2 max_mel_length: 192訓練時每批 5 條樣本、2 個 DataLoader workermax_mel_length: 192同時用于 collate 時的長度對齊train.py 將它與latent_dim一起傳給build_starganv2_vc_collate_fn以及 JDCNet 的seq_len192train.py。4.5 優(yōu)化器與訓練設(shè)置OPTIMIZER TRAINING SETTING生成器、風格編碼器、映射網(wǎng)絡(luò)、判別器四套組件各自獨立配置 AdamW 與 OneCycleLR 調(diào)度器組件峰值學習率調(diào)度器 total_stepsgenerator2.0e-4200000style_encoder2.0e-4200000mapping_network2.0e-6200000discriminator2.0e-4200000四者統(tǒng)一使用beta1: 0.0, beta2: 0.99, weight_decay: 1.0e-4, epsilon: 1.0e-9映射網(wǎng)絡(luò)的峰值學習率顯著更低2.0e-6這是 StarGANv2 系列訓練中常見的穩(wěn)定性考量。訓練側(cè)總覽參數(shù)為max_epoch: 150、num_snapshots: 5保留最近 5 個快照、seed: 1。五、推理鏈路源碼解析一次轉(zhuǎn)換背后發(fā)生了什么推理入口 vc.py 的執(zhí)行流程可以拆解為四步第 1 步加載預訓練模型。在main()中通過download_and_decompress(StarGANv2VC_source[model_version], MODEL_HOME)自動下載并解壓模型包get_models()vc.py L90-L136從中加載五件套JDCNet基頻提取器jdcnet.pdzPWGGenerator聲碼器Vocoder/目錄下的 config.yml 與 checkpointGenerator、MappingNetwork、StyleEncoderstarganv2vc.pdz中的三個參數(shù)子集三者結(jié)構(gòu)均來自 conf/default.yaml。所有模型加載后立即eval()進入推理模式。第 2 步計算參考說話人風格。compute_style()vc.py L68-L87遍歷預置參考說話人加載其 24k 參考音頻用librosa.effects.trim(top_db30)去除靜音提取 Mel 后送入style_encoder得到風格向量ref。這正體現(xiàn)了 StarGANv2-VC任意參考語音即風格的設(shè)計——只需一段目標說話人的語音就能把源語音轉(zhuǎn)換成其音色。第 3 步內(nèi)容與基頻提取。源音頻加載24k后經(jīng)preprocess()得到歸一化 Melmean-4, std4由F0_model.get_feature_GAN()提取基頻特征f0_feat。源碼注釋明確說明ASR 與 F0 模型共用同一套數(shù)據(jù)預處理因此特征提取參數(shù)必須與原版保持一致否則無法復用預訓練輔助模型。第 4 步生成與聲碼。將源 Mel、參考風格、基頻特征一并送入generator(source.unsqueeze(1), ref, F0f0_feat)得到轉(zhuǎn)換后的 Mel再經(jīng)vocoder.inference(c)還原為 24k 波形并寫盤。源碼中也保留了一段注釋掉的調(diào)試邏輯說明dump/train/norm下的歸一化 Mel 特征可直接喂給 vocoder 解碼驗證了預處理產(chǎn)物的可用性。六、從零訓練數(shù)據(jù)預處理與訓練全流程如果要在自有數(shù)據(jù)上訓練 StarGANv2-VC可執(zhí)行完整的 stage 0/1 流水線./run.sh --stage 0 --stop-stage 1 --gpus 0,16.1 stage 0特征提取與歸一化local/preprocess.sh 分兩個子階段# 特征提取VCTK 語料 - dump/ 下的 raw 特征 python3 ${BIN_DIR}/preprocess.py \ --datasetvctk \ --rootdir~/datasets/VCTK-Corpus-0.92/ \ --dumpdirdump \ --config${config_path} \ --num-cpu20 # 歸一化raw - norm并生成說話人字典 python3 ${BIN_DIR}/normalize.py \ --metadatadump/train/raw/metadata.jsonl \ --dumpdirdump/train/norm \ --speaker-dictdump/speaker_id_map.txt--rootdir指向 VCTK-Corpus-0.92 數(shù)據(jù)集目錄需預先下載并解壓normalize.py對 train/dev/test 三個子集分別執(zhí)行產(chǎn)出各子集的norm特征與全局speaker_id_map.txt說話人編號映射訓練時據(jù)此動態(tài)設(shè)置num_domains。6.2 stage 1多組件聯(lián)合訓練local/train.sh 調(diào)用python3 ${BIN_DIR}/train.py \ --train-metadatadump/train/norm/metadata.jsonl \ --dev-metadatadump/dev/norm/metadata.jsonl \ --config${config_path} \ --output-dir${train_output_path} \ --ngpu1 \ --speaker-dictdump/speaker_id_map.txt訓練腳本 train.py 的要點數(shù)據(jù)管道StarGANv2VCDataTable讀取 jsonl 元數(shù)據(jù)build_starganv2_vc_collate_fn負責批內(nèi) Mel 長度對齊與隨機風格采樣latent_dim維度輔助模型凍結(jié)JDCNet 與 ASRCNN 加載官方預訓練權(quán)重后保持eval()只參與損失計算不參與梯度更新分別提供基頻監(jiān)督與內(nèi)容保持監(jiān)督多卡支持--ngpu大于 1 時通過dist.spawn啟動多進程訓練DataParallel包裝生成器與判別器訓練閉環(huán)StarGANv2VCUpdater承擔單步更新四組優(yōu)化器分別更新生成器、風格編碼器、映射網(wǎng)絡(luò)、判別器StarGANv2VCEvaluator在驗證集上評估配合VisualDL可視化與Snapshot快照保留最近num_snapshots個 checkpoint訓練結(jié)束后權(quán)重落在exp/default/checkpoints/下。七、結(jié)語examples/vctk/vc3提供了一個結(jié)構(gòu)清晰、可直接運行的 StarGANv2-VC 語音轉(zhuǎn)換示例推理場景下只需下載測試音頻并執(zhí)行./run.sh --stage 2 --stop-stage 2 --gpus 0即可一次得到同一內(nèi)容在 10 個說話人音色下的轉(zhuǎn)換結(jié)果訓練場景下conf/default.yaml將特征提取、四組件模型結(jié)構(gòu)、多目標損失與四套優(yōu)化器配置集中管理配合 preprocess.py、normalize.py、train.py 三個入口即可完成完整訓練。若要深入閱讀模型實現(xiàn)可繼續(xù)查看 starganv2_vc.py網(wǎng)絡(luò)結(jié)構(gòu)與 starganv2_vc_updater.py損失與參數(shù)更新邏輯。贊分享人工智能語音音頻NLP媒體生成【免費下載鏈接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.項目地址https://gitcode.com/paddlepaddle/PaddleSpeech點擊查看免費下載相關(guān)推薦PaddleSpeech StarGANv2 語音轉(zhuǎn)換vc3實戰(zhàn)從測試腳本到推理鏈路的完整剖析PaddleSpeech StarGANv2 語音轉(zhuǎn)換vc3實戰(zhàn)從測試腳本到推理鏈路的完整剖析 本文圍繞 PaddleSpeech 中 examples/人工智能語音音頻PaddleSpeech ERNIE-SAT 中英跨語言多說話人語音合成AISHELL-3 VCTK 訓練與推理完整實踐PaddleSpeech ERNIE SAT 中英跨語言多說話人語音合成AISHELL 3 VCTK 訓練與推理完整實踐 本文圍繞 PaddleSpeec人工智能語音音頻NLP媒體生成PaddleSpeech WaveRNN 聲碼器實戰(zhàn)基于 CSMSC 中文標準語音庫的完整訓練與推理指南PaddleSpeech WaveRNN 聲碼器實戰(zhàn)基于 CSMSC 中文標準語音庫的完整訓練與推理指南 導讀 本文以 PaddleSpeech 倉庫中的 e人工智能語音音頻上一篇ComfyUI-Impact-Pack預覽橋接功能從圖像ID映射表故障看分布式狀態(tài)管理挑戰(zhàn)下一篇Poppins字體終極指南免費幾何無襯線字體下載與多語言排版方案創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考