网站首页 > 技术文章 正文
编者推荐序:本文提出了一种基于生成对抗网络的语音增强算法,首次将GAN网络应用于语音增强,并通过实验证明了本文算法相对维纳滤波等方法的明显优势。同时,作者提供了本文算法的下载链接,感兴趣的同学不妨一试。
推荐指数 ☆☆☆☆☆
一、引言
语音增强(Speech Enhancement)是指提高被加性噪声污染的语音的清晰度和质量,最主要的应用支出是提高噪声环境下的移动通信质量。然而,在助听器和耳蜗埋植等应用中,在功率放大前增强信号介意明显降低不舒服度和增加清晰度。此外,语音增强已成功应用于语音识别和说话人辨别系统的预处理阶段。
经典的语音增强方法有频谱提取(spectral subtraction)、维纳滤波(wiener filtering)、基于统计模型的方法(statistical model-based method)和子空间算法(subspace algorithm)。80年代后,神经网络也开始应用于语音增强。最近,降噪自编码器(denoising auto-encoder)被广泛采纳。然而,递归神经网络(Recurrent Neural Network,RNN)也被采用。例如,递归降噪自编码器利用了含噪信号(embedded signal)的时域上下文信息而获得优越性能。大多数最新方法将长短记忆存储(long short-term memory)RNN应用于降噪。有的学者将估计的噪声特征包含在深度神经网络的输入特征中,dropout、后滤波和perceptually motivated metrics等技术被证明是有效的。
大多数现代系统都是基于短时傅里叶分析框架的,它们仅仅改变了频谱幅度,常常任务短时相位对语音增强不重要。然而,一些深层研究显示语音质量可以明显提高,特别是在干净的相位谱已知时。1988年,Tamura等人提出了直接工作于原始音频波形的深度网络,但是他们在一个说话者依赖和隔离词的数据库上一帧一帧使用前馈层。
在深度学习生成模型方面的最新突破是生成对抗网络(generative adversarial network,GAN),GAN在计算机视觉领域生成逼真图像上取得巨大成功,可以生成像素级、复杂分布的图像。据我们所知,GAN还没有应用于语音生成或语音增强方面,所以本文是首次将对抗框架应用于语音信号生成上。
本文提出的语音增强GAN主要优点有:a、提供了一种快速增强处理方法,不需要因果关系,因此没有RNN中类似的递归操作;b、直接处理原始音频的端到端方法,不需要手工提取特征,不需要对原始数据做明显假设;c、从不同说话者和不同类型噪声中学习,并将它们结合在一起形成相同的共享参数,使得系统简单且泛化能力较强。
二、生成对抗网络
GAN是学习将服从某种分布Z的样本z映射为服从另外一种分布X的样本x的生成模型。负责映射的叫生成器(generator)G,其主要任务是学习模仿真实的数据分布,生成与训练集相关的新样本。值得一提的是,G并不是通过记住输入输出对,而是将数据分布特征映射到先前Z中定义的特征。
G是通过与辨别器(discriminator)D的对抗训练学习映射的。D是典型的二类分类器,输入是实际样本和G生成的假样本。G试图愚弄D,通过调整参数使D将G的输出分类为正例(real);而D需要将G产生的逼真样本辨别为负例,因此称之为“对抗”。通过后向传播,D辨别分类能力越来越强,G对训练数据的拟合程度越来越高,如下图所示。
这种对抗学习过程可以用公式表示为G和D的最小最大,目标函数为
如果我们有G或D映射或分类的一些额外信息,就可以得到带有条件的GAN版本,可以增加一些额外的输入x_c,并将目标函数调整为
为了稳定训练并提高G生成样本的质量,GAN有一些新的改进,因为经典方法会有sigmoid交叉熵损失函数导致的梯度消失问题。我们采用最小平方GAN(least-squares GAN,LSGAN)方法,将损失函数替换为编码为1(real)和0(fake)的最小平方函数。这样,式(2)可改写为
三、语音增强GAN
语音增强问题是由输入含噪信号x得到增强信号x_est,本文通过语音增强GAN(speech enhancement GAN,SEGAN)实现,其中G网络用于增强。G的输入时含噪语音信号x和潜在表征(latent representation)z,输出是增强后的信号x_est=G(x)。我们将G设计为全部是卷积层而没有全连接层,这强制网络集中在输入信号和整个分层过程中的时间上紧密的相关性(This enforces the network to focus on temporally-close correlations in the input signal and throughout the whole layering process)。此外,这么做也减少了训练参数从而缩短了训练时间。
G网络和自编码器在结构上类似,如下图所示。编码阶段,输入信号通过一些含PReLU的步进卷积层(strided convolutions)投影和压缩,在N个滤波器后得到一个卷积结果。之所以选择步进卷积,是由于它们在GAN训练时比其它池化方法更稳定。直到得到一个与潜在向量z连接的被称为the thought vector c的高度抽象表征。解码阶段是解卷积过程。
G网络的一个重要特点是端到端结构,直接处理16kHz采样的原始语音信号,避免了通过中间变换提取声学特征,这是与很多常规方法不同之处。在这种模型下,我们必须对平均绝对值误差或均方误差等典型回归损失特别小心,就像原始语音生成模型WaveNet描述的那样。这些损失对输出分布做出了较强的假设,强加了重要的建模限制,比如不允许多模态分布,并将预测偏向所有可能预测的平均值。我们突破这些限制的方法是利用生成对抗设置。这样,D负责向G发送输入数据中哪些是真的哪些是假的,使得G可以将其输出波形朝着真实的分布微调,从而消除噪声信号。
通过初步试验,我们发现G的损失中增加一个二次项(最小化生成样本和干净样本之间的距离)更有效。我们选择在图像处理中已经验证有效的L1范数作为距离的量度。这样,G的新的损失函数变为
四、实验准备
为了评估SEGAN的有效性,将Valentini等人的数据集重排。之所以选择该数据集,是由于它开放容易获取,总量和类型符合本文要求:许多不同类型的噪声和许多不同说话者。从Voice Bank语料库中选择30个说话者,28个用来训练,2个用来测试。40种不同的噪声环境被用来设置含噪训练集。
模型通过RMSprop迭代训练86次,学习率为0.0002,batch大小为400。训练样本为真实干净信号和含噪信号、增强信号和含噪增强信号,如下图所示。为了使数据集文件充分满足我们的波形生成的目的,我们将采样率由48kHz降为16kHz。训练中采取重叠划窗截取波形,窗长大约1s,16384个采样点,重叠500ms。然而测试时,采用不重叠划窗。
设置L1正则系数为100。G由22个1维strided 卷积层构成,宽度为31,步长N=2。滤波器个数随层数递增,宽度随层数递减。每层为采样数×特征图,分别为16384×1、8192×16、4096×32、2048×32、1024×64、512×64、256×128、128×128、64×256、32×256、16×512、8×1024。因此,噪声z为8×1024的标准正态分布。G的解码阶段是编码阶段的镜像,滤波器宽度和个数与编码阶段保持镜像关系。然而skip 连接和加入的特征向量使得每层特征图个数加倍。
网络D同样由1维卷积结构构成,是个卷积分类网络,有两个16384样本输入通道,使用alpha为0.3的LeakyReLU非线性激活函数,最后一层为1×1的卷积。最后一层将隐藏层线性连接,并降低了最后分类神经元所需的参数个数(reduces the amount of parameters required for the final classification neuron, which is fully connected to all hidden activations with a linear behavior),将全连接所需的8×1024=8192个参数降为8,1024个通道合并后学习卷积参数(the 1024 channels are merged is learnable in the parameters of the convolution)。(编者曰:1×1如何实现特征通道合并的?请留言)
项目采用TensorFlow深度学习架构开发,源码在https://github.com/santi-pdp/segan。
五、实验结果
5.1 客观评价
计算常用的PESQ、CSIG、CBAK、COVL等指标,结果如下图所示。在PESQ和COVL指标上,SEGAN比含噪信号和维纳增强信号略好,SEGAN比维纳减少的噪声少些(CBAK),但是产生了更少的失真(CSIG),因此获得了更好的整体效果(COVL)。
5.1 主观评价
19位听众听测试集中20个打乱顺序的句子,然后给出1-5评分。每个句子都有三个版本,含噪信号、维纳增强信号和SEGAN增强信号,且顺序随机。测试结果如下图所示。
可以看出SEGAN是最好的。
英文题目:SEGAN: Speech Enhancement Generative Adversarial Network
原文连接:https://arxiv.org/pdf/1703.09452.pdf
互动:降噪滤波需要这么复杂吗,本文有可能实时实现吗?请留言探讨。
死磕自律,遇见更好的自己;认知升级,助你长出强两翼!
关注该头条号,一起创造奇迹。
猜你喜欢
- 2024-10-12 Item2Vec负采样优化基础上专题地图产品个性化推荐方法探究
- 2024-10-12 LibRec 每周算法:AutoRec (WWW'15)
- 2024-10-12 NTT DoCoMo新应用提升驾驶员与乘客匹配率
- 2024-10-12 这725个机器学习术语表,太全了 3分钟了解机器学习
- 2024-10-12 深度学习中高斯噪声:为什么以及如何使用
- 2024-10-12 NeurIPS 2021 | CyGen:基于概率论理论的生成式建模新模式
- 2024-10-12 数据挖掘干货总结(十)-- 神经网络和深度学习
- 2024-10-12 DevZone | NVIDIA OptiX光线追踪引擎
- 2024-10-12 清华大学廖方舟:产生和防御对抗样本的新方法 | 分享总结
- 2024-10-12 一文看懂AutoEncoder模型演进图谱
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)