精华内容
下载资源
问答
  • 深度学习语音增强

    千次阅读 2020-05-02 15:44:02
    深度学习语音增强 我的书: 购买链接: 京东购买链接 淘宝购买链接 当当购买链接 在我的这本书里,详述了基于信号处理的语音降噪(NS)和回声消除(AEC)算法,并对基于监督深度学习降噪介绍了例子;这里对...

    深度学习语音降噪

    我的书:

    购买链接:

    京东购买链接

    淘宝购买链接

    当当购买链接

    在我的这本书里,详述了基于信号处理的语音降噪(NS)和回声消除(AEC)算法,并对基于监督深度学习降噪介绍了例子;这里对深度学习方法做个补充总结。

    传统信号处理方法是经过全人类数百年经验积累而得到的,源于大千世界,因而模型的普适性较强,而监督深度学习依赖监督对象(训练集),由于训练集始终只能是大千世界的一个子集中的子集,所以其普适性和鲁棒性没有基于传统信号处理强,但是由于网络可以很复杂,因而在有些情况下其得到的模型可以比传统信号处理更精确(以计算量为代价),学术界比较好发文章,但是一旦到普适性的商用场景中深度学习方法往往并不是那么适用(场景的普适性+算力+存储资源),所以大部分一线工程师更倾向于信号处理+深度学习两者结合的方法,书中介绍Rnnoise的例子就是这类方法,这类方法对工程是的要求更高。

    降噪的核心任务如图中地板公式所示,纯净语音=带噪语音-噪声=带噪语音*(1-噪声/带噪语音)=带噪语音*Gain,这样的话,只需要计算Gain值就可以得到纯净语音了,传统信号处理方法通过信号建模的方式获取Gain,监督深度学习方法是通过神经网络计算得到Gain,计算的正确性信号处理方法通过人类数百年的经验积累以及模型调优得到的,监督深度学习方法通过从大量的样本数据集中学习得到,

    基于掩码的深度学习法

    监督深度学习法在数据集一定时,影响Gain计算准确主要有三个因素,网络模型、声学特征和目标损耗函数;对于只有语音和非语音场景,这时Gain直接蜕化为0,1这两个值,这在信号处理领域,人类通过对耳朵的研究,早就发现人耳有所谓的掩码功能,掩码的意思就是主动将噪声过滤掉(对应于Gain=0),让语音顺利通过(对应于Gain=1),但是实际场景中,有可能语音和噪声是重叠的,所以Gain值应该是介于[0~1]之间更为合理。本篇介绍的深度学习基于T-F masking(时频掩码)思想,《实时语音处理实践指南》一书的波束形成技术就有基于信号处理理论的T-F masking实例。只不过这里使用深度学习方法,通过大量样本数据训练得到这些mask获取的模型。

    特征提取

    特征提取会影响到训练的目标对象,也就是常说的Label,人们可以很容易获取到纯净语音和噪声数据集,Rnnoise生成带噪语音的方法是书中第九章介绍的二阶IIR滤波器,数据生成之后,由于语音算是平稳性和对人的听觉系统研究发现频域作用不可忽略,所以深度学习法或多或少都会用到STFT变换(书中已介绍),掩码的类型有如下几种:

    • Ideal Binary Mask(IBM)

    对于带噪语音,其mask的取值情况如下:

    t和f​分别表示时间和频率,如果SNR大于本地判决准则(LC,local criterion)则掩码取1,否则取0;

    • Target Binary Mask(TBM)

    上述二分类问题有一个缺点,对于时频点​(t,f),大于LC准则的点可能含有噪声的,如果mask取1,则这些点的噪声没有去掉,这时有如下准则:

    IBM=(\frac{S(t,f)^2}{S(t,f)^2+N(t,f)^2})^{\beta}

    其中S(t,f)^{2}N(t,f)^2分别表示时频点的语音能量和噪声能量,加性噪声场景下,可调参数\beta通常选0.5,当​\beta等于1时,这个准则和经典的维纳滤波法类似。

    • Spectral Magnitude Mask(SMM)

    类似TBM,SMM通过纯净语音和带噪语音信号的幅度谱获取掩码值。有些文献将这种方法称为Ideal Amplitude Mask(IAM),基本一样的核心思想。

    SMM(t,f)=\max\{1,\frac{|S(t,f)|}{|Y(t,f)|}\}

    在频域对带噪语音乘以SMM掩码,然后在逆变换到时域去。

    • Phase-SensitiveMask(PSM)

    有研究显示,相位也会影响人的听觉体验,PSM在SMM掩码的基础上加入了相位因素:

    PSM(t,f)=\frac{|S(t,f)|}{|Y(t,f)|}\cos(\theta)

    \theta表示了时频点(t,f)纯净语音相位和带噪语音相位的差异,加入相位信息之后,PSM方法可以获得更高的SNR,因而降噪效果比SMM更好。

     

    • Complex Ideal Ratio Mask(cIRM)

    cIRM是复数域理想的掩码,其可带噪语音理想重构纯净语音:

    S=cIRM*Y

    其中S和Y分别表示纯净语音和带噪语音的STFT结果,“*”表示复数乘,可以得到cIRM如下:

     

    cIRM=\frac{Y_rS_r+Y_iS_i}{Y_r^2+Y_i^2}+i\frac{Y_rS_i-Y_iS_r}{Y_r^2+Y_i^2}

    角标r和i分别表示实部分量和虚部分量。

    总结来说,mask可以是频点能量(Rnnoise根据人的心理声学,使用的是Bark子带的能量),频点相位,或者直接复数域,对于直接复数域情况,如果做的是512实数点STFT,则输入特征是256个复数点(512个点),而Rnnoise使用的Bark子带18个子带(16KHz,加上其它的也不过是36个点),两者输入可以看出它们的特征差异比较大,而模型往往为了更具泛化能力,往往又比较大,这就导致受限于资源往往很难实时部署使用;相对而言输入特征和模型较小时,使用一传统信号处理方法进行弥补,如Rnnoise使用了pitch滤波(人的声带和声道决定了人类元音发音必然存在基频和谐振频率这一特点),那么就可以通过这一普适性特点进行处理。

    模型

    模型可以使用DNN,RNN,CNN都没问题,也可以级联使用以达到最优,相应的资料太多了,工具这块建议掌握Keras和Pytorch两种,在以后的工作和学习中应该够用了。Keras和Pytorch入门比较简单,且两者都在大量使用,花上个把星期应该就可以自己搭建模型了。

    数据集

    前面提到了数据集获取,网上开源比较多,想要强调的是如何构建更接近真实场景中的数据,前面提到的二阶IIR滤波器是一种方法,此外还有加混响等等,大多数开源ASR识别工程中通常都会带有这部分代码。

    其它场景语音增强

    前面主要基于深度学习的单通道降噪,此外还有基于深度学习的多通道降噪和回声消除算法;在多通道语音降噪传统方法是麦克风阵列算法,麦克风阵列算法实际上就是空域、频域和时域三维自适应滤波算法,在《实时语音处理实践指南》第七章介绍的T-F masking波束形成方法这里可以借鉴,输入特征选择空域、频域典型特征,然后输入网络中,还是计算最后的Mask值,当然也可以将多路STFT结果直接作为特征输入,但是这样计算量会非常大,意以至于大多数端上设备都无法使用,另外一类就是聚类思想,就是盲源分离,传统信号处理基于高阶统计量,《实时语音处理实践指南》一书已有叙述,深度学习和此类似,可以以高阶统计作为输入特征,训练掩码网络;

    另外还有就是回声消除了,《实时语音处理实践指南》一书已叙述信号处理方法,深度学习方法和降噪类似,也是求近端信号的Mask,不过输入特征是Near+Far的组合了,当然难度还是比较大的,所以有些场景是先用《实时语音处理实践指南》一书已叙述信号处理方法进行降噪,这是会发现有残留,这是通过深度学习方法进一步降噪(RES,residual echo suppression)。

    基于时域信号的深度学习法

    这类方法认为T-F masking依赖STFT变换,这一通用的时域变换方法对于语音分离未必是最优的,其次这种方法很难获得最优纯净语音信号的相位信息,再次要STFT变换本身会引入分辨率和实时性这对矛盾体。所以这类方法摒弃了STFT,直接使用时域信号,用Encoder网络自主学习合适的网络结构,这取代了STFT,如TasNet就是这种思想,不过这种直接时域处理计算量往往一个问题。

    展开全文
  • 来自于OHIO大学语音实验室的深度学习语音增强资料,包括2005年~2019年的所有相关论文和部分代码。
  • 基于感知相关代价函数的深度学习语音增强.pdf
  • 基于深度学习语音增强使用keras python
  • 基于深度学习的单通道语音增强

    千次阅读 2020-12-16 16:13:00
    本文代码请见:... ...如果你觉得写得还不错,点赞????,关注是对我最大的支持,谢谢???... 传统的语音增强方法基于一些设定好的先验假设,但是这些先验假设存在一定的不合理之处。此外传统语音...

    本文代码请见:https://github.com/Ryuk17/SpeechAlgorithms

    博客地址(转载请指明出处):https://www.cnblogs.com/LXP-Never/p/14142108.html

    如果你觉得写得还不错,点赞👍,关注是对我最大的支持,谢谢😃

      传统的语音增强方法基于一些设定好的先验假设,但是这些先验假设存在一定的不合理之处。此外传统语音增强依赖于参数的设定,人工经验等。随着深度学习的发展,越来越多的人开始注意使用深度学习来解决语音增强问题。由于单通道使用场景较多,本文就以单通道语音增强为例。

      目前基于DNN单通道大致可以分为两种方法,

    • 第一种寻求噪声语音谱与纯净语音谱的映射
    • 第二种基于mask的方法

    基于映射的语音增强

      基于映射的语音增强方法通过训练神经网络模型将噪声谱与纯净谱之间的映射关系,其流程如下图所示,很多博客和文章也有讲这个方法但是我觉得不详细,让初学者一脸懵逼,下面详细介绍。

    训练阶段

    输入:这里采用较为简单地特征,即带噪声语音信号的幅度谱,也可以采用其他的特征。值得一提的是,如果你的输入是一帧,对应输出也是一帧的话效果一般不会很好。因此一般采用扩帧的技术,如下图所示,即每次输入除了当前帧外还需要输入当前帧的前几帧和后几帧。这是因为语音具有短时相关性,对输入几帧是为了更好的学习这种相关性

    • Label:数据的label为纯净语音信号的幅度谱,这里只需要一帧就够了。
    • 损失函数:学习噪声幅度谱与纯净语音信号的幅度谱类似于一个回归问题,因此损失函数采用回归常用的损失函数,如均方误差(MSE)、均方根误差(RMSE)或平均绝对值误差(MAE)等....
    • 最后一层的激活函数:由于是回归问题,最后一层采用线性激活函数
    • 其他:输入的幅度谱进行归一化可以加速学习过程和更好的收敛。如果不采用幅度谱可以采用功率谱,要注意的是功率谱如果采用的单位是dB,需要对数据进行预处理,因为log的定义域不能为0,简单的方法就是在取对数前给等于0的功率谱加上一个非常小的数

    增强阶段

    • 输入:输入为噪声信号的幅度谱,这里同样需要扩帧。对输入数据进行处理可以在语音信号加上值为0的语音帧,或者舍弃首尾的几帧。如果训练过程对输入进行了归一化,那么这里同样需要进行归一化
    • 输出:输入为估计的纯净语音幅度谱
    • 重构波形:在计算输入信号幅度谱的时候需要保存每一帧的相位信息,然后用保存好的相位信息和模型输出的幅度谱重构语音波形,代码如下所示。
    spectrum = magnitude * np.exp(1.0j * phase)
    

    基于Mask的语音增强

    Mask这个单词有的地方翻译成掩蔽有的地方翻译成掩膜,我个人倾向于翻译成“掩蔽”,本文就用掩蔽作为Mask的翻译。

    时频掩蔽

      我们都知道语音信号可以通过时域波形或者频域的各种频谱表示,此外语谱图可以同时展示时域和频域的信息,因此被广泛应用,如下图所示。

    现在我们假设有两段语音信号,一段是音乐信号,另一段是噪声,他们混合在一起了,时域波形和对应的语谱图分别如下图所示:

    如果我们想将音乐信号从混合信号中抽离(这个过程叫做语音分离)在时域方面是容易做到的。现在我们从频域角度入手去解决语音分离问题。首先我们提出两个假设:

    1、我们假设信号能量稀疏的,即对于大多数时频区域它的能量为0,如下图所示,我们可以看到大多数区域的值,即频域能量为0。

    2、我们假设信号能量不相交的,即它们的时频区域不重叠或者重叠较少,如下图所示,我们可以看到时频区域不为0的地方不重叠或者有较少部分的重叠。

    基于以上两点假设,我们就可以分离我们想要的信号和噪声信号。给可能属于一个信号源的区域分配掩码为1,其余的分配掩码0,如下图所示。

      我们通过0和1的二值掩码然后乘以混合信号的语谱图就可以得到我们想要喜好的语谱图了,如下图所示。

      但是,这里存在一个问题,我们无法从语谱图中还原语音信号。为了解决这一问题,我们首先还原所有的频率分量,即对二值掩码做个镜像后拼接。假设我们计算语谱图时使用的是512点SFTF,我们一般去前257点进行分析和处理,在这里我们将前257点的后255做镜像,然后拼接在一起得到512点频率分量,如下图所示。

    然后根据这个还原语音信号。这里指的一提的是,在进行STFT后的相位信息要保存,用于还原语音信号。

      接下来介绍如何计算掩蔽值,掩蔽值计算方法有许多,但一般来说有两种常用的计算方法,分别为理想二值掩蔽(Ideal Binary Mask, IBM)和理想比值掩蔽(Ideal Ratio Mask, IRM)。IBM的计算公式如下:

    $$公式1:I B M(t, f)=\left\{\begin{array}{l}
    1, \operatorname{SNR}(t, f)>L C \\
    0, \text { else }
    \end{array}\right.$$

    其中LC为阈值,一般取0,SNR计算公式为:

    $$公式2:\operatorname{SNR}(t, f)=10 * \log 10\left(\frac{|S(t, f)|^{2}}{|N(t, f)|^{2}}\right)$$

    IRM为一个[0-1]的值,计算公式为:

    $$公式3:\operatorname{IRM}(t, f)=\left(\frac{S^{2}(t, f)}{S^{2}(t, f)+N^{2}(t, f)}\right)^{\beta}=\left(\frac{\operatorname{SNR}(t, f)}{\operatorname{SNR}(t, f)+1}\right)^{\beta}$$

    其中$\beta$为可调节尺度因子,一般取0.5。

      基于mask方法的语音增强一般基于这种假设,在带噪语音谱中即存噪声信号又存在语音信号,因此将噪声信号掩蔽掉剩下的就是语音信号。目前常用的两种掩蔽方法:理想二值掩蔽、理想比值掩蔽

    • 理想二值掩蔽(Ideal Binary Mask,IBM),将分离任务变成了一个二分类问题。这类方法根据听觉感知特性,把音频信号分成不同的子带,根据每个时频单元上的信噪比,在噪声占主导情况下,把对应的时频单元的能量设为0,在目标语音占主导的情况下,保持原样。
    • 理想比值掩蔽(Ideal Ratio Mask,IRM),它同样对每个时频单元进行计算,但不同于IBM的“非零即一”,IRM中会计算语音信号和噪音之间的能量比,得到介于0到1之间的一个数,然后据此改变时频单元的能量大小。IRM是对IBM的演进,反映了各个时频单元上对噪声的抑制程度,可以进一步提高分离后语音的质量和可懂度。

    基于掩蔽的语音增强和基于映射的语音增强模型训练和增强过程类似,这里只提几个重要的地方,其余地方参考上面内容。

    • Label:数据的label为根据信噪比计算的IBM或者IRM,这里只需要一帧就够了
    • 损失函数:IBM的损失函数可以用交叉熵,IRM的损失函数还是用均方差
    • 最后一层的激活函数:IBM只有0和1两个值,IRM范围为[0,1],因此采用sigmoid激活函数就可以了
    • 重构波形:首先用噪声幅度谱与计算的Mask值对应位置相乘,代码如下,然后根据相位信息重构语音波形。
    enhance_magnitude = np.multiply(magnitude, mask)
    

    Demo效果以及代码

    首先看下实验效果,首先是基于映射语音增强的结果:

    基于IBM语音增强的结果:

    基于IRM语音增强的结果:

    训练代码:

    """
    @FileName: IBM.py
    @Description: Implement IBM
    @Author: Ryuk
    @CreateDate: 2020/05/08
    @LastEditTime: 2020/05/08
    @LastEditors: Please set LastEditors
    @Version: v0.1
    """
    ​
    import numpy as np
    import librosa
    from sklearn.preprocessing import StandardScaler
    from keras.layers import *
    from keras.models import Sequential
    ​
    ​
    def generateDataset():
        mix, sr = librosa.load("./mix.wav", sr=8000)
        clean,sr = librosa.load("./clean.wav",  sr=8000)
    ​
        win_length = 256
        hop_length = 128
        nfft = 512
    ​
        mix_spectrum = librosa.stft(mix, win_length=win_length, hop_length=hop_length, n_fft=nfft)
        clean_spectrum = librosa.stft(clean, win_length=win_length, hop_length=hop_length, n_fft=nfft)
    ​
        mix_mag = np.abs(mix_spectrum).T
        clean_mag = np.abs(clean_spectrum).T
    ​
    ​
        frame_num = mix_mag.shape[0] - 4
        feature = np.zeros([frame_num, 257*5])
        k = 0
        for i in range(frame_num - 4):
            frame = mix_mag[k:k+5]
            feature[i] = np.reshape(frame, 257*5)
            k += 1
    ​
        snr = np.divide(clean_mag, mix_mag)
        mask = np.around(snr, 0)
        mask[np.isnan(mask)] = 1
        mask[mask > 1] = 1
    ​
        label = mask[2:-2]
    ​
        ss = StandardScaler()
        feature = ss.fit_transform(feature)
        return feature, label
    ​
    ​
    def getModel():
        model = Sequential()
        model.add(Dense(2048, input_dim=1285))
        model.add(BatchNormalization())
    ​
        model.add(LeakyReLU(alpha=0.1))
        model.add(Dropout(0.1))
    ​
        model.add(Dense(2048))
        model.add(BatchNormalization())
        model.add(LeakyReLU(alpha=0.1))
        model.add(Dropout(0.1))
    ​
        model.add(Dense(2048))
        model.add(BatchNormalization())
        model.add(LeakyReLU(alpha=0.1))
        model.add(Dropout(0.1))
    ​
        model.add(Dense(257))
        model.add(BatchNormalization())
        model.add(Activation('sigmoid'))
        return model
    ​
    def train(feature, label, model):
        model.compile(optimizer='adam',
                      loss='mse',
                      metrics=['mse'])
        model.fit(feature, label, batch_size=128, epochs=20, validation_split=0.1)
        model.save("./model.h5")
    ​
    def main():
        feature, label = generateDataset()
        model = getModel()
        train(feature, label, model)
    ​
    ​
    if __name__ == "__main__":
        main()
    

    增强代码:

    """
    @FileName: Inference.py
    @Description: Implement Inference
    @Author: Ryuk
    @CreateDate: 2020/05/08
    @LastEditTime: 2020/05/08
    @LastEditors: Please set LastEditors
    @Version: v0.1
    """
    ​
    import librosa
    import numpy as np
    from basic_functions import *
    import matplotlib.pyplot as plt
    from sklearn.preprocessing import StandardScaler
    from keras.models import load_model
    ​
    def show(data, s):
        plt.figure(1)
        ax1 = plt.subplot(2, 1, 1)
        ax2 = plt.subplot(2, 1, 2)
        plt.sca(ax1)
        plt.plot(data)
        plt.sca(ax2)
        plt.plot(s)
        plt.show()
    ​
    ​
    model = load_model("./model.h5")
    data, fs = librosa.load("./test.wav", sr=8000)
    ​
    win_length = 256
    hop_length = 128
    nfft = 512
    ​
    spectrum = librosa.stft(data, win_length=win_length, hop_length=hop_length, n_fft=nfft)
    magnitude = np.abs(spectrum).T
    phase = np.angle(spectrum).T
    ​
    frame_num = magnitude.shape[0] - 4
    feature = np.zeros([frame_num, 257 * 5])
    k = 0
    for i in range(frame_num - 4):
        frame = magnitude[k:k + 5]
        feature[i] = np.reshape(frame, 257 * 5)
        k += 1
    ​
    ss = StandardScaler()
    feature = ss.fit_transform(feature)
    mask = model.predict(feature)
    mask[mask > 0.5] = 1
    mask[mask <= 0.5] = 0
    ​
    fig = plt.figure()
    plt.imshow(mask, cmap='Greys', interpolation='none')
    plt.show()
    plt.close(fig)
    ​
    magnitude = magnitude[2:-2]
    en_magnitude = np.multiply(magnitude, mask)
    phase = phase[2:-2]
    ​
    en_spectrum = en_magnitude.T * np.exp(1.0j * phase.T)
    frame = librosa.istft(en_spectrum, win_length=win_length, hop_length=hop_length)
    ​
    show(data, frame)
    librosa.output.write_wav("./output.wav",frame, sr=8000)
    

    参考文献

    DNN单通道语音增强(附Demo代码)(大量抄袭于它)

    基于Mask的语音分离

    补充一下:https://blog.csdn.net/shichaog/article/details/105890125

    展开全文
  • 这项工作比较了此挑战中提出的两种用于语音增强深度学习模型:NSNet2和双信号转换LSTM网络(DTLN)。 在基于混响时间RT60和信噪比(SNR)规范的两种对比条件下,分别使用两个数据集和三种不同的以语音质量为中心...
  • 文作者刘斌,中科院自动化所博士,极限元资深智能语音算法专家,中科院-极限元智能交互联合实验室核心技术人员,曾多次在国际顶级会议上发表论文,获得...伴随着这项技术的不断成熟,深度学习在智能语音领域率先发力...

    文作者刘斌,中科院自动化所博士,极限元资深智能语音算法专家,中科院-极限元智能交互联合实验室核心技术人员,曾多次在国际顶级会议上发表论文,获得多项关于语音及音频领域的专利,具有丰富的工程经验

    深度学习在 2006 年崭露头角后,近几年来取得了快速发展,在学术界和工业界均呈现出指数级增长的趋势;伴随着这项技术的不断成熟,深度学习在智能语音领域率先发力,取得一系列成功的应用。本文将重点分享近年来深度学习在语音生成问题中的新方法,围绕语音合成和语音增强两个典型问题展开介绍。

    一、深度学习在语音合成中的应用

    语音合成主要采用波形拼接合成和统计参数合成两种方式。波形拼接语音合成需要有足够的高质量发音人录音才能够合成高质量的语音,它在工业界中得到了广泛使用。统计参数语音合成虽然整体合成质量略低,但是在发音人语料规模有限的条件下,优势更为明显。在上一期我们重点介绍了深度学习在统计参数语音合成中的应用,本期将和大家分享基于波形拼接的语音合成系统,围绕 Siri 近期推出的语音合成系统展开介绍,它是一种混合语音合成系统,选音方法类似于传统的波形拼接方法,它利用参数合成方法来指导选音,本质上是一种波形拼接语音合成系统。

    单元选择是波形拼接语音合成系统的基本难题,需要在没有明显错误的条件下将合适的基元组合在一起。语音合成系统通常分为前端和后端两个部分,前端模块对于提高语音合成系统的表现力起到非常重要的作用。前端模块将包含数字、缩写等在内的原始文本正则化,并对各个词预测读音,解析来自文本的句法、节奏、重音等信息。因此,前端模块高度依赖于语言学信息。后端通过语言学特征预测声学参数,模型的输入是数值化的语言学特征。模型的输出是声学特征,例如频谱、基频、时长等。在合成阶段,利用训练好的统计模型把输入文本特征映射到声学特征,然后用来指导选音。在选音过程中需要重点考虑以下两个准则:(1)候选基元和目标基元的特征必须接近;(2)相邻两个基元的边界处必须自然过渡。可以通过计算目标代价和拼接代价评估这两个准则;然后通过维特比算法计算最优路径确定最终的候选基元;最后通过波形相似重叠相加算法找出最佳拼接时刻,因此生成平滑且连续合成语音。

    Siri 的 TTS 系统的目标是训练一个基于深度学习的统一模型,该模型能自动准确地预测数据库中单元的目标成本和拼接成本。因此该方法使用深度混合密度模型来预测特征值的分布。这种网络结构结合了常规的深度神经网络和高斯混合模型的优势,即通过 DNN 对输入和输出之间的复杂关系进行建模,并且以概率分布作为输出。系统使用了基于 MDN 统一的目标和拼接模型,该模型能预测语音目标特征(谱、基频、时长)和拼接成本分布,并引导基元的搜索。对于元音,有时语音特征相对稳定,而有些时候变化又非常迅速,针对这一问题,模型需要能够根据这种变化性对参数作出调整,因此在模型中使用嵌入方差解决这一问题。系统在运行速度、内存使用上具有一定优势,使用快速预选机制、单元剪枝和计算并行化优化了它的性能,可以在移动设备上运行。

    二、深度学习在语音增强中的应用

    通过语音增强可以有效抑制各种干扰信号,增强目标语音信号;有效的语音增强算法一方面可以提高语音可懂度和话音质量,另一方面有助于提高语音识别和声纹识别的鲁棒性。经典的语音增强方法包括谱减法、维纳滤波法、最小均方误差法,上述方法基于一些数学假设,在真实环境下难以有效抑制非平稳噪声的干扰。基于盲分离的非负矩阵分解方法也得到了一定关注,但是这类方法计算复杂度相对较高;近年来,基于深度学习的语音增强方法得到了越来越多的关注,接下来重点介绍几种典型的基于深度学习的语音增强方法。

    1. 预测幅值谱信息

    这类方法通过深层神经网络模型建立带噪语音和干净语音谱参数之间的映射关系,模型的输入是带噪语音的幅值谱相关特征,模型的输出是干净语音的幅值谱相关特征,通过深层神经网络强大的非线性建模能力重构安静语音的幅值谱相关特征;神经网络模型结构可以是 DNN/BLSTM-RNN/CNN 等;相比于谱减、最小均方误差、维纳滤波等传统方法,这类方法可以更为有效的利用上下文相关信息,对于处理非平稳噪声具有明显的优势。

    一文看懂深度学习在语音合成&增强上的应用

    2. 预测屏蔽值信息

    采用这类方法建模时模型的输入可以是听觉域相关特征,模型的输出是二值型屏蔽值或浮点型屏蔽值,最常用的听觉域特征是 Gamma 滤波器相关特征,这种方法根据听觉感知特性将音频信号分成不同子带提取特征参数;对于二值型屏蔽值,如果某个时频单元能量是语音主导,则保留该时频单元能量,如果某个时频单元能量是噪声主导,则将该时频单元能量置零;采用这种方法的优势是,共振峰位置处的能量得到了很好的保留,而相邻共振峰之间波谷处的能量虽然失真误差较大,但是人耳对这类失真并不敏感;因此通过这种方法增强后的语音具有较高的可懂度;浮点值屏蔽是在二值型屏蔽基础上进一步改进,目标函数反映了对各个时频单元的抑制程度,进一步提高增强后语音的话音质量和可懂度。

    一文看懂深度学习在语音合成&增强上的应用

    3. 预测复数谱信息

    目前主流的语音增强方法更多的关注于对幅值谱相关特征的增强而保留原始语音的相位谱,随着信噪比的降低相位谱失真对听感的影响明显增强,在低信噪比条件下,有效的相位重构方法可以有助于提高语音可懂度;一种典型的相位重构方法是利用基音周期线索对浊音段的相位进行有效修复,但是这类方法无法有效估计清音段的相位信息;复数神经网络模型可以对复数值进行非线性变换,而语音帧的复数谱能够同时包含幅值谱信息和相位谱信息,可以通过复数神经网络建立带噪语音复数谱和干净语音复数谱的映射关系,实现同时对幅值信息和相位信息的增强。

    一文看懂深度学习在语音合成&增强上的应用

    4. PIT 说话人分离

    通过说话人分离技术可以将混叠语音中不同的说话人信息有效分离出来,已有的基于深度学习的说话人分离模型受限于说话人,只能分离出特定说话人的声音;采用具有置换不变性的训练方法得到的说话人分离模型不再受限于特定说话人;这种方法通过自动寻找分离出的信号和标注的声源之间的最佳匹配来优化语音增强目标函数;模型的输入是混叠语音的谱参数特征,模型的输出包含多个任务,每个任务对应一个说话人;在训练过程中,对于训练集中一个样本内,每个任务固定对应某个说话人;可以采用 BLSTM-RNN 模型结构建模。

    一文看懂深度学习在语音合成&增强上的应用

    5. DeepClustering 说话人分离

    基于深度聚类的说话人分离方法是另一种说话人无关的分离模型,这种方法通过把混叠语音中的每个时频单元结合它的上下文信息映射到一个新的空间,并在这个空间上进行聚类,使得在这一空间中属于同一说话人的时频单元距离较小可以聚类到一起;将时频单元映射到新的空间跟词矢量抽取的思想有些类似,可以通过 k 均值聚类的方法对时频单元分组,然后计算二值型屏蔽值分离出不同说话人的语音,也可以通过模糊聚类的方法描述不同的时频单元,然后计算浮点型屏蔽值后分离混叠语音。基于深层聚类的方法和基于 PIT 的方法有着各自的优势,为了更有效的解决问题,可能需要将两种方法有效的结合。

    6. 基于对抗网络的语音增强

    在深度学习生成模型方面的最新突破是生成对抗网络,GAN 在计算机视觉领域生成逼真图像上取得巨大成功,可以生成像素级、复杂分布的图像。GAN 还没有广泛应用于语音生成问题。本文介绍一种基于对抗网络的语音增强方法。这种方法提供了一种快速增强处理方法,不需要因果关系,没有 RNN 中类似的递归操作;直接处理原始音频的端到端方法,不需要手工提取特征,无需对原始数据做明显假设;从不同说话者和不同类型噪声中学习,并将它们结合在一起形成相同的共享参数,使得系统简单且泛化能力较强。

    一文看懂深度学习在语音合成&增强上的应用

    语音增强问题是由输入含噪信号得到增强信号,这种方法通过语音增强 GAN 实现,其中生成网络用于增强。它的输入是含噪语音信号和潜在表征信号,输出是增强后的信号。将生成器设计为全部是卷积层(没有全连接层),这么做可以减少训练参数从而缩短了训练时间。生成网络的一个重要特点是端到端结构,直接处理原始语音信号,避免了通过中间变换提取声学特征。在训练过程中,鉴别器负责向生成器发送输入数据中真伪信息,使得生成器可以将其输出波形朝着真实的分布微调,从而消除干扰信号。

    三、总结

    本文围绕着近年来深度学习在语音合成和语音增强问题中的新方法展开介绍,虽然语音合成和语音增强需要解决的问题不同,但是在建模方法上有很多相通之处,可以相互借鉴。深度学习方法在语音转换、语音带宽扩展等领域也有着广泛的应用,感兴趣的读者可以关注这一领域最新的研究成果。虽然深度学习的快速发展推动了智能语音产品的落地,但是仍有些问题不能依赖于深度学习方法彻底解决,例如提高合成语音的表现力、提高增强后语音的可懂度,需要在对输入输出特征的物理含义深入理解的基础上,有效的表征信息,选择合适的方法进行建模。




    本文作者:极限元
    本文转自雷锋网禁止二次转载, 原文链接
    展开全文
  • 基于深度学习语音增强简述.pdf
  • 基于深度学习语音增强方法研究.pdf
  • 基于深度学习的单通道语音增强实现(一)

    千次阅读 热门讨论 2019-05-28 22:25:27
      用于语音增强的基于纯DNN的mask预测。(其实纯DNN的效果确实不是特别好,当初看到了最简单的一篇文章就直接用他的结构做了。 二、环境描述   深度学习框架:PyTorch   数据集:上传百度网盘中…(其实就是...

      其实这个系列是我的毕业设计,很早就准备写了,一直拖延症比较严重,终于在今天有机会总结总结了。首先描述一下要做的工作。

    一、工作描述

      用于语音增强的基于纯DNN的mask预测。(其实纯DNN的效果确实不是特别好,当初看到了最简单的一篇文章就直接用他的结构做了。

    二、环境描述

      深度学习框架:PyTorch
      数据集:上传百度网盘中…(其实就是TIMIT和NOISE-92的噪声混合的数据

    三、实验设计

    3.1 实验总体设计

      如图,实验可以分成两个阶段,训练阶段和测试阶段。训练阶段使用我们自己混合好的带噪语音对模型进行训练;测试阶段使用测试数据评估模型的性能。
    实验设计图

    3.2 训练阶段

    3.2.1 数据合成

      训练阶段我们需要根据需要合成不同信噪比的数据,合成过程见利用纯净语音和噪声合成不同信噪比的训练数据
      训练数据可以在这里获取。

    3.2.2 短时傅里叶变换(STFT)

      对于短时傅里叶变换,这里有一些小坑需要注意:

    • 加窗时候的窗函数必须统一。切忌训练网络时一种窗函数,预测语音时使用另一种窗函数
    • STFT方法必须一致。STFT的方法众多,比如librosa的stft()方法以及网上一些大神自己写的STFT方法,对于一个实验,所有用到的STFT的地方必须使用同一个STFT方法,这样才能让你的结论更有说服力。
    • 对于数据进行stft然后再进行istft(逆傅里叶变换)是无法恢复到原来数据大小的,因为在STFT过程中进行了对齐处理,可能会进行丢弃/补齐操作
    3.2.3 扩帧

      本次实验是使用纯DNN实现,如果不进行扩帧,网络就是161特征预测161特征(STFT之后是共轭复数,所以取一半也就是161维即可,这个操作库函数一半都会自动操作,无需手动截取161),这样就是纯粹的线性预测线性,就丢失了语音的时间序列特性。因此我们对输入帧进行帧扩展,从STFT的结果(T,F)扩展为(T,F * 11)即向前向后各扩5,使用11特征预测1特征。

    3.2.4 训练目标

      本次实验是采用mask的方法进行降噪,因此我们的目标为 I R M ( t , f ) IRM(t,f) IRM(t,f)
    (3.1) I R M ( t , f ) = ∣ S ( t , f ) ∣ 2 ∣ S ( t , f ) ∣ 2 + ∣ N ( t , f ) ∣ 2 IRM(t,f)= \sqrt {\frac{\lvert S(t,f)\lvert^2}{\lvert S(t,f)\lvert^2 + \lvert N(t,f)\lvert^2}} \tag{3.1} IRM(t,f)=S(t,f)2+N(t,f)2S(t,f)2 (3.1)
    其中 ∣ S ( t , f ) ∣ 2 \lvert S(t,f)\lvert^2 S(t,f)2为纯净语音的能量谱, ∣ N ( t , f ) ∣ 2 \lvert N(t,f)\lvert^2 N(t,f)2为噪声的能量谱。

    3.3 评价标准

      本次实验使用短时客观可懂度(Short-Time Objective Intelligibility, STOI)和主观语音质量评估(Perceptual Evaluation of Speech Quality, PESQ)来衡量预测语音的优劣。

    展开全文
  • 8.3.3 在深度学习网络训练中应用噪声对比估计算法 124 第四部分深度神经网络中的特征表示学习127 9 深度神经网络中的特征表示学习128 9.1 特征和分类器的联合学习128 9.2 特征层级129 9.3 使用随意输入特征的...
  • 深度学习语音降噪总结

    万次阅读 2019-03-14 14:32:03
    实时语音通信发展到今天,用户对通话语音质量提出了越来越高的要求。由于终端设备的多样性以及使用场景的差异,声音问题依然存在。传统的音频处理技术从声音信号本身出发,挖掘其时频特性,作出假设,建立物理模型,...
  • 深度学习语音识别方法概述与分析

    千次阅读 2020-05-08 11:24:19
    1 语音识别方法研究现状 随着人机交互技术越来越受到人们的重视,而人通过语音与计算机进行交互是除了手动键盘输入之外最自然最基本的交互方式,所以也越来越引起研究人员的关注。语音识别方法即自动语音识别( ...
  • 近年来,基于深度学习的研究在许多语音处理任务中得到了应用,取得了令人满意的结果。作为第一步,我们实现了一个信号分析模块来计算数据库中每个音频文件的幅度和相位。通过将信号表示为幅度和相位,用神经网络对...
  • 基于深度学习的空间信息保持的双耳语音增强方法.pdf
  • 语音增强(Speech Enhancement)是指当语音信号被各种各样的噪声干扰、甚至淹没后,从噪声背景中提取有用的语音信号,抑制、降低噪声干扰的技术。一句话,从含噪语音中提取尽可能纯净的原始语音。 本资源整理了语音...
  • 基于Python的深度学习BP网络语音增强方法研究
  • 基于Python的深度学习BP网络语音增强方法研究.pdf
  • 深度学习语音分离的应用

    千次阅读 2019-06-04 15:32:22
    基于深度学习的有监督语音分离在学术界和工业界越来越受到关注,也是深度学习语音领域的应用中重要的一部分。这个主题社长曾经邀请搜狗语音研究员文仕学做过分享。 以下是他的分享内容,点击查看更多往期回顾: ...
  • 语音处理的流程 语音信号的处理: 1.分帧:短时分析时将语音流分成一段一段来处理 2.帧长:帧的时间跨度,常用20ms 3.帧移:帧与帧的平滑过渡:0-0.5帧长 预加重: 在发送端实现对语音信号的高频分量进行补偿的方法...
  • 语音增强

    万次阅读 多人点赞 2017-12-03 18:25:31
    1.1 语音增强概况  语音增强,英文名:Speech Enhancement,其本质就是语音降噪,换句话说,日常生活中,麦克风采集的语音通常是带有不同噪声的“污染”语音,语音增强的主要目的就是从这些被“污染”的带噪语音中...
  • 深度学习

    千次阅读 多人点赞 2019-01-14 14:51:41
    #深度学习 我与这世间所有的羁绊,一旦连上,就再也断不开。 羁绊越深,痛苦便越深。 关于这篇深度学习的文章,总共六章。 综述而已。 01:研究背景 02:深度学习网络 03:深度学习框架 04:深度学习应用 05:未来...
  • Deep Xi :一种用于语音增强的先验SNR估计的深度学习方法。 新闻 新的训练模型: model目录中提供了受过培训的MHANet。 新期刊论文: 新期刊论文: 新的预印本(正在审核): 该研究的代码可以在以下找到: : 。 ...
  • 1、当干扰为噪声信号时,可以称为“语音增强”(Speech Enhancement) 2、当干扰为其他说话人时,可以称为“多说话人分离”(Speaker Separation) 3、当干扰为目标说话人自己声音的反射波时,可以称为“解混响...
  • 2019深度学习语音合成指南

    千次阅读 2019-09-09 21:27:29
    在这篇文章中,我们将研究基于深度学习而进行的研究或模型框架。 在我们正式开始之前,我们需要简要概述一些特定的、传统的语音合成策略:拼接和参数化。 拼接方法,需要使用大型数据库中的语音来拼接...
  • 行业分类-物理装置-一种基于深度学习降低MFCC特征失真的语音增强方法.zip
  • 在俞栋接受CSDN专访解读基于深度学习语音识别技术及CNTK开源软件的同时,《解析深度学习-语音识别实践》一书的另一位作者、微软人工智能首席科学家邓力也接受CSDN专访,以另外的视角诠释了语音识别领域的最新技术...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,520
精华内容 6,608
关键字:

深度学习语音增强