RNN denoise

RNNoise:学习噪声抑制 RNN,RNNoise 阅读详情

前言
我将通过几篇文章来介绍一下RNN用于降噪的实例。
综合论文和项目介绍及代码编写
原文链接:https://people.xiph.org/~jm/demo/rnnoise/

上图显示了前后音频噪声抑制的频谱图。(上:noisy,中:RNNoise,下:clean speech)

RNNoise
该演示介绍了RNNoise项目,显示了如何将深度学习应用于噪声抑制。主要思想是将经典信号处理与深度学习结合起来,创建一个小而快速的实时噪声抑制算法。不需要昂贵的GPU,可以在Raspberry Pi上轻松运行。结果更简单(更容易调谐),听起来比传统的噪音抑制系统更好。

噪声抑制
噪音抑制是言语处理中的一个相当古老的话题,至少可以追溯到70年代。顾名思义,这个想法是采取嘈杂的信号,并尽可能多地消除噪音,同时对感兴趣的言论造成最小的失真。


传统噪音抑制
这是传统噪声抑制算法的概念图。语音活动检测(VAD)模块检测信号何时包含声音以及何时只是噪声。这被噪声谱估计模块用于计算噪声的频谱特性(每个频率多少功率)。然后,知道噪声模型,它可以从输入音频“减去”(并没有那么简单)。
从上图看,噪声抑制看起来很简单:只是三个概念上简单的任务,任何本科EE学生都可以写一个噪音抑制算法,有时困难的是在任何时间,各种噪音情况下使系统工作正常。这需要非常仔细地调整算法中的每个参数,需要在包含大量特殊信号的情况下进行大量的测试。speexdsp库中的噪音抑制器做了一些工作,但不是很好。

深度学习和循环神经网络
深度学习是一种新思想的新版本:人工神经网络。虽然自六十年代以来一直存在,但近年来有了很多重要的新发展:
我们现在知道如何使使用比两个隐藏层更深的网络;
我们知道如何让循环网络在过去很长时间记住状态;
我们有实际训练他们的计算资源。
循环神经网络(RNN)很好地应用于语音处理,因为它们可以对时间序列建模,而不是仅仅考虑输入和输出帧。这对噪声抑制特别重要,因为我们需要在时间尺度上获得较好的噪声估计。长期以来,RNN的能力受到很大的限制,因为它们长期不能保存信息,并且通过时间进行反向传播时涉及的梯度下降过程是非常低效的(梯度消失问题)。这两个问题都通过门控单元来解决,如长期记忆(LSTM),门控循环单元(GRU)及多种变体。
RNNoise使用门控循环单元(GRU),因为它在此任务上执行得比LSTM略好,并且需要更少的资源(CPU和权重的存储容量)。与简单的循环单元相比,GRU有两个额外的门。复位门决定是否将当前状态(记忆)用于计算新状态,而更新门决定当前状态将根据新输入改变多少。这个更新门(关闭时)使得GRU可以长时间地记住信息,这是GRU(和LSTM)比简单的循环单元执行得更好的原因。


上图将简单的循环单元与GRU进行比较。区别在于GRU的r和z门,这使得有可能学习更长期的模式。两者都是基于整个层的先前状态和输入计算的软开关(0到1之间的值),具有S形激活功能。当更新门z在左边时,状态可以在很长一段时间内保持恒定,直到一个条件使z转向右边。

混合方法
由于深入学习的成功,在工程问题中引入深层神经网络是普遍做法。这些方法称为端到端——神经元接受并传递信息,使得误差最小化。端对端方法已被应用于语音识别和语音合成等工程问题,这些端到端系统已经证明了深度神经网络的强大。另一方面,这些系统有时可能不是最优的,而且在资源方面是浪费的。例如,噪声抑制的一些方法使用具有数千个神经元和数千万个权重的层来执行噪声抑制。缺点是模型运行网络所需的计算成本巨大,模型本身的规模也难以控制,因为存储了数千行代码以及几十兆字节的神经元权重。
这就是为什么我们采用不同的方法原因:保持所有必要的基本信号处理(未经过神经网络的仿真),紧接着让神经网络学习所有需要反复调整参数的棘手繁杂的工作。与现有的深度学习噪音抑制工作不同的是,我们的目标是实时通信而不是语音识别,所以处理的语音帧不能超过几毫秒(在这种情况下为10毫秒)。


定义问题
为了避免因大量的神经元产生大量的输出,我们决定不直接使用样本或频谱。相反,我们考虑遵循bark scale采用的频段,一个与我们感知到的声音相匹配的频率比例。在此基础上我们使用总共22个频段,而不是复杂的480个频谱值。


Opus混合式编码的布局与实际的Bark比例频段的比较。对于RNNoise,我们使用与Opus相同的基本布局。由于我们使频段重叠,Opus编码的频段之间的分界成为重叠的RNNoise频段的中心。由于耳朵在高频部分的分辨率较差,所以在高频段较宽,在低频下,频段较窄,但并不像巴克比例那样窄,因为我们没有足够的数据来做出很好的估计。
当然,我们无法从22个频段的能量重建音频。我们可以做的是计算一个应用于每个频带信号的增益。可以将其视为使用22频段均衡器,并快速更改每个频段的电平,以便衰减噪声,但让信号通过。
计算频带增益的优点:首先,它使模型变得非常简单,只需要很少的频带计算。第二,不会产生所谓的音乐噪声伪影(musical noise artifacts),因为在周围被衰减的同时只有单音调能通过。这些伪影在噪声中很常见且很难处理,频带足够宽时,要么让整个频带通过,要么剪掉。第三个优点来自于如何优化模型。由于增益总是在0和1之间,所以简单地使用S形激活函数(其输出也在0和1之间)来计算它们确保计算方法的正确,比如不在一开始就引入认为噪声。
分频段计算的缺点是在没有语音的足够分辨率时不能在基频谐波之间很细致的抑制噪声。但是这并不是那么重要,因为可以通过额外的手段来处理,比如使用一个类似于语音编码增强的后滤波方法:使用梳状滤波器在一个基频周期(pitch period)内消除间谐波噪声(inter-harmonic noise)。
由于我们计算的输出是基于22个频段的,所以输入频率分辨率更高是没有意义的,因此我们使用相同的22个子带将频谱信息提供给神经网络。因为音频具有很大的动态范围,所以计算能量的log而不是直接传送能量值。更进一步,我们使用这个对数值进行DCT对特征进行去相关。所得到的数据是基于Bark量表的倒谱,其与语音识别中非常常用的梅尔倒谱系数(MFCC)密切相关。

频带结构
纯粹的RNN模型处理8khz语音,计算增益使用了6144个隐藏单元,大概1000万个权重
对于20ms的48khz语音需要400个输出。
使用一个较粗的范围尺度比按照频率尺度计算更有效。选取了音频编码较常使用的bark scale
Ex的计算:

求平方和,并做一次指数平滑,每个频带的增益:

Ex是clean speech,Es是noisy信号,频率尺度的插值增益:


深层结构
我们使用的网络架构灵感源于传统的噪音抑制方法。大部分工作是由3个GRU层完成的。下图显示了我们用于计算频带增益的层次,以及架构如何映射到噪声抑制中的传统步骤。当然,与普通神经网络一样,我们没有实际的证据证明网络如我们期望的一样运行,而是设计成这样的结构确实证明能比其他的网络做的效果更好。

上图的展示的是次项目所使用的拓扑结构,每个方框代表了一层中的神经元,指出了数目,标记了激活函数。一个VAD输出,在某些方面有用,但是并没有用于噪声抑制网络的乘数。另一个22维的输出,将增益用于不同的频率,可以进行噪声抑制。

训练数据
在噪声抑制的情况下,我们不能仅仅收集可用于监督学习的输入/输出数据,因为我们很少同时获得干净的语音和噪音。相反,我们必须从清晰的语音和噪音的单独录音中人为地创建数据。 棘手的部分是获得各种各样的噪音数据,以增强语音。 我们还必须确保覆盖各种录音条件。 例如,仅在全频段音频(0-20 kHz)下训练的早期版本在8 kHz低通滤波时失效。作者使用McGill TSP speech database1 (Frenchand English) 和NTT Multi-Lingual Speech Database for Telephonometry 。噪声有computer fans, office, crowd, airplane, car,train, construction。使用6小时的clean speech和4小时的noise,产生了140个小时的noisy speech,并在40khz-54khz范围内重采样。
与语音识别常见的不同,我们选择不将倒谱平均归一化应用于特征,并保留代表能量的第一个倒谱系数。 因此,我们必须确保数据包括所有现实级别的音频。 我们还对音频应用随机滤波器,使系统对各种麦克风频率响应(通常由倒谱均值归一化处理)具有鲁棒性。


r∈[-3/8,3/8]

优化过程Optimization process
在(0,1)范围内,交叉熵是神经网络训练普遍使用的损失函数,但是对于语音信号,结果并不能很好的匹配感知影响(perceptual effect),采用了平方误差L(g_b,g ̂_b)=(〖g_b〗^γ-〖g ̂_b〗^γ )^2
γ是一个感知参数,控制了在多大程度抑制噪声。使用时不采用log域的mean square loss防止过度抑制,折中的做法是取γ=1/2。
VAD 的输出使用的是标准交叉熵损失。
训练过程使用tensorflow backend和keras library。

Gain smoothing
使用增益g来抑制噪声会使声音听起来很枯燥,缺少回响。可以通过限制g在帧之间的衰减来修复:

g(prev)是前一帧的过滤后的增益,λ=0.6可以相当于回响时间是135ms。

Pitch filtering
由于我们的频带的频率分辨率不足,无法滤除音调谐波之间的噪声,所以我们使用基本的信号处理。 这是混合方式的另一部分。当有相同变量的多个测量值时,提高精度(降低噪声)的最简单方法就是计算平均值。显然,只是计算相邻音频样本的平均值不是我们想要的,因为它会导致低通滤波。然而,当信号是周期性的(例如语音)时,我们可以计算由基频周期偏移的采样的平均值。引入梳状滤波器,使基频谐波通过,同时衰减它们之间的频率这是含有噪声的部分。为了避免信号失真,梳状滤波器被独立地应用于每个频带,并且其滤波器强度取决于基频相关性和神经网络计算的频带增益。
我们目前使用FIR滤波器进行pitch filtering,但也可以使用IIR滤波器,如果强度太高,则会导致更高的失真风险,从而产生较大的噪声衰减。

从Python到C
神经网络的所有设计和训练都是使用Keras深度学习库在Python中完成的。由于Python通常不是实时系统的首选语言,所以我们必须在C中实现代码。幸运的是,运行神经网络比训练一个神经网络简单得多,所以我们只需要实现一次前向传播经过GRU层,输出22维的增益。为了更好的调整出权重的合理步幅,我们在训练期间将权重的大小限制为+/- 0.5,这使得可以使用8位值轻松存储它们。所得到的模型仅85 kB(而不是将权重存储为32位浮点数所需的340 kB)。
C代码可以使用BSD许可证。代码在x86 CPU上的运行速度比实时的要快60倍。它甚至比Raspberry Pi 3上的实时速度快7倍。具有良好的矢量化(SSE / AVX),应该可以比现在快四倍。
该代码仍然在积极的开发(没有封装API),但已经在应用程序中使用。它目前的应用场景是VoIP /视频会议应用程序,但通过一些调整,它可能适用于许多其他任务。一个容易想到的任务是自动语音识别(ASR),虽然我们只能去除嘈杂的语音并将输出发送到ASR,但这不是最优的,因为它丢弃了一些不确定性的有用信息。ASR不仅需要clean speech,而且还可以依赖于这一估计值时,这是更有用的。 RNNoise的另一个可能的目标是为电子乐器创造一个更加智能的噪音门。所有它应该采用的是良好的训练数据和一些代码的变化,将一个Raspberry Pi变成一个真正好的吉他噪音门。

参考文档
RNNoise: Learning Noise Suppression
https://people.xiph.org/~jm/demo/rnnoise/

1、 The code: RNNoise Git repository :
https://git.xiph.org/?p=rnnoise.git;a=summary
(Github mirror:https://github.com/xiph/rnnoise/)
2、J.-M. Valin, A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech Enhancement, arXiv:1709.08243 [cs.SD], 2017.
https://arxiv.org/pdf/1709.08243.pdf
3、 Jean-Marc’s blog post for comments
https://jmvalin.dreamwidth.org/15210.html
————————————————
版权声明:本文为优快云博主「dakeboy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/dakeboy/article/details/88039977

论文翻译:2020_RNNoise:A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech Enhancement... 网上已经有很多人翻译了,但我做这工作只是想让自己印象更深刻 文章方向:语音增强 论文地址:基于DSP/深度学习的实时全频带语音增强方法 博客地址:https://www.cnblogs.com/LXP-Never/p/15144882.html 论文代码:https://github.com/xiph/rnnoise 主页:https://jmvalin.ca/demo/rnnoise/ 摘要... 阅读详情

相关推荐

RnnNoise降噪源码解析-训练数据准备和模型转换

1.源码Github:https://github.com/xiph/rnnoise 2.

爱哭鬼 5613

使用RNN进行语音降噪的利器:rnn-speech-denoising

使用RNN进行语音降噪的利器:rnn-speech-denoising 项目介绍 rnn-speech-denoising是一个基于递归神经网络(RNN)的开源项目,专为在复杂环境中实现鲁棒的自动语音识别提供噪声减少解决方案。该项目采用Mark Schmidt的minFunc包进行凸优化,并且包含了处理MFCC文件的HTK写入和读取功能。 项目技术分析 该系统依赖于深度学习的核心技术——RNN,以...

gitblog_00039的博客 615

深度学习十大核心算法实战:CNN、Transformer、GAN与扩散模型对比解析

深度学习作为人工智能的核心技术,通过多层神经网络模拟人脑学习机制,在计算机视觉、自然语言处理等领域展现出强大能力。其基本原理是通过反向传播算法优化网络参数,使模型能够从数据中自动学习特征表示。在工程实践中,选择合适的算法架构至关重要,比如CNN凭借局部连接和权重共享特性,在图像处理任务中具有计算效率优势;而Transformer的自注意力机制则能有效处理长序列依赖关系。从技术价值看,不同算法各有适用场景:CNN适合网格化数据,RNN处理时序信息,GAN用于生成任务,扩散模型在图像生成质量上表现突出。本文通过

weixin_30920853的博客 337

RNNoise要注意的部分(草稿记录)

rnnoise会有一个pitch_filter 这是由于因为它们在生成特征时不是用频域上所有频点,而是采取bark's scale的切分频段来对不同频率的频段进行特征处理 这样的话频域上的分辨率会降低,然后导致最后在进行降噪后生成的语音会有一个现象就是oversmoothing,即你会辨别不清共振峰. 尽管bark's scale 在低频部分的频段分得很细,但是他把好几个频率都归为一个频带,...

robingao1994的博客 4129

RNNoise的python版本

源RNNoise是C语言写的,阅读门槛较高,我对照着每行C语言改写成了Python,python阅读起来更加轻松,方便大家对RNNoise的更深一步了解,以及调试代码。

用户存续期价值评估CLV(二) BG/NBD Model python模拟

BG/NBD Model …继续 想象每一个客户有两个硬币,一个“Buy Coin"控制客户购买的概率;一个"Die Coin"控制客户流失、不再购买的概率。 前面假设了客户的交易次数服从泊松过程: 在一年中的每个月,客户都以抛硬币的方式来决定是否购买。我们所观察到的购买次数取决与泊松分布的参数 ????。 %matplotlib inline import numpy as np impor...

weixin_43171270的博客 3423

Java jni调用nnom rnn-denoise 降噪

nnom 默认的denoise_weights.h 是单例的无法同时创建多个实例 所以java无法在多线程使用, 可以自己更改下 主要涉及static变量和nnom_tensor_t 需要改用malloc的方式创建。测试速度挺快的 ,几十分钟的很快降噪完成 ,去掉wav的信息就能解析pcm了。创建cmake 文件 编译dll。如果模块或流程觉得麻烦可以到。默认提供了一个wav的例子。java 库封装示例。

Java_lilin的专栏 617

用RFSoC ZU47DR搭建软件无线电原型:从零配置Vivado到生成第一个射频信号

本文详细介绍了如何使用Xilinx RFSoC ZU47DR开发板搭建软件无线电原型系统,从Vivado环境配置到生成首个射频信号的全流程。通过整合ARM处理器、FPGA逻辑和高速ADC/DAC,该平台为通信算法验证提供了高效解决方案,特别适合SDR开发者和通信工程师快速实现原型设计。

weixin_26763955的博客 590

告别语音噪音困扰:这款开源神器让你的声音瞬间变清晰

在远程办公和在线会议日益普及的今天,背景噪音常常成为沟通的隐形障碍。noise-suppression-for-voice作为一款基于Xiph's RNNoise的开源语音降噪插件,能够帮助用户轻松消除环境噪音,让语音通话质量实现质的飞跃。无论是在家办公时的键盘敲击声,还是咖啡厅里的嘈杂人声,这款工具都能有效识别并过滤,让你的声音始终保持清晰通透。 ## 核心功能:AI驱动的智能降噪技术 🚀

gitblog_00099的博客 976

openlayers6【十九】vue HeatmapLayer热力图层实现热力图效果详解

文章目录1. 写在前面2. Heatmap 类实现热力图2.1 Heatmap 参数2.2 实现热力图3. 完整代码4. 添加删除map图层的方法5. 热力图自身的get,set方法 1. 写在前面 我们主要看热力图的效果,区域绘制效怎么设置详细内容可以访问 openlayers6【十七】vue VectorLayer矢量图层画地图省市区,多省市区(粤港澳大湾区)效果详解 在 openlayers 中,图层是使用 layer 对象表示的,主要有 WebGLPoints Layer、热度图(HeatMap L

@必意玲 1万+

2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛复赛CTF部分WP-哥斯拉流量分析

题目没有任何提示,附件gzl.pcap解题哥斯拉流量300多KB包很多,没啥经验只能挨个看回来之后又狠狠得撸了一把哥斯拉流量分析我这里用的是哥斯拉4.0.1测试链接这里发了两个包,我们进行分析。

深耕网络安全领域,聚焦护网行动(HW)、渗透测试、等级保护(等保)、CTF 竞赛四大核心方向,提供技术干货、实战经验与行业洞察。 1810

终极指南:用RNNoise实现专业级音频降噪的5大实战技巧

RNNoise是一款基于循环神经网络(RNN)的音频降噪工具,能够有效消除音频中的背景噪音,提升语音清晰度。本文将分享5个实用技巧,帮助新手快速掌握RNNoise的核心功能,轻松实现专业级音频降噪效果。 ## 📌 技巧1:快速搭建RNNoise开发环境 要开始使用RNNoise,首先需要搭建开发环境。通过以下步骤快速部署: 1. **克隆项目仓库** ```bash git

gitblog_00586的博客 362

STM32掉电保存配置参数技巧

本文介绍了使用STM32内置备份寄存器(BKP)实现掉电保存配置参数的方法。相比外接EEPROM或Flash,备份寄存器无需外设但存储容量有限,需通过VBAT引脚连接纽扣电池供电。文章详细说明了初始化步骤,包括使能PWR时钟、允许访问备份寄存器等操作,并提供了RTC初始化的代码示例。同时介绍了HAL库中读写备份寄存器的函数使用方法,包括HAL_RTCEx_BKUPWrite和HAL_RTCEx_BKUPRead函数的具体参数和调用示例。该方法适用于需要小容量数据掉电保存的应用场景。

hanhanhan233的博客 946

工业级电源路径协同防护:eFuse与MCU闭环健康管理

电源路径管理是嵌入式系统可靠运行的基础概念,其核心在于对电压、电流、温度等多维参数的实时监测与动态响应。基于高精度电子保险丝(eFuse)与本地智能MCU的协同架构,可实现从被动保护到主动健康管理的技术跃迁。该方案依托硬件级确定性响应、I²C闭环通信及故障日志持久化等关键技术,显著提升工业边缘节点的MTBF与故障可追溯性。典型应用场景包括电机启停抗扰、热插拔浪涌抑制、风电变桨控制等强干扰环境。本文聚焦TPS259483AYWPR与PIC18F86J16组合在电源健康管理系统中的工程落地,涵盖原理设计、固件策

weixin_34332905的博客 530

【正点原子I.MX6U-MINI移植篇】Ubuntu-base根文件系统移植构建过程详解(四)

能不能在ARM板上运行Ubuntu呢?答案肯定是可以的,Ubuntu是Linux系统的一种,可以简单的将Ubuntu理解为一个根文件系统,和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移植到我们的开发板上。

果果小师弟的博客 3767

从PSDK到ROS节点:实战GPS数据发布与CMake配置

本文详细介绍了如何从大疆PSDK获取GPS数据并封装为ROS节点的实战过程,包括PSDK编译、GPS数据订阅、ROS节点实现及CMake配置优化。通过具体代码示例和调试技巧,帮助开发者快速实现无人机传感器数据与ROS系统的集成,提升开发效率。

weixin_30843605的博客 457

语言生成范式演进:从RNN、自回归到扩散模型的技术解析与实战对比

语言生成是自然语言处理(NLP)与生成式AI的核心任务,其本质是建模序列数据的概率分布。从技术原理看,早期循环神经网络(RNN)通过隐藏状态传递序列信息,但受限于梯度消失和顺序计算;自回归(AR)范式结合Transformer架构,通过自注意力机制实现并行训练与强大上下文建模,成为当前大模型的主流;新兴的扩散模型则借鉴图像生成思路,尝试通过去噪过程实现文本生成,以探索并行解码与全局一致性。在工程实践中,AR模型凭借成熟的工具链和稳定性,广泛应用于对话、创作等场景;扩散模型则在文本编辑、数据增强等前沿领域展现

weixin_30315905的博客 477

知道LPDDR和DDR什么关系吗?

话不多说,先上大白话,一个网友总结的很好:简单地说DRR4是标准电压版的PC和服务器内存,LPDDR4属于手机等嵌入式移动设备使用的低电压低功耗内存,LPDDR4X则是LPDDR4的升级版,下面详细看看老哥的博客。LPDDR4是与DDR4内存等效的移动设备。。LPDDR4具有两个16位通道,从而使每个DIMM的总线总长度为32位。相比之下,DDR4每个DIMM具有64位通道。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 2805

音频降噪算法 java_基于RNN的音频降噪算法 (附完整C代码)

/*Copyright (c) 2017 Mozilla*//*Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditionsare met:- Redistributions of source ...

weixin_42502838的博客 605

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

MCU深度学习新选择:如何用NNoM在微控制器上部署神经网络模型?

NNoM(Neural Network on Microcontroller)是一款专为微控制器设计的超轻量级深度学习推理库,为嵌入式AI和边缘计算框架提供高效解决方案。它通过量化计算、动态内存管理和硬件优化,让ARM Cortex-M等资源受限设备也能运行神经网络模型,是物联网边缘计算的理想选择。 ## 项目定位与价值主张 在当今嵌入式AI技术生态中,NNoM填补了传统深度学习框架与微控制器

gitblog_00830的博客 160

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

终极语音降噪方案:基于RNNoise的AI降噪插件完整指南

在远程办公、在线教育、游戏直播和内容创作日益普及的今天,清晰的语音沟通已成为专业形象的关键要素。你是否曾因键盘敲击声、空调噪音或背景人声干扰而影响沟通效果?**noise-suppression-for-voice**项目为你提供了一套基于Xiph RNNoise算法的开源语音降噪解决方案,通过先进的AI技术实现专业级的噪音抑制效果。本文将带你深入理解这一技术,并提供从环境搭建到高级优化的完整实践

gitblog_00547的博客 459

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

AliCloudDenoise 语音增强算法:助力实时会议系统进入超清音质时代

近些年,随着实时通信技术的发展,在线会议逐渐成为人们工作中不可或缺的重要办公工具,据不完全统计,线上会议中约有 75% 为纯语音会议,即无需开启摄像头和屏幕共享功能,此时会议中的语音质量和清晰度对线上会议的体验便至关重要。 作者|七琦 审校|泰一 前言 在现实生活中,会议所处的环境是极具多样性的,包括开阔的嘈杂环境、瞬时非平稳的键盘敲击声音等,这些对传统的基于信号处理的语音前端增强算法提出了很大的挑战。与此同时伴随着数据驱动类算法的快速发展,学界 [1] 和工业界 [2,3,4] 逐渐涌现出了深度学习类.

阿里云CloudImagine 1126

17_Representation Tying权重 CNN RNN denoising Sparse Autoencoder_潜在loss_accuracy_TSNE_KL Divergence_L1

Autoencoders are artificial neural networks capable of learning dense representations of the input data, called latent representations or codings, without any supervision (i.e., the training set is unlabeled). These codings typically have a much lower...

Linli522362242的专栏 1559

基于LSTM-EMD-PCA预测研究(Python代码实现)

LSTM-EMD-PCA方法结合了长短期记忆网络(LSTM)、经验模态分解(EMD)和主成分分析(PCA)三种技术。LSTM用于捕捉时间序列的长期依赖关系,EMD用于分解时间序列以提取不同频率成分,而PCA则用于降维和特征提取。通过将这三种技术结合,可以构建出高效的时间序列预测模型。

2201_75535220的博客 1084

python 机器学习ML 相关

Deep learning:四十二(Denoise Autoencoder简单理解) http://www.cnblogs.com/tornadomeet/p/3261247.html   前言:   当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE)

一地鸡毛 2343

音频降噪在58直播中的研究与实现

背景在直播时主播经常会受到一些外部环境音、噪音等影响,直播时音频采集会一并采集所有音频推流到观众设备上,从而影响观众收听体验。因此需要在直播主播端主动进行降噪处理,提高观众收听体验。58直播为了实现这个功能,通过综合对比调研常见的开源降噪方案Speex、WebRTC、RNNoise,以及结合降噪之后的处理效果和58直播使用体验,最终选择WebRTC降噪方案。我们对其进行了优化兼容,将其移植应用到5...

weixin_34248849的博客 115
上一篇: Speex回声消除收敛性能
下一篇: STL与数据结构
audiocool
博客等级 码龄9年 335粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值