再探so-vits-svc

去年体验了一遍so-vits-svc 4.1,做了一个AI杰伦的模型。按照当时的条件来说,结果我是比较满意的。最近有个需求,想做AI配音,大致就是先将文字转成语音,然后通过修改音色实现类似真人说话的效果。

遇到问题

起初就是按部就班之前的经验去训练,但是结果就有些不尽人意。最大的问题就是咬字,比如”cheng“的发音会读成”che“。

即使又训练了几万步也还是没有改善,起初是怀疑数据集毕竟少,因为只有十分钟左右的干声。后面觉得不对,这是提取源音频语音特征,是音色转换。数据少最多就是转换后声音不像。

后面查阅了一些资料,发现是特征编码器的关系。默认使用的是vec768l12

  • 优点,最还原音色、有大型底模、支持响度嵌入。
  • 缺点,咬字能力较弱。

当然这个咬字也和你的输入源有关,我当时换了一个TTS的音色,对应这个字的咬字就好了一些。但是这总归不是一个办法,治标不治本。谁知道这个音色的那个读音又不行了。

所以如果你对咬字比较看重,那就建议使用hubertsoftwhisper-ppg

  • 优点,咬字能力强。
  • 缺点,音色泄露。

音色泄露指的是输出的音色向底模/推理输入源的原始音色接近,模型说话人越多,音色泄露越严重。考虑到大多数人都希望尽可能还原目标说话人的音色,因此音色泄露被认为是一种不受欢迎的结果。

使用方法,在自动划分训练集、验证集,以及自动生成配置文件这步指定speech_encoder

python preprocess_flist_config.py --speech_encoder hubertsoft

然后下载hubert-soft-0d54a1f4.pt文件放在pretrain目录下。下载链接见文档

然后是f0预测器的选择,默认rmvpe效果不错,如果想在低音部分有更好表现,可以选择harvest。我训练的是男声,所以选择了它,但我实际对比rmvpe没有听出来区别。

python preprocess_hubert_f0.py --f0_predictor harvest

另外还有一个小细节,可以看看是否需要跳过响度匹配。

脚本 resample.py,默认的响度匹配是匹配到 0db。这可能会造成音质的受损。而 python 的响度匹配包 pyloudnorm 无法对电平进行压限,这会导致爆音。

导致的结果就是准备的音频问题不大,但是推理出的效果音频会有杂音。所以如果自己的音频声音大小基本一致,可以跳过响度匹配,避免负优化。

python resample.py --skip_loudnorm

推理

语音转换时推荐开启自动f0预测,开启后相似度有明显提升。也可以改善音色泄露的问题。
请添加图片描述

我对比了两次不同方案的推理结果,音色上差别不大,但是后者咬字明显加强。所以对于转换语音的场景,建议使用这套方案。歌曲的话,还是之前的方案。

参考

猜你喜欢

转载自blog.csdn.net/qq_17766199/article/details/137717826