Amadeus复刻计划(AI拟声篇 一 So-vits-svc的训练)
目前主流的AI合成声音模型有三种:
VITS: 最早出现的基于GAN的网络模型,用于文字转语音,但是想要提升合成质量需要手动对数据集进行标注,并且很难跨语种,如使用日语训练集进行训练的模型,无法使用中文输入进行推理
【资料图】
So-vits-svc:据说是国人根据的VITS和soft-vc创建的开源模型,版本迭代到了4.0,其用于“AI换声”,可理解为柯南的蝴蝶结变声器,由于其仅学习声色特征,可用于跨语种(当然相似度肯定不如原语种直接换声)
ps:由于其拟声特性,许多人使用其进行歌声合成,但是考虑到必须有干声素材作为输入,灵活性并不高,之后笔者打算结合xstudio等软件作为输入尝试下调教
仓库地址:https://github.com/svc-develop-team/so-vits-svc
diffsinger:基于diffsion扩散模型实现的歌声合成,扩散模型也是Stable diffusion这一AI绘画模型所使用的,不过这一模型最大的问题就是很吃算力资源,文档中提到训练时需要准备不小于20G显存的显卡,因此笔者暂时放弃该模型。不过据说稳定性很高,有爱好者尝试后可以在评论区交流交流。
仓库地址:https://github.com/MoonInTheRiver/DiffSinger
笔者近些天折腾了下so-vits-svc的训练,以下是基本流程,希望能给后来者以借鉴
数据准备:
笔者从命运石之门(stein;gate)游戏中提取牧濑红莉栖角色语音2906条,将提取出的ogg格式语音转化为wav格式,并将其放在cristina文件夹下待用(理论上来说应该手动筛选掉时长过短或无意义的音频,但数据量过大,笔者并未人工处理)
ps:感谢大佬的开源项目用于解包游戏文件:https://github.com/rdavisau/sg-unpack
模型准备:
本人使用的是B站大佬的整合包,其打包了整个python环境与预训练模型,加入了几个简单的bat脚本,操作较为方便,有一定编程基础且不懒的可以直接通过上述仓库clone
视频链接:https://www.bilibili.com/video/BV1H24y187Ko
3. 需要了解的模型文件结构:
其中Cristina文件夹即先前整理过的放置角色语音的文件夹,直接放在dataset_raw文件夹下即可,logs/44k文件夹下存储了训练后的权重模型,其中默认放置了D_0,G_0作为预训练模型,config.json中决定了训练该如何进行,其中参数的意义在下文单独介绍
3.5.config.json的参数意义
大部分参数不需要去动他,除非你深刻了解自己要做什么,可以动的参数:
seed:初始化随机种子,如果训练效果不好,可以更改该值再次训练,或许会好些?不过一次完整的训练过程中不应改动该值
epochs:总共训练的轮次,一般设置为10000确保其不会停止,请记住,并不一定训练轮次越多,效果越好
learing_rate:学习步长,设置时尽量与batch_size成反比,如batch_size->2*batch_size,learing_rate->0.5*learning_rate
batch_size:其值越大训练越快,也越占显存,根据自己电脑显存设置,记得同步更改learning_rate
keep_ckpts: 最大保存模型数量,设置为0表示保存所有模型,一个模型大约500M,请根据自己硬盘容量进行设置
4. 点击数据预处理.bat或使用官方代码
5. 开始训练即可
6.检测训练效果
初级:直接从logs/44k中取出模型进行推理,人耳判别好坏
中级:训练过程中会打印每个epoch所花费的时间,以及相关loss数值,可以一般化的了解
高级:使用
然后在6006端口获取可视化数据
7.补充下各loss的意义
写在最后:
笔者使用租赁的3090,设置batch_size为12,跑上述2906个语音数据,大概3分钟一个epoch,在跑了一百多个epoch,步长为10400后效果较为理想。
并且先前笔者使用100个语音数据在个人电脑上(2060)简单跑了3000步左右(epoch次数忘了……),已经基本可以还原音色(或者是可以听出来是谁了),感觉模型质量还不错,鼓励大家尝试
ps: 对于命运石之门角色音线合成有兴趣的欢迎加群交流,群内已打包上传cris的音频数据集,桶子的声音也很有辨识度哇(笑)
交流群:
723240586