本文记录用 So-vits-svc 4.1 训练模型全过程。
需要用到的工具
UVR:用于人声歌声分离,降噪。 (项目传送门)
Slicer-gui(Audio-Slicer):用于音频裁剪。(项目传送门)
So-vits-svc 4.1:训练模型,GitHub项目中详细介绍了模型使用方法,本文使用 4.1 版本。(项目传送门)
Adobe Audition:后期音频编辑。(天翼云下载)
数据准备
准备一段需要训练的音频文件,说话干声或者是清唱,时间最好在 1-2 小时,如果有伴奏需要进行人声分离。
本次使用锁那的生放送弹唱录音,时长 2.5 小时左右。
如果有多个音频需要合成一个方便后面处理:
import os
from pydub import AudioSegment
def che_audio(f):
if f.endswith('.mp3') or f.endswith('.mp4') or f.endswith('.wav'): return True
else: return False
def merge_audio(inf,outf):
comb=AudioSegment.empty()
files=os.listdir(inf)
files.sort(key=lambda x:os.path.getctime(os.path.join(inf,x)))
for f in files:
if che_audio(f):
f_pth=os.path.join(inf,f)
x=AudioSegment.from_file(f_pth)
comb+=x
comb.export(outf,format="wav")
if __name__ == "__main__":
inf="D:\\study\\AI\\ai_music\\data"
outf="combined.wav"
merge_audio(inf,outf)
人声分离
如果音频数据中含有歌曲伴奏,需要进行这一步。
打开 UVR ,选择输入音频就是待处理的音频文件,输出路径,模型选择 Demucs,其他默认设置即可。注意 UVR 的安装目录中不能包含中文名。
Start Processing 后会生成两个文件,后面带有 (Vocals) 是需要的干声文件,(Instrumental) 为分离出的伴奏。
降噪
还是使用 UVR ,输入音频换成刚才处理好的干声音频,模型选择 VR Architecture,其他保持默认设置。
处理结果:
音频切割
这里可以自行写脚本完成,分为两步:一是去除数据集中静音部分,然后把音频分割为时长在 3~15 秒之间的数据段。
import os
from pydub import AudioSegment
from random import randint
from pydub.silence import split_on_silence
def Cut_data(inf,out_dir):
audio=AudioSegment.from_wav(inf)
# 分割音频去除静音部分,下面参数可以自行修改
chunks=split_on_silence(
audio,
min_silence_len=1000, # 认为是静音的最小长度,单位为毫秒
silence_thresh=-50, # 静音判断的阈值,单位为dBFS
keep_silence=200 # 保留的静音时长,单位为毫秒
)
l=3000 # 最小片段时长,单位为毫秒
r=10000 # 最大片段时长,单位为毫秒
seg=AudioSegment.empty()
cnt=0
for i in chunks:
st=0
while st<len(i):
k=randint(l,r)
ed=st+k
if ed>len(i): ed=len(i)
seg=i[st:ed]
pth=os.path.join(out_dir,f"{cnt}.wav")
seg.export(pth,format="wav")
cnt+=1
st=ed
if __name__ == "__main__":
inf="D:\\study\\AI\\ai_music\\data\\1_1_【音频】[鎖那_sana]生放弹唱精选合集_(Vocals)_(Vocals).wav"
out_dir="D:\\study\\AI\\ai_music\\data\\cut_data"
Cut_data(inf,out_dir)
也可以通过音频切割工具 Audio-Slicer 完成
处理后的数据保存到文件夹中。
模型训练
把数据文件放到 dataset_row 目录下:
打开 启动webui,在训练窗口识别数据集。
识别出数据集后进行数据预处理,没有报错信息进行下一步
下面根据提示结合本机性能设置参数
写入配置文件后,可以在 configs 文件中的 config.json 查看训练参数和数据参数,也可以直接修改该文件来设置参数
第一次训练选从头开始训练,如果从上一个训练进度继续训练选择继续上一次训练进度。
设置是每 200 步生成一次 Epoch,主要关注损失值 reference_loss,该值越小越好。在训练的过程中 reference_loss 的值是震荡的。
在文件夹 logs/44k 中保存了G开头的文件为最近的模型文件,后面是步数。
打开脚本文件 启动tensorboard.bat 可以查看训练可视化图形
访问网址,找到 loss 图像,可以选择一个 loss 值较低的模型来使用。
推理
在推理窗口选择推理模型和配置文件,编码器按照默认设置。
上传需要转换的音频,音频也需要是经过处理后的不含伴奏的干声。如果电脑性能不够好的话把音频切割为几个部分再分别推理。
但是还是推荐把音频拆开批量上传,进行推理后把结果合到一起。这样不仅速度快,还可以对产生哑音或者拟合不好的音频段进行单独处理。
推理可以保留静音,不影响推理,也方便后期音频合成
import os
from pydub import AudioSegment
from random import randint
from pydub.silence import split_on_silence
def Cut_data(inf,out_dir):
audio=AudioSegment.from_wav(inf)
l=5000 # 最小片段时长,单位为毫秒
r=10000 # 最大片段时长,单位为毫秒
seg=AudioSegment.empty()
cnt=0
st=0
while st<len(audio):
k=randint(l,r)
ed=st+k
if ed>len(audio): ed=len(audio)
seg=audio[st:ed]
pth=os.path.join(out_dir,f"{cnt}.wav")
seg.export(pth,format="wav")
cnt+=1
st=ed
if __name__ == "__main__":
inf="D:\\study\\AI\\ai_music\\Inference\\data\\似水流年\\1_1_【音频】吳若希 Jinny - 似水流年 (劇集 _(Vocals)_(Vocals).wav"
out_dir="D:\\study\\AI\\ai_music\\Inference\\data\\似水流年\\cut"
Cut_data(inf,out_dir)
如果推理是男转女或者女转男,需要修改变调的值,男声翻唱女声为负值,女生翻唱男生为正值。男转女变调可以设置到 6~10,根据具体情况进行调整。
使用批量转换,结果会被保存到 results 文件夹中。
最后把推理出的切片声音整合到一起形成干声,再用 Adobe Audition 调节音频后多轨合成即可。
结果
【AI鎖那】-《似水流年》Cover. 吴若希_哔哩哔哩_bilibili
Update 1
训练参数,供参考:
"train": {
"log_interval": 200,
"eval_interval": 800,
"seed": 1234,
"epochs": 10000,
"learning_rate": 0.0002,
"betas": [
0.8,
0.99
],
"eps": 1e-09,
"batch_size": 12,
"fp16_run": false,
"half_type": "fp16",
"lr_decay": 0.999875,
"segment_size": 10240,
"init_lr_ratio": 1,
"warmup_epochs": 0,
"c_mel": 45,
"c_kl": 1.0,
"use_sr": true,
"max_speclen": 512,
"port": "8001",
"keep_ckpts": 3,
"all_in_mem": true,
"vol_aug": false
}
Update 2
训练效果受多个因素的影响,显存允许的情况下调大 batch_size ,尽量保证数据集声音干净,不要出现杂音。
训练的步数和数据集有关,我有 900 多个数据,可以训练到 8w 步到 10w 步,数据集少可以少训练一点,主要关注损失值,损失值是上下波动的,中途可以把你觉得损失值低的模型另存,保存G和D开头的文件即可,要使用的时候再把模型放到 logs\44k 文件夹。
如果是女声翻唱男声歌曲,建议先用调音器把歌曲中的男声升调为女声,再进行推理。(男翻女同理)
结果中出现咬词不清的情况属于正常现象,特别是跨语言推理时尤其明显,你可以更换编码器或者训练聚类模型,但是有可能会损失音色。
另外,推理的歌曲也尽量选择干净的干声,有合唱或者特殊发音的情况推理效果并不好。翻唱效果不可能完全达到理想,后续工作就交给调音师了。
版权归原作者 2,4(1H,3H)-PD are mine 所有, 如有侵权,请联系我们删除。