找回密码
 立即注册
查看: 1054|回复: 5

[教程] 【人工智能】保姆级教学so-vits-svc快速生成AI歌曲

[复制链接]

61

主题

-8

回帖

195

积分

注册会员

积分
195
发表于 2023-7-1 13:59:00 | 显示全部楼层 |阅读模式

作者:[Jorrym] 来源:稀土掘金

链接:https://juejin.cn/post/7196324326482968633

前言

本文主要讲述如何应用so-vits-svc快速生成AI歌曲,仓库地址:github.com/innnky/so-v…

主要通过autoDL平台租借GPU进行AI模型训练,邀请码地址:[www.autodl.com/register?co](www.autodl.com/register?co)…

搭建训练环境

本地搭建(小白不建议)

硬件需求

N卡,建议GPU达到GTX 3080显存8G以上。A卡应该是跑不了,只能通过CPU去跑了(AMD,no!)

本地环境搭建参考

python = 3.8.10

pip = 22.3.1

pytorch = 1.13

so-vits-svc依赖安装

克隆代码到本地:

image.png

autoDL搭建(不用配环境)

创建so-vits-svc实例

注册账号,右上角进入"控制台",选择左侧栏“容器实例”,选择“租用新实例”,按照自己需求租用GPU。建议A4000,经济实惠

1.jpg

镜像选择"算法镜像",搜索"so-vits-svc",这是已经配好环境的镜像,可无需担心环境配置问题

2.jpg

创建成功后,选择"开机"

vscode远程连接

本地安装好vscode

vscode左侧栏"拓展"安装"Remote - SSH"

5.jpg

ctrl+shift+p调出用于执行命令的输入框

选择"Remote - SSH: Add new SSH Host..."

3.jpg

复制刚刚新建的容器实例的ssh登录指令,到vscode的命令输入框内,复制粘贴ssh链接密码,这样我们就建立好远程连接

4.jpg

选择"打开文件夹",选择"autodl-tmp"文件夹

6.jpg

克隆so-vits-svc到本地

image.png

注意:其实autoDL上的so-vits-svc镜像在根目录里已经有一个so-vits-svc的文件夹,但是那份代码是48k分支的,我们用32k,所以可以直接无视那份代码。所以这里我选择了在读写相对较快的autodl-tmp数据盘里,重新克隆so-vits-svc代码,以此为项目根目录进行后面的模型训练和推理。

JupyterLab传输文件

autoDL控制台容器页面还有一个文件管理工具:JupyterLab,通过这个工具,我们可以自由远程传输训练所需要的训练集和其他文件

参考文档:[www.autodl.com/docs/jupyte](www.autodl.com/docs/jupyte)…

训练准备工作

预下载模型文件

  • soft vc hubert:hubert-soft-0d54a1f4.pt
    • 放在hubert目录下
  • 预训练底模文件:G_0.pth与D_0.pth
    • 放在logs/32k 目录下
    • 预训练底模为必选项,因为据测试从零开始训练有概率不收敛,同时底模也能加快训练速度
    • 预训练底模训练数据集包含云灏 即霜 辉宇·星AI 派蒙 绫地宁宁,覆盖男女生常见音域,可以认为是相对通用的底模
    • 底模删除了optimizer speaker_embedding 等无关权重, 只可以用于初始化训练,无法用于推理
    • 该底模和48khz底模通用

这3个文件也可以手动通过JupyterLab上传到对应位置

image.png

准备数据集

什么是数据集

数据集是语音文件集合。比如我想生成的AI能用周董的声音唱《富士山下》,那么我们现在就需要准备周董的语音数据,让AI"学习"

数据集要求

格式为wav

需要至少600条以上的数据集

每条语音时常最好在5-15s之间

您所提供的数据集应当尽量无杂音(即没有BGM、混响或者和声),如果您无法找到这样的数据,那么您所训练出来的模型会拥有包括但不限于:自带混响、自带鼓点、自带底噪、输出音频糊成一团等“额外功能”,因此您应当尽力提高音频的质量

一般来说,数据集"更重质,而不是量",好的数据集能够达到更好的效果。如果数据集是像游戏内解包的角色语音无损音源,那么效果更好

上传数据集

通过JupyterLab,通过文件上传将数据集按如下结构放入dataset_raw文件夹

即使只有一个说话人,也必须将数据集放入 speaker0 !

image.png

当然,speaker0只是一个替代名,一个speaker0代表一种人声,你可以选择不同的文件夹名称,比如我这里的nahida:

9.jpg

数据预处理

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

装载预训练模型

image.png

这一步是必须的,利用预训练模型可以加快训练速度 防止不拟合

初次训练前已经预先安装了预训练模型,若后续要重新训练

请手动清空so-vits-svc/logs/32k文件夹

将pre_train_model目录下的所有文件复制到so-vits-svc/logs/32k文件夹中

开始训练AI

为什么训练AI

训练AI的目的是得出模型,比如我想通过周董音色唱粤语歌,这一步就是为了得到"周董的歌喉"

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](www.autodl.com/docs/daemon)…

训练完成后,可见终端显示模型已经保存的字样

模型会保存在so-vits-svc/logs/32k/h

如下图G_0.pth和D_0.pth等等即为训练完成的模型

8.jpg

如果训练完成后,想要继续增量训练, 修改 configs/config.json这个配置文件中的epoch,再次执行 开始训练 即可

不过不能中途添加删改数据集

推理

什么是推理

推理就是使用训练出来的模型,向模型输入需要的内容,经模型处理后输出内容。比如,我现在已经获得了”周董的歌喉“,那么我需要《富士山下》的bgm+歌词,就能唱出”周董版的《富士山下》“

上传推理文件

通过JupyterLab,将需要推理的文件上传到/so-vits-svc-32k/raw/,比如我这里上传了yhx.wav

10.jpg

配置推理参数

可以使用inference.ipynb推理。也可以通过inference_main.py 推理

我这里使用inference_main.py

11.jpg

如图,需要配置的内容有:

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

image.png

如果重新训练

每次重新训练新的模型 都需要清空旧的训练集和模型,请手动删除:

so-vits-svc/logs/32k

so-vits-svc/dataset_raw

so-vits-svc/configs

so-vits-svc/dataset

中的所有文件,并重新上传数据集

参考资料

so-vits-svc项目:github.com/innnky/so-v…

B站炼丹师MasterSatori的soVits3.0教程(注意他选择的是48k分支,而不是本教程的32k分支)space.bilibili.com/8407182/art…

后话

感谢作者开源了这么好玩的AI项目,也感谢这么多大佬在社区提供教程,祝各位炼丹师玩的开心~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

0

主题

6

回帖

14

积分

新手上路

积分
14
发表于 2024-1-16 16:05:21 | 显示全部楼层
so-vits-svc

0

主题

4

回帖

12

积分

新手上路

积分
12
发表于 2024-1-31 00:40:22 | 显示全部楼层
感谢大佬分享

0

主题

4

回帖

10

积分

新手上路

积分
10
发表于 2024-3-9 17:06:18 来自手机 | 显示全部楼层
谢谢谢谢大佬分享的教程

0

主题

8

回帖

18

积分

新手上路

积分
18
发表于 2024-3-15 15:07:29 | 显示全部楼层
感谢大佬这么详细的教程!
但我有一个问题始终不明白,都说这几年AI大爆发,但为什么使用AI做点东西这么难。可不可以让使用AI更AI一点

0

主题

3

回帖

13

积分

新手上路

积分
13
发表于 2024-10-4 19:14:07 | 显示全部楼层
666666666666
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|金房子

GMT+8, 2024-12-26 18:35 , Processed in 0.053019 second(s), 23 queries .

© 2023 金房子|AI发烧友社区

快速回复 返回顶部 返回列表