【人工智能】保姆级教学so-vits-svc快速生成AI歌曲
作者: 来源:稀土掘金链接:https://juejin.cn/post/7196324326482968633
## 前言
本文主要讲述如何应用so-vits-svc快速生成AI歌曲,仓库地址:(https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Finnnky%2Fso-vits-svc "https://github.com/innnky/so-vits-svc")
主要通过autoDL平台租借GPU进行AI模型训练,邀请码地址:[www.autodl.com/register?co…](https://link.juejin.cn?target=https%3A%2F%2Fwww.autodl.com%2Fregister%3Fcode%3D179a6d82-4e5b-486e-8b1f-ec3afa54ed3a "https://www.autodl.com/register?code=179a6d82-4e5b-486e-8b1f-ec3afa54ed3a")
## 搭建训练环境
#### 本地搭建(小白不建议)
##### 硬件需求
N卡,建议GPU达到GTX 3080显存8G以上。A卡应该是跑不了,只能通过CPU去跑了(AMD,no!)
##### 本地环境搭建参考
python = 3.8.10
pip = 22.3.1
pytorch = 1.13
##### so-vits-svc依赖安装
克隆代码到本地:
!(data/attachment/forum/202307/01/134852oith97z842c58m8i.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
#### autoDL搭建(不用配环境)
##### 创建so-vits-svc实例
注册账号,右上角进入"控制台",选择左侧栏“容器实例”,选择“租用新实例”,按照自己需求租用GPU。建议A4000,经济实惠
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cffb5bb8fa9b4b9babcf3a457e4bd8d8~tplv-k3u1fbpfcp-zoom-in-crop-mark:3024:0:0:0.awebp?)
镜像选择"算法镜像",搜索"so-vits-svc",这是已经配好环境的镜像,可无需担心环境配置问题
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d3eff23e812c422e8555d0b68d107c23~tplv-k3u1fbpfcp-zoom-in-crop-mark:3024:0:0:0.awebp?)
创建成功后,选择"开机"
##### vscode远程连接
本地安装好vscode
vscode左侧栏"拓展"安装"Remote - SSH"
!(https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/138e6b9e9c1c4b4f885a1addef5a8b69~tplv-k3u1fbpfcp-zoom-in-crop-mark:3024:0:0:0.awebp?)
ctrl+shift+p调出用于执行命令的输入框
选择"Remote - SSH: Add new SSH Host..."
!(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/191366e26ea7466fb034dd5bf38a975e~tplv-k3u1fbpfcp-zoom-in-crop-mark:3024:0:0:0.awebp?)
复制刚刚新建的容器实例的ssh登录指令,到vscode的命令输入框内,复制粘贴ssh链接密码,这样我们就建立好远程连接
!(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/16960b0b052149b2bb1a939d2141b843~tplv-k3u1fbpfcp-zoom-in-crop-mark:3024:0:0:0.awebp?)
选择"打开文件夹",选择"autodl-tmp"文件夹
!(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d714a34f983b4e01a798161375675361~tplv-k3u1fbpfcp-zoom-in-crop-mark:3024:0:0:0.awebp?)
克隆so-vits-svc到本地
!(data/attachment/forum/202307/01/135010xjpmgvmrgfma6z6t.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
注意:其实autoDL上的so-vits-svc镜像在根目录里已经有一个so-vits-svc的文件夹,但是那份代码是48k分支的,我们用32k,所以可以直接无视那份代码。所以这里我选择了在读写相对较快的autodl-tmp数据盘里,重新克隆so-vits-svc代码,以此为项目根目录进行后面的模型训练和推理。
##### JupyterLab传输文件
autoDL控制台容器页面还有一个文件管理工具:JupyterLab,通过这个工具,我们可以自由远程传输训练所需要的训练集和其他文件
参考文档:[www.autodl.com/docs/jupyte…](https://link.juejin.cn?target=https%3A%2F%2Fwww.autodl.com%2Fdocs%2Fjupyterlab%2F "https://www.autodl.com/docs/jupyterlab/")
## 训练准备工作
#### 预下载模型文件
* soft vc hubert:hubert-soft-0d54a1f4.pt
* 放在hubert目录下
* 预训练底模文件:G_0.pth与D_0.pth
* 放在logs/32k 目录下
* 预训练底模为必选项,因为据测试从零开始训练有概率不收敛,同时底模也能加快训练速度
* 预训练底模训练数据集包含云灏 即霜 辉宇·星AI 派蒙 绫地宁宁,覆盖男女生常见音域,可以认为是相对通用的底模
* 底模删除了optimizer speaker_embedding 等无关权重, 只可以用于初始化训练,无法用于推理
* 该底模和48khz底模通用
**这3个文件也可以手动通过JupyterLab上传到对应位置**
!(data/attachment/forum/202307/01/135128pyt7ukniyayudtz4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
#### 准备数据集
##### 什么是数据集
**数据集是语音文件集合。比如我想生成的AI能用周董的声音唱《富士山下》,那么我们现在就需要准备周董的语音数据,让AI"学习"**
##### 数据集要求
**格式为wav**
**需要至少600条以上的数据集**
**每条语音时常最好在5-15s之间**
您所提供的数据集应当尽量无杂音(即没有BGM、混响或者和声),如果您无法找到这样的数据,那么您所训练出来的模型会拥有包括但不限于:自带混响、自带鼓点、自带底噪、输出音频糊成一团等“额外功能”,因此您应当尽力提高音频的质量
一般来说,数据集"更重质,而不是量",好的数据集能够达到更好的效果。如果数据集是像游戏内解包的角色语音无损音源,那么效果更好
##### 上传数据集
通过JupyterLab,通过文件上传将数据集按如下结构放入dataset_raw文件夹
**即使只有一个说话人,也必须将数据集放入 speaker0 !**
!(data/attachment/forum/202307/01/135223t4pguup4dd1ounbd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
当然,speaker0只是一个替代名,一个speaker0代表一种人声,你可以选择不同的文件夹名称,比如我这里的nahida:
!(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d7ae3531dd834dc09fb8f5fcdfdbecff~tplv-k3u1fbpfcp-zoom-in-crop-mark:3024:0:0:0.awebp?)
#### 数据预处理
!(data/attachment/forum/202307/01/135335lbpgywfeff0wg7cy.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
**注意**
程序会在so-vits-svc/configs目录下生成config.json配置文件,内部包含训练的所有信息
自动生成的配置文件中,说话人数量n_speakers会自动按照数据集中的人数而定
为了给之后添加说话人留下一定空间,n_speakers自动设置为 当前数据集人数乘2
如果想多留一些空位可以在此步骤后 自行修改生成的config.json中n_speakers数量
一旦模型开始训练后此项不可再更改
**建议**
将config.json下载下来修改
按照训练集大小修改"epochs"参数,如1000条语音的参考epoch大约是400
根据显存大小调节"batch_size"。默认值12推荐16gb以上显存的显卡运行。若显存不足可尝试调低此参数
修改batch_size应当同步修改"learning_rate" 它应当与batch_size成正比
其他参数不建议修改
**将修改后的config覆盖原来的config**
#### 装载预训练模型
!(data/attachment/forum/202307/01/135436bzdp11g7q5h8p14h.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
这一步是必须的,利用预训练模型可以加快训练速度 防止不拟合
初次训练前已经预先安装了预训练模型,若后续要重新训练
请手动清空so-vits-svc/logs/32k文件夹
将pre_train_model目录下的所有文件复制到so-vits-svc/logs/32k文件夹中
### 开始训练AI
#### 为什么训练AI
**训练AI的目的是得出模型,比如我想通过周董音色唱粤语歌,这一步就是为了得到"周董的歌喉"**
!(data/attachment/forum/202307/01/135515y5578zs72aagv4zr.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
#### **训练注意点**
**训练前检查log/32k下是否有G_0.pth和D_0.pth两个底模文件,底模训练数据集包含云灏 即霜 辉宇·星AI 派蒙 绫地宁宁,覆盖男女生常见音域,提高训练效果"**
训练日志保存在so-vits-svc/logs/32k下的train.log中
训练默认使用单精度进行 使用半精度效果未知
单精算力的 27.77 TFLOPS的A5000显卡 在29条语音的测试训练集下每epoch耗时20秒 可估算得每处理一条条语音需要进行17TFLOP
A5000平均每小时处理5220次语音
请根据自己的训练集大小和epoch自行估算耗时,充值足够的余额,以免训练中断
#### **训练提示**
长时间训练请开启守护进程 教程参考[www.autodl.com/docs/daemon…](https://link.juejin.cn?target=https%3A%2F%2Fwww.autodl.com%2Fdocs%2Fdaemon%2F "https://www.autodl.com/docs/daemon/")
**训练完成后,可见终端显示模型已经保存的字样**
**模型会保存在so-vits-svc/logs/32k/h**
**如下图G_0.pth和D_0.pth等等即为训练完成的模型**
!(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e059e86b0fd74501859825801b67bb94~tplv-k3u1fbpfcp-zoom-in-crop-mark:3024:0:0:0.awebp?)
如果训练完成后,想要继续增量训练, 修改 configs/config.json这个配置文件中的epoch,再次执行 开始训练 即可
不过不能中途添加删改数据集
### 推理
#### 什么是推理
推理就是使用训练出来的模型,向模型输入需要的内容,经模型处理后输出内容。比如,我现在已经获得了”周董的歌喉“,那么我需要《富士山下》的bgm+歌词,就能唱出”周董版的《富士山下》“
#### 上传推理文件
通过JupyterLab,将需要推理的文件上传到/so-vits-svc-32k/raw/,比如我这里上传了yhx.wav
!(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/364d1d44a0c546feb1a89dc8d09b4e14~tplv-k3u1fbpfcp-zoom-in-crop-mark:3024:0:0:0.awebp?)
#### 配置推理参数
可以使用inference.ipynb推理。也可以通过inference_main.py 推理
我这里使用inference_main.py
!(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e45e8dd3b7d84907b81685d9a515eab9~tplv-k3u1fbpfcp-zoom-in-crop-mark:3024:0:0:0.awebp?)
如图,需要配置的内容有:
model_path:模型位置。可以在/logs/32k/文件夹里选择D_0.pth到D_6000.pth 或者 G_0.pth到G_6000.pth,后面的数字越大,则是越后导出的模型,模型迭代次数越多( **建议使用G开头的,选择效果好的** )
clean_name:修改为要推理转换的wav文件名 文件存放在raw文件夹
trans:音高
spk_list:每次同时合成多语者音色。在数据集存放的文件夹/dataset_raw/内,数据集存放在speaker0文件夹训练音色的就填写speaker0
!(data/attachment/forum/202307/01/135624aq33lpyqtptd3ldd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
### 如果重新训练
每次重新训练新的模型 都需要清空旧的训练集和模型,请手动删除:
so-vits-svc/logs/32k
so-vits-svc/dataset_raw
so-vits-svc/configs
so-vits-svc/dataset
中的所有文件,并重新上传数据集
## 参考资料
so-vits-svc项目:(https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Finnnky%2Fso-vits-svc "https://github.com/innnky/so-vits-svc")
B站炼丹师**MasterSatori**的soVits3.0教程(注意他选择的是48k分支,而不是本教程的32k分支)(https://link.juejin.cn?target=https%3A%2F%2Fspace.bilibili.com%2F8407182%2Farticle "https://space.bilibili.com/8407182/article")
## 后话
感谢作者开源了这么好玩的AI项目,也感谢这么多大佬在社区提供教程,祝各位炼丹师玩的开心~
so-vits-svc 感谢大佬分享 谢谢谢谢大佬分享的教程 感谢大佬这么详细的教程!
但我有一个问题始终不明白,都说这几年AI大爆发,但为什么使用AI做点东西这么难:L:L。可不可以让使用AI更AI一点:lol 666666666666
页:
[1]