引言
大家好,最近各种AI孙燕姿、周杰伦火爆全网,我自己也跑了一遍目前比较歌声转唱效果比较好的So-vits-svc4.1模型,然后写了一个教程分享给大家。目前来说歌声转唱领域还属于未被完全发掘的领域,目前这个方向的顶刊论文不多,大部分互联网企业也没有针对这个方向去做一些文章,比如在给出这样的一个应用。毕竟涉及到名人的声音版权问题,但在对于我们个人,做做这个用作非商业化,以及用自己的声音去唱些有意思的歌还是可行的。
本文就专对于So-vits-svc4.1模型进行一个从头到尾的训练以及推理的讲解,另外我发现这个模型的作者并没有发论文对模型进行讲解,因此我自己对模型结构进行了一个简单的分析。本文的推理模型整合包来自b站UP主羽毛的整合包So-VITS-SVC 4.1 整合包完全指南 · 语雀。
数据收集处理
首先我们要知道,训练这个模型的数据必须是纯人声无杂音的,当然目前的人声分离算法很难做到将背景音乐完全剔除达到无杂音的效果,因此我们在进行人声分离后,最好自己再去听一遍,手动的去除掉一些混音、杂音很严重的数据。
首先,我们可以去B站上找到一些歌手的音乐合集,比如下面这种:
然后我们可以使用专门下载b站音视频的软件:JIJIDown,下载网址:唧唧 - JiJiDown - 电脑客户端。之后便可以复制这个bilibili的网址,在该软件中输入,之后便可以选择下载:
注意,最好下载MP3文件的,这样就免去了音频和视频分离的操作。
下载完成后,最好拿去转为.wav格式,之后训练所需的音频的也是这个格式。之后我们便可以对这些音频进行人声分离,目前比较常用的就是UVR5,有预算的同学也可以去万兴科技的官网,上面就有人声分离的功能。UVR5下载地址:The Ultimate Vocal Remover Application
下载完打开后便是如下界面:
点击“select input”便可输入自己想要进行分离的原歌曲,“select output”即为想要输入的文件夹。之后我们对声音进行初步分离,选择“Demucs”,下面的MODEL选择v3|UVR_Model_1,这个模型不是UVR自带的,如果没有可以点击下面的“start processing”左边的小扳手去下载。其余设置和上图一致。
得到初步分离后的声音后,可以发现还有很多和声在音频歌曲里,此时进行第二步分离。
此时我们选择VR Architecture方向,模型选择6_HR-Karaoke-UVR,这里的Karaoke即为去和声的意思,这个模型我放在了百度网盘中,下载后放入UVR5根目录的models/VR_Models中就可以使用了,链接如下链接:https://pan.baidu.com/s/1ockNGdHN3LBLgDwxbOLsMA?pwd=tjl5
提取码:tjl5。
此时你已经得到了较为干净的人声了,但在输入训练之前,需要进行音频分段,即每个音频文件最好不要超过15秒,我写了一个python脚本用来对人声文件进行音频分段操作,代码如下:
from pydub import AudioSegment
import os
# 设定文件夹路径
source_dir = 'input'
output_dir = 'output'
# 设定分割长度(10秒)
split_length = 10 * 1000 # pydub使用毫秒
# 确保输出目录存在
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 遍历文件夹中所有文件
for filename in os.listdir(source_dir):
if filename.lower().endswith('.wav'): # 可以修改为.wav或其他音频格式
file_path = os.path.join(source_dir, filename)
song = AudioSegment.from_file(file_path)
# 计算歌曲可以分割成多少段
parts = len(song) // split_length
# 分割歌曲并保存
for i in range(parts):
start = i * split_length
end = start + split_length
part = song[start:end]
part.export(os.path.join(output_dir, f'{filename[:-4]}_part{i}.wav'), format="wav") # 修改输出格式如果需要
print(f'已处理文件:{filename}')
print('所有歌曲处理完毕。')
最后在Output中便可以看到所有你的10秒的音频文件,但最好还是自己检查一遍,以免有少数错误音频。
训练
由于So-vits-svc4.1模型计算参数量和模型权重较大,我求了一下,模型大小为195.84MB,GFLOPs为4091.5,所以我推荐在Autodl上租借一张3090左右的显卡(24G显存)进行训练,且Autodl上有整合包,比较方便。
首先,点击“租用新实例”,这里3090都被租借完了,所以我租用一张4090:
之后,点击下面的社区镜像,选择这个版本,开机便可进入。
进入后,我们根据根目录下的quickly.ipynb顺序进行操作,别的不需要微调。只需将自己的数据集压缩包上传至so-vits-svc目录下的dataset_raw目录下,注意,需在该目录下创建一个speaker0文件夹,将所有.wav放入这个文件夹下即可。
之后便可根据这个ipynb文件操作,需要注意的是,模型训练前的所有代码都需要执行一次,涉及到预训练模型的转换位置和重采样操作,最后移至终端目录下进行训练命令:python train.py -c configs/config.json -m 44k。
根据我训练的经验,2w步左右便可进行推理来试听效果,推理部分我会放在下一节进行讲解。模型权重会保存在./logs/44k目录下,需要注意的是,G开头的模型才是我们推理需要的。
今天先写到这里,如果大家需要,我会在之后对推理和模型再写一篇详解。