摘要
非实时语音转换:语音(歌声)转换的开源项目已经很多了,包括so-vits-svc、RVC等。在这里主要想记录一下最近的一些经验。我主要想构建 any-to-many 的语音转换,many提供的数据要尽可能的少(10-20句),同时要保证模型的鲁棒性,即转换之后的可懂度要高、与目标说话人的相似度要高。
主体框架的选择
通过分析 VCC 2016-2018-2020 三年的语音转换比赛,同时借鉴开源项目的一些经验,最终确定了语音内容提取模型、声学模型、声码器这样串联的结构。与语音合成区别比较大的就是语音内容提取模块了,这里可以类比语音合成的前端。
语音内容提取
主要的功能就是将源语音中的内容提取出来,把音色等信息过滤掉,这里的方法有比较多,详细的可以看so-vits-svc里的种类,经过对比最终确定了whisper-large-v2,总体来看就是该模型的鲁棒性高,对噪声不敏感;同时转换后的发音更准确。但是,在实际过程中来看,whisper 提取出的 Encoder BNF 特征不仅包含了内容信息,其实把音色等其他信息也很好的保留了下来,这里经过 Encoder 之后又构建了几层的卷积操作,同时有一个转置卷积进行2倍上采样。后续在声学模型输入中强制+上spk信息(利用了eres2net,需要注意的是,提取的spk特征的方差很大,需要做归一化处理,要不然模型收敛困难),在训练过程中加入了spk对抗训练去提取更干净的内容信息,以防止音色泄漏的问题。但是实验下来,梯度反转(GRL)加不加都差不多!
这里也实验了其他的 ASR 识别模型作为内容提取模型,包括 paraformer、wenet等,但是这些 ASR 模型为了减少识别的计算量,在模型的开始都使用了卷积进行4倍降采样操作,paraformer 还利用了低帧率等操作。使得后续声学模型需要进行上采样,这个过程会丢失一些细节信息,然后再“脑补”,会导致发音不清晰等现象。这里最好自己从头训练一个没有降采样的 ASR 模型。
声学模型
-
Tacotron2 的修改版(这里主要借鉴了 Soft-VC),针对小样本不是太友好,单个说话人数据量大一点的话,模型各方面表现不错。
-
Grad-TTS,这里主要借鉴了UnitSpeech,针对小样本友好。没有过多的改进。
声码器
利用了 BigVGAN,针对内部数据进行了微调。
数据及训练的一些技巧
- 每个说话人的数据不要过多,说话人的种类要多。
- Whisper 针对中文数据进行了微调,WER 大约在4-5%。
- 数据进一步利用 Whisper 进行了筛选,筛选出 Whisper 能完全识别准确的数据进行基础模型的训练,自己品!
- 微调数据需要安静的环境下录制,20句能保证稳定的效果。
- 由于是语音转换,没有歌声转换,这里没有对pitch进行建模。
总结及思考
- 现在的语音转换有一个问题,就是都是帧级别对齐的,这样就没有了目标说话人的韵律等信息,在看王牌对王牌第八季-2中可以看到,转换之后音色相似,但是缺少了一些韵味,比如没有北京话的味道了。可以考虑不做对齐进行改善。
- 现在语音合成的效果太逼真了,尤其是韵律和表现力方面,那语音转换的作用除了现有内容资源的扩充以外,还能做什么用呢?
- 语音转换可以用来进行降噪的尝试。
- 语音转换和语音合成的统一建模也很有意思,本来后端用的声学模型和声码器就是共用的。