Python实现说话人识别(声纹识别)算法

这篇具有很好参考价值的文章主要介绍了Python实现说话人识别(声纹识别)算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

资源下载地址:https://download.csdn.net/download/sheziqiong/88308581
资源下载地址:https://download.csdn.net/download/sheziqiong/88308581

1、基于GMM的声纹识别

1.1 测试环境:

  • 操作系统:Windows10
  • 代码环境:Python3.6
  • 主要用到的开源库:sklearn、librosa、numpy
  • 数据集:TIMIT语音识别数据集和我自己收集的有15个说话人,每个人6句话的小数据集(暂不公开)

1.2 在TIMIT数据集上进行测试

TIMIT语料库是为声学语音知识的获取(模型训练)以及自动语音识别系统(ASR)的评估(模型测试)而构建的,是由国防部赞助,在研究计划署(DARPA-ISTO)、麻省理工学院(MIT)、斯坦福研究院(SRI)、德州仪器(TI)共同努力下完成。说话人信息:由来自美国8个主要方言地区的630位说话者讲10个句子构成。10个句子分为:

**SA-**方言句子(Dialect sentence):由SRI设计,总共2句。每个人都会读SA1、SA2这两个句子,体现不同地区方言的差别。(因此可用于方言判断算法的数据集,而其他情况一般不用该类句子)

**SX-**音素紧凑的句子(Phondtically-compact sentence):由MIT设计,总共450句,目的是让句子中的音素分布平衡,尽可能的包含所有音素对。每个人读5个SX句子,并且每个SX句子被7个不同的人读。

**SI-**音素发散的句子(Phonetically-diverse sentence):由TI在现有语料库Brown Corpus与剧作家对话集(the Playwrights Dialog)挑选的,总共1890句。目的是增加句子类型和音素文本的多样性,使之尽可能的包括所有的等位语境(Allophonic context)。每个人读三个SI句子,并且每个SI句子仅被一个人读一次。

630个说话人被分为TRAIN(462人)和TEST(168人)。我只用到TRAIN的462个说话人语音数据。所以我的说话人样本数是462个。因为SA的两个句子是方言,所以我并没有用到这两个句子。其他8个句子,我是用SX的5个句子和SI的1个句子作为训练集,SI的另外2个句子作为测试集。并将6个训练句子合并为1个句子方便提取MFCC特征。

├─TEST(168人)
│ ├─DR1
│ │ ├─FCJF0
│ │ ├─FDAW0

│ ├─DR2
│ │ ├─FAEM0
│ │ ├─FAJW0

│ ├─DR3
│ │ ├─FALK0
│ │ ├─FCKE0

│ ├─DR4
│ │ ├─FALR0
│ │ ├─FBAS0

│ ├─DR5
│ │ ├─FBJL0
│ │ ├─FBMH0

│ ├─DR6
│ │ ├─FAPB0
│ │ ├─FBCH0

│ └─DR8
│ ├─FBCG1
│ ├─FCEG0

├─TEST_MFCC(测试集提取MFCC,462人)
│ ├─spk_1
│ ├─spk_10
│ ├─spk_100

├─TRAIN(训练集数据,462人)
│ ├─DR1
│ │ ├─FCJF0
│ │ ├─FDAW0

│ ├─DR2
│ │ ├─MTJG0

│ ├─DR3
│ │ ├─FALK0
│ │ ├─FCKE0

│ ├─DR4
│ │ ├─FALR0
│ │ ├─FBAS0

│ ├─DR5
│ │ ├─FBJL0
│ │ ├─FBMH0

│ ├─DR6
│ │ ├─FAPB0
│ │ ├─FBCH0

│ ├─DR7
│ │ ├─FBLV0
│ │ ├─FCJS0

│ └─DR8
│ ├─FBCG1
│ ├─FCEG0

└─TRAIN_MFCC(提取的训练集MFCC,462人)
├─spk_1
├─spk_10
├─spk_100

我使用Python实现的算法流程大致如下:

(1)提取24维MFCC特征。首先分别读入462个说话人的经过合并后的一段长语音(大概20s),MFCC特征提取过程与之前描述的在我自己小样本数据集上提取的过程一致,这里不再赘述。与之不同的主要有两点:第一,对于20s的语音提取MFCC之后特征维度大致为(2000,24)。因此需要将特征保存,避免重复提取。使用librosa提取的MFCC特征为numpy格式,因此我保存为.npy格式的文件,使用时load参数即可。第二,对462个说话人提取24维MFCC特征相当耗时,所以在实际代码实现时,我将462个说话人分为4批,对每一批分别开一个进程进行特征提取,运行效率提升了4倍左右。

python实现说话人识别(声纹识别)算法,python,算法,说话人识别,声纹识别,识别算法,源码,课程设计

(2)进行gmm训练。将每个说话人语音的24维MFCC特征参数作为输入,训练GMM。经过调参对比后,GMM的聚类数量设为3个,协方差矩阵选取full的效果最好。同样,gmm的训练过程也是多进行并行计算。

(3)测试说话人gmm模型。我使用SI中的1个句子作为测试数据(2s左右)。将2s语音作为输入,分别提取24维MFCC参数。然后分别将462个人的MFCC特征输入gmm模型,然后gmm对每一个输入进行打分。之后使用softmax将所有说话人的得分归一化到[0,1]区间,即得到每个说话人在当前gmm模型上的概率。概率最大的就是模型对应的说话人。

(4)测试结果:SI第一个句子的测试结果:验证正确的数量为294,验证错误的数量为168,识别准确率为63.6%。 SI第二个句子的测试结果为:验证正确的数量为204,验证错误的数量为258,识别准确率为44.2%

2、基于self-attention的说话人识别

2.1 测试环境:

  • google colab(Telsa T4 -16G)

  • Pytorch 1.7.1

  • 数据集:VoxCeleb数据集(选取其中600个说话人)

主要参考李宏毅2021年深度学习课程作业HW4。使用开源的声纹识别数据集VoxCeleb1,我们从中选取了其中600个说话人的数据,然后分别对这600个人的语音使用mel滤波器组提取40维特征,作为神经网络的输入。

网络结构部分,我们使用self-attention机制。下图是《attention is all you need》论文中提出的Transformer结构。主要分为编码器encoder和解码器decoder两部分。对于本网络只用到左侧的encoder部分。

python实现说话人识别(声纹识别)算法,python,算法,说话人识别,声纹识别,识别算法,源码,课程设计

简单介绍一下Transformer的encoder。Encoder可以由下面一组串联的Block组成。每一个Block是一个self-attention。

python实现说话人识别(声纹识别)算法,python,算法,说话人识别,声纹识别,识别算法,源码,课程设计

这里的self-attention的输出比传统的self-attention在输出之后又加了对应的输入。然后对相加后的结果做了Layer Norm。Layer Norm不同于Batch Norm。Batch Norm是对不同样本的同一个维度的不同特征计算mean和std。Layer Norm是计算同一个样本不同维度的相同特征计算mean和std,然后计算norm。之后再对做了norm的输出通过FC,然后相加,再做Layer Norm,然后输出。

python实现说话人识别(声纹识别)算法,python,算法,说话人识别,声纹识别,识别算法,源码,课程设计

说话人识别网络结构代码:

class Classifier(nn.Module):
  def __init__(self, d_model=80, n_spks=600, dropout=0.1):
    super().__init__()
    # Project the dimension of features from that of input into d_model.
    self.prenet = nn.Linear(40, d_model)
    self.encoder_layer = nn.TransformerEncoderLayer(
      d_model=d_model, dim_feedforward=256, nhead=2
    )
    self.encoder = nn.TransformerEncoder(self.encoder_layer, num_layers=2)

    # Project the the dimension of features from d_model into speaker nums.
    self.pred_layer = nn.Sequential(
      nn.Linear(d_model, n_spks),
    )

  def forward(self, mels):
    """
    args:
      mels: (batch size, length, 40)
    return:
      out: (batch size, n_spks)
    """
    # out: (batch size, length, d_model)
    out = self.prenet(mels)
    # out: (length, batch size, d_model)
    out = out.permute(1, 0, 2)
    # The encoder layer expect features in the shape of (length, batch size, d_model).
    out = self.encoder(out)
    # out: (batch size, length, d_model)
    out = out.transpose(0, 1)
    # mean pooling
    stats = out.mean(dim=1)
    # out: (batch, n_spks)
    out = self.pred_layer(stats)
    return out


net = Classifier()
summary(net.to("cuda"), (2,40), device="cuda")

网络结构如下图所示:

python实现说话人识别(声纹识别)算法,python,算法,说话人识别,声纹识别,识别算法,源码,课程设计

接下来划分训练集和验证集。将90%的数据用于train,10%的数据用于validation。

由于说话人识别是一个分类问题,所以定义损失函数为CrossEntropyLoss(),在Pytorch中交叉熵损失把softmax和CrossEntropy都定义在nn.CrossEntropyLoss(),因此不需要再定义softmax,只需要将模型的输出和labels输入CrossEntropyLoss()即可。定义优化函数为AdamW,这是Adam的改进版本,有更好的优化效果。

训练过程如下图所示。训练过程共迭代70000次,每2000次做一次validation。从结果可以看出,训练集上的损失在不断下降,准确率在不断上升,训练结束时的准确率为91%,验证集的准确率为80%。

python实现说话人识别(声纹识别)算法,python,算法,说话人识别,声纹识别,识别算法,源码,课程设计
资源下载地址:https://download.csdn.net/download/sheziqiong/88308581
资源下载地址:https://download.csdn.net/download/sheziqiong/88308581文章来源地址https://www.toymoban.com/news/detail-797114.html

到了这里,关于Python实现说话人识别(声纹识别)算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【语音识别】说话人识别系统【含Matlab源码 1704期】

    获取代码方式1: 完整代码已上传我的资源:【语音识别】基于matlab说话人识别系统【含Matlab源码 1704期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2: 付费专栏Matlab语音处理(初级版) 备注: 点击上面蓝色字体 付费专栏Matlab语音处理(初级版) ,扫描上面

    2024年02月22日
    浏览(30)
  • 基于Python+OpenCV智能答题卡识别系统——深度学习和图像识别算法应用(含Python全部工程源码)+训练与测试数据集

    本项目基于Python和OpenCV图像处理库,在Windows平台下开发了一个答题卡识别系统。系统运用精巧的计算机视觉算法,实现了批量识别答题卡并将信息导出至Excel表格的功能。这一解决方案使得答题卡的判卷过程变得轻便、高效且准确。 首先,我们以Python语言作为开发基础,结合

    2024年02月10日
    浏览(39)
  • 人脸识别经典网络-MTCNN(含Python源码实现)

    本文参加新星计划人工智能赛道:https://bbs.csdn.net/topics/613989052 1.1 人脸检测概述 人脸检测或者识别,都是根据人的脸部特征信息进行身份识别的一种生物识别术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部

    2024年02月03日
    浏览(35)
  • MediaPipe+OpenCV 实现实时手势识别(附Python源码)

    MediaPipe官网:https://developers.google.com/mediapipe MediaPipe仓库:https://github.com/google/mediapipe MediaPipe 是一个由 Google 开发的开源跨平台机器学习框架,用于构建视觉和感知应用程序。它提供了一系列预训练的机器学习模型和工具,使开发者能够轻松地构建基于计算机视觉和机器学习的

    2024年02月07日
    浏览(35)
  • Python实现图像识别(使用CNN算法)

    本文介绍如何使用卷积神经网络(Convolutional Neural Network, CNN)算法对图像进行识别,并使用Python语言实现一个简单的图像识别程序。程序使用CIFAR-10数据集进行训练,并使用matplotlib库进行可视化,可以预测测试图片的分类。读者可以根据此例子,进一步学习和应用深度学习算

    2024年02月06日
    浏览(26)
  • 基于机器学习算法:朴素贝叶斯和SVM 分类-垃圾邮件识别分类系统(含Python工程全源码)

    本项目采用朴素贝叶斯和支持向量机(SVM)分类模型作为基础,通过对垃圾邮件和正常邮件的数据进行训练,旨在实现垃圾邮件的自动识别功能。 通过训练这两个分类模型,我们的目标是建立一个高效准确的垃圾邮件识别系统。当接收到新的邮件时,系统将对邮件文本进行预

    2024年02月09日
    浏览(38)
  • 基于Python+WaveNet+CTC+Tensorflow智能语音识别与方言分类—深度学习算法应用(含全部工程源码)

    本项目利用语音文件和方言标注文件,提取语音的梅尔倒谱系数特征,并对这些特征进行归一化处理。在基于标注文件的指导下,构建了一个字典来管理数据。接着,我们选择WaveNet机器学习模型进行训练,并对模型的输出进行softmax处理。最终,经过训练后的模型将被保存以

    2024年02月16日
    浏览(35)
  • Python 基于 AI 动物识别技术的研究与实现,附源码

    博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W+、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 2022-2024年最全的计算机软件毕业设计选

    2024年04月25日
    浏览(29)
  • 竞赛 python opencv 深度学习 指纹识别算法实现

    🔥 优质竞赛项目系列,今天要分享的是 🚩 python opencv 深度学习 指纹识别算法实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:4分 创新点:4分 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/d

    2024年04月16日
    浏览(59)
  • 竞赛项目 深度学习手势识别算法实现 - opencv python

    🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习手势识别算法实现 - opencv python 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: https://gitee.com/

    2024年02月13日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包