banner
hughie

hughie

热爱技术的小菜鸟, 记录一下所学所感

vc-lm-any2one的音色轉換器

前言#

本文簡單記錄介紹一下 vc-lm。

vc-lm 是一個音色轉換器,可以將任何人的聲音轉換成成千上萬種不同的聲音。


正文#

一、什麼是 vc-lm#

該專案是一個音色轉換器,可以將任何人的聲音轉換成成千上萬種不同的聲音。它使用 encodec 將音頻離散化成 tokens,並在 tokens 上構建 transformer 語言模型。該專案包含兩個階段的模型:AR 模型和 NAR 模型。可以使用自監督的方式進行訓練,生成大量 one-to-any 的平行數據,這些平行數據可以被用來訓練 Any-to-One 的變聲模型。訓練目標人數據僅需 10 分鐘即可達到很好的效果。

二、vc-lm 算法架構#

參考論文 Vall-E,使用 encodec 算法,將音頻離散化成 tokens,在 tokens 上構建 transformer 語言模型。該專案包含兩階段模型 AR 模型和 NAR 模型。

三、vc-lm 使用與訓練#

vc-lm 的訓練分為兩步,先訓練 one2any 的生成數據,再利用這些數據訓練的模型訓練 any2one 的轉換模型。

預訓練

參考tools/construct_wavs_file.py將 wav 源文件處理成長度 10~24s 的文件;

參考tools/construct_dataset.py構造數據集;

將 whisper 中的 encoder 模塊提取出來使用python tools/extract_whisper_encoder_model.py --input_model=../whisper/medium.pt --output_model=../whisper-encoder/medium-encoder.pt

在配置文件裡需要調整好相關存儲路徑,再分別訓練 AR、NAR 模型:

python run.py fit --config configs/ar_model.yaml
python run.py fit --config configs/nar_model.yaml

訓練好後推理測試:

from vc_lm.vc_engine import VCEngine
engine = VCEngine('/pathto/vc-models/ar.ckpt',
                  '/pathto/vc-models/nar.ckpt',
                  '../configs/ar_model.json',
                  '../configs/nar_model.json')
output_wav = engine.process_audio(content_wav,style_wav, max_style_len=3, use_ar=True)           

any2one 訓練

構造目標數據集,與上面的方式一樣;

構造 Any-to-one 平行數據:python tools.construct_parallel_dataset.py

加載預訓練模型,在目標數據集上訓練:

python run.py fit --config configs/finetune_ar_model.yaml
python run.py fit --config configs/finetune_nar_model.yaml

推理測試:

from vc_lm.vc_engine import VCEngine
engine = VCEngine('/pathto/jr-ar.ckpt',
                  '/pathto/jr-nar.ckpt',
                  '../configs/ar_model.json',
                  '../configs/nar_model.json')
output_wav = engine.process_audio(content_wav,style_wav, max_style_len=3, use_ar=True)           

四、總結#

官方專案上有預訓練好的模型可以下載下來直接試試。

需要注意的是這專案跟 TTS 是有區別的,vc-lm 是音頻的音色轉換,可以使用少量目標數據微調得到較好的轉換效果。


最後#

參考文章:

官方專案

VALL-E

encodec


声明#

本文僅作為個人學習記錄。

本文與HBlog保持同步。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。