首页 > 其他分享 >Alize 声纹识别 学习笔记 失败了

Alize 声纹识别 学习笔记 失败了

时间:2024-03-21 10:55:52浏览次数:23  
标签:Alize train kaldi 笔记 voxceleb1 vector subtools 声纹识别 data

源码地址

https://github.com/ALIZE-Speaker-Recognition/alize-core
https://github.com/ALIZE-Speaker-Recognition/LIA_RAL
https://gitcode.com/ibillxia/VoicePrintReco/tree/master

项目目录

目录简介

LIA_RAL_2.0 里面
为了更好地满足每个人的需求,ALIZÉ采用了多层架构。
基础层是 ALIZE-Core,这是一个低级库,包括使用高斯混合所需的所有函数,以及各种文件格式的 I/O 函数。
在这个核心之上构建了LIA_RAL,这是一个提供更高级别功能的工具包。LIA_RAL本身由几个组件组成:

LIA_SpkDet
一组工具,用于完成说话人身份验证系统所需的所有任务 - 模型训练、特征归一化、分数归一化等。
LIA_SpkSeg
说话人日记化工具。
LIA_Utils
用于操作 ALIZÉ 中使用的各种数据格式的实用程序 — GMM、特征等。
LIA_SpkTools
其他部分所基于的库;它在 ALIZE-core 之上提供高级功能。
同时,LIA_RAL还包括一个名为 SimpleSpkDetSystem 的库,该库为希望在其应用程序中轻松嵌入说话人验证或识别的开发人员提供了一个简单的高级 API。还开发了此 API 的 Java 版本,针对 Android 应用程序开发。

基础知识

声纹识别算法

高斯混合模型-全局背景模型(GMM-UBM),联合因子分析JFA和i-vector
i-vector 适合长语音,跨信道
GMM-UBM 适合短语音,安静,同信道
2014 之后
深度神经网络(Deep Neural NetWorks DNN)
DNN代替了GMM 推出 DNN i-vector
2017 之后
x-vector框架,前端提取的特征送人延时神经网络,Time-Delay Neural Networks TDNN
依靠NDD学习能力正式进入DNN时代

提取声学特征(采用FBank和MFCC)

送入声纹模型,提取说话人的表征(i-vector或x-vector),然后后端判别(采用余弦Cosine或概率线性区分分析PLDA)
FBank:采用对数功率输出,保留较多原始特征,适合神经网络
MFCC:采用离散余弦变换DCT得到紧凑的特征向量

声纹识别系统框架

声学特征提取过程

声纹模型可采用基于 GMM 的 i-vector 或基于神经网络的 x-vector

i-vector 是基于单一空间的跨信道算法,该空间既包含了说话人空间的信息也包含了信道空间信息。
i-vector 是生成式建模,泛化性较好,但对短语音(5 秒以内)性能不佳,一般建模语音要 40 秒以上,测试语音要 10 秒以上。

x-vector 的模型结构,主要包含三部分:
• 帧级别:处理时序语音信息;
• Statistics Pooling:学习数据的全局统计信息;
• 段级别:进一步提取全局信息。
x-vector 网络输出节点对应说话人的 ID,是区分性建模,其优点是短语音性能较好,神经网络可以训练大数据,但泛化性较差,未见的说话人领域性能会下降很多。

x-vector

声纹识别以 x-vector 为主流框架,其关键技术涉及数据准备,损失函数,模型的架构和学习方法,以及后端分类器,通过数据加噪、模拟远场、Specaugment、Online 扩增,可有效提高声纹模型的鲁棒性。针对模型的网络结构、池化(pooling)方式、学习方法等多方面的改进,仍然是目前学术界的研究热点。由于采用 AM-Softmax、AAM-Softmax 等带 Margin 的损失函数,使得提取到的 x-vector 已具备较强的区分性,因此后端分类器已较多采用 Cosine 打分,其复杂度非常低,识别效率远超过 PLDA 打分。但针对跨领域的自适应,PLDA 更有优势。

声纹识别开源工具ASV-Subtools



环境配置

Kaldi 安装
//下载kaldi源码
git clone https://github.com/kaldi-asr/kaldi.git
//编译tools
cd kaldi/tools
extras/check_dependencies.sh
make -j 4
//编译kaldi
cd ../src
./configure --shared
make depend -j 8
make -j 8
//检查是否安装成功,输出显示如下即为安装成功
cd ../egs/yesno/s5
sh run.sh


Subtools 安装

1、构建工程目录,这里推荐构建四级目录,以 Kaldi 为第一级目录开始计算 , 在 上 节 中 已 经 将 Kaldi 安装至 /work 下 , 因 此 四 级 目 录 结 构 为/work/kaldi/egs/xmuspeech/example。其中[xmuspeech]为自定义目录,[example]为工程目录。通过 shell 命令,创建工程目录。

mkdir -p /work/kaldi/egs/xmuspeech/example
cd /work/kaldi/egs/xmuspeech/example
git clone https://github.com/Snowdar/asv-subtools.git subtools
安装 Pytorch

安装依赖库,相关依赖库的列表在 subtools/requirements.txt 有列出,通过pip 命令完成安装即可。

pip install torch
pip install -r subtools/requirements.txt

为 subtools 配置 Kaldi 路径。若 subtools 的路径按上述步骤在第四级目录,例如/work/kaldi/egs/xmuspeech/example/,则无需更改 path 路径,否则需要编辑 subtools/path.sh 配置 KALDI_ROOT,具体要求可按 subtools/path.sh 内容进行修改。
以上,就已完成 subtools 的环境安装。

入门使用—Voxceleb1 训练和测试

VoxCeleb4是一个英文数据集,包括两个子集 VoxCeleb1 和 Voxceleb2,在数据下载完成之后需要准备数据映射文件,分别为 wav.scp、utt2spk、spk2utt,这三种文件的格式分别为:

wav.scp:utt-id utt-path
utt2spk:utt-id spk-id
spk2utt:spk-id utt-id

以数据存放位置为/data1/voxceleb1/dev,结合 shell 命令为例,这里提供一种生成以上三个文件的范例:
1.创 建 数 据 文 件 夹 , 在 第 4 章 中 构 建 工 程 的 路 径 为/work/kaldi/egs/xmuspeech/example,通过 shell 命令在 example 下构建 data 目录用于存放数据映射文件。

mkdir -p data/voxceleb1_train

2、利用 find 命令获取该文件夹下所有 wav 文件的绝对路径并保存至 temp.lst中。

find /data1/voxceleb1/dev -name *.wav > data/ voxceleb1_train/temp.lst

此 时 temp.lst 文 件 里 保 存 了 所 有 dev 的 语 音 的 绝 对 路 径 , 例 :/data1/voxceleb1/dev/id10001/1zcIwhmdeo4/00001.wav

awk '{split($1,a,"/");{split(a[7],b,”.”)}print a[5]"-"a[6]"-"b[1],$1}' 
data/ voxceleb1_train/temp.list > data/ voxceleb1_train/wav.scp

利用 awk 命令将 temp.lst 中的每一行进行切分并重新组合构建 wav.scp,输出格式为:

id0001-1zcIwhmdeo4-00001 /data1/voxceleb1_dev/id10001/1zcIwhmdeo4/00001.wav

3、同样利用 awk 命令生成 utt2spk 和 spk2utt 两个文件。

awk '{split($1,a,"/");{split(a[7],b, ".")};print a[5]"-"a[6]"-"b[1],a[5]}' 
data/ voxceleb1_train/temp.lst > data/ voxceleb1_train/utt2spk
awk '{split($1,a,"/");{split(a[7],b,”.”)}print a[5], a[5]"-"a[6]"-"b[1]}' 
data/ voxceleb1_train/temp.lst > data/ voxceleb1_train/spk2utt

格式分别为:

utt2spk: id0001-1zcIwhmdeo4-00001 id0001
spk2utt: id0001 id0001-1zcIwhmdeo4-00001

至此,就生成 Voxceleb1 训练集的三个映射文件。但是此时的三个文件的顺序并不是有序的,因此需要对文件夹进行过滤和筛选,利用命令完成

sh subtools/kaldi/utils/fix_data_dir.sh data/ voxceleb1_train

特别地,对于 Voxceleb 数据集,subtools 集成了 perl 语言的脚本用于生成上述三个映射文件,脚本存放于 subtools/recipe/voxceleb/prepare 中,还是以Voxceleb1 数据存放于/data1/voxceleb1 中为例,构建训练集只需执行命令:

subtools/recipe/voxceleb/prepare/make_voxceleb1_v2.pl /data1/voxceleb1/dev
dev data/voxceleb1_train

而对于测试集,同样执行一下命令,就能完成映射文件的生成以及测试列表trials。

subtools/recipe/voxceleb/prepare/make_voxceleb1_v2.pl /data1/voxceleb1/test
test data/voxceleb1_test

特征提取

下面将利用Alize+SPro进行简单的GMM-Based的说话人识别的基本流程总结如下:

1.Features extraction 特征提取
sfbcep.exe(MFCC)或slpcep.exe(LPCC)
这里两个可执行文件 可以使用ASV-Subtools工具去特征提取
根据官方给出的 四个例子,先将第一个例子跑起来,再研究第三方的代码,可能官方的已经满足需求了呢。。。

2.Silence removal 静音检测和去除
NormFeat.exe 先能量规整
EnergyDetector.exe 基于能量检测的静音去除

3.Features Normalization 特征规整
NormFeat.exe 再使用这个工具进行特征规整

4.World model training
TrainWorld.exe 训练UBM

5.Target model training
TrainTarget.exe 在训练好UBM的基础上训练training set的GMM

6.Testing
ComputeTest.exe 将testing set在training set的GMM上进行测试和打分

7.Score Normalization
ComputeNorm.exe 将得分进行规整

  1. Compute EER 计算等错误率
    你可以查查计算EER的matlab代码,NIST SRE的官网上有下载DETware_v2.1.tar.gz 。_

标签:Alize,train,kaldi,笔记,voxceleb1,vector,subtools,声纹识别,data
From: https://www.cnblogs.com/SYF8848/p/18075050

相关文章

  • Alize 声纹识别 学习笔记2 失败了
    alize源码https://github.com/ALIZE-Speaker-Recognition/alize-corehttps://github.com/ALIZE-Speaker-Recognition/LIA_RALLIA_RAL提供了四个官方例子https://alize.univ-avignon.fr/https://alize.univ-avignon.fr/doc/01_GMM-UBM_system_with_ALIZE3.0.tar.gzhttps://......
  • WinClip非官方复现代码学习笔记2
    一、数据集加载1.数据集放置将下载的数据集解压到datasets文件夹的下面,方便后续操作。2.数据集预处理数据集预处理针对两个数据集给了两个不同的预处理指令,我测试了VISA数据集,以下是我对VISA数据集的实例。1.datasets/prepare_visa_public.py文件配置打开这个文件,第1......
  • 推荐系统实现-笔记(2)
    推荐系统实现(1)推荐系统Demo实现笔记:系统概述本推荐系统采用基于内容的推荐算法,旨在为用户提供与其已收藏内容相似的新内容推荐。系统设立了两级过滤机制,以提高推荐的准确性和实用性。第一级过滤根据语料自身的标签进行推荐,第二级过滤则基于第一级过滤得到的标签,计算每个类别中......
  • C#笔记-异常处理
    一、引言1、什么是异常异常是程序运行时发生的不正常或错误情况。异常会打断程序的正常流程,导致程序终止或产生不可预测的结果。2、为什么要处理异常提高程序的健壮性和稳定性。提供友好的错误提示,提升用户体验。方便开发者定位和修复问题二、C#中的异常处理机制1、tr......
  • Kotlin,简直是 Java 的 Pro Max!(笔记3 进阶篇)
    目录拓展拓展函数拓展属性运算符重载operator高阶函数通过高阶函数,模拟实现标准函数apply内联函数inlinenoinlinecrossinline泛型泛型类泛型方法限定泛型类型模拟实现apply标准函数(泛型版)泛型高级特性回顾Java中的协变和逆变Kotlin的协变和逆变委托......
  • 集中式注册表(Centralized Registry)分布式注册表(Distributed Registry)
    集中式注册表(CentralizedRegistry)是指在计算机系统中,将多个应用程序或服务的配置信息、参数设置等数据集中存储在一个统一的注册表中的管理方式。在Windows操作系统中,注册表(Registry)就是一个典型的集中式注册表系统。作用:统一管理:集中式注册表可以让多个应用程序共享同一份......
  • 多元统计分析课程笔记
    多元统计分析(数据分析)课程的笔记,主要内容为理论,公式推导以及例题。                                 ......
  • 复习第二天总结笔记3.19
    今天复习了以下内容1.掌握了变量的定义和使用重点记录Java常量优化机制2.使用Debug工具查看程序的执行流程3.使用Scanner键盘录入数据4.清楚算数符中/%的特点数值拆分公式5.掌握Java中的字符串拼接操作至于今天学习或者以前没了解完全的内容如下1.了解清楚自......
  • Rhino.Inside.Revit学习笔记——九哥
    Hello大家好!我是九哥~大家好,我是九哥,Rhino.Inside.Revit学习笔记又更新了,更新支持RIR最新版1.12+,有很多节点进行了调整,同时新增了一章:RIR节点介绍,完整的介绍了每一个节点。接下来还是详细介绍下教程的具体信息:本套教程,名称为《Rhino.Inside.Revit学习笔记》,在语雀上我的个人......
  • Kali学习笔记07-部署vulhub靶机
    Kali学习笔记07-部署vulhub靶机KaliLinux网络安防一、下载vulhub从vulhub的github网站vulhub/vulhub上下载它的压缩包,得到一个叫做vulhub-master.zip的压缩包。二、解压缩unzipvulhub-master.zip三、进入到某一个漏洞目录中enterdescriptionhere四、自......