共计 3066 个字符,预计需要花费 8 分钟才能阅读完成。
音色克隆流程——采集自己的声音并训练 AI 唱歌
最近出来了 sovits4.0,在 3.0 的基础上进一步降低了显存消耗,至于 3.0 和 4.0 到底哪个效果好,网上也有很多对比视频,见仁见智吧。本文章介绍的流程基于 https://www.bilibili.com/video/BV1H24y187Ko/ 提供的一键包,包含本人从采集数据到训练、推理的完整流程。注意 sovits 是音色转移,它自己没有唱歌技巧,只是把音色克隆,而且最终效果也跟原声的音域有关。请勿用于非法用途!我觉得挺有意思的用途是 AI 唱歌、帮你念稿子、混英语课的口语作业(雾)等。
数据采集和处理
作为 AI 模型,它的训练需要大量的数据,因此第一步是获取需要训练的数据。如果你是使用别人的音色,那你需要去采集 TA 的音频素材,如直播,歌曲,聊天声音等。这里采集的音频需要经过处理,只保留干声(就是只有一个人说话的声音),其具体的方法在后面有介绍,时长需要 1~2 个小时,比起数据量,数据的质量影响更大,所以要进行数据处理。这里先介绍采集自己声音的处理方法,因为你可以在相对安静的环境录音,尽可能减少杂音。(我亲测可以用手机录,比便宜麦克风效果好很多,手机的麦克风还是不错。)
我的麦克风用的耳机自带的,比较一般,底噪偏大,我这里用 RTX Voice 或者 NVIDIA BROADCAST 来降噪。如果你是 A 卡可以搜索 AMD Noise Suppression。本人机器 3060 用 RTX Voice 会未响应,下面演示用 NVIDIA BROADCAST。
安装完成后打开软件,

麦克风源选择你使用的麦克风,效果里就是添加的处理效果,效果右边的绿色圆点表示是否开启效果。添加效果可以增加更多处理效果,右侧绿色方框处录音可以体验处理效果。个人感觉还是十分明显的。
然后在声音 - 录制里把 NVIDIA BROADCAST 设置为默认设备。

然后打开 Windows 自带的录音机就可以开始录音了,如果你使用 其他录音软件记得在软件设置里把麦克风输入设备设置成 NVIDIA BROADCAST。之后就可以愉快的念课文了,中间可以中断成多个多次录音,总时长满足就可以了。
有了原始素材后,你可以选择进一步处理(也可以不选),比如 Adobe Audition, 软件的安装包在文章开头的视频链接中提供了。在 Audition 中打开录音文件,在效果 - 降噪 / 恢复中应用对应效果。另外,如果你的素材来源不一致,最好让他们的音量大小差不多,同样可以在 Audition 中做到,点击收藏夹 - 标准化为 -3db。

处理完成后下一步是把很长的原始素材划分成小片的 slice,这里用的工具是 Audio slicer,在一键包中也有提供。

在左边把音频素材拖进去,或者点击按钮添加,右侧设置把 Minimum Length 改成 8000,Output Directory 选择一个新建的纯英文名文件夹,然后点击 start 等待完成即可。
完成后把 sliced 的文件夹复制到 so-vits-svc-4.0\dataset_raw 下, 要确保文件夹结构是 so-vits-svc-4.0\dataset_raw\ 你的文件夹名字 \ 你的音频素材,不然下一步会出错。
然后双击 so-vits-svc-4.0 目录下的“数据预处理.bat”,稍等片刻,等待脚本自动完成,完成后如下所示,按任意键退出。

模型设置和训练
编辑 config 文件,:右键用文本编辑器打开 \so-vits-svc-4.0\configs\config.json。文件中包含了训练的相关参数:
log_interval
: 打印 log 的间隔
eval_interval
: 保存模型的间隔
seed
: 随机数种子
epochs
: 训练上限数
learning_rate
: 学习率,默认值 0.0001,和 batch_size
成对改变
batch_size
: 数值越大训练越快,但是更吃显存,根据你的配置改变,默认是 6,如果你改成 12,那学习率也要改成 0.0002。如果训练报错可能是显存不足,需要调低。
keep_ckpts
: 保存的模型数,每个模型大约 500+MB,训练过程会保存最新的 keep_ckpts
个模型,根据你的需求和空间大小定。
双击根目录下 " 训练.bat" 开始训练,等待一会如果报错或者没有出现类似下图 5 个成组的小数

我遇到有两种情况:
- 翻看报错信息,如果提示报错中有 ’Dataloader’ 之样的字眼,说明你虚拟内存可能设置不足,尝试拉高虚拟内存或者关闭多线程:打开 train.py,编辑第 72 行
num_workers = 1
- 提示显存不足,’Memory’ 相关字眼,尝试拉低
batch_size
图中的 5 个数都是越小越好,随着训练的迭代,应该有越来越小的趋势。在提示‘Saving model and optimizer state at …..’后,最新的模型已经保存,可以提前终止训练,下次再运行训练脚本会继续从最新模型开始训练。此时可以尝试推理,来查看模型的拟合效果。
如果你是进阶玩家,可以尝试使用 tensorboard 查看训练过程,判断是否应该终止。
在安装了 tensorboard 的 python 环境下,在终端输入
tensorboard --logdir 你的存放目录 \so-vits-svc-4.0\logs\44k
logdir 后边是你的模型存放的地址。

随后浏览器打开显示的地址,我这里是 localhost:6006

点击 loss 选项卡,可以看到各个 loss 的变化趋势,如果有上升的趋势了就应该停止迭代了。
推理
和用来训练的音频素材一样,同样要求声音是比较纯净的干声,如果有伴奏和声等会影响到合成的效果。注意,推理使用的格式需要 16bit,如果不想每次都注意格式或者推理报错,可以安装 ffmpeg,一劳永逸。
在 http://ffmpeg.org/ 下载对应版本,在本地解压出来。然后在系统环境变量中添加 path:
打开设置 - 系统 - 高级系统设置 - 高级选项卡 - 环境变量中编辑 Path,添加 ffmpeg 的 bin 文件夹,如F:\Program Files (x86)\ffmpeg-6.0-full_build\bin
如果用途是用自己或别人的声音念稿子之类的,需要把文字转换成语音的工具。有很多网站和工具可以使用,这里推荐微软语音合成助手,可以自行度娘。合成的语音很干净,不需要再处理了,如果这个语音推理出来都电音,那说明模型没有训练好。
运行 推理_webui.bat
脚本,等待一下并打开提示的网址,没改 config 的话是http://127.0.0.1:7860

选择你要使用的模型,模型文件在 logs\44k
下,这里要选择 G 开头的模型,D 开头的不是推理用的。然后选择配置文件和聚类模型,如果你没有训练聚类模型就不选,聚类模型用于提升音色的相似性。点击“加载模型”按钮等待加载完成。然后选择音色就完成了准备工作。
最后上传需要音色克隆的文件,点击转换按钮就完成拉。试听看看效果如何吧。

最后说一下对歌曲干声的提取和伴奏分离。有很多的工具可以选择,比如 Ultimate Vocal Remover、RipX 等,其中 UVR 在一键包中也包含了,也是一个基于 AI 的分离方法,效果还不错,内置了很多模型,可以自行尝试。

上边两个框是选择输入文件和输出保存位置的;中间左边选择处理方法,右边是对应方法的参数,具体用法网上也有很多教程啦,这里就不多嘴了。
大概的全流程就是这样啦,希望可以帮到你,合成出你喜欢的声音和歌曲。
附我合成的音乐链接:https://www.bilibili.com/video/BV13j411c7h9/