SincNet 原始波形的说话人识别

SincNet 原始波形的说话人识别

论文:M. Ravanelli, Y. Bengio, in 2018 IEEE Spoken Language Technology Workshop, SLT 2018 - Proceedings (Institute of Electrical and Electronics Engineers Inc., 2019), pp. 1021–1028.

主要贡献:

  1. 滤波器学习
  2. 数字信号波形来约束第一个卷积层的滤波器
  3. 滤波器参数少

摘要

说话人识别任务中,MFCC、FBANK、PLP 等频谱特征需要设定多个超参,例如帧长、帧间距、帧窗口类型和频谱个数。从原始模型直接学习说话人嵌入的方法采用数据驱动的方式直接学习滤波器参数。M. Ravanelli 提出 SincNet,该网络的第一层卷积层的参数化带通滤波器引入了数字信号的特定波形约束,例如 Hamming 窗。SincNet 能够很好地学到窄带说话人特性,例如音调和共振峰。实验表明:在 TIMIT 和 Librispeech 语料上,SincNet 收敛速度更快、计算量更好,且性能优于从原始波形学习的 CNN。

引言

在说话人识别领域,传统 i-vector 方法和深度学习方法大多采用手工设计的特征,例如 MFCC、FBANK。这些频谱特征可能阻碍了语音的音调和共振峰的学习。为了避免这个问题,以频谱图和原始波形作为输入的方法开始出现。目前,直接从原始波形学习的语音研究包括:情绪任务、说话人识别、欺骗行为检测和语音合成。

第一层卷积层是原始波形 CNN 模型最关键的部分,这部分需要处理两个问题:1)高维输入,2)梯度消亡的问题。CNN 学习滤波器还需要面临噪声、不协调的多频段形状、训练样本少等困难。

为了解决 CNN 学习滤波器的问题,SincNet 采用了一系列参数化的带通滤波器。滤波器的高低截止频率是唯一需要学习的参数。SincNet 表显著更快的收敛速度、优于 CNN 的性能和短语音的适应能力。

SincNet

SincNet 模型结构,采用 dnn_models.py 的 SincNet 实现:

  1. 波形:块 200 ms,10 ms 重叠,
  2. 模型:251 长度 * 80 滤波器 + 2 层 5 长度 * 60 滤波器 + 3 层 全连接层(2048) + softmax 分类起(卷积层可视化描述:https://github.com/vdumoulin/conv_arithmetic),
  3. 层归一化用于输入样本和所有卷积层,
  4. 批量归一化用于全连接层,
  5. eaky-ReLU 激活函数用于所有隐藏层,
  6. Sinc 层使用 mel-scale 截止频率作为初始化,
  7. 除了 Sinc 层的网络使用 “Glorot” 初始化策略;
  8. 训练过程:RMSprop 优化器,学习速率 0.001,alpha 0.95,epsilon 1e-7,小批量规模 128;
  9. 超参调试使用 TIMIT 数据集。

滤波器设计

滤波器的设计是 SincNet 的关键部分,M. Ravanelli 引入了数字信号处理方面的带通滤波器,具体过程如下:

  1. 标准 CNN 的滤波器执行输入波形和有限脉冲响应滤波器之间的时域卷积:

    y [ n ] = x [ n ] ∗ h [ n ] = ∑ l = 0 L − 1 x [ l ] ⋅ h [ n − l ] y[n]=x[n]*h[n]=\sum\limits_{l=0}^{L-1}x[l]\cdot h[n-l] y[n]=x[n]h[n]=l=0L1x[l]h[nl]

    其中 x [ n ] x[n] x[n] 是语音信号的一个块,例如 200 ms 语音信号; h [ n ] h[n] h[n] 表示长度 L L L 的一维滤波器; y [ n ] y[n] y[n] 是滤波器输出。实现过程可以参考 torch.nn.Conv1d

  2. 将滤波器 h [ n ] h[n] h[n] 参数化为 g [ n , θ ] g[n,\theta] g[n,θ],其中 θ \theta θ 是参数。

  3. 论文中采用矩形带通滤波器作为参数化滤波器的实现,其参数有两个:低频截止频率 f 1 f_1 f1 和高频截止频率 f 2 f_2 f2,具体地,在频率上的表达式为

    G [ f , f 1 , f 2 ] = r e c t ( f 2 f 2 ) − r e c t ( f 2 f 1 ) G[f,f_1,f_2]=rect\left(\frac{f}{2f_2}\right)-rect\left(\frac{f}{2f_1}\right) G[f,f1,f2]=rect(2f2f)rect(2f1f)

    使用逆向傅立叶变换,其时域形式为

    g [ n , f 1 , f 2 ] = 2 f 2 s i n c ( 2 π f 2 n ) − 2 f 1 s i n c ( 2 π f 1 n ) g[n,f_1,f_2]=2f_2sinc(2\pi f_2n)-2f_1sinc(2\pi f_1n) g[n,f1,f2]=2f2sinc(2πf2n)2f1sinc(2πf1n)

    其中, s i n c ( x ) = sin ⁡ ( x ) / x sinc(x)={\sin(x)}/{x} sinc(x)=sin(x)/x

  4. 进一步对带通滤波器执行窗口化,来缓解通带中的纹波和阻带中的有限衰减,

    g w [ n , f 1 , f 2 ] = g [ n , f 1 , f 2 ] ⋅ w [ n ] g_w[n,f_1,f_2]=g[n,f_1,f_2]\cdot w[n] gw[n,f1,f2]=g[n,f1,f2]w[n]

    论文中使用了 Hamming 窗口,测试表明过不同窗函数(例如 Hamming、Hann、Blackman 和 Kaiser)不会产生显著的差异。

    w [ n ] = 0.54 − 0.46 ⋅ cos ⁡ ( 2 π n L ) w[n]=0.54-0.46\cdot\cos\left(\frac{2\pi n}{L}\right) w[n]=0.540.46cos(L2πn)

在参数化滤波器中, f 1 f_1 f1 f 2 f_2 f2 是两个需要优化的参数,它们满足以下三个约束条件:

  • f 1 ≥ 0 f_1\geq 0 f10,可引入新参数 f 1 a b s = ∣ f 1 ∣ f_1^{abs}=|f_1| f1abs=f1 来实现这一约束;
  • f 2 ≥ f 1 f_2\geq f_1 f2f1,可引入新参数 f 2 a b s = f 1 + ∣ f 2 − f 1 ∣ f_2^{abs}=f_1+|f_2-f_1| f2abs=f1+f2f1 来实现这一约束,
  • f 2 f_2 f2 还需要满足小于 Nyquist 频率,训练发现这个约束会被自然的满足。

这样设计的滤波器是可微分的,则可以联合 SincNet 模型的其它参数同时进行优化。

SincNet 属性

SincNet 的第一层卷积层采用 2 个参数的带通滤波器,它具有以下属性:

  1. 收敛速度快:引入滤波器形状的先验知识(来自数字信号处理),学习滤波器特性;

  2. 参数更少:SincNet 滤波器 2F vs. CNN 滤波器 LF,与滤波器长度无关;

  3. 计算高效:滤波器波形窗函数是对称函数,可以只计算一半,然后继承给另一半;

  4. 具有可解释性:第一层卷积层是具有可读、可解释的,实际上,它具有明确的物理意义。

实验设置

语料

语料有两个,分别是 TIMIT 与 Librispeech,数据集的设置如下:

  1. 声音动态检测(VAD)移除前后非语音片段,

  2. 语音段内高于 125 ms 作为划分为不同块的规则,

  3. 移除 TIMIT 句子校准(校准的句子,例如相同的文本),

  4. TIMIT 中 5 个句子/人用于训练,3个句子/人用于测试,

  5. Librispeech 随机选择 12-15s 训练素材,2-6s 测试素材,

  6. TIMIT 训练集 462 人,Librispeech 训练集 2484 人。

说话人验证设定

说话人验证系统,获得说话人 id 的步骤:

  1. 说话人嵌入:d-vector 框架,最后的隐藏层的输出用于提取说话人特征,或者 DNN-class 使用 softmax 的后验评分;

  2. cosine 距离计算注册语音和测试语音之间的相似度。

此外,冒名顶替者使用真实说话人的每个句子的 10 段语音。评测的冒名顶替者与训练的说话人不同。

基准方法设定

基准设置包含 CNN 基准和基于特征的说话人验证基准:

  1. CNN + 原始波形

  2. CNN + 39 MFCCs(静态 + Delta + Delta Delta) + batch normalization

  3. MLP + 40 FBANK + layer normalization

  4. i-vector:GMM-UBM + T + PLDA

其中,MFCC 与 FBANK 帧长 25 ms、帧间距 10 ms、窗口约 200 ms,GMM-UBM 2048 高斯成分,i-vector 400 维度,PLDA 采用 Librispeech 的训练集进行训练。

结果与分析

滤波器分析

filters

Librispeech 语料上学习来测试滤波器学习的效果,Fig. 2Fig. 3 表明:

  1. CNN:学到的滤波器的频率响应,一些像噪声,一些是多组形状;
  2. SincNet:矩形带通滤波器。
  3. SincNet 学到音调(男性:133 Hz,女性:234 Hz)、第一共振峰(500 Hz)和第二共振峰(900-1400 Hz)更加明显,更能适应说话人特性,这表明 SincNet 比 CNN 更能捕获窄带的说话人线索。

说话人鉴别

Fig. 4 表明,在 TIMIT 数据集上,SincNet 比 CNN 收敛速度更快,帧误差更低。

模型/语料(句子误差率)TIMITLibrispeech
DNN-MFCC0.992.02
CNN-FBANK0.861.55
CNN-Raw1.651.00
SincNet0.850.96

上表描述了 SincNet 在说话人鉴别的段误差率上明显优于直接学习原始波形的 CNN,且能高于使用 MFCC 特征的 DNN 结构和 BFANK 特征的 CNN 结构。此外,Librispeech 语料上的测试结果说明了少量训练数据,CNN 无法利用 FBANKs 特征学到滤波器组。

说话人确认

模型/Librispeech 说话人嵌入(等误差率)TIMITLibrispeech
DNN-MFCC0.880.72
CNN-FBANK0.600.37
CNN-Raw0.580.36
SincNet0.510.32

上表说明,在 Librispeech 语料上, DNN-class 说话人嵌入优于 d-vector,SincNet 实现了最优的性能,相比较 i-vector EER 1.1% 明显较优。

疑问

  1. 论文没有确定指出测试的说话人是否出现在训练集中。
  2. NIST SRE 和 VoxCeleb 的说话人识别语料没有被使用到实验中。

参考文献

  1. Muckenhirn H, Magimai-Doss M, Marcell S. Towards Directly Modeling Raw Speech Signal for Speaker Verification Using CNNS. ICASSP, IEEE International Conference on Acoustics, Speech and Signal Processing - Proceedings. 2018.

作者信息:

CSDN:https://blog.csdn.net/i_love_home?viewmode=contents

Github:https://github.com/mechanicalsea

2019级同济大学博士研究生 王瑞 rwang@tongji.edu.cn

研究方向:说话人识别、说话人分离

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
STM32ADC波形识别是指利用STM32单片机的ADC模块采集外部信号,并通过处理和分析对这些信号进行识别和分类的过程。 在给出详细的波形识别步骤之前,先简要介绍一下STM32F103单片机的频谱分析和波形识别系统的硬件组成和软件设计,以便更好地理解。 该系统的硬件组成包括以STM32F103ZET6单片机为核心的主控芯片、ADC采样模块、TFTLCD液晶屏等。主控芯片通过ADC模块对输入信号进行采样,然后使用DSP库提供的FFT函数对采集到的信号进行处理。最后,将输入信号的频谱图显示在TFTLCD液晶屏上,同时显示波形相关参数以及波形种类。 具体的波形识别步骤如下: 1. 首先,在主函数中进行相关的初始化,包括延时函数、串口初始化、LCD初始化、定时器初始化等。 2. 然后,配置ADC模块和DMA传输,以准备进行信号的采样和传输。可以根据需要设置采样频率、幅度和直流偏移量等参数。 3. 接下来,进入主循环,在循环中进行信号的采样和波形识别处理。 4. 在循环中,通过ADC模块采集信号数据,并将采集到的数据存储到缓冲区中。 5. 然后,利用FFT函数对采集到的信号进行处理,得到信号的频谱图。 6. 最后,使用LCD显示模块将频谱图显示在TFTLCD液晶屏上,同时显示相关的波形参数和波形种类。 需要注意的是,具体的波形识别算法和参数设置可能需要根据具体的应用场景和需求进行调整和优化。 综上所述,通过配置和使用STM32单片机的ADC模块,结合DSP库提供的FFT函数和LCD显示模块,可以实现波形识别和显示功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值