0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度学习是如何帮助我们提高噪声消除的质量的

zhKF_jqr_AI 来源:未知 作者:李倩 2018-11-18 09:07 次阅读

想像一下,你正在机场候机,突然来了一通重要的商务电话,而你身处的背景有嘈杂的交谈声、飞机起飞的噪音、甚至还有机场广播。这个时候打电话就很尴尬,生怕对方听不清自己的声音。

现在,英伟达推出了一款名为2Hz的产品,让你接起电话并开始讲话时,噪声突然消失,电话那头的人听不到任何干扰声音。接下来论智将对这一技术详细介绍,首先通过下面的视频了解下这款产品的效果吧:

两年前,我们决定创建一种技术,当人与人沟通交流时,能完全屏蔽背景噪声,让沟通的过程更愉悦、智能。从那时开始,这个问题就一直成为我们关注的重点。

在这篇文章中,我们会了解,为什么噪声抑制这么难、想创建实时的低延迟噪声抑制系统都需要些什么、以及深度学习是如何帮助我们提高噪声消除的质量的。

目前的噪声抑制技术

首先,我们要知道什么是噪声抑制。在这篇文章中,噪声抑制表示,当你与他人通话时,消除来自你所处背景中的噪声,同时也会消除对方背景中的噪声,如下图所示:

噪声抑制是双向的

传统的噪声抑制方法

传统的噪声抑制技术通常用于一些设备的边缘,例如手机、笔记本电脑、会议系统等等。这种方法看起来很直接,因为设备的边缘是最先捕捉到用户声音的位置。一旦捕捉到声音,设备会将杂音过滤掉,传递到对话的另一端。

十年前,手机通话的体验还非常差。但现在,越来越多的手机会配有多个麦克风,可以帮助抑制环境噪声。

如下图所示,现在的手机通常有两个甚至多个麦克风,最新一代的iPhone有4个。第一个麦克风在手机前面下部,最靠近用户的嘴巴,可以直接捕捉用户声音。手机设计师将第二个麦克风设计得尽量远离第一个麦克风,通常在手机背部的下方。

pixel 2016,黄色区域是麦克风的位置

这两个麦克风都能捕捉到背景声音,不过第一个能捕捉到更多人类声音,第二个收到的人类声音更少。之后通过软件处理,生成一种接近清晰的人声。

这种方法听起来很简单,但事实上失败的次数也很多。例如,当通话者没有说话时,麦克风接收到的全是噪音。或者说话者在打电话过程中会不断晃动手机等等,这种情况就难以处理了。

此外,两个或两个以上的麦克风设计会给生产厂商增加难度,音频/硬件/软件工程师们必须在工业设计和语音质量上做取舍。

目前,手机已经能在嘈杂的环境中表现得不错了,虽然现在的噪声抑制技术还不够完美,但是的确在用户体验上有了极大提升。

当使用分离的麦克风时,尺寸因素又成为了一大问题,如图所示,第一个和第二个麦克风之间的距离必须符合最小距离要求,只有这样才能既让用户听得清,也能让手机捕捉到清晰的人声。

但是,直板似的手机不是唯一的通讯设备。可穿戴设备(智能手表、附着在胸部的麦克风等)、笔记本电脑、平板电脑和智能语音助手等都和手机的设计有所不同。用户会从设备的任意角度、距离进行通话。在大多数情况下,很难有通用的噪声抑制技术。

从多麦克风设计转移到单一麦克风设计

多麦克风的设计有几点重要的缺点:

它对尺寸有一定要求,只能用于手机或头戴设备上;

多麦克风的设计会导致音频路径非常复杂,需要更多硬件和代码的支持。除此之外,第二个麦克风打孔的位置也对工业生成有较高要求;

音频只能在设备边缘处理,所以算法可能无法支持过于复杂的计算。

那么是否有一种方法,可以将多个麦克风合成一个,将所有的后期处理都交给软件?从而硬件设计更简单,也更高效。

传统的数字信号处理(DSP)算法尝试持续寻找噪声模式,逐帧处理音频。这些算法在特定案例中表现得很好,但是无法扩展到日常场景中。

基础噪声的类型有两类:静止和非静止的,如下图所示:

白噪声(静止)和Chirp噪声(非静止)的声谱图

我们可以将静止的噪声想象成一直重复、但和人类语音不同的声音。传统的DSP算法(自适应过滤)在消除这类噪声时很有效。

而非静止噪声的模式非常复杂,和人类声音的模型很相似,难以区分。它们的信号很短,并且出现的速度很快(类似在键盘上打字)。

如果想同时解决以上两种噪声,可能就要突破传统数字信号处理技术了。我们认为,深度学习是解决这一问题的重要方式,所以提出了2Hz。

用深度学习分离背景中的噪声

2015年,Yong Xu等人曾发表论文,提出用深度学习进行噪声抑制。Yong提出一种回归方法,通过学习为每个音频率生成比例掩码。生成的比例掩码完全与人声分离,并且可以删除外部噪声。虽然这种方法还不够完美,也算一个很好的基础了。

在接下来的几年时间里,很多不同方法相继出现,高级别的方法几乎相同,它们常常分为三步:

数据收集:将纯净的语音和噪音混合,生成大量合成的嘈杂数据集;

训练:将数据集输入到DNN中,得出清晰的语音输出。

推理:创建掩码,将人声与噪声分离开。

在2Hz中,我们尝试了多种DNN,最终得出了唯一的DNN架构,可以在多种场景下得出可靠的结果。平均MOS分数上升了1.4,是目前最佳成绩。

能否实现实时DNN?

延迟是实时对话中的重要问题。人类可以忍受的上限为200毫秒的延迟,否则的话就会影响通话效果。

影响端到端延迟的因素有三个:网络、计算和编解码器。通常网络延迟是主要因素。编解码器的延迟根据不同模式可能会有5—80毫秒的延迟,但是目前所用的编解码器已经非常高效了。而计算的延迟则有多方面因素。

计算延迟让DNN更具挑战性。如果你想用DNN处理每一帧,结果很可能会造成严重的延迟。计算延迟取决于以下几点因素:

计算平台的能力

我们不可能在一台头戴设备中运行大型DNN,因为有CPU电源的限制。所以想做到实时处理非常困难,除非平台有一台加速器,可以快速进行矩阵相乘,并且还不那么费电。

DNN架构

DNN的速度取决于有多少个超参数、DNN的层数,以及节点进行的什么操作。如果你想生成高质量结果,那么DNN就不能太小。

音频采样率

DNN的表现取决于音频采样率,采样率越高,得到的超参数就越多。

如何测试噪声抑制算法?

测试声音是否得到改善也是一个难题,因为人耳很难分辨细微的差别。可是,目前也没有公开的针对噪声抑制效果的基准,所以对结果进行比较比较有挑战性。

大多数论文采用PESQ、MOS和STOI衡量结果。你提供一个原始声音音频和经过处理的音频,算法会生成一个分数。

ETSI Room

另一种更专业的发方法是进行主观音频测试,在不同标准体上测试看它们能否符合标准。

EGPP通讯组织创建了ETSI Room,如果你想将算法应用到实际中,就必须在设备中安装这一装置。

这一设置能完美地将噪声分离。它其中有一个智能机器人,内置的扬声器会模拟声音,另外在一定距离之外还有麦克风。

这一设备能让测试者用周围的扬声器模拟不同噪声,从机器人的扬声器里发出人声,最终用算法处理捕捉到的音频。这一切都能自动进行。

输出噪声和输入噪声

假设现在你正在和团队参加电话会议,总共有4人。所以潜在的噪声就有4种,每个人都有可能制造背景噪声。

传统来说,噪声抑制都在边缘设备上,也就是仅限于麦克风。你从麦克风中得到信号,一直噪声,然后对信号进行上采样。

由于单一麦克风的DNN方法只需要一个源流,你可以将它放置在任意地方。假设现在你想过滤掉麦克风的信号(输出噪声)和听到的扬声器中的信号(输入噪声)。我们创建了APP——Krisp,它可以处理两种噪声:

以下视频演示了非静止噪声是如何被DNN过滤掉的:

对输入噪声抑制来说,问题变得越来越复杂了。你需要处理算法不常见的声音和人声变体。例如,你的团队可能会用到会议设备,或者离设备距离较远。或者远程的人是从车里打的电话,带来更多环境噪声。另外,可能会有几个人同事说话的情况,这样又该怎样判定哪些是噪声呢?

有时听到手机铃声响起,他应该算是噪声还是铃声?

转向云计算

了解了噪声抑制技术所需要的条件,而算法又是完全基于软件的,那么它可以迁移到云上吗?如下图所示:

在云上进行噪声抑制有多种优点

答案是肯定的。首先,基于云的噪声抑制技术能在多种设备上运行,另外,它能进行双向甚至多向工作。在过去,这是不可能的事,因为传统方法需要多个麦克风。然而,深度学习技能支持单个麦克风,也能用云进行计算。

现在,最大的问题就是算法的可扩展性了。

GPU vs CPU

如果我们想让算法足够服务真实的因特网语音(VoIP)负载,我们就需要了解算法是如何工作的。

目前的大型VoIP设备可以支持10K—100K的流。有很多因素会影响媒体服务器可以支持的音频流,其中最主要的因素就是服务器平台。如下图所示,基于云的媒体服务器和经过优化的裸机服务器相比,裸机服务器明显胜出:

服务器必须价格实惠,才能让消费者看到优势。我们首先用CPU对2Hz做了实验,单个CPU核可以处理最多10个平行流。

之后,我们在GPU上做了实验,结果非常惊人。一个英伟达1080ti在没有优化的情况下可以扩展到1000个流,经过优化最大可以达到3000个流。

用CUDA进行批处理

让我们来研究下,为什么GPU能比CPU强这么多。

CPU供应商们一直以来将大量的时间和精力用于优化和加速单线程架构,用算法和各种技术尽可能缩短单线程的时间。因为大多数应用都只需要一个线程,所以CPU制造者只需要发展结构即可让应用发挥最大性能。

而GPU供应商需要对很多平行任务进行优化,大量平行都需要3D图形处理。

批处理(Batching)就是在GPU中平行处理的意思,你讲一批数据输入进GPU中,经过平行处理后再返回,这是音频流处理的理想工具:

这里,我们用英伟达的CUDA库直接在英伟达GPU上运行这一过程。下方的代码表示CUDA的矩阵相乘过程。

void kernelVectorMul(RealPtr dst, ConstRealPtr src1, ConstRealPtr src2, constsize_t n)

{

constsize_t i = threadIdx.x + blockIdx.x * blockDim.x;

if (i < n)

dst[i] = src1[i] * src2[i];

}

voidUtils::vectorMul(RealPtr dst, ConstRealPtr src1, ConstRealPtr src2, constsize_t n)

{

dim3 gridSize(n / getDeviceMaxThreadsX() + 1, 1, 1);

dim3 blockSize(getDeviceMaxThreadsX(), 1, 1);

kernelVectorMul <<< gridSize, blockSize >>> (dst, src1, src2, n);

}

voidUtils::vectorMul(Vector& dst, constVector& src1, constVector& src2)

{

vectorMul(dst.getData(), src1.getData(), src2.getData(), dst.getSize());

}

voidUtils::matrixMulRowByRow(Matrix& dst, constMatrix& src1, constMatrix& src2)

{

vectorMul(dst.getData(), src1.getData(), src2.getData(), dst.getSize());

}

下面是用CUDA进行快速傅里叶变换的过程。

FFT::StatusType FFT::computeBackwardBatched(ComplexTypePtr src, RealTypePtr dst)

{

StatusType s = cufftExecC2R(backward_handle_, reinterpret_cast(src), dst);

dim3 gridSize((getBatchSize() * getForwardDataSize()) / thr_max_ + 1, 1, 1);

dim3 blockSize(thr_max_, 1, 1);

float val = getForwardDataSize();

kernelDivide <<< gridSize, blockSize >>> (dst, val, getBatchSize() * getForwardDataSize());

return s;

}

FFT::StatusType FFT::computeBackwardBatched(ComplexVector& src, Vector& dst)

{

return computeBackwardBatched(src.getData(), dst.getData());

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英伟达
    +关注

    关注

    22

    文章

    3740

    浏览量

    90802
  • 深度学习
    +关注

    关注

    73

    文章

    5492

    浏览量

    120962

原文标题:英伟达用深度学习消除背景噪声

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何消除噪声干扰,提高测量的精准度?

    如何消除噪声干扰,提高测量的精准度?
    发表于 05-10 06:29

    如何使用MATLAB帮助相关人员执行深度学习任务

    MATLAB支持的模型有哪些呢?如何使用MATLAB帮助相关人员执行深度学习任务呢?
    发表于 11-22 07:48

    什么是深度学习?使用FPGA进行深度学习的好处?

    什么是深度学习为了解释深度学习,有必要了解神经网络。神经网络是一种模拟人脑的神经元和神经网络的计算模型。作为具体示例,让我们考虑一个输入图像
    发表于 02-17 16:56

    窥一窥深度学习这一黑盒子

    为了处理好视觉信息,我们引入结构化学习学习输出结构化的信息在我们打开深度学习黑盒子的过程中是很
    的头像 发表于 05-23 11:30 6645次阅读
    窥一窥<b class='flag-5'>深度</b><b class='flag-5'>学习</b>这一黑盒子

    深度学习陷困境_人工智能遇瓶颈

    现在,深度学习面临着无法进行推理的困境,这也就意味着,它无法让机器具备像人一样的智能。但是真正的推理在机器中是什么样子的呢?如果深度学习不能帮助我们
    的头像 发表于 12-01 09:41 3241次阅读

    深度学习和普通机器学习的区别

    本质上,深度学习提供了一套技术和算法,这些技术和算法可以帮助我们对深层神经网络结构进行参数化——人工神经网络中有很多隐含层数和参数。深度学习
    的头像 发表于 06-08 14:44 4418次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b>和普通机器<b class='flag-5'>学习</b>的区别

    机器学习算法帮助我们做出更好的决定

    机器学习算法,可以帮助我们做出更好的决策,通过将人类的偏见最小化,使用更完整的数据集,或者弥补我们决策软件中已知的缺陷。
    的头像 发表于 08-14 16:47 2857次阅读

    基于深度学习的视频质量评价方法及模型研究

    视频质量评价(VQA)是以人眼的主观质量评估结果为依据,使用算法模型对失真视频进行评估。传统的评估方法难以做到主观评价结果与客观评价结果相一致。基于深度学习的视频
    发表于 03-29 15:46 81次下载
    基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的视频<b class='flag-5'>质量</b>评价方法及模型研究

    我们在如何基于深度学习做实时噪声抑制

    在实时通讯技术迅猛发展的今天,人们对通话时的降噪要求也不断提高深度学习也被应用于实时的噪声抑制。本次LiveVideoStackCon 2021 上海站中,
    的头像 发表于 05-13 10:28 2875次阅读
    <b class='flag-5'>我们</b>在如何基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>做实时<b class='flag-5'>噪声</b>抑制

    消除工厂中的噪声

    消除工厂中的噪声
    发表于 11-02 08:16 0次下载
    <b class='flag-5'>消除</b>工厂中的<b class='flag-5'>噪声</b>

    RFID 技术帮助我们跟踪几乎任何事物

    新技术星期二:RFID 技术帮助我们跟踪几乎任何事物
    的头像 发表于 12-29 10:02 817次阅读

    静电测试仪如何在生产中帮助我们

    静电测试仪在生产中可以帮助我们进行静电防护和质量控制。以下是它在生产中的具体帮助: 1. 静电防护:静电测试仪可以用来测量物体表面的静电电荷,通过监测静电电荷的大小和分布情况,预防静电产生和积累
    的头像 发表于 07-04 09:52 487次阅读
    静电测试仪如何在生产中<b class='flag-5'>帮助我们</b>

    深度学习框架是什么?深度学习框架有哪些?

    深度学习框架是什么?深度学习框架有哪些?  深度学习框架是一种软件工具,它可以
    的头像 发表于 08-17 16:03 2665次阅读

    基于机器视觉和深度学习的焊接质量检测系统

    基于机器视觉和深度学习的焊接质量检测系统是一种创新性的技术解决方案,它结合了先进的计算机视觉和深度学习算法,用于实时监测和评估焊接过程中的焊
    的头像 发表于 01-18 17:50 737次阅读

    日常生活中,IP代理中的哪些功能可以帮助我们

    IP代理作为一种网络通信技术,具有多种功能,可以帮助我们在多个方面提升网络使用的便利性和安全性。IP代理在保护隐私、提高网络访问速度和性能、提供网络安全保障、方便网络管理以及支持爬虫和数据采集、网络营销等方面都具有重要作用。
    的头像 发表于 09-14 08:04 140次阅读