资讯动态

语音降噪模型GTCRN学习笔记(一)

发布时间:2026/10/9 2:52:52 来源:尧图企业网站定制
在audio DSP这类低算力、低memory的处理器上只有算力要求低、参数量小的模型才能部署。在语音降噪领域以前的模型参数通常都大于500k很难在audio DSP上落地。近两年出了一个GTCRN(Grouped Temporal Convolutional Recurrent Network)的语音降噪模型参数量只有48.2k(其中要训练的有23.7k不需要训练的有24.5k)与同样是小参数量的RNNoise模型相比降噪效果有明显的提升也能在audio DSP上部署。低算力、小参数量以及降噪效果好让我对其产生浓厚的兴趣利用github上开源的推理等代码进行了一番学习基本上搞明白了原理。我决定出一个GTCRN学习笔记系列详细介绍GTCRN的细节。本文先对其作一番概述。GTCRN在github上的地址是https://github.com/Xiaobin-Rong/gtcrn。文件目录如下图所示对主要的做一简要介绍。1)checkpoints里面放的是分别基于DNS3和VCTK数据集训练好的两个模型。在推理代码里把想要的模型做load后就可用相应的模型了。下图load的是DNS3的模型。2)stream里放的是流式推理实现。开源里给了两个推理实现一个是离线实现一个是流式实现。对实时降噪来说离线实现主要用于理解模型真正用的是流式实现3)test_wavs里放的是降噪前和降噪后的音频文件4)gtcrn.py是GTCRN的模块代码实现5)infer.py是推理的代码实现6)README.md是一些说明方便用户使用7)Requirement.txt是pytorch等版本的指定。具体如下图运行推理代码前要建一个conda环境根据指定的版本把pytorch等安装上。先看降噪过程上图给出了示意图。音频的PCM值做完STFT短时傅里叶变换后得到的是频谱复数值。复数值作为模型的输入模型运算后的输出值依旧是复数值叫mask。Mask可以看作是gain即经过GTCRN模型得到的是一个gain值只不过这里的gain是复数值。将STFT后的频谱复数值与mask复数值相乘得到的依旧是复数值这个值就是降噪后的频谱复数值再经过ISTFT短时傅里叶逆变换后就得到了降噪后的PCM值。我在前面的文章webRTC中语音降噪模块ANS细节详解(一)讲webRTC ANS时讲了是用维纳滤波来做降噪的维纳滤波得到的也是gain跟这里的mask意思是一样的。GTCRN可以看作是神经网络版的维纳滤波。再来看GTCRN模型内部有哪些模块。它包括ERBequivalent rectangular bandwidth等效矩形带宽、SFEsubband feature extraction子带特征提取、编码器encoder、分组双路径RNNGDPRNN和解码器decoder如下图所示数据进入模型后先经过ERB.BM模块把数据从257维压到129维这大大地减少了参数量。由于维数压缩后频带变宽相邻频带之间的局部频谱关系变弱因此要经过SFE模块来加强相邻频带之间的局部频谱关系。后面就是传统的CRN架构包括encoder、decoder和RNN为了减少参数量做了些改进。最后经过ERB.BS模块把数据从129维变回257维得到复数的mask值。本文先对这些模块做个简单的介绍后续学习笔记中具体讲。首先看ERB模块。模型的输入是做完STFT后的频谱。STFT帧长32毫秒帧移 16毫秒PCM采样率为KH所以FFT长度为512。做完STFT后得到的是个的频谱复数值。特征维度为有点大。为了减少模型参数用ERB来减少输入特征的维度。ERB是心理声学中用于模拟人耳听觉滤波器Auditory Filter特性的重要度量。在个子带中保持65个低频带不变将192个高频带映射到64个ERB带从而得到一个129维的压缩特征。模型中有ERB两个子模块分别是BMband merging和BSband splitting。BM模块在模型的开始处根据ERB将个频带变成个频带。BS模块在模型的结尾处是BM的逆过程即把129个频带变成257个频带。再看SFE模块。ERB.BM把频率维压缩后band变得更粗、更局部独立但也把相邻频带之间的局部频谱关系压弱了。SFE就是学习频带之间的局部相关性。在进入主干网络之前把相邻频带的局部频谱关系重新编码进来, 让后面的GTConv和GRU等在更“好学”的频带特征上工作。模型的输入是做完STFT后的复数频谱频谱的实数、虚数和幅值形成3维数据。SFE就是在每一维数据上把当前频带的左右相邻频带也各形成一维数据这样就得到了3维数据。由于有实数、虚数和幅值3维所以总共就是9维数据作为后续模块的输入。这样相邻频带的局部频谱关系就建立了。最后看CRN。CRN包括CNN(encoder以及decoder)和RNN。CNN学局部特征RNN学长期时间依赖。Encoder作用是压缩频率维度提取局部频谱特征它由两个卷积Conv和三个分组时序卷积GT-Conv块组成。Decoder作用是恢复频率分辨率它是encoder的镜像其中每个Conv块被一个DeConv替换该块具有与Conv块相同的组件。GDPRNN是DPRNNDual-Path RNN GRNNGrouped RNN的结合既保留 Dual-Path 的长时序建模能力又把 GRU 参数减少了一半左右非常适合嵌入式。后续文章将陆续讲GTCRN模型中的模块ERB、SFE、encoder、decoder、GDPRNN等。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑