使用tensorflow和densenet神经网路实现语谱图声纹识别,即说话人识别 -- (2)

介绍

    上一篇博客留下了一些关于声纹识别的遗留问题:1、如何验证自己训练出的模型的实际效果(现场录音验证)。2、对于不在训练集的人,如何保存他的声纹,并识别。本文将对这两个问题进行讲解,对于基本原理和使用的网络的介绍可以看上一篇博客。如果乐意与我交流,文章后面有联系方式,随时欢迎。

代码地址

    码云:https://gitee.com/lizhigong/VDC

代码使用方式

    下载运行VoiceRecord.py即可运行体验效果

第一个问题:如何验证自己训练出的模型的实际效果(现场录音验证)

     先说一下训练过程:

      1、数据集转换 声音格式的文件统一转换成wav并将采样为11025。这个采样率能容纳人说话的频率,并且数据量较小,网络容易训练。

      2、把wav分帧分组生成1.5秒左右一个的语谱图。按人ID进行标注。

      3、用卷积神经网络进行训练识别。

      4、神经网络输出说话人的声音特征序列。

      识别演示过程:

      识别分注册和识别两个过程

       1、录音3~5秒的录音 并生成11025采样率PCM数据

       2、生成语谱图

       3、输入神经网络输出特征序列,将特征序列加入字典完成注册。

       4、需要识别的时候重复上面的1~3,然后与字典中的特征序列进行对比,取欧氏距离最短的ID。

 第二个问题对于不在训练集的人,如何保存他的声纹,并识别。

       这个问题可以参考人脸识别,声纹识别和人脸识别有个共性问题就是不可能拿到所有人类的样本来训练,只能训练一部分样本,然后那给其他的样本使用,这里就需要一个one-shot的功能。

       解决方案有很多:

       1、孪生神经网络(网络参数完全一样的两个神经网络,或者一个神经网络一次输入一对样本)或者伪孪生网络(网络参数不一样的两个神经网络),一次输入两个样本,输出这两个样本的相似度。或者输出两个特征向量,用欧氏距离判断相似度。

       2、triplet-loss网络,训练的时候一次输入三个样本,两个一样的,拉近一样的欧氏距离,拉远不一样的样本的欧氏距离。这个网络理解起来还是挺复杂的,需要好好看看相关的文章。效果比孪生网路效果好。

       3、center-loss网络,这个网络好理解效果也好,就是传统的softmax分类器前面加一层网络,输出一个特征序列。softmax根据这个特征序列做分类,相同类型的特征序列再加一个欧氏距离的计算作为loss,加上softmaxloss合并输出loss,叫做center-loss。是本文采取的一种训练方式。

       4、更多的方式还有很多。A-softmax,L-softmax都是用来解决人脸识别的方式,声纹识别一样适用。

感兴趣的大佬可以下载代码一起讨论,里面也有一些注释和用法,希望结识一些好汉共同学习,也希望各路高手不吝赐教。
本人QQ306128847,希望一起学习,共同进步的朋友加我。

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值