语音分离任务中后处理模块探索

时间:2024-05-22 18:34:17

后处理模块目标:用于人声音乐分离的场景

增加这个模块的初衷是:尽可能抑制空白vocal部分的残留,只后处理vocal,不处理伴奏

1.例:

语音分离任务中后处理模块探索
可以看到vocal本身是空白的地方,模型并没有完全输出空白

2.也有paper里边提到对空白部分vocal的抑制效果,不过它使用MHE(MINIMUM HYPERSPHERICAL ENERGY),相当于是在loss上加了一个regularization,并不是后处理:

语音分离任务中后处理模块探索

其实抑制的并不是特别明显:

语音分离任务中后处理模块探索

图片来自:[1]. IMPROVING SINGING VOICE SEPARATION WITH THEWAVE-U-NET USING MINIMUM HYPERSPHERICAL ENERGY Joaquin Perez-Lapillo, Oleksandr Galkin, Tillman Weyde Department of Computer Science City, University of London {joaquin.perez-lapillo,oleksandr.galkin,t.e.weyde}@city.ac.uk.

后处理方法可行性探索

•频域人声音乐分离任务中vocal mask可视化

首先我发现输出的vocal mask,在有无音乐的地方有较为明显的特征

一些可视化的mask(.png):

举例来看:

语音分离任务中后处理模块探索
语音分离任务中后处理模块探索
语音分离任务中后处理模块探索
语音分离任务中后处理模块探索

可以看到分离网络分出了伴奏和人声部分,但是不敢把没有vocal的地方mask完全输出0

基于以上观察,我认为一个后处理模块可以做到以下两点:

1.把已经分出来的伴奏完全抑制
2.把未能分出来的乐器尽量抑制

•实验设置

示意图如下:

语音分离任务中后处理模块探索

•右侧是熟悉的分离网络,左侧是新加的一个后处理的网络,两个网络同步训练

•实验主要是变更Posterior handling module(绿色的模块,后续简称PHM),这个模块是生成一个对mask的mask(图中红线,后续简称Mmask),然后乘到原本的vocal mask上边

•整体思路

实验初期使用传统方法:

•方案一:手动提取mask特征

•方案二:使用vad检测vocal边界,抑制边界外部分

以上两种方法比较有效,既然手动提取特征可行,那么使用深度学习方法应该会更好,故而设计:

•方案三:生成Mmask的深度学习模型

•具体方案描述

方案一:手动提取特征

○第一步:截取mask的低频(freq.bin的下1/4),在纵轴上加和,并除以最大值(归一化)
语音分离任务中后处理模块探索

○第二步:将上一步结果进行平滑,可以前向平滑,后向平滑,也可以两个方向都看,如下为后向平滑结果,但是后向的话容易导致vocal的尾音被抑制:
语音分离任务中后处理模块探索

○第三步:将上一步结果经过一个**函数s,得到s(Mmask),s函数为sigmoid的变体:

▪s(x) = 1/(1+e^(a*(x-b))),将[0,1]之间的Mmask进行处理

▪之所以不用阶跃函数是为了防止人声和音乐的分界过于突然

▪例如a = 100,b = 0.1
语音分离任务中后处理模块探索

4294967295.得到Mmask的值如下:

语音分离任务中后处理模块探索

○第四步:对Mmask中小于特定长度的抑制部分进行去除,减少误抑制率

○第五步:mask = mask*Mmask,原本的mask一部分被抑制,另外一部分保持不变

•效果

○可以比较有效的抑制(下图:西原健一郎_-_Serendipity_vocal):
语音分离任务中后处理模块探索
语音分离任务中后处理模块探索

musdb-test10

语音分离任务中后处理模块探索
语音分离任务中后处理模块探索

•缺点:

○在人声的结束拖尾音的地方容易被截断

○由于方法单一,人声也容易被误抑制

•具体实现:

方案二:使用vad检测vocal边界

1.下图的第一个图代表vad预测的vocal区域平滑后的结果,1为歌唱声,0为非歌唱声

2.下图的第二个图代表根据vad预测进行后处理后的歌唱声

语音分离任务中后处理模块探索

虽然也管用,但是也存在问题和方案一同样的误抑制和尾音截断问题

方案三(预计使用的):深度学习方法

生成mmask的结构(即PHM):(一维卷积->BN->Relu)*->sigmoid

语音分离任务中后处理模块探索

实验分析:

•首先在小数据集上进行了实验,在训练初期可以达到抑制效果(小数据集上过拟合后后处理就作用不大了):

比如: ,虽然效果不是特别理想,但是伴奏部分确实被抑制了一部分
语音分离任务中后处理模块探索

•由于后处理模块要尽可能的多遇到误分类到vocal的伴奏(才能达到训练目的),故而推测这个模块在数据量增加或模型泛化能力强的时候(都不容易过拟合)可以显现出来优势

•Mmask相当于将原本的分离任务转化为了分类任务,而且是在分离任务提取出的特征之上进行的

效果:

•当前还没有达到预期的理想效果,分析是vocal中空白占比太低,导致PHM倾向于都输出1(保留原本mask的值)

○预期解决方案:手动在数据中加入空白vocal

存在问题:

•效果如何表示,量化的问题