使用数据集:AISHELL-ASR0009-OS1 下载
模型结构参考论文 “DEEP NEURAL NETWORKS FOR SMALL FOOTPRINT TEXT-DEPENDENT“,在实现时将论文中所提出的4层DNN结构的前两层替换为两层一维卷积,训练时通过Softmax分类器进行训练,注册及验证时将Softmax层去掉,DNN的输出作为d-vector,通过计算 cosine-distance 来判别说话人是否在注册集内。
-
- code -- 0-input # 数据预处理 -- 1-development # 模型定义及训练 -- 2-enrollment # 注册 -- 3-evalution # 陌生人验证评估 -- 4-roc_curve # 绘制ROC曲线图,并计算EER及阈值 -- utils - data # 数据存放 - docs # 参考论文 - logs # tensorboard 日志文件 - model # 模型存储文件 - results -- features # 根据模型计算出注册人及陌生人的d-vector -- plots # 绘制完成的ROC曲线图 -- scores # 绘制ROC曲线所需的score
-
-
首先对下载好的数据集进行VAD处理,处理代码位于 code/0-input/vad.py
usage:
python vad.py --save_dir="../../data/vad_data" --data_dir="解压之后的数据集路径" \ --category="要处理的数据类别,eg:train,test,dev"
-
将vad处理后的数据提取 log fbank 特征,该过程使用 python_speech_features 库完成
usage:
python process_data.py --data_dir="../../data/vad_data" --save_dir="提取log fbank后 bin文件保存路径" \ --category="要处理的数据类别" \ --validata_scale="若处理训练集数据,该参数可设置为验证集所占比例,eg:0.05, 若处理其他类别数据将其设置为0即可"
-
将训练集和验证集数据文件路径写入txt中,方便训练时打乱数据送入模型
usage:
python get_data_list.py --save_dir="../../data/bin/" --category="validate" # 验证集list python get_data_list.py --save_dir="../../data/bin/" --category="train" # 训练集list
-
通过执行train.py即可开始训练
usage:
python train.py --batch_size=128 --num_epochs=1000 --learn_rate=0.0001
-
-
直接运行model_test.sh 脚本即可绘制ROC曲线图并计算EER,该脚本需要模型的路径参数,结果文件会保存至results目录下
usage:
model_test.sh "model/checkpoint-00484-0.99.h5"
-
Total params: 5,781,524
Trainable params: 5,781,428
Non-trainable params: 96
模型结构图可在 results 目录下查看
-
使用340人的语音数据进行训练,训练完成后,使用dev数据集共40人进行注册,将数据分为注册和验证两部分,每人选取15s音频进行注册,然后用100条长度为1s的音频进行验证,统计TP和FP的个数。使用test数据集共20人进行陌生人验证,每人选取100条长度为1s的音频,统计每条音频与注册集内得分最高的cds值。通过上述测试数据绘制ROC曲线图,计算出EER为12.2%,阈值为0.7824.
-
百度网盘地址:https://pan.baidu.com/s/1rrVCKEIiqzZ3fTr4sKzr1Q 密码:3gri
其中 checkpoint-00484-0.99.h5 文件包含Softmax层 ,checkpoint-00484-0.99_notop.h5 已去掉Softmax层
模型训练时的超参数:batch_size=128 ,learn_rate=0.0001,实验时使用一块 Titan 进行训练,大约5小时训练完成