Amadeus复刻计划(AI拟声篇 二 VITS的训练)
前言:
前文提到,笔者之前使用so-vits-svc模型,从原游戏中提取角色语音2906条进行训练,跑了10400个step,效果较为良好。但可惜的是so-vits是用于音色转换的模型,因此需要原始音频作为输入,使用不是很方便。辗转考虑后,笔者决定从原始的VITS模型入手,希望达到文本转语音的效果。
简单介绍:
目前VITS主要有两个仓库,一个是该论文提出时原作者开源放出的仓库(最近更新在两年前),一个是疑似国人fork维护的一个快速微调版本(ps:国内的二次元浓度很高啊),笔者使用的是后者提供的脚本参考与预训练模型。
二者的github链接会放在文章底部。
训练准备:
1. 前文提到的2906条角色语音数据(不过据colab文件中所说样本少于100条也有一定效果,实在找不到音频数据的角色也可以试试)
2. GTX 3090显卡(租赁,原则上不少于8G显存的N卡即可)
3. 可以访问外网的设备
开始训练:
由于AutoDl中提供的vits镜像问题很大,因此本文基本上是根据colab笔记及源代码训练的,基本上可以看作不需要前提条件。不过因为是在真实linus系统上训练的,其中与colab的训练有些微不同需要注意。
第一种方式:直接使用官网colab进行训练(链接在文尾),基本上不需要考虑太多,上传完数据集就可以直接训练了,该笔记的拥有者已经将大部分脚本封装起来可以实现打开即用,但是colab使用的是Tesla T4,虽然显存很大(16G),但训练速度还是比较慢,而且免费用户无法后台训练,训练时间也有限制。笔者如此多的数据量,一天的免费时间是无法训练完成的,因此采用了第二种方法。
第二种方法:即租赁一个带GPU资源的服务器,笔者使用的AutoDl(不太建议,要抢GPU,但胜在便宜),租赁了3090的服务器,准备开始训练。
具体流程(因为是从零开始的所以有些步骤可以跳过):
1. 将项目源文件clone下来,并安装好可能需要使用的python库(原文使用的python3.8)
2. 进入项目文件夹并安装所需依赖,但笔者不建议直接安装该requirements.txt,因为有些库可能很难安装,而报错了又不知道究竟是哪个库没安装上(点明批评pyopenjtalk)
3. 2中方法可能难以定位错误,因此笔者建议手动打开requirements文件,一行一行的安装依赖库(虽然有些麻烦,但胜在保险)
ps:其中的torch, torchvision,torchaudio版本不一定要保持一致,因为他们与cuda版本相关,安装时无须指定版本号
4. 创建一些后面脚本需要用到的文件夹并将辅助训练集下载下来.
5. 下载预训练模型及config文件(中日双语模型,更多选择请在colab笔记中寻找)
6. 上传角色音频(wav格式),将其放置在如下路径,其中角色名表示你要训练的角色,尽量使用英文命名
7. 音频去噪?colab中没有提到,但源码中的写的是仅通过自动方式上传的长视频、长音频(存储在raw_audio文件夹的)才会被去噪,因此手动上传至custom_character_voice/文件夹的并不会(怪不得感觉没什么变化……)
8. 调用whisper对音频进行标注,这个脚本做了两件事,一件是分割(对长音频)并将音频名称改为process_*.wav的格式,一件是使用whisper对音频进行标注,并保存音频与标注的对应关系在short_character_anno.txt文件中,格式见下,由文件路径+角色名+语种+标注组成
9.重采样
10. 辅助样本的添加与否
4中提到预先下载好了辅助训练集,该数据集包括143名角色的1092条已标注音频,官方的解释是“辅助训练数据是从预训练的大数据集抽样得到的,作用在于防止模型在标注不准确的数据上形成错误映射。”不过笔者的考虑是,该辅助训练集平均下来一个人只有10条不到的音频,大量的角色混合训练冲淡了音色的影响,如果你的角色数据在一百条左右,既不至于数据量太少无法训练,又不会因为其他数据的添加导致音色变形,此时建议使用。如果音频过少就不建议了,可能会导致训练出来的音色是底模的音色(未亲身尝试,如有相关经验的请不吝赐教)
11. 更改训练配置,在如下文件路径中修改batch_size与learning_rate以及多少步保存一次模型等设置,不了解的建议直接默认配置
12. 开始训练
{Maximum_epochs}视情况改为你所需的最大epoch数,个人建议大数据量的话在一千以上,笔者就是训练了一千多个轮次(几乎30小时),但是效果很好,没有过拟合的现象(据说生成式模型很难过拟合?)。
ps:原项目的VITS配置中默认写的是10000个epoch,不确定是保证其训练过程中不会停止还是真的这个数量质量会更好,笔者倾向于后者。
13. 收尾工作
接下来就是等待训练完成,训练过程中的各个loss与历史模型会保存在OUTPUT_MODE0L/文件夹,可以使用tensorboard查看,或直接用记事本打开train.log查看输出日志
写在后面:
原本打算一口气写完训练+部署的,但训练部分实在太长了,而且linux上部署也并不是一个很简单的事情,因此还是放在之后写吧,windows上的部署可以直接下载项目中的release,不过可惜的是该版本仅支持cpu推理,效果会慢一些(不过也更具普遍性?笑)
参考链接:
交流群:
723240586