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保持同步。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。