基于深度学习的说话人识别算法_郑雷

说话人识别(声纹识别)speaker recognition

  • 目的:提取判别能力较强的声纹特征

  • 改进损失函数提高识别精度

    • DenseNet 稠密型网络 作为声纹提取器,提取最后一层隐藏层的声纹特征
    • ICTL由三元组损失 Triplet Loss和改进的三元组损失 ICL 组成
      • ICTL作为目标函数,也是Softmax Loss的辅助损失函数,计算出提取的三元组特征之间的相似度损失
      • Softmax Loss计算出DenseNet最后一层分类层对应的三元组的预测身份与真实身份的误差损失
      • ICTL对监督层的监督使训练中输出的声纹特征的维度之间高度相关分布,即相同说话人的样本靠近
    • TCL 三元组中心损失思想
      • 提出两种增加类内约束的TCL损失函数作为DenseNet最后一层隐藏层的监督函数
      • 进一步增强提取的声纹特征与属于同一说话人样本特征中心之间的相似度的约束
      • 进而提高声纹特征的判别里,改善DenseNet分类层的识别效果

1 绪论

特征提取

  • 目视法:语谱图

  • 倒谱:提取基音的频率来估计语音的特征参数

    • 线性预测系数 LPC
    • 线性预测倒谱系数 LPCC
  • 线性预测:使用过去若干个且是唯一的语音采样的线性组合

  • 梅尔频率倒谱系数:MFCCs作为说话人的声音特征

  • Fbanks:没有MFCCs的离散余弦变换 DCT

  • 动态差分特征参数:利用语音信号的的动态连续特性,将动静态特征通过堆叠的方式相结合。

    • 动态差分MFCCs
    • 动态差分Fbanks

模式匹配

  • 动态时间规整 DTW:寻找语音之间的最佳规整路径构造最优解来获取相似性

  • 矢量量化 VQ:对语音数据编码形成说话人识别模型

  • 概率模型法:基于参数的模式匹配方法,找出声纹特征信息的矢量分布规律,利用统计学原理构建模型

  • HMM

  • 高斯混合模型 GMM:利用多个高斯概率密度函数对输入信号进行概率建模。

  • 高斯混合通用背景模型 GMM-UBM:把大量的非目标说话人混合训练,得到一个可以提供先验信息的通用背景模型。

  • 联合因子分析 JFA:利用说话人声音信道差异性建立的说话人模型,很大程度上解决了语音信道不匹配的问题。

  • 基于i-vector的说话人识别方法:通过将说话人语音和信道变化一起建模,并在识别阶段对超矢量进行补偿,解决了信道畸变;但是需要用不同的目标函数,训练步骤复杂,而且特征维度较高,计算量十分庞大。

深度学习

  • 基于CNN/i-vector框架的说话人识别方法
  • 基于3DCNN的说话人识别方法:同时捕捉时间和空间
  • Deep Speaker识别系统:
    • 训练方法
      • 每次采集三个说话人样本。记作基准样本,正样本和负样本。
      • 基准样本和正样本属于同一说话人,基准样本与负样本属于不同说话人,构成三元组
      • 提取三元组Fbanks堆叠特征作为初始特征,输入到残差网络模型ResNet中
      • 从最后一层隐藏层中提取三者的低维特征向量
      • 采用三元组损失作为ResNet最后一层隐藏层的监督函数,来计算出基准样本与正负样本之间的相似度关系
      • 训练神经网络并调参,拉近基准样本与正样本之间的距离,推远基准样本与负样本
      • 再次输入三个样本给ResNet,就能区分不同说话人
    • 不足
      • ResNet模型的训练参数非常庞大,随着网络训练参数的增多会造成过拟合的问题,只适合大语音样本集的声纹识别
      • 增加深度会产生过多的连乘和卷积,最终导致误差梯度的消失
      • 三元组损失只能扩大不同说话人之间的距离,不涉及同一说话人中不同语音片段的约束
graph LR
A(三元组)--声纹特征-->B[ResNet内部]-->C[最后一层隐藏层]-->D[Triplet Loss]-->E[BP算法];
  • 稠密型网络:
    • 同样采用ResNet中的快捷连接方式将前层特征传送给后层
    • 但是在训练层数较少时,采取卷积通道级联的方式使网络中的每层卷积层都将接受前面所有卷积层的特征输出作为该卷积层的输入,提高了特征传播效率
graph LR
A[初始层]-->B[密集块]-->C[过渡块]-->D[密集块]-->E[过渡块]-->F[密集块]-->G[平均池化层]-->H[分类层];
  • 密集块:依次经过BNReluconv(n×n)\mathrm{BN\text{、}Relu}、conv(n\times n)
  • 过渡块:经过BNReluconv(1×1)\mathrm{BN\text{、}Relu}\text{、}conv(1\times 1)Average Poolig(2×2)Average\ Poolig(2\times2),采用conv(1×1)conv(1\times1)卷积层降低特征通道的数量,并使用局部平均池化层Average Poolig(2×2)Average\ Poolig(2\times2)对特征图进行降采样。
  • 隐藏层:采用全局平均池化层对最后一层的多维特征数据进行平均化,从而转换成一维的低维特征值
  • 平均池化层:降低网络的参数,防止过拟合。
  • 分类层:输出所有说话人对应的概率值。

2 基本概述

2.1 分类

  • 文本相关 文本无关
  • 说话人辨认 说话人确认
  • 开集识别 闭集识别

根据判别方式:

  • 说话人辨认、声纹辨认(speaker identification):把模型库中的语言特征与待识别的语音特征作匹配,进而判断未知语音的身份(一对多)
  • 说话人确认、声纹验证 (speaker verification):判断识别阶段的未知说话人与模型库中对应的某个说话人是否匹配(一对一),验证识别的说话人声称的身份,不需要识别出每一个说话人,说话人识别系统不能知道冒名顶替者的实际身份。
    • 闭集识别:如果需要辨认其他说话人,需要在训练阶段加入新的语音样本。
    • 开集识别:在识别阶段可以加入其他未知说话人样本

根据说话人说话的内容:

  • 文本相关的说话人识别:不能识别训练集语音所包含的文字内容之外的语音,识别结果好
  • 文本无关的说话人识别:贴近现实,灵活多变,难度高

2.2 原理

训练阶段

graph LR
A[采集训练语音]-->B[语音预处理]-->C[特征提取]-->D[训练模型]-->E[建立模型]-->F[模式匹配]-->G[判决阶段]-->H[识别结果];
AA[获取测试语音]-->BB[语音预处理]-->CC[特征提取]-->F;

测试阶段

2.3 语音特征提取

预处理
graph LR
P( )--语音信号-->A[预加重]-->B[分帧]-->C[加窗]-->D{端点检测}--静音帧-->E[舍弃];
D--语音帧-->F[特征提取];
  • 预加重

    • 原因:语音在高频能量衰减,导致离散傅里叶变换后的信号在高频处的 共振峰不明显,不利于特征分析和处理
    • 高频带通滤波器 H(z)=1αzH(z)=1-\alpha zα\alpha-预加重系数
    • 预加重后的语音信号 y(n)=x(n)αx(n1)y(n)=x(n)-\alpha x(n-1)
  • 分帧和加窗

    • 语音短时平稳

    • 帧位移:相邻帧信号有一半的重叠

    • 滑动窗口函数进行分帧

      • 矩形窗函数

        w(n)=0.5  (1cos(2πnN1))w(n)= 0.5\; \left(1 - \cos \left ( \frac{2 \pi n}{N-1} \right) \right)

      • 汉明窗函数:w(n)={0.540.46cos(2πnN1),n=0,1,...,N10,其他w(n)=\left\{ \begin{aligned} 0.54-0.46\cos(\frac{2\pi n}{N-1}), & n=0,1,...,N-1\\ 0, & \text{其他} \end{aligned} \right.

      • 加窗后的语音信号:sw(n)=y(n)×w(n)s_w(n)=y(n)\times w(n)

  • 端点检测(语音活动检测,Voice Activity Detection,VAD)

    • 找到目标语音信号和噪声出现的节点

    • 基于阈值的 VAD:通过提取时域(短时能量、短期过零率等)或频域(MFCC、谱熵等)特征,通过合理的设置门限,达到区分语音和非语音的目的。这是传统的 VAD 方法。

      作为分类器的 VAD:可以将语音检测视作语音/非语音的两分类问题,进而用机器学习的方法训练分类器,达到检测语音的目的。

      模型 VAD:可以利用一个完整的声学模型(建模单元的粒度可以很粗),在解码的基础,通过全局信息,判别语音段和非语音段。

      VAD 作为整个流程的最前端,需要在本地实时的完成。由于计算资源非常有限,因此,VAD 一般会采用阈值法中某种算法;经过工程优化的分类法也可能被利用;而模型 VAD 目前难以在本地部署应用。

    • 短时过零率 st-ZCR:根据时域信号的连续波形曲线与横坐标的交点个数来确定过零率

    • Zn=sgn[x(n)]sgn[x(n1)]w(n)Z_n=|sgn[x(n)]-sgn[x(n-1)]|w(n)

MFCCs
  • 通过梅尔滤波器组提取的语音特征参数

  • 实际频率与梅尔频率的非线性关系Fmel=2595×log10(1+f700)F_{mel}=2595\times\log_{10}(1+\frac{f}{700})

  • 提取流程

      graph LR
    P[语音信号]-->A[预处理]-->B[FFT]-->C[Mel滤波器组]-->D[取对数]-->E[DCT]-->F[MFCC];
  • 离散功率谱X(k)=n=0N1sw(n)ej2πnk/N, (0n,kN1)X(k)=\sum_{n=0}^{N-1}s_w(n)e^{-j2\pi nk/N},\ (0\leq n,k\leq N-1)

  • 谱估计

  • MFCCs C(i)=2Nk=1PS(i)cos[(k0.5)]iπP,i=1,2,...,MC(i)=\sqrt{\frac{2}{N}}\sum_{k=1}^PS(i)\cos[(k-0.5)]\frac{i\pi}{P},i=1,2,...,MMM为梅尔频率倒谱系数的维数,PP是滤波器的个数。

Fbanks堆叠特征
  • 去除MFCCs提取过程中的DCT倒谱运算可以获取Fbanks
  • Fbanks+Δ+Δ2\mathrm{Fbanks}+\Delta+\Delta^2

2.4 GMM识别系统

高斯混合模型:λ=wi,ui,i,i=1,2,...,M\lambda={w_i,u_i,\sum_i} ,i=1,2,...,M

期望最大化EM算法:迭代更新GMM中所有阴变量的极大后验概率估计

  • 求出训练数据XDX_D出现在第ii个高斯状态的概率粗略值
  • 求解出权重、均值以及协方差矩阵的估计值

2.5 深度学习

CNN
  • 卷积层
  • 激活函数
  • 池化层
  • 全连接层
ResNet
  • 残差结构
  • 快捷连接Shortcut Connections:跳过部分卷积层直接到输入层
  • 跳跃连接一直打开
梯度消失问题
  • 使用ReLU函数作为网络的激活函数
  • 在输入数据或者每层网络的输出进入激活函数之前,进行批量归一化 BN,将特征转换成均值为0、标准差为1的紧密分布形式,使之能够有效进入激活函数原点附近
反向传播算法 BP算法

3 DenseNet-ICTL

3.1 声纹特征的提取

graph LR
P(三元组样本)--3*Fbanks组合特征-->A[DenseNet内部]-->B[隐藏层]--声纹特征-->F[ ];
P--3*64*64*3-->A;
B--64维-->F;

DenseNet模型结构

graph LR
P[输入端]-->A[初始层]-->B[密集块]-->C[过渡块]-->D[密集块]-->E[过渡块]-->F[密集块]-->G[平铺层]-->GG[仿射层]-->H[分类层];
  • 平铺层:将DenseNet最后一个密集块输出的三维语音特征(16*16*80)压缩成一维特征即20480,保留上一层所有的声纹特征数据
  • 仿射层:DenseNet的最后一层隐藏层,利用仿射变换来去除不相关的特征数据

3.2 目标函数

  • Triplet Loss
  • 类内约束损失 ICL
  • Softmax Loss

联合目标函数LICTL=LSL+λ1(LTL+λ2LICL)L_{ICTL}=L_{SL}+\lambda_1(L_{TL}+\lambda_2 L_{ICL}),λ2\lambda_2表示LICLL_{ICL}LTL+λ2IICLL_{TL}+\lambda_2 I_{ICL}的权重大小,λ1\lambda_1表示LTL+λ2IICLL_{TL}+\lambda_2 I_{ICL}LICTLL_{ICTL}的权重大小。

3.3 训练过程

3.4 识别过程

graph LR
P(基准样本)--Fbanks组合-->A[DenseNet内部]-->B[分类层]-->F(说话人识别);

3.5 实验

系统性能评价指标

  • 识别率 ACC ACC=正确识别出的样本数待测样本总数×100%\mathrm{ACC}=\frac{\text{正确识别出的样本数}}{\text{待测样本总数}}\times 100\%
  • 等错误率 EER
    • 评价系统性能错误率的指标
      • 错误接受率 FAR FAR=错误接受的样本数量冒充的样本数量×100%\mathrm{FAR}=\frac{\text{错误接受的样本数量}}{\text{冒充的样本数量}}\times 100\%
      • 错误拒绝率 FRR FRR=错误拒绝的样本数量说话人的样本总数量×100%\mathrm{FRR}=\frac{\text{错误拒绝的样本数量}}{\text{说话人的样本总数量}}\times 100\%
    • 在某一阈值下 FAR=FRR,此时二者叫做EER。

分析

  • DenseNet增强了特征传播的效率,进而有效传递了训练误差,使网络的收敛速度加快。
  • 高维且稀疏的样本数据导致隐藏层输出的声纹判别力不足,使Softmax难以找到分界点,使Softmax Loss计算出的损失值在反向传播训练的过程中出现分类器优化困难的问题。所以识别阶段不同说话人样本之间的距离仍然较近。
  • 当识别人数较少时,DenseNet-ICTL系统的识别率相比ResNet-Triplet Loss系统具有较为明显的优势,而当识别人数逐渐增多时,DenseNet-ICTL系统识别率下降最为明显,但其识别效果仍然高于ResNet-Triplet Loss系统。
  • 经过对网络中的参数训练之后,最后一层隐藏层可以很好的区别不同说话人样本的声纹特征,并按照不同说话人形成聚类。

问题

  • Triplet Loss损失函数是一种高度依赖样本好坏的目标函数,挑选出不满足Triplet Loss的三元组才能很好地完成对DenseNet中参数的训练。
  • 由于DenseNet-ICTL系统每次都至少需要挑选三个样本,导致最终训练的总样本集呈立方式增长,耗费时间相对较长且计算量庞大。

4 DenseNet-TCL

4.1 声纹特征的提取

graph LR
P(语音样本)--Fbanks组合特征-->A[DenseNet内部]-->B[隐藏层]--声纹特征-->F[ ];
P--64*64*3-->A;
B--64维-->F;

4.2 目标函数

三元组中心损失 TCL
  • 结合Triplet Loss和Center Loss 类内中心损失
  • 避免了挑选三元组样本来训练神经网络的复杂过程,使得网络为每一个类学习一个类样本中心

Ltcl=i=1Mmax(D(xi,cyi)+mminjyiD(xi,cj),0)L_{t c l}=\sum_{i=1}^{M} \max \left(D\left(x_{i}, c_{y_{i}}\right)+m-\min _{j \neq y_{i}} D\left(x_{i}, c_{j}\right), 0\right)

其中, D(xi,cy1)D\left(x_{i}, c_{y_{1}}\right) 即为 Center Loss, 也即第 ii 个样本特征与同类特征中心之间的距离,

D(xi,cyi)=12i=1Mxicy122D\left(x_{i}, c_{y_{i}}\right)=\frac{1}{2} \sum_{i=1}^{M}\left\|x_{i}-c_{y_{1}}\right\|_{2}^{2}

其中, MM 为训练批次的大小, φ22\|\varphi\|_{2}^{2} 为欧式距离的平方, xix_{i} 表示从网络的最后一层隐藏层提取的第 ii 个样本特征, cyic_{y_{i}} 表示第 yiy_{i} 个类别的特征中心。 D(xi,cj)D\left(x_{i}, c_{j}\right) 为第 ii 个样本特征与非同类特征中心之间的距离, mm 表示不同类别的间隔。

对数三元组中心损失 LTCL
  • TCL中的类别间隔m只能控制不同类别样本之间的距离,导致分类层的识别效果不理想

  • 目标函数LLTCL=LSL+λ1LlogTCLL_{LTCL}=L_{SL}+\lambda_1 L_{log-TCL}λ1\lambda_1表示LlogTCLL_{log-TCL}LLTCLL_{LTCL}的权重大小。

类内约束的三元组中心损失 ICTCL

类内约束损失ICL

  • 将Center Loss作为TCL的额外约束项
  • 拉开DenseNet网络最后一层隐藏层输出的不同特征中心之间的距离的同时,帮助DenseNet网络训练出各自最优的说话人特征中心
  • 目标函数LICTCL=LSL+λ2LICLL_{ICTCL}=L_{SL}+\lambda_2 L_{ICL}λ2\lambda_2表示LICLL_{ICL}LICTCLL_{ICTCL}的权重大小。

4.3 训练过程

4.4 识别过程

graph LR
P(语音样本)--Fbanks组合-->A[DenseNet内部]-->B[分类层]-->F(说话人识别);

4.5 实验

相同环境下,DenseNet-LTCL系统的识别效果高于Deep Speaker系统和DenseNet-TCL。

5 总结展望

展望

  • 语音库单一,数据集不足,样本集不足,模型的超参数的调节
  • 其他空间维度的距离测量方法

补充评价指标:

分类

平均精度均值 mAP

识别

相似匹配

输入

  • 来自验证音频的声纹模型
  • 来自目标说话人的声纹模型

输出

  • 匹配分数 score

形式

  • 余弦相似度匹配 cosine similarity
  • 欧氏距离匹配 Euclidean distance
  • 基于机器学习模型的匹配
录入集 enrollment set 与验证集 verification set
接收者操作特征 ROC曲线及曲线下面积
等错率 EER

最小代价检测函数 minDCF

DET 曲线也是说话人确认中常用的评价方法,如图1–4所示,DET 曲线建立对数刻度下 EFA与EFR 的关系。曲线离原点越近,EFA 与 EFR 越小,系统性能越好。曲线与第一象限 45◦ 线的交点即为 EER 点。曲线上的不同点对应不同的阈值。

代价检测函数DCF 是NIST 说话人识别评估SRE 中定义且常用的一种性能评定方法。其定义为:
DCF=CFREFRPtarget+CFAEFA(1Ptarget)DCF=C_{FR}*E_{FR}*P_{target}+C_{FA}*E_{FA}*(1-P_{target})

其中 CFR和 CFA 分别代表错误拒绝和错误接受的惩罚代价,Ptarget和1 − Ptarget 分别为真实说话测试和冒认测试的先验概率。可以根据不同的应用环境来设定它们的值。比如在军事门禁系统中,我们希望严格控制出入人员,即希望错误接受的概率比较小,那么可以增大 CFA 的值;在监控犯罪人员的语音时,我们希望不漏掉可能的目标语音,则可以增大CFR 的值。当 CFR、CFA 、Ptarget 和 1 − Ptarget取定后,EFR 与 EFA 的某一组取值使得 DCF 最小,此时的 DCF 成为 minDCF 。

在日常使用 DCF 时,通常以 NIST SRE 2008 设定的CFR = 10,CFA = 1,Ptarget= 0.01 为准。minDCF 不仅考虑了两类错误的不同代价,还考虑了两种测试情况的先验概率,比 EER 更合理。

辨认准确率