今天要介绍的是训练AI翻唱,使用的是 so-vits-svc ,一个歌声音色转换模型,通过SoftVC内容编码器提取源音频语音特征,与F0同时输入VITS替换原本的文本输入达到歌声转换的效果。

项目地址:https://github.com/svc-develop-team/so-vits-svc

本文将从 制作数据集,训练模型,推理模型 三个部分来介绍使用方法,最后还会提出一些优化建议可供参考。

制作数据集

我们需要先准备数据集,网上很多各种歌手的训练,我也不知道训练啥,就直接训练一个自己的声音吧,先找一些自己唱的歌,然后【提取出人声】,【将人声分段】

提取人声

分离人声和伴奏有很多方法,我这边推荐几种方式:

ultimatevocalremovergui可直接在电脑安装,但对电脑有一定的要求,达到要求的可以直接下载安装使用:

CleanShot 2023-06-22 at 14.55.40@2x

我这边找了40首歌曲,先直接使用 Ultimate-Vocal-Remover-Colab 来处理

CleanShot 2023-06-22 at 14.47.19@2x

先将colab脚本复制到自己的云端硬盘,然后再来操作

勾选上MountDrive,然后点击运行

CleanShot 2023-06-22 at 14.58.23@2x

CleanShot 2023-06-22 at 15.01.54@2x

CleanShot 2023-06-22 at 15.02.23@2x

允许连接到 Google Drive,UVR 就会安装在 Google Drive 中了,下次就可以直接启动,不用再次下载安装了。

等待一会儿,安装好后,打开文件列表,VocalRemover5-COLAB_arch 就是安装目录了,tracks 文件夹中放入需要分离人声的音频,可以先放一个测试下,测试好参数再将所有文件一起处理。

CleanShot 2023-06-22 at 15.05.05@2x

我这边之前就上传了很多音频了,你可以先上传一个音频到 tracks 文件夹中,

运行 Print a list of tracks and models

CleanShot 2023-06-22 at 15.10.46@2x

我这边尝试处理分离一下 anmiaoyao.mp3 这段音频

然后这里有个小问题,需要在 Inference 前新增这一个语句,然后运行下

!pip install librosa==0.9.1

不然后面处理会报这个错误:

CleanShot 2023-06-22 at 15.17.47@2x

CleanShot 2023-06-22 at 15.08.35@2x

开始处理

Input 中填入要处理的音频文件名,需要带上后缀名,模型我选择一个vocal模型,然后勾选上 isVocal 选项,其它不变,然后点击左上角运行

CleanShot 2023-06-22 at 15.14.50@2x

CleanShot 2023-06-22 at 15.16.09@2x

运行结果如下说明成功:

CleanShot 2023-06-22 at 15.20.19@2x

然后 separated 中就有分离的人声和伴奏了,就可以下载试听了,分离流程就是这样的了。

CleanShot 2023-06-22 at 15.20.50@2x

效果不错的话就可以上传所有要处理的音频到 tracks 文件夹中了,然后再次处理。

input 留空,然后勾选上 convertAll ,就会将 tracks 中所有文件批量处理了,下面还是要勾上 isVocal

CleanShot 2023-06-22 at 15.23.02@2x

然后再次运行,等待批量处理完成,将 separated 文件夹下载到本地,删除所有伴奏音频,只留下人声音频。然后就要开始进行人声音频分段了。

音频分段

直接使用开源框架 audio-slicer: flutydeer/audio-slicer: A simple GUI application that slices audio with silence detection (github.com)

Windows可以直接下载安装包。

Mac电脑需要 pull 项目到本地,下载依赖:

pip install -r requirements.txt

运行:

python slicer-gui.py

将要分割的音频拖入task list中,选择好Output Directory,默认参数第一次处理不用修改,

第一次处理后,按文件大小倒序排列,找出大于20秒的音频(稍微长点也无伤大雅,实在太长可能会导致训练中途甚至预处理就爆显存),再次使用软件处理,调低Minimum Interval 和 Maximum Silence Length,比如分别调到 100 和 500 ,再次运行处理,如果还是大于20秒,大概率是人声训练集本身就很嘈杂,可以直接删掉。

总之,小于20秒的所有人声音频就是我们的训练数据集了,下面就开始训练模型了。

CleanShot 2023-06-26 at 23.37.47@2x

软件的参数含义如下:

Threshold(阈值)

以 dB 表示的 RMS 阈值。所有 RMS 值都低于此阈值的区域将被视为静音。如果音频有噪音,请增加此值。默认值为 -40。

Minimum Length(最小长度)

每个切片音频剪辑所需的最小长度,以毫秒为单位。默认值为 5000。

Minimum Interval(最小间距)

要切片的静音部分的最小长度,以毫秒为单位。如果音频仅包含短暂的中断,请将此值设置得更小。此值越小,此应用程序可能生成的切片音频剪辑就越多。请注意,此值必须小于 min length 且大于 hop size。默认值为 300。

Hop Size(跳跃步长)

每个 RMS 帧的长度,以毫秒为单位。增加此值将提高切片的精度,但会降低处理速度。默认值为 10。

Maximum Silence Length(最大静音长度)

在切片音频周围保持的最大静音长度,以毫秒为单位。根据需要调整此值。请注意,设置此值并不意味着切片音频中的静音部分具有完全给定的长度。如上所述,该算法将搜索要切片的最佳位置。默认值为 1000。

训练模型

将处理好的数据集音频,放入一个文件夹压缩,我处理后的数据集接近800个音频。

CleanShot 2023-07-01 at 21.44.54@2x

打开sovits来训练模型,我这边使用Colab来训练模型,你如果本地有条件也可以本地执行,本地执行文档中也有说明,打开链接:

https://github.com/svc-develop-team/so-vits-svc/blob/4.1-Stable/README_zh_CN.md#%E7%89%B9%E5%BE%81%E6%A3%80%E7%B4%A2

CleanShot 2023-06-22 at 14.33.08@2x

打开colab ipynb后,先复制到自己的云端硬盘,再来操作

CleanShot 2023-06-22 at 14.34.12@2x

然后按步骤一步步执行即可:

Connect to colab runtime and check GPU

直接执行,要使用GPU运行哦

CleanShot 2023-07-01 at 21.49.22@2x

Clone repository and install requirements

克隆项目,安装依赖,直接执行(以后每次执行程序都要运行一下)

Mount google drive and select which directories to sync with google drive

挂载 Google 硬盘,后面要同步项目信息到 Google 硬盘,会有一些授权提示操作要做,全部选允许。(以后每次执行程序都要运行一下)

CleanShot 2023-07-01 at 21.54.32@2x

Get pretrained model(Optional but strongly recommend)

下载预训练底模文件,墙裂建议使用。

从svc-develop-team(待定)或任何其他地方获取Sovits底模

扩散模型引用了Diffusion-SVC的Diffusion Model,底模与Diffusion-SVC的扩散模型底模通用,可以去Diffusion-SVC获取扩散模型的底模

虽然底模一般不会引起什么版权问题,但还是请注意一下,比如事先询问作者,又或者作者在模型描述中明确写明了可行的用途

CleanShot 2023-07-01 at 21.55.36@2x

Dataset preprocessing

数据集处理,先将我们之前数据集压缩包上传到 Google Drive 的 sovits4data 文件夹中,将数据集按照下面的目录格式上传到 dataser_raw 目录中

CleanShot 2023-07-01 at 21.56.56@2x

我们执行下面的解压方法,解压我们的数据集到 dataser_raw 目录

CleanShot 2023-07-01 at 22.12.42@2x

但是,目前不满足文件夹格式要求,我们需要改成下图这样,你也可以在本地按照这种方式弄好了再上传, mi 文件夹官方的定义是 speaker,不同的说话人就用不同的文件夹隔离。

CleanShot 2023-07-01 at 22.15.05@2x

Resample to 44100Hz and mono

重采样至44100Hz单声道,直接运行

Divide filelists and generate config.json

自动划分训练集、验证集,以及自动生成配置文件,直接运行

speech_encoder选择请看:https://github.com/svc-develop-team/so-vits-svc/blob/4.1-Stable/README_zh_CN.md#2-%E8%87%AA%E5%8A%A8%E5%88%92%E5%88%86%E8%AE%AD%E7%BB%83%E9%9B%86%E9%AA%8C%E8%AF%81%E9%9B%86%E4%BB%A5%E5%8F%8A%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6

CleanShot 2023-07-01 at 22.17.10@2x

Generate hubert and f0

生成hubert与f0,直接运行(以后每次执行程序都要运行一下)

f0_predictor拥有四个选择

crepe
dio
pm
harvest

如果训练集过于嘈杂,请使用crepe处理f0

如果省略f0_predictor参数,默认值为dio

尚若需要浅扩散功能(可选),需要增加--use_diff参数,比如

python preprocess_hubert_f0.py --f0_predictor dio --use_diff

执行完以上步骤后 dataset 目录便是预处理完成的数据,可以删除 dataset_raw 文件夹了

CleanShot 2023-07-01 at 22.18.53@2x

Save the preprocessed dataset to google drive

保存预处理的数据到 Google Drive

CleanShot 2023-07-01 at 22.19.28@2x

Unzip preprocessed dataset from google drive directly if you have preprocessed already.

解压数据到当前运行环境。第一次运行不需要执行,主要用于后面再次运行,数据还原使用,就不用再次处理数据。上一步可理解为备份数据,这一步是还原数据。(以后每次执行程序都要运行一下)

CleanShot 2023-07-01 at 22.20.06@2x

主模型训练

CleanShot 2023-07-01 at 22.21.18@2x

配置文件为:configs/config.json,可根据自己的需求修改训练配置

Train cluster model (Optional)

聚类音色泄漏控制。

介绍:聚类方案可以减小音色泄漏,使得模型训练出来更像目标的音色(但其实不是特别明显),但是单纯的聚类方案会降低模型的咬字(会口齿不清)(这个很明显),本模型采用了融合的方式,可以线性控制聚类方案与非聚类方案的占比,也就是可以手动在"像目标音色" 和 "咬字清晰" 之间调整比例,找到合适的折中点

使用聚类前面的已有步骤不用进行任何的变动,只需要额外训练一个聚类模型,虽然效果比较有限,但训练成本也比较低

CleanShot 2023-07-01 at 22.22.14@2x

Train diffusion model (Optional)

训练扩散模型,如果需要浅扩散功能,就需要训练(强烈建议使用)。

CleanShot 2023-07-01 at 22.22.27@2x

模型训练结束后,模型文件保存在logs/44k目录下,扩散模型在logs/44k/diffusion下,我的主模型训练了5万多 epoch。

CleanShot 2023-07-01 at 22.37.27@2x

推理

CleanShot 2023-07-01 at 22.23.29@2x

直接执行

开始推理

上传人声音频(人声音频怎么提取看本文后面使用UVR部分)到 sovits4data/raw/ 文件夹,开始推理

CleanShot 2023-07-01 at 22.24.13@2x

推理完成就会直接下载了。将推理出的原生和伴奏一起听一下效果如何。

关于模型训练到什么程度就OK

我自己感觉主要靠听,我训练到10000步的时候我感觉就能听了,到40000步的模型,我个人感觉比50000步的效果要好。

关于怎么提取人声效果比较好

提取人声首推UVR:Anjok07/ultimatevocalremovergui: GUI for a Vocal Remover that uses Deep Neural Networks. (github.com)

UVR有庞大的模型库,在 Download Center 中下载了,具体的使用方法不详细赘述,有感兴趣的可以自行检索合适的模型。

CleanShot 2023-07-02 at 13.24.19@2x

简单单一模型可以下载使用 3_HP-Vocal_UVR 模型,选好音频和输出目录,直接 Start Processing 即可,结果就会输出人声和伴奏两个音频文件了。

CleanShot 2023-07-02 at 13.27.18@2x

还可以多个模型一起结合使用,选择 Ensemble mode 合奏模式

我这里推荐的参数,大家也可以自行尝试,有更好的也欢迎提出:

模型(需要提前下载好):

  • MDX-Net: Kim Vocal 1
  • MDX-Net: UVR-MDX-NET Inst 3
  • Demucs: V4 I htdemucs_ft

分离模式:Vocals/Instrumental

合并算法:Min/Max 或者 Min/Min

CleanShot 2023-07-02 at 13.31.21@2x

你会发现提取出的声音还是会有和声,但是和声对模型推理有很大的影响,我的方案是,将分离出的人声使用RipX软件,来进行修正,删除和声部分,再去推理效果就会好很多。

CleanShot 2023-07-01 at 22.54.09@2x

效果演示

参考资料

so-vits-svc/README_zh_CN.md at 4.1-Stable · svc-develop-team/so-vits-svc · GitHub

Sovits4.0教程-AI翻唱声音模型训练,Colab云端免费GPU

【教程】如何优雅的分离 修复人声

非特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:http://www.notemi.cn/sovits4-training-ai-cover.html

添加新评论

icon_question.pngicon_razz.pngicon_sad.pngicon_evil.pngicon_exclaim.pngicon_smile.pngicon_redface.pngicon_biggrin.pngicon_surprised.pngicon_eek.pngicon_confused.pngicon_cool.pngicon_lol.pngicon_mad.pngicon_twisted.pngicon_rolleyes.pngicon_wink.pngicon_idea.pngicon_arrow.pngicon_neutral.pngicon_cry.pngicon_mrgreen.png

25 + 12 =