前言#
本文简单记录介绍一下 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 是音频的音色转换,可以使用少量目标数据微调得到较好的转换效果。
最后#
参考文章:
声明#
本文仅作为个人学习记录。
本文与HBlog保持同步。