本文对 Chengyu Zheng 于 2021 年在 AAAI 上发表的论文进行简单地翻译。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。
论文链接:https://ojs.aaai.org/index.php/AAAI/article/view/17710
目录
1. 论文目的
提出了一种基于深度学习的语音增强网络 SN-Net,该网络的创新点主要在于:a. 同时建模语音成分和噪声成分;b. 在时间维度和频率维度同时进行 self-attention。网络结构主要包括 Encoder-decoder 架构、Temporal self-attention、Frequency-wise self-attention 和 Residual block 等。
2. 摘要
由于背景噪声的多样性,语音增强任务非常具有挑战性。现有的大多数方法专注于对语音进行建模而不是噪声。在论文中,作者提出了一种使用双分支卷积神经网络 SN-Net 对语音和噪声成分同时建模的新想法。在 SN-Net 中,两个分支分别预测语音和噪声成分。除了仅在最终的输出层进行信息融合之外,在两个分支之间的一些中间特征域中引入了 interaction modules,以使两个分支能相互受益。这种交互能利用从一个分支中学到的特征来抵消不需要的部分,并恢复另一个分支所缺失的部分,从而增强它们的分辨能力。作者还设计了一个特征提取模块 residual-convolution-and attention(RA),以捕获语音和噪声成分在时间和频率维度上的相关性。在公开数据集上的评估表明,interaction module 在同步建模中起着关键作用,而且 SN-Net 在各种评估指标上都大大优于最新的语音增强技术。提出的 SN-Net 在说话人分离任务上同样显示出了出色的性能。
3. 介绍
语音增强旨在讲语音和背景干扰信号分离。主流的基于深度学习的方法以有监督的方式预测语音信号,如图 1(a) 所示。
大多数先前的工作在时频域预测含噪频谱和干净频谱之间的掩码或直接预测干净频谱。一些方法在时域以端到端的方式从含噪信号波形中估计干净信号。与传统的基于信号处理的方案相比, 这些方法显著提高了增强语音的质量。然而,在增强的语音中经常能观察到语音失真和残余噪声,这表明预测的语音和残余信号(从含噪信号中减去增强的语音来获得)之间仍然存在相关性。
与只预测语音而忽略背景噪声的特性不同,传统的基于信号处理和建模的方法大都采取另一种方式,如图 1(b) 所示, 也就是估计噪声或建立噪声模型来增强语音。Some model-based methods instead model both speech and noise, possibly with alternate model update. 然而,当无法满足先前的噪声假设或干扰信号不是结构化的时候,他们通常无法很好地泛化。在基于深度学习的方法中,考虑到噪声在低信噪比的条件下占主导地位,最近的两次尝试均直接预测噪声。然而,收益是有限的。
预测的语音和噪声之间的相关性促使作者探索语音和噪声之间的信息流,如图 1© 所示。因为语音相关的信息存在于预测的噪声中,反之亦然,因此,在它们之间进行信息互通可以相互帮助恢复一些丢失的成分并去除不需要的信息。在论文中,作者提出了一个称之为 SN-Net 的双分支卷积神经网络,以同时预测语音和噪声信号。两分支之间是信息 interaction modules,通过它们可以从噪声分支中提取噪声或语音相关的信息,并将这些信息添加到语音特征中来抵消不需要的噪声成分或者恢复丢失的语音成分,反之亦然。通过这种方式,网络的判别能力大大增强。两个分支均使用相同的网络结构,这是一个基于 encoder-decoder 架构的模型,并在 encoder 和 decoder 之间增加一些 residual-convolution-and-attention(RA) 块用于分离。受机器翻译和计算机视觉任务中的 self-attention 技术的成功的启发,作者提出在每个 RA 块内部并行结合 temporal self-attention 和 frequency-wise self-attention,用于捕获时间和频率维度的全局依赖性。
论文的主要贡献总结如下:
- 作者提出在双分支深度神经网络中同时建模语音和噪声成分,并且在双分支之间引入了信息流的交互。通过这种方式,语音部分被增强,而残余噪声被抑制以估计语音,反之亦然。
- 作者提出使用 RA 块来提取特征。在 RA 块中使用 Separable self-attention 来捕获全局的时间依赖性和频率依赖性。
- 作者在消融研究中验证了所提方法的优越性,并且在两个公开数据集上与最先进的算法进行了比较。此外,作者还将该方法进行扩展以用于说话人分离,实验结果也显示出了优越的性能。这些结果均展示了作者所提方法的优越性和潜力。
4. 相关工作
4.1. 基于深度学习的语音增强
基于深度学习的方法主要研究如何构建语音模型。根据所采用的信号域,这些方法能被氛围两大类别。时频域方法使用时频域的表示,将复数谱或幅度的对数功率谱作为输入。他们通常为每个时频点估计实数或复数比率掩码,以将含噪谱映射为语音谱,或者直接预测语音表示。时域方法将时域波形作为输入,通常通过 encoder 来提取原始波形的隐式表示,并从该表示中重构其增强的版本。尽管这些方法相比传统方法已经有个极大的改进,但它们只专注于语音建模,忽略了理解噪声特性的重要性。
4.2. 噪声感知的语音增强
传统的基于信号处理的方法通常会考虑到噪声信息,并且这些方法假设了语音和噪声的先验分布假设。然而,估计非平稳噪声的功率谱密度是一项非常具有挑战性的任务,因此,大多数的假设只适用于平稳噪声。它们并不适用于低信噪比以及非平稳噪声的条件。相反,一些基于建模的方法对语音和噪声进行建模,并展现出了更有希望的结果,例如,基于码本和非负矩阵分解的方法。然而,这些方法要么需要噪声类型的先验知识,要么只对结构化噪声有效,因此,它们的泛化能力有限。
基于深度学习的方法对各种噪声具有很好地泛化能力。现存的方法中也有一些结合了噪声信息的尝试,例如,在损失函数中添加约束,或者直接估计噪声而不是语音。前者根本不对噪声建模也没有利用噪声的特性。后者丢失了语音信息,并且在低信噪比以及集外噪声的情况下甚至表现得比直接预测语音的方法还差。一个更相关的工作使用两个 deep auto encoders(DAEs) 来估计语音和噪声。它首先训练一个 DAE 来重构语音谱,然后引入另一个 DAE 来建模噪声,并使得两个 DAEs 输出之和等于含噪语音谱。
不同于上述方法,作者提出了一种双分支 cnn,用于同时预测语音和噪声。并在中间层中引入 interaction modules 以使得两个分支能相互受益。
4.3. 双分支神经网络
在语音增强领域,已经有双分支模型被用来分别预测增强信号的幅度和相位。在论文中,作者的目标是利用两个相关的任务,即语音估计和噪声估计,并在交互式双分支的框架下明显地建模语音和噪声成分以实现更好的区分性能。
4.4. Self-Attention 模型
Self-attention 机制已经被广泛地应用于各种任务中,例如,机器翻译、图像生成和视频问答。spatio-temporal attention 被用于视频领域,以利用空间和时间维度的长期依赖性。最近,语音相关的任务也通过 self-attention 取得了收益,例如,语音识别和语音增强任务。在这些工作中,self-attention 只被用在了时间维度上,忽略了帧内部的全局依赖性。受视频相关任务中 spatio-temporal attention 的启发,作者建议同时使用 frequency-wise 和 temporal self-attention,以在不同的维度上更好地捕获依赖性。作者在语音和噪声分支中都使用了这种 attention 来同时建模这两种信号。
5. 所提方法
5.1. Overview
图 2 展示了 SN-Net 的整体网络结构。其输入是通过短时傅里叶变换 STFT 计算得到的复数时频谱,表示为
X
I
∈
R
T
×
F
×
2
X^{I}\in{R^{T\times F\times 2}}
XI∈RT×F×2,其中
T
T
T 是帧数,
F
F
F 是频点数。SN-Net 包含两个分支,一个预测语音,另外一个预测噪声。这两个分支具有相同的网络结构,但具有各自的网络参数。每个分支都是一个基于 encoder-decoder 的架构,并且 encode 和 decoder 之间具有一些 RA 块。通过这种方式,它具有了同时发掘含噪信号中不同成分的潜力。两个分支之间的交互模块用来转换和共享信息。在得到每个分支的输出之后,应用一个合并分支来自适应地结合两个分支的输出以生成最终的增强语音。
5.2. Encoder-Decoder
如图 3(a) 所示,encoder 包含三层卷积层,每层的 kernel size 都是 ( 3 , 5 ) (3,5) (3,5)。其中,第一层的 stride 是 ( 1 , 1 ) (1,1) (1,1),后面两层的 stride 是 ( 1 , 2 ) (1,2) (1,2)。通道数分别是 16 , 32 , 64 16,32,64 16,32,64。encoder 的输出特征表示为 F k E ∈ R T × F ′ × C \mathcal{F}^{E}_{k}\in\mathbb{R}^{T\times F^{'}\times C} FkE∈RT×F′×C, 其中 F ′ = F 4 , C = 64 , k ∈ { S , N } F^{'}=\frac{F}{4},C=64,k\in\{S,N\} F′=4F,C=64,k∈{S,N}。 S , N S,N S,N分别表示语音和噪声分支。为了简化,后续的描述中将省略下标 k k k。
Decoder 包含三个 gated blocks 以及一层二维卷积层,用以重构输出 F D ∈ R T × F × 2 \mathcal{F}^{D}\in\mathbb{R}^{T\times F\times 2} FD∈RT×F×2。如图 3(b) 所示,gated blocks 学习来自编码器相应特征上的乘性掩码,以抑制其不需要的部分。接着,将被掩蔽的 encoder 特征与 deconvolutional 特征进行拼接,并将拼接后的特征输入到一个二维卷积层以生成残差表示。Decoder 中最后的卷积层学习幅度增益和相位信息以重构增强信号。Decoder 中所有二维转置卷积层的 kernel size 都是 ( 3 , 5 ) (3,5) (3,5),前两个 gated blocks 的 stride 是 ( 1 , 2 ) (1,2) (1,2),最后一个的 stride 是 ( 1 , 1 ) (1,1) (1,1)。通道数分别是 32 , 16 , 2 32,16,2 32,16,2。Decoder 中所有的二维卷积层的 kernel size 和 stride 都是 ( 1 , 1 ) (1,1) (1,1),而且其通道数等于其 deconvolutional 层的通道数。
Encoder 和 decoder 中的所有卷积层后跟着 batch normalization 层以及 PReLU 激活函数。时间维度上没做下采样以保证其分辨率。
5.3. RA Block
RA block 旨在提取语音和噪声分支的特征,并进行分离。由于噪声类型的多样性以及语音和噪声之间的差异,这非常具有挑战性。作者使用 Separable self-attention(SSA) 技术来分别捕获时间和频率维度的全局依赖性。在这两个维度上使用注意力机制是很直观的,这是因为人们往往更关注音频信号的某些部分(例如,语音),而较少关注周围的部分(例如,噪声),并且他们在不同的频率上感知是不同的。
在 SN-Net 中,encoder 和 decoder 之间有四个 RA blocks。每个 RA blocks 包含两个残差块和一个 SSA 模块,用以捕获信号内部的局部和全局依赖性,如图 4 所示。每个残差块包含两层二维卷积层,其 kernel size 和 stride 分别为 ( 5 , 7 ) (5,7) (5,7), ( 1 , 1 ) (1,1) (1,1),且其输出通道数等于其输入通道数。这两个残差块的输出特征 F i R e s ∈ R T × F ′ × C ( i ∈ { 1 , 2 , 3 , 4 } \mathcal{F}^{Res}_{i}\in\mathbb{R}^{T\times F^{'}\times C}(i\in\{1,2,3,4\} FiRes∈RT×F′×C(i∈{1,2,3,4} 表示第 i i i 个 RA block,将在后续的描述中被忽略)将被平行地输入到 temporal self-attention 和 frequency-wise self-attention 块中,以生成对应的输出 F T e m p ∈ R T × F ′ × C \mathcal{F}^{Temp}\in\mathbb{R}^{T\times F{'}\times C} FTemp∈RT×F′×C 和 F F r e q ∈ R T × F ′ × C \mathcal{F}^{Freq}\in\mathbb{R}^{T\times F{'}\times C} FFreq∈RT×F′×C。将 F R e s , F T e m p \mathcal{F}^{Res},\mathcal{F}^{Temp} FRes,FTemp 和 F F r e q \mathcal{F}^{Freq} FFreq 进行拼接,并将拼接结果输入到一个二维卷积层以生成输出 F R A ∈ R T × F ′ × C \mathcal{F}^{RA}\in\mathbb{R}^{T\times F{'}\times C} FRA∈RT×F′×C, F R A \mathcal{F}^{RA} FRA 将被用在 interaction module 中。
作者在论文中使用的 self-attention 是 scaled dot-product self-attention。考虑到计算复杂度,通道数将在 SSA 中被减半。temporal self-attention 可以表示为:
F
t
k
=
R
e
s
h
a
p
e
t
(
C
o
n
v
(
F
R
e
s
)
)
,
k
∈
{
K
,
Q
,
V
}
,
S
A
t
=
S
o
f
t
m
a
x
(
F
t
Q
⋅
(
F
t
K
)
T
/
C
2
×
F
′
)
⋅
F
t
V
,
F
T
e
m
p
=
F
R
e
s
+
C
o
n
v
(
R
e
s
h
a
p
e
t
∗
(
S
A
t
)
)
,
(1)
\mathcal{F}_{t}^{k}=Reshape^{t}(Conv(\mathcal{F}^{Res})), k\in \{K,Q,V\},\\ SA^{t}=Softmax(\mathcal{F}_{t}^{Q} \cdot (\mathcal{F}_{t}^{K})^{T}/\sqrt{\frac{C}{2} \times F^{'}})\cdot\mathcal{F}_{t}^{V}, \tag{1}\\ \mathcal{F}^{Temp}=\mathcal{F}^{Res}+Conv(Reshape^{t*}(SA^{t})),
Ftk=Reshapet(Conv(FRes)),k∈{K,Q,V},SAt=Softmax(FtQ⋅(FtK)T/2C×F′)⋅FtV,FTemp=FRes+Conv(Reshapet∗(SAt)),(1)
其中
F
t
k
∈
R
T
×
(
C
2
×
F
′
)
\mathcal{F}_{t}^{k}\in \mathbb{R}^{T \times (\frac{C}{2} \times F^{'})}
Ftk∈RT×(2C×F′),
S
A
t
∈
R
T
×
(
C
2
×
F
′
)
SA^{t}\in \mathbb{R}^{T \times (\frac{C}{2} \times F^{'})}
SAt∈RT×(2C×F′),且
F
T
e
m
p
∈
R
T
×
F
′
×
C
\mathcal{F}^{Temp}\in\mathbb{R}^{T\times F{'}\times C}
FTemp∈RT×F′×C。
(
⋅
)
(\cdot)
(⋅) 表示矩阵乘法,
R
e
s
h
a
p
e
t
(
⋅
)
Reshape^{t}(\cdot)
Reshapet(⋅) 表示将一个张量的形状从
R
T
×
F
′
×
C
2
\mathbb{R}^{T \times F^{'} \times \frac{C}{2}}
RT×F′×2C 转换为
R
T
×
(
C
2
×
F
′
)
\mathbb{R}^{T \times (\frac{C}{2} \times F^{'})}
RT×(2C×F′),
R
e
s
h
a
p
e
t
∗
(
⋅
)
Reshape^{t*}(\cdot)
Reshapet∗(⋅) 的操作正好与其相反。Frequency-wise self-attention 可以表示为:
F
f
k
=
R
e
s
h
a
p
e
f
(
C
o
n
v
(
F
R
e
s
)
)
,
k
∈
{
K
,
Q
,
V
}
,
S
A
f
=
S
o
f
t
m
a
x
(
F
f
Q
⋅
(
F
f
K
)
T
/
C
2
×
T
)
⋅
F
f
V
,
F
F
r
e
q
=
F
R
e
s
+
C
o
n
v
(
R
e
s
h
a
p
e
f
∗
(
S
A
f
)
)
,
(2)
\mathcal{F}_{f}^{k}=Reshape^{f}(Conv(\mathcal{F}^{Res})), k\in \{K,Q,V\},\\ SA^{f}=Softmax(\mathcal{F}_{f}^{Q} \cdot (\mathcal{F}_{f}^{K})^{T}/\sqrt{\frac{C}{2}\times T})\cdot\mathcal{F}_{f}^{V}, \tag{2}\\ \mathcal{F}^{Freq}=\mathcal{F}^{Res}+Conv(Reshape^{f*}(SA^{f})),
Ffk=Reshapef(Conv(FRes)),k∈{K,Q,V},SAf=Softmax(FfQ⋅(FfK)T/2C×T)⋅FfV,FFreq=FRes+Conv(Reshapef∗(SAf)),(2)
其中 F f k ∈ R F ′ × ( C 2 × T ) \mathcal{F}_{f}^{k}\in \mathbb{R}^{F^{'} \times (\frac{C}{2} \times T)} Ffk∈RF′×(2C×T), S A f ∈ R F ′ × ( C 2 × T ) SA^{f}\in \mathbb{R}^{F^{'} \times (\frac{C}{2} \times T)} SAf∈RF′×(2C×T),且 F F r e q ∈ R T × F ′ × C \mathcal{F}^{Freq}\in\mathbb{R}^{T\times F{'}\times C} FFreq∈RT×F′×C。 R e s h a p e f ( ⋅ ) Reshape^{f}(\cdot) Reshapef(⋅) 表示将一个张量的形状从 R T × F ′ × C 2 \mathbb{R}^{T \times F^{'} \times \frac{C}{2}} RT×F′×2C 转换为 R F ′ × ( C 2 × T ) \mathbb{R}^{F^{'} \times (\frac{C}{2} \times T)} RF′×(2C×T)。
上述的公式中,
C
o
n
v
Conv
Conv 表示卷积层,BN 和 PReLU。且所有卷积层的 kernel size 和 stride 都是
(
1
,
1
)
(1,1)
(1,1)。
5.4. Interaction Module
SN-Net 中的语音和噪声分支共享同样的输入信号,这表明两个分支的内部特征是相关的。鉴于此,作者提出了 interaction module 用以交换两个分支之间的信息。使用此模块,从噪声分支转换而来的信息有望被用来增强语音分支中的语音部分并抑制噪声特征,反之亦然。实验部分的消融研究表明,该模块在同时建模语音和噪声方面起着关键作用。
图 5 展示了 interaction module 的结构。以语音分支为例,首先,将来自噪声分支的
F
N
R
A
\mathcal{F}^{RA}_{N}
FNRA 和来自语音分支的
F
S
R
A
\mathcal{F}^{RA}_{S}
FSRA 进行拼接,接着,将拼接结果输入到一个二维卷积层以生成一个乘性掩码
M
N
\mathcal{M}^{N}
MN,该掩码用来预测
F
N
R
A
\mathcal{F}^{RA}_{N}
FNRA 中被保留和被抑制的区域。然后,将
M
N
\mathcal{M}^{N}
MN 与
F
N
R
A
\mathcal{F}^{RA}_{N}
FNRA 元素对应相乘,得到残差表示
H
N
2
S
\mathcal{H}^{N2S}
HN2S。最后,将
F
S
R
A
\mathcal{F}^{RA}_{S}
FSRA 和
H
N
2
S
\mathcal{H}^{N2S}
HN2S 相加,得倒语音特征的滤波版本,该结果将被输入到下一个 RA 块中。该处理过程用公式表示为:
F
S
o
u
t
R
A
=
F
S
R
A
+
F
N
R
A
∗
M
a
s
k
(
F
N
R
A
,
F
S
R
A
)
,
F
N
o
u
t
R
A
=
F
N
R
A
+
F
S
R
A
∗
M
a
s
k
(
F
S
R
A
,
F
N
R
A
)
,
(3)
\mathcal{F}^{RA}_{S_{out}}=\mathcal{F}^{RA}_{S}+\mathcal{F}^{RA}_{N} \ast Mask(\mathcal{F}^{RA}_{N},\mathcal{F}^{RA}_{S}), \\ \mathcal{F}^{RA}_{N_{out}}=\mathcal{F}^{RA}_{N}+\mathcal{F}^{RA}_{S} \ast Mask(\mathcal{F}^{RA}_{S},\mathcal{F}^{RA}_{N}), \tag{3}
FSoutRA=FSRA+FNRA∗Mask(FNRA,FSRA),FNoutRA=FNRA+FSRA∗Mask(FSRA,FNRA),(3)
其中 M a s k ( ⋅ ) Mask(\cdot) Mask(⋅) 表示拼接,卷积和 sigmoid 操作。 ( ⋅ ) (\cdot) (⋅) 表示逐点对应相乘。
5.5. Merge Branch
在两个分支中重构了语音和噪声信号之后,合并分支用来进一步融合这两个输出。这一步是在时域完成的以实现跨域收益。将两个 decoder 的输出转化为时域重叠帧表示:
s
~
∈
R
T
×
K
\widetilde{s}\in\mathbb{R}^{T\times K}
s
∈RT×K 和
n
~
∈
R
T
×
K
\widetilde{n}\in\mathbb{R}^{T\times K}
n
∈RT×K,其中
K
K
K 表示帧长。将这两个表示和含噪信号
x
x
x 堆叠到一起并输入给合并分支。合并网络依次包含一层二维卷积层,一个 temporal self-attention 块(用以捕获全局时间依赖性)和两层卷积层(用以生成掩码
m
∈
R
T
×
K
m\in\mathbb{R}^{T\times K}
m∈RT×K)。所有卷积层的 kernel size 均是
(
3
,
7
)
(3,7)
(3,7), 通道数分别是
3
,
3
,
1
3,3,1
3,3,1。在除最后一层外的卷积层后均使用 BN 和 PReLU,最后一层使用了 sigmoid 激活函数。最终,通过以下公式获得 2D 增强信号:
s
^
=
m
×
s
~
+
(
1
−
m
)
×
(
x
−
n
~
)
.
(4)
\hat{s}=m\times\widetilde{s}+(1-m)\times(x-\widetilde{n}). \tag{4}
s^=m×s
+(1−m)×(x−n
).(4)
使用重叠相加技术从 s ^ \hat{s} s^ 中重构出 1D 信号。
6. 实验
6.1. 数据集
实验使用了三个公开的数据集。
DNS Challenge interspeech 2020 上举办的 DNS Challenge 提供了大规模的训练数据集,其包含了来自 Librivox 的 2150 个说话人共 500 小时的干净语音,和来自 Audioset,Freesound 的共 150 个类别的 60000 条噪声数据。作者合成了信噪比范围为 -5dB,0dB,5dB,10dB,15dB 的共 500 小时的训练数据。使用官方测试集中未带混响的 150 条合成含噪样本用于评估,这些含噪样本的信噪比在 0dB~20dB 之间。
Voice Bank + DEMAND 是 Valentini-Botinhao 等人创建的一个较小的数据集。干净语音来自 Voice Bank corpus,其中 28 个说话人的数据用来训练,额外的 2 个说话人的数据用于测试。噪声来自 DEMAND,用于训练的噪声类型有 10 种,其中 8 种是真实录制的,2 种是人工合成的。用于测试的噪声是来自 DEMAND 的未参与训练的 5 种噪声类型。合成的训练数据的信噪比范围为 0dB,5dB,15dB,20dB,测试数据的信噪比范围为 2.5dB,7.5dB,12.5dB,17.5dB。
TIMIT Corpus 是用于说话人分离的数据集。它包含了 630 个说话人的语音,每个说话人录制了 10 句话。其中 462 个说话人用于训练,168 个说话人用于测试。对来自不同说话人的两句语料以随机的信噪比进行混合,并对短的那句话补零以匹配长的那句话的时长。最终生成的训练集包含了 4620 句话,测试集包含了 1680 句话。
6.2. 评估指标
使用以下指标来评估增强语音的质量,分越高表示质量越好。
- SSNR:分段信噪比。
- SDR:信号失真比。
- PESQ:ITU-T P.862.2 所建议的宽带 PESQ,分数范围为 -0.5~4.5。
- CSIG:信号失真的 MOS 分预测。分数范围为 1~5。
- CBAK:背景噪声浸入性的 MOS 分预测。分数范围为 1~5。
- COVL:整体效果的 MOS 分预测。分数范围为 1~5。
6.3. 实现细节
输入 所有的信号都被重采样到 16kHz,并截取为 2 秒时长。使用 STFT 复数谱作为输入,所用的汉宁窗窗长为 20ms,帧移为 10ms,DFT 的点数为 320。
损失函数 损失函数包含三项,即 L = L S p e e c h + α L N o i s e + β L M e r g e \mathcal{L}=\mathcal{L}_{Speech}+\alpha\mathcal{L}_{Noise}+\beta\mathcal{L}_{Merge} L=LSpeech+αLNoise+βLMerge,其中 L S p e e c h , L N o i s e \mathcal{L}_{Speech},\mathcal{L}_{Noise} LSpeech,LNoise 和 L M e r g e \mathcal{L}_{Merge} LMerge 分别表示三个分支的损失函数。 α \alpha α 和 β \beta β 是用于平衡这三项损失的权重因子。这三项损失均是在经过 power-law 压缩的 STFT 谱上使用 MSE。为了确保 STFT 的一致性,在计算语音分支和噪声分支的损失之前需要先进行一次 iSTFT 和 STFT 操作。
训练 使用 Tensorflow 实现论文所提出的算法。作者使用 adam 优化器,其学习率为 0.0002。使用 Xavier initialization 初始化所有的网路层。整个训练阶段分为两步。首先,使用 α = 1 , β = 0 \alpha=1,\beta=0 α=1,β=0 的配置联合训练语音分支和噪声分支。然后,只使用 L M e r g e \mathcal{L}_{Merge} LMerge 损失来训练合并分支,与此同时保证语音和噪声分支的参数固定不变。使用 DNS Challenge 数据集训练模型 60 轮,并使用 Voice Bank + DEMAND 数据集训练模型 400 轮。除非特别说明,否则实验部分中所有的 batch size 都设置为 32。
6.4. Ablation 研究
客观质量 作者首先基于 DNS Challenge 数据集评估了 SN-Net 中不同部分的有效性。如表 1 所示,作者将不带 SSA 的语音分支作为基线模型。可以观察到,在增加了 SSA 后,SDR 提升了 0.69dB,PESQ 提升了 0.23。通过比较语音分支和没有 interaction module 的 SN-Net,可以发现后者只提升了 SDR 0.29dB,且 PESQ 没有提升。当引入信息流后,与单分支相比,SDR 提升了 0.77dB,PESQ 提升了 0.11。
信息流可视化 为了进一步理解 interaction module 的工作原理,作者对该模块的输入特征,输出特征以及从另一个分支变换而来的特征进行了可视化,如图 6 所示。使用被白噪声干扰的语音信号进行说明,第一列展示了该信号的谱。图 6(b) 所示的转换特征是从 (d) 所示的特征学习而来,将其和 (a) 所示的特征相加得到语音分支的输出特征 (c),反之亦然。通过比较 (a) 和 (c),可以看到经过 interaction 之后,语音能被更好地从噪声中分离出来。对于噪声分支,相比 (d), (f) 中的语音部分大部分被移除。这些结果表明 interaction module 确实有助于同时建模语音和噪声,具有更好的分离性能。就交换信息而言,(d) 中不期望的语音部分被从语音分支中学到的特征所抵消(例如,噪声分支的第二个通道),(a) 中不期望的噪声被从噪声分支中学到的特征所抑制(例如,语音分支的第三个通道)。这些观察结果与我们之前的分析是相符的。
Separable Self-Attention 可视化 作者进一步对 attention 矩阵进行了可视化以探索它学到了什么。图 7 展示了与图 6 相同的音频信号在不同的 RA blocks 中的 temporal self-attention 矩阵,
从 (a) 到 (b),可以看到,除对角线之外,每一帧都表现出对其它帧强烈的 attentiveness,并且对于每个 RA 模块,语音分支和噪声分支表现得不同。这是合理的,因为这两个分支不同的信号,且它们的关注点不同。对于噪声分支,随着网络变深,注意力从局部转移到全局。相比语音分支,噪声分支展现出更宽的 attentiveness,这是因为出现在所有帧中,而语音信号只在某些时间帧中出现。
图 8 展示了同一音频的 frequency-wise self-attention 矩阵。对于语音分支,焦点从低频到全部频点,从局部到全局,这表明随着网络的加深,frequency-wise self-attention 趋向于捕获频率维度的全局依赖性。对于噪声分支,所有的 RA 块均展示出了局部注意力,这是因为白噪声的功率谱密度是恒定的。
6.5. 和 State-of-the-Art 的比较
语音增强 表 2 展示了各种 State-of-the-Art 方法在 Voice Bank + DEMAND 数据集上的比较。SEGAN 和 MMSE-GAN 是基于 GAN 的方法。PHASEN 是一个两分支的时频域的方法,其中一个分支预测幅度,另一个分支预测相位。Koizumi et al. 等人的方法是一个基于 multi-head self-attention 的方法。几乎在所有的评估指标上,作者所提出的方法均超越了其他方法。PESQ,CSIG 和 COVL 指标的大幅提升表明作者的方法保留了更好的语音质量。
表 3 展示了各种 the State-of-the-Art 方法在 DNS Challenge 数据集上的比较。TCNN 是一个时域低延迟的方法。作者实现了它的两个版本,其中 “TCNN” 与原文中所描述的方法完全一样,“TCNN-L” 是其长延迟版本,它使用了作者所使用的时频域的损失函数。Conv-TasNet-SNR 和 DTLN 是实时方法。Multi-Scale+ 和 PoCoNet 是非实时的方法,且 PoCoNet 获得了 2020 DNS challenge 非实时赛道的第一名。由于 DTLN 论文中报告的是窄带 PESQ 分,所以,作者使用已发布的模型来生成增强语音并重新计算指标。对于其他方法,作者直接使用原论文中所报告的分。作者的方法大大优于其他所有方法。
扩展到说话人分离 因为 SN-Net 可以同时建模两个信号,因此,可以很自然地将它扩展到说话人分离任务上。移除合并分支已满足两路输出的需求。在训练期间采用置换不变训练来避免置换问题。作者在 TIMIT corpus 数据集上进行了两说话人分离实验。Batch size设置为 16。为了比较,作者使用已发布的代码训练了一个 Conv-TasNet 的非因果版本,它是目前最 the state-of-the-Art 的方法。
表 4 展示了实验结果。作者使用 SDRi 和 PESQ 两个指标进行评估。与 Conv-TasNet 相比,作者的方法显著提升了 PESQ 0.36 分,以及 SDRi 0.82dB。这表明作者的方法不限定于特定任务,并且有潜力从混合信号中提取不同的加性部分。
7. 结论
作者提出了一个新的双分支卷积神经网络来交互式地同时建模语音和噪声以进行语音增强。特别地,提出的双分支之间的交互可以从另一个分支学习信息以增强对目标信息的建模能力。这种交互使得同时建模两个信号变得可行和有效。此外,作者设计了一个复杂的 RA 块,用于提取双分支的特征,它可以适应语音和各种噪声信号的多样性。评估验证了这些模块的有效性,而且所提方法明显优于 the state-of-the-Art 方法。两个信号同时建模的范式也使其可以应用在说话人分离任务上。
8. 进一步思考
- 语音成分和噪声成分同时建模:传统算法基本上只且只能估计稳态噪声成分,这是因为相比于语音而言,稳态噪声更容易被估计。而基于深度学习的降噪算法通常直接估计语音,从事后诸葛亮的角度分析,这可能也是因为相比于各种各样的非稳态噪声,语音成分反而更容易被神经网络建模,毕竟从频谱图上来看,语音成分大体上只包含了谐波和清辅音。从论文的实验部分可以看出,在语音分支的基础上增加了噪声分支后,模型的客观指标基本持平,在增加了两个分支之间的交互模块之后,客观指标有明显提升。为了使论文更加 solid,感觉应该再补充个对比实验:使语音分支的参数量和整体 SN-Net 的参数量保持一致,看客观质量会如何变化;
- 交互模块:论文的实验部分已经证明了交互模块的重要性。在论文中,该模块被用于语音和噪声之间的信息共享。那么,是否可以借鉴交互模块的思路,将其用于其他两种变量之间的信息共享那?
- Separable self-attention: 使用 Separable self-attention 对时间维度和频率维度的特征同时进行 self-attention 以捕获其对应的全局依赖性,也是论文的主要创新点之一,值得借鉴;
9. 后记
就笔者所知,迄今为止,SN-Net 是在 2020 DNS challenge 的合成测试集(不带混响)上 PESQ 得分最高的模型。也是通过这篇文章笔者才深入了解了 attention 这个在之前看来很高大上的机制。
由于自己的惰性😂,时隔一年多以后才又在 2021 农历年的末尾重新翻译起了文章。翻译这篇文章,总共用了 4 天时间。选择在最后一周翻译这篇文章,首先,是因为这周没有特别要紧的工作要做,其次,SN-Net 是今年花费笔者时间最多的模型,也算是给 2021 年的工作画上一个圆满的句号。
动笔之初,本想着不用翻译的这么细,把模型的主要结构写出来就行,这样会省不少时间。但是转念一想,之前也没翻译几篇文章,而且现在工作中也有了发表论文的需求。因此,还是先乖乖地多翻译些好的文章,以积累自己的写作能力,也希望自己以后能 paper 多多,希望自己以后能坚持翻译,记录,学习,能在工作之余多读论文,多活跃自己的思路。
笔者在 2021 年实现了 SN-Net 的非因果版本,因果版本和半因果版本。其中,半因果版本使用了未来两帧信息,又可以以多种不同的方式实现。笔者将在后续的文章中进一步分析各版本的性能,并介绍如何实现因果 CNN。