准备工作

Alize官网https://alize.univ-avignon.fr有四个demo:

1.GMM/UBM System

2. I-vector System

3.JFA System

4.Top-down Speaker Segmenting and Clustering System

下载第一个GMM-UBM例子 01_GMM-UBM_system_with_ALIZE3.0.tar.gz

解压后包含文件及文件夹

bin:存放可执行文件

cfg:存放配置文件

data:存放数据以及提取的特征文件

gmm:主要存放生成的gmm模型

log:训练日志

lst/ndx:主要存放准备数据的一些列表文件

res:生成的结果

Linux平台执行

在Linux下直接按照readme执行即可,01_RUN_feature_extraction.sh => 02b_RUN_htk_front-end.sh/02a_RUN_spro_front-end.sh => 03_RUN_gmm-ubm.sh

01_RUN_feature_extraction.sh :提前特征及一些预处理

02b_RUN_htk_front-end.sh/02a_RUN_spro_front-end.sh:分别是使用htk和spro提特征时使用,选择一个即可

03_RUN_gmm-ubm.sh:训练模型及计算分数,以及一些得分规整

Windows平台执行

windows平台执行过程跟Linux下一致,如果有shell运行环境直接执行也是可以的。为了方便,使用python脚本在windows下运行可执行命令,实现该过程。

自带的例子中使用的是sph格式的音频,这里使用wav格式的音频,采用Spro提取MFCC特征,训练自己的数据模型。

更改模型等参数主要修改cfg/下的配置文件。

data/目录结构如下:在产生lbl文件的时候如果已经存在则会出现错误,建议每次训练将lbl/  prm/下的文件清空。

1.训练UBM(01_ubm.py)

对data/ubm下的音频文件提取mfcc特征,保存在data/prm/目录下,同时产生lst/UBM.lst文件,然后能量检测(VAD)、特征归一化、以及UBM训练。

import time
import os
import utils

#产生UBM.lst文件
utils.gen_ubm_lst('./data/ubm', './lst/UBM.lst')

print('*************./bin/sfbecp start***************')
time.sleep(5)

file = open("./lst/UBM.lst")
for line in file:
    line=line.strip().strip('\r\n').strip()  
    #print line
    COMMAND_LINE = '%s%s%s%s%s'%('bin\\sfbcep.exe -m -k 0.97 -p19 -n 24 -r 22 -e -D -A -F wave ./data/ubm/',line,'.wav ./data/prm/',line,'.tmp.prm')

rc = os.system(COMMAND_LINE)

print(COMMAND_LINE)
file.close()

print('*************./bin/sfbecp end***************')
time.sleep(5)

print('*************Normalise energy start***************')
time.sleep(5)

CMD_NORM_E="bin\\NormFeat.exe --config cfg/NormFeat_energy_SPro.cfg --inputFeatureFilename  ./lst/UBM.lst --featureFilesPath  data/prm/"
print(CMD_NORM_E)
rc = os.system(CMD_NORM_E)

print('*************Normalise energy end***************')
time.sleep(5)

print('*************Energy Detector start***************')
time.sleep(5)

CMD_ENERGY="bin\\EnergyDetector.exe  --config cfg/EnergyDetector_SPro.cfg --inputFeatureFilename ./lst/UBM.lst --featureFilesPath  data/prm/  --labelFilesPath  data/lbl/"
print (CMD_ENERGY)
rc = os.system(CMD_ENERGY)
    
print('*************Energy Detector end***************')
time.sleep(5)

print('*************Normalise Features start***************')
time.sleep(5)

CMD_NORM="bin\\NormFeat.exe --config cfg/NormFeat_SPro.cfg --inputFeatureFilename  ./lst/UBM.lst --featureFilesPath data/prm/   --labelFilesPath  data/lbl/"
print (CMD_NORM)
rc = os.system(CMD_NORM)

print('*************Normalise Features end***************')
time.sleep(5)

print('*************Train UBM start***************')
time.sleep(5)

rc = os.system('bin\\TrainWorld.exe --config cfg/TrainWorld.cfg')

print('*************Train UBM end***************')

2.训练说话人模型(02_model.py)

对data/train下的音频文件提取mfcc特征,保存在data/prm/目录下,同时产生lst/model.lst、./ndx/trainModel.ndx文件,然后能量检测(VAD)、特征归一化、以及说话人模型训练。

import time
import os

import utils

# 产生model.lst文件
utils.gen_model_lst ('./data/train', './lst/model.lst')
# 产生trainModel.ndx文件
utils.gen_model_ndx ('./data/train', './ndx/trainModel.ndx')
  
print('*************./bin/sfbecp start***************')
time.sleep(5)

srcFilePath = './data/train'
dirList =  os.listdir(srcFilePath)
dirList.sort()
for targeName in dirList:
    dirName = os.path.join(srcFilePath,targeName)
    if not os.path.isdir(dirName):
        continue
    fileList =  os.listdir(dirName)
    fileList.sort()
    for fileName in fileList:
        if fileName[fileName.find('.'):] != '.wav':
            print ('not .wav file')
        else:
            tmpName = fileName[0:fileName.find('.')] 
            COMMAND_LINE = '%s%s%s%s%s'%('bin\\sfbcep.exe -m -k 0.97 -p19 -n 24 -r 22 -e -D -A -F wave ',os.path.join(dirName,fileName),' ./data/prm/',tmpName,'.tmp.prm')
            rc = os.system(COMMAND_LINE)
            print(COMMAND_LINE)

print('*************./bin/sfbecp end***************')
time.sleep(5)

print('*************Normalise energy start***************')
time.sleep(5)

CMD_NORM_E="bin\\NormFeat.exe --config cfg/NormFeat_energy_SPro.cfg --inputFeatureFilename  ./lst/model.lst --featureFilesPath  data/prm/"
print(CMD_NORM_E)
rc = os.system(CMD_NORM_E)

print('*************Normalise energy end***************')
time.sleep(5)

print('*************Energy Detector start***************')
time.sleep(5)

CMD_ENERGY="bin\\EnergyDetector.exe  --config cfg/EnergyDetector_SPro.cfg --inputFeatureFilename ./lst/model.lst --featureFilesPath  data/prm/  --labelFilesPath  data/lbl/"
print(CMD_ENERGY)
rc = os.system(CMD_ENERGY)
    
print('*************Energy Detector end***************')
time.sleep(5)

print('*************Normalise Features start***************')
time.sleep(5)

CMD_NORM="bin\\NormFeat.exe --config cfg/NormFeat_SPro.cfg --inputFeatureFilename  ./lst/model.lst --featureFilesPath data/prm/   --labelFilesPath  data/lbl/"
print (CMD_NORM)
rc = os.system(CMD_NORM)

print('*************Normalise Features end***************')
time.sleep(5)

print('*************Train Target start***************')
time.sleep(5)

rc = os.system('bin\\TrainTarget.exe --config cfg/TrainTarget.cfg')

print('*************Train Target end***************')
time.sleep(5)

3.测试(03_test.py)

对data/test下的音频文件提取mfcc特征,保存在data/prm/目录下,同时产生lst/test.lst、./ndx/computetest_gmm_target-seg.ndx文件,然后能量检测(VAD)、特征归一化、以及在每个说话人模型上测试每个文件的得分,得分文件为res/target-seg_gmm.res。

import time
import os
import utils

#产生测试列表文件test.lst 
train_path = './data/train'
test_path = './data/test'
test_listFilePath = './lst/test.lst'
utils.gen_ubm_lst(test_path,test_listFilePath)

# 产生./ndx/computetest_gmm_target-seg.ndx
utils.gen_target_seg_ndx (test_path, train_path, './ndx/computetest_gmm_target-seg.ndx')

print('*************./bin/sfbecp start***************')
time.sleep(5)

file = open("./lst/test.lst")
 
for line in file:
    line=line.strip('\r\n').strip()
    #print line
    COMMAND_LINE = '%s%s%s%s%s'%('bin\\sfbcep.exe -m -k 0.97 -p19 -n 24 -r 22 -e -D -A -F wave ./data/test/',line,'.wav ./data/prm/',line,'.tmp.prm')

rc = os.system(COMMAND_LINE)

print(COMMAND_LINE)

file.close()

print('*************./bin/sfbecp end***************')
time.sleep(5)

print('*************Normalise energy start***************')
time.sleep(5)

CMD_NORM_E="bin\\NormFeat.exe --config cfg/NormFeat_energy_SPro.cfg --inputFeatureFilename  ./lst/test.lst --featureFilesPath  data/prm/"
print(CMD_NORM_E)
rc = os.system(CMD_NORM_E)

print('*************Normalise energy end***************')
time.sleep(5)

print ('*************Energy Detector start***************')
time.sleep(5)

CMD_ENERGY="bin\\EnergyDetector.exe  --config cfg/EnergyDetector_SPro.cfg --inputFeatureFilename ./lst/test.lst --featureFilesPath  data/prm/  --labelFilesPath  data/lbl/"
print(CMD_ENERGY)
rc = os.system(CMD_ENERGY)
    
print('*************Energy Detector end***************')
time.sleep(5)

print('*************Normalise Features start***************')
time.sleep(5)

CMD_NORM="bin\\NormFeat.exe --config cfg/NormFeat_SPro.cfg --inputFeatureFilename  ./lst/test.lst --featureFilesPath data/prm/   --labelFilesPath  data/lbl/"
print (CMD_NORM)
rc = os.system(CMD_NORM)

print('*************Normalise Features end***************')
time.sleep(5)

print('*************Test start***************')
time.sleep(5)

rc = os.system('bin\\ComputeTest.exe --config cfg/ComputeTest_GMM.cfg')

print('*************Test end***************')
time.sleep(5)

最后得分文件res/target-seg_gmm.res内容如下:

第一列M表示性别,不用理会;第二列为训练的说话人模型,这里共三个S0002 S0003 S0004,相当于注册了三个人

第三列0表示最后那列的得分小于0,1表示大于0

第四列表示测试文件的名称,第五列表示得分

如第一行M S0002 0 BAC009S0004W0123 -0.268589表示BAC009S0004W0123文件在说话人S0002模型上的得分为-0.268589

M S0002 0 BAC009S0004W0123 -0.268589
M S0003 1 BAC009S0004W0123 0.149758
M S0004 1 BAC009S0004W0123 1.05531
M S0002 0 BAC009S0004W0124 -0.552765
M S0003 0 BAC009S0004W0124 -0.164467
M S0004 1 BAC009S0004W0124 1.09851
M S0002 0 BAC009S0004W0125 -0.372259
M S0003 1 BAC009S0004W0125 0.0132198
M S0004 1 BAC009S0004W0125 1.09078
M S0002 0 BAC009S0004W0126 -0.326163
M S0003 1 BAC009S0004W0126 0.219501
M S0004 1 BAC009S0004W0126 0.880061

如果在Linux下训练,则替换对应的exe文件,以及路径写法,\\替换为/

gmm-ubm理论还是比较简单,重点是理解GMM模型,可以参考论文《Speaker verification using adapted Gaussian mixture models》

得分规则技术可以参考论文《基于TZ Normalization规整的话者确认阈值选取》

由于实验过程中发现几种得分规则并没有多大提升效果,所以程序中没有得分规则过程,同时只保留了必要的文件。

完整代码下载地址https://download.csdn.net/download/u012594175/11100604

声纹识别交流QQ群:875705987

声纹识别之Alize入门教程(二):GMM-UBM相关推荐

  1. 声纹识别与声源定位(二)

    一.引言 什么是声源定位(Sound Source Localization,SSL)技术?声源定位技术是指利用多个麦克风在环境不同位置点对声信号进行测量,由于声信号到达各麦克风的时间有不同程度的延迟 ...

  2. (转)tensorflow入门教程(二十六)人脸识别(上)

    https://blog.csdn.net/rookie_wei/article/details/81676177 1.概述 查看全文 http://www.taodudu.cc/news/show- ...

  3. python声纹识别_声纹识别算法、资源与应用(二)

    <声纹识别·资源篇> 1. Kaldi 最流行的语音技术研究平台,没有之一.代码运行鲁棒性强.架构良好,便于算法修改.定制.如果你是高校科研人员,工程实现能力有限,那么没关系,你只要懂点S ...

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

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

  5. 声纹识别开源工具 ASV-Subtools

    今天非常荣幸有机会在Speechhome语音技术研讨会上分享我们团队在开源项目上的一些工作.今天我分享的主题是声纹识别开源工具ASV-Subtools. 今天我分享的主要有5个部分的内容,分别是背景介 ...

  6. 声纹识别概述(1)初识

    声纹识别 1. 声纹概念 2. 声纹识别的分类 3. 声纹识别的原理 4. 声纹识别的关键 特征提取 模式识别 5. 声纹识别的技术指标 6. 影响声纹识别水平的因素 初识声纹 1. 声纹概念 声波频 ...

  7. 《ASV-Subtools 声纹识别实战》课程

    AI工匠学堂https://xjw.h5.xeknow.com/s/2XhsYq ASV-Subtools简介 近年来,随着深度学习的快速发展,简单易用.性能稳定.开发高效的深度学习框架越来越被科研和 ...

  8. 一文看懂“声纹识别VPR” | AI产品经理需要了解的AI技术概念_团员分享_@cony

    前言:声纹识别是AI领域中一个看似很小.但其实有机会在近期落地,且比较有意思的细分方向:本文作者是"AI产品经理大本营"团员@cony  ,她总结了AI产品经理"最必要& ...

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

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

  10. 干货:NIST评测(SRE19)获胜团队声纹识别技术分析 | CSDN博文精选

    作者 | xjdier 来源 | CSDN博文精选 (*点击阅读原文,查看作者更多精彩文章) 近日,NIST说话人识别技术评测 (Speaker Recognition Evaluation,SRE) ...

最新文章

  1. 业界 | 微软亚洲研究院携手培生,以人工智能技术赋能个性化学习
  2. ImageNet 的衰落
  3. 【OpenCV 4开发详解】点集拟合
  4. iOS 线程安全之@synchronized的用法
  5. pipe读写前设置O_NOATIME
  6. c语言数位重排为最大数,18.12.09-C语言练习:黑洞数 / Kaprekar问题(示例代码)
  7. php字符串学习笔记
  8. 黑暗爆炸OJ 3028. 食物 生成函数
  9. 信息学奥赛一本通C++语言——1006:A+B问题
  10. redis主从复制和哨兵机制
  11. 入门机器学习(二十)--编程作业-异常检测和推荐系统(Python实现)
  12. 【树莓派】Linux指令使用记录
  13. 轻量级性能测试工具之Apache Benchmark
  14. 银联支付接口常见错误总结
  15. 走进四维空间-我们如何理解时空
  16. 红外遥控的发射和接收原理
  17. html+antd 本地化
  18. Ubuntu 16.04安装搜狗拼音
  19. 有效沟通要解决的三个基本方面
  20. html导航栏固定在顶部,将导航栏始终固定在窗口顶部:

热门文章

  1. Qt ListView 刷新数据
  2. SPACEMACS 配置
  3. 项目管理工具——Jira使用和配置
  4. linux测试网络带宽 360,Linux版360浏览器提示此为beta测试版本,已超过测试时间3个月的处理...
  5. SSL证书与CA数字证书有什么区别?
  6. 键盘 计算机 切换,笔记本键盘切换,详细教您笔记本怎么切换键盘
  7. 几种比较和谐的文字背景颜色搭配
  8. 计算机硬盘怎么设置ntfs,如何把计算机硬盘文件系统fat32改为ntfs.doc
  9. 手机访问电脑虚拟服务器,User Agent Switcher插件使用教程【电脑模拟手机访问网站】...
  10. Mac安装PyQt4