在深度学习的路上,从头开始了解一下各项技术。本人是DL小白,连续记录我自己看的一些东西,大家可以互相交流。

本文参考:https://blog.csdn.net/twinkle_star1314/article/details/55050138

https://wenku.baidu.com/view/c6e257d576eeaeaad1f33020.html

https://blog.csdn.net/xmu_jupiter/article/details/47209961

论文:话者确认中信道和时长失配补偿研究_胡群威

本来今天是要学习i-vector的,但是在学习过程中,发现缺乏了关于声纹识别的一个重要前置条件,所以先讲一下GMM-UBM系统框架。

这篇内容干货不多,主要是对声纹识别中i-vector理解的一个前置补充,大家可以选看。

一、前言

声纹识别,也称做说话人识别,是一种通过声音来判别说话人身份的技术(pretty cool, right?)。根据研究表明,声纹虽然不如指纹、人脸这样,个体差异明显,但是由于每个人的声道、口腔和鼻腔(发音要用到的器官)也具有个体差异性。因为反映到声音上,也是具有差异性的。就比如说,当我们在接电话的时候,通过一声"喂",我们就能准确的分辨出接电话的是谁,我们人耳作为身体的接收器生来就具有分辨声音的能力,那么我们也可以通过技术的手段,使声纹也可以向人脸、指纹那样作为“个人身份认证”的重要信息。

二、简单说话人识别的流程

首先,我们来看一个典型的说话人确认系统流程图。为了让计算机认识一个用户,我们需要将目标用户的声音提取特征,训练为一个或多个模型,存储在我们的模型库中。当我们在测试或实际使用中,实际上就是提取当前接收到的语音中的特征,将其与我们模型库中的模型进行对比判断,最终确认谁是当前语音的说话人。因此,识别性能好坏的关键在于对语音中身份信息的建模能力与区分能力,同时对于身份无关的其余信息具有充分的抗干扰能力和鲁棒性。

三、GMM-UBM系统框架

在之前的文章中,我曾向大家介绍过GMM(高斯混合模型)。它将空间分布的概率密度用多个高斯概率密度函数的加权来拟合,可以平滑的逼近任意形状的概率密度函数,并且是一个易于处理的参数模型,具备对实际数据极强的表征力。但反过来,GMM规模越庞大,表征力越强,其负面效应也会越明显:参数规模也会等比例的膨胀,需要更多的数据来驱动GMM的参数训练才能得到一个更加通用(或称泛化)的GMM模型。

在实际中每一个说话人的语音数据很少,这将导致无法训练出高效的GMM模型。并且由于多通道的问题,训练GMM模型的语音与测试语音存在失配的情况,这些因素都会降低声纹识别系统的性能。所以机器学习的前辈们(DA Reynolds的团队)提出了一个通用背景模型(Universal Background Model, 简称UBM)。我们可以用UBM和少量的说话人数据,通过自适应算法(如最大后验概率MAP、最大似然线性回归MLLR等,本文选择阐述MAP算法)来得到目标说话人模型。

GMM-UBM实际上是一种对GMM的改进方法,我们既然没法从目标用户那里收集到足够的语音,那就换一种思路,可以从其他地方收集到大量非目标用户的声音,我们将这些非目标用户数据(声纹识别领域称为背景数据)混合起来充分训练出一个GMM,这个GMM可以看作是对语音的表征,但是又由于它是从大量身份的混杂数据中训练而成,它又不具备表征具体身份的能力。我们可以把这种模型看作是某一个具体说话人模型的先验模型。形象的比方就是说你准备去相亲,媒人给你看了小莉的照片,你耳边浮现的肯定是小莉各种可能的温柔的声音,而不是你家旺财的叫声。这种GMM-UBM就是起到类似的作用,它对语音特征在空间分布的概率模型给出一个良好的预先估计,让我们可以提前训练GMM。然后将目标用户的数据在这个模型上进行参数的微调即可。GMM-UBM模型最重要的优势就是通过MAP算法对模型参数进行估计,避免了过拟合的发生,同时我们不必调整目标用户GMM的所有参数(权重,均值,方差)只需要对各个高斯成分的均值参数进行估计,就能实现最好的识别性能。 根据实验表明,这可以让待估的参数减少超过一半,越少的参数也意味着更快的收敛,不需要那么多的目标用户数据即可模型的良好训练。

通过上图我们可以大致的了解GMM-UBM模型的大致逻辑。用大白话讲就是,用其他用户的数据来进行“预训练”,减少对真正目标用户的训练时间和参数调整。

四、MAP自适应算法

在GMM-UBM系统框架中,UBM拟合出大量说话人的特征分布,目标用户的数据散落在UBM某些高斯分布的附近。其中自适应的过程就是将UBM的每个高斯分布向目标用户数据偏移。极大后验概率(MAP)算法就是解决这种问题的算法之一。

我们对目标用户的GMM模型自适应的过程分为两个步骤:

1、首先,使用目标说话人的训练数据计算出UBM模型的新参数(高斯权重、均值和方差);

2、将得到的新参数与UBM模型的原参数进行融合,从而得到目标说话人的模型。

字不如图,一起来看图把吧

具体的计算方法如下:

1、给定GMM模型和目标说话人的训练矢量集X = (X1, X2...XT)。计算新的参数。

计算Xi和UBM中中第i个高斯分布的相似度:

然后计算新的权重、均值和方差参数:

2、由第一步得到的新参数和UBM原参数融合,得到最终的目标说话人模型:

其中,自适应参数用于调节新参数和UBM参数对最终模型的影响。归一化因子(可以理解为权重值的权重)γ可以保证各混合度的权重满足:

具体自适应参数的取值与具体模型有关,具体信息可以参考论文:话者确认中信道和时长失配补偿研究_胡群威

总结而言:

GMM-UBM系统框架,是GMM模型的一个推广,是用于解决当前目标说话人数据量不够的问题的一种方式。通过收集其他说话人数据来进行一个预先的训练。通过MAP算法的自适应,将预先训练过的模型向目标说话人模型进行微调。这种方式可以大大减少训练所需要的样本量和训练时间(通过减少训练参数)。

声纹识别之GMM-UBM系统框架简介相关推荐

  1. 业界首个声纹识别与音频检索系统上线,10分钟搭建产业级应用

    随着深度学习技术的升级与产业的发展,智能语音交互已成为了我们日常生活中一个重要的组成部分,并广泛应用在地图导航播报.智能客服回访.手机语音输入以及各类智能助手等应用场景中,可以说语音已成为了人与机器之 ...

  2. 业界首个声纹识别与音频检索系统,10分钟搭建产业级应用

    随着深度学习技术的升级与产业的发展,智能语音交互已成为了我们日常生活中一个重要的组成部分,并广泛应用在地图导航播报.智能客服回访.手机语音输入以及各类智能助手等应用场景中,可以说语音已成为了人与机器之 ...

  3. 声纹识别概述(3)声纹识别系统

    文章目录 1. 声纹识别系统框架 1.0 声纹识别系统 1.0.1 不太清晰的两个阶段:训练阶段和测试阶段 1.0.2 只讲了一个阶段:测试/应用阶段(包括注册和验证) 1.0.3 声纹识别系统的三个 ...

  4. 说话人识别(声纹识别)发展史简单总结——(阶段学习总结,GMM,GMM-UBM,GMM-SVM理解)

    本文的创新点与关键点之一:GMM,GMM-UBM,GMM-SVM的理解 大概是从10月20号开始由于项目需要开始接触说话人识别这一研究方向,这一个多月的时间主要是看论文中文英文,尤其是综述文章,当然也 ...

  5. 声纹识别开源框架python_GitHub - yeyupiaoling/VoiceprintRecognition-Tensorflow: 使用Tensorflow实现声纹识别,博客地址:...

    前言 本章介绍如何使用Tensorflow实现简单的声纹识别模型,首先你需要熟悉音频分类,没有了解的可以查看这篇文章<基于Tensorflow实现声音分类>.基于这个知识基础之上,我们训练 ...

  6. android声纹识别技术,基于Android平台的声纹识别系统的研究与实现

    摘要: 社会的发展越来越快,计算机技术的应用也愈来愈广,已经渗透到生活的各个方面.在快节奏.信息化的时代,需要识别和交互的应用日益广泛,要求验证身份的场合越来越多,迅速判定一个人的身份是一个非常重要的 ...

  7. 【工程】深度说话人的应用及声纹识别系统的制作 (附完整代码与数据集)

    说话人识别系统 (又称声纹识别系统) 论文: 本博客是基于百度的论文Deep Speaker: an End-to-End Neural Speaker Embedding System 的理论上进行 ...

  8. [深度学习概念]·声纹识别技术简介

    声纹识别技术简介 声纹识别,也称作说话人识别,是一种通过声音判别说话人身份的技术.从直觉上来说,声纹虽然不像人脸.指纹的个体差异那样直观可见,但由于每个人的声道.口腔和鼻腔也具有个体的差异性,因此反映 ...

  9. 声纹识别(说话人识别)技术

    说话人识别(Speaker Recognition,SR),又称声纹识别(Voiceprint Recognition,VPR),顾名思义,即通过声音来识别出来"谁在说话",是根据 ...

最新文章

  1. 从Netty到EPollSelectorImpl学习Java NIO
  2. Docker 安装redis(四)
  3. [Spring5]AOP底层原理
  4. Oracle入门(十四H)之良好的编程实践
  5. win与linux渊源,微软与Linux从对立走向合作,WSL是如何诞生的
  6. 你和数据分析大神之间,就差这7个沟通技巧
  7. Typecho浅色三栏主题
  8. JavaScript基础 -- js常用内置方法和对象
  9. NeurIPS 2019丨深度双线性转换改进细粒度图像分类
  10. 解决 clipboard.js 在ios中失效的问题
  11. asp与php对比,个人看法 zblogasp和zblogphp的对比
  12. 作为程序猿----别说你不知道的人物!
  13. C++之const类成员变量,const成员函数
  14. Spring.Net学习笔记(1)-容器的使用
  15. spellcheck 属性 html5的新属性,对元素内容进行拼写检查
  16. Spark技术互动问答分享
  17. SSDP协议内容解析
  18. Qt显示调用dll库失败
  19. HEVC帧内预测参考相邻帧代码解析
  20. linux中zlib源码包安装

热门文章

  1. 获取W806的芯片唯一ID
  2. 你不知道的——作用域
  3. 解决win10资源管理器(底边栏)经常死机的一种办法
  4. 【2020年10月新书推荐】程序员值得一读的Python新书
  5. c语言教程指针,(转)C语言指针5分钟教程
  6. 《测绘管理与法律法规》——测绘项目技术总结
  7. 修改掉Linux内核缺页中断处理的exception fixup表
  8. 微信小程序不支持打开非业务域名_一行代码网站封装微信小程序,并解决微信小程序不支持打开非业务域名https://,请重新配置的问题!...
  9. windows自动关机(任务计划程序 + exe文件)
  10. 内存卡里的东西删不掉怎么办?