论文阅读:CP-GAN: CONTEXT PYRAMID GENERATIVE ADVERSARIAL NETWORK FOR SPEECH ENHANCEMENT
- 时间:2020
- 关键词:语音增强、CP-GAN
abstract
本文之前,Gan在语音增强领域的运用 基本都是借鉴其在CV中的架构,没有根据音频特征(即 不同粒度上下文)对语音增强进行特定设计,这可能会在某些片段中留下噪声点或干扰原始音频的内容。
在本文工作中,首次尝试探索从粗到细的语音增强的全局和局部语音特征,并引入了上下文金字塔生成对抗网络(CP-GAN),其中包含一个密集连接的特征金字塔生成器和一个动态上下文粒度鉴别器,以更好地分层消除音频噪声。
大量实验表明,我们的 CP-GAN 有效地实现了最先进的语音增强结果,并提高了包括自动语音识别和说话人识别在内的更多高级语音任务的性能。
1、介绍
最近,生成对抗网络 (GAN) [5] 提出了一种新的语音增强范式 [6, 7],其中生成器的目标是合成与原始嘈杂语音的内容相匹配的令人信服的语音,并且可以使用鉴别器最小化干净语音信号和增强语音信号分布之间的差异。开创性的工作 SEGAN [6] 在以端到端方式接收原始音频数据时直接训练模型,并获得显着的性能提升。 已经探索了用于语音增强的其他 GAN 变体以构建不同的生成器结构 [8] 或利用其他对抗性损失 [7]。
然而,这些基于 GAN 的方法直接将图像合成任务的架构应用于语音增强,而无需对语音信号进行特定修改。例如,全局话语级上下文可以为整体语音解释提供良好的描述,而局部补丁级特征对噪声干扰更敏感。以前的工作没有很好地利用这种音频特性来改善语音增强。
在本文中,我们首先努力研究充分利用全局和局部语音特征来更好地分层消除音频噪声。我们引入了一个上下文金字塔生成对抗网络,用于从粗到细(全局到局部)的语音增强,称为 CP-GAN,它由一个密集连接的特征金字塔生成器和一个动态上下文粒度鉴别器组成。此外,之前的方法(如 SERGAN [7])使用判别器的固定长度输入来从全局角度引导生成器,这很可能会忽略整个音频的某些片段中的噪声点。为了应对这一挑战,我们提出了一个动态上下文粒度鉴别器模块,该模块包含一个以整个音频为输入的全局鉴别器和一个以随机比例音频片段为输入的局部鉴别器,它可以利用上下文的动态粒度来确定语音质量。
本文贡献总结:
1. 我们提出了一种新的上下文金字塔生成通用网络(CP-GAN)用于语音增强,由密集连接的特征金字塔生成器和动态上下文粒度鉴别器组成
2. 实验结果表明,我们的 CP-GAN 优于所有基于 GAN 的方法,并在语音增强方面达到了最先进的性能。
3. 为了进一步评估我们的方法,我们基于增强的音频进行了自动语音识别和说话人识别的实验,这也证明了我们用于语音增强的 CP-GAN 能够提升高级语音任务。
2、使用GAN进行语音增强
最近,生成对抗网络 (GAN) 在许多具有挑战性的任务中取得了巨大成功,例如图像翻译 [11]、超分辨率 [12] 和语音增强 [6]。GAN 中有两个重要组件:生成器 (G) 和鉴别器 (D),其中 G 的作用是将样本 z 从一个先验分布 Z 映射到另一个分布 X 的样本 x,D 旨在识别样本是否 是生成的。G 试图生成尽可能真实的样本来欺骗 D,而 D 则最大程度地拒绝欺骗。 通过不断玩这个极小极大游戏直到达到纳什均衡,G 可以生成相当逼真的样本 。
条件 GAN(CGAN)通常用于增强退化的语音。 在 CGAN 中,G 旨在通过最小化以下目标将嘈杂的语音信号 y 映射到相应的干净语音信号 x:
L
o
s
s
C
G
A
N
(
G
)
=
−
E
y
[
l
o
g
D
(
G
(
y
)
,
y
)
]
+
∥
G
(
y
)
−
x
∥
Loss_{CGAN}(G) = -\mathbb{E} _y[logD(G(y),y)] + \|G(y)-x\|
LossCGAN(G)=−Ey[logD(G(y),y)]+∥G(y)−x∥
D 的目标是通过最小化以下损失函数来区分真实数据和生成数据:
L
o
s
s
C
G
A
N
(
D
)
=
−
E
x
l
o
g
D
(
x
,
y
)
−
E
y
[
l
o
g
(
1
−
D
(
G
(
y
)
,
y
)
]
Loss_{CGAN}(D) = -\mathbb{E}_x{logD(x,y)} - \mathbb{E}_y[log(1-D(G(y),y)]
LossCGAN(D)=−ExlogD(x,y)−Ey[log(1−D(G(y),y)]
然而,标准 CGAN 遗漏了一个关键要素,即随着生成的样本为真概率的增加,真实样本为真的概率应该降低 [13]。真实样本为真的概率在标准 CGAN 中保持不变,因为 G 不影响真实数据[13]。 为了解决这个问题,相对 GAN 估计给定真实数据的概率比相应的生成数据更真实,表示为
D
r
e
a
l
=
δ
(
C
(
x
,
y
)
−
C
(
G
(
y
)
,
y
)
)
D_{real} = \delta (C(x,y)-C(G(y),y))
Dreal=δ(C(x,y)−C(G(y),y))
其中 C 是没有最终激活层的鉴别器。 类似地,它对生成的样本为真实样本的估计概率是相对于真实样本的:
D
f
a
k
e
=
δ
(
C
(
G
(
y
)
,
y
)
−
C
(
x
,
y
)
)
D_{fake} = \delta (C(G(y),y)-C(x,y))
Dfake=δ(C(G(y),y)−C(x,y))
基于这种修改,相对 GAN 在去噪语音信号的质量上有了很好的改进。 我们的 CP-GAN 通过结合上下文金字塔结构来开发相对 GAN,以利用局部和全局语音特征进行从粗到细的语音增强。
3、上下文金字塔生成对抗网络
我们的 CP-GAN 包含一个密集连接的特征金字塔生成器和一个动态上下文粒度鉴别器,它可以利用分层上下文信息来执行细粒度的语音增强。 我们的 CP-GAN 的整体架构如图 1 所示
(图一)我们用于语音增强的 CP-GAN 的插图,其中包含一个密集连接的特征金字塔生成器和一个动态上下文粒度鉴别器。 音频首先被输入生成器以产生干净的语音,该语音由密集块和特征金字塔模块组成,以更好地利用上下文。 全局判别器将生成的音频和原始音频作为输入,并将它们的采样段馈入本地判别器。 这两个鉴别器一起工作,分层判断增强语音的质量。
3.1、密集连接特征金字塔生成器
现有的基于 GAN 的语音增强方法通常采用编码器-解码器结构作为生成器 [6, 7],其中编码器利用步长为 2 的重复卷积操作来产生不同尺度的特征,解码器包含多个反卷积,采用最后一个反卷积的特征层和编码器中对应层的输出作为输入来恢复增强的语音。 尽管这种结构利用跳跃连接来关联不同级别的特征,但它仍然只在最精细的级别上进行预测。 在实际应用中,小尺度特征包含更多的语音全局信息,而大尺度特征包含更多的语音细节。 通过各种手段融合不同尺度的特征有助于消除噪声。 受此观察的启发,在本文中,我们构建了一个利用特征金字塔网络 (FPN) [9] 作为核心的生成器。 此外,为了确保层之间的最大信息流,我们还将密集块[10]合并到网络中,从而构建一个紧密连接的特征金字塔生成器。
如图 1 所示,FPN 主干产生四个不同尺度的金字塔特征。 我们将这些特征上采样到噪声输入语音的 1/4 长度,并将它们连接成一个具有不同上下文信息的张量。 应用另外两个上采样和一个卷积层来获得最终的增强语音信号。 在 FPN 主干中,我们使用密集块来生成不同规模的特征。 与传统的 ResNet 块或卷积层相比,密集块中的每一层都将前面的所有特征作为输入,当前层的输出馈送到后面的所有层,有效缓解了梯度消失问题,加强了特征传播并鼓励了特征重用。
3.2、动态上下文粒度鉴别器
以前的作品只使用一个鉴别器来引导生成器产生增强的语音。 然而,语音信号是一种不稳定的信号,尤其是在添加了加性噪声的情况下。 换句话说,在语音的某个位置存在强噪声,而在另一个位置没有噪声或噪声很弱。 此外,我们无法确定噪音持续多长时间,它可能持续很长时间,也可能持续很短。 在嘈杂的语音中更加重视增强某些片段是非常重要的。 因此,我们提出了一种动态上下文粒度判别器,包含全局判别器和局部判别器来确定语音质量,其中局部判别器可以判断语音片段的任何粒度和位置。
类似于 SERGAN[7],全局判别器将生成的语音信号
x
ˉ
(
x
ˉ
=
G
(
y
)
)
\bar x (\bar x = G(y))
xˉ(xˉ=G(y)) 与噪声语音
y
y
y 作为输入,并输出生成的语音
x
ˉ
\bar x
xˉ 为真的概率,它从整体角度知道生成器生成无噪声语音。对于局部辨别器,我们从生成语音
x
ˉ
\bar x
xˉ 中随机截取
k
k
k 个片段(论文中k=10),表示为
x
ˉ
1
,
x
ˉ
2
,
.
.
.
,
x
ˉ
k
\bar x_1,\bar x_2,...,\bar x_k
xˉ1,xˉ2,...,xˉk,对具有相同粒度和索引的带噪语音信号
y
y
y 和干净语音信号
x
x
x 执行相同的操作,对应的片段为
y
1
,
y
2
,
.
.
.
,
y
k
y_1,y_2,...,y_k
y1,y2,...,yk,
x
1
,
x
2
,
.
.
.
,
x
k
x_1,x_2,...,x_k
x1,x2,...,xk,对于每两对
(
x
ˉ
i
,
y
i
)
(\bar x_i,y_i)
(xˉi,yi) 和
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi),我们分别将他们输入局部鉴别器,来产生片段
x
ˉ
i
\bar x_i
xˉi 为真的概率:
p
(
x
ˉ
i
,
y
i
)
=
δ
(
C
(
x
ˉ
i
,
y
i
)
−
C
(
x
i
,
y
i
)
)
p(\bar x_i,y_i) = \delta (C(\bar x_i,y_i) - C(x_i,y_i))
p(xˉi,yi)=δ(C(xˉi,yi)−C(xi,yi))
我们选择最小的概率来计算生成器的对手损失:
G
l
o
c
a
l
D
l
o
s
s
=
−
l
o
g
(
m
i
n
(
p
(
x
ˉ
i
,
y
i
)
)
)
G_{localD_loss} = -log(min(p(\bar x_i,y_i)))
GlocalDloss=−log(min(p(xˉi,yi)))