Github代码地址
代码路径:RawNet\RawNet-master\keras

下载好Voxceleb1的数据集,经过00-pre_process_waveforms.py预处理,再用01-trn_RawNet.py训练,然后用02-trn_bvec.py验证。
【遇到的问题】

  1. 01-trn_RawNet.py跑aishell1数据集,需要自动生成trials.txt(test数据)和val_trials.txt(dev数据)。里面有三列:target, spkMd, utt。
    spkMd和utt为语音的相对路径,如test/S0916/BAC009S0916W0495.wav,target为spkMd与utt这两段语音是否为同一人的真实值(0或者1)。
    【完成】
Aishell1

trials.txt:len:7176, 其中匹配个数:384,不匹配个数:6792。
val_trials.txt:len:14331, 其中匹配个数:357,不匹配个数:13974

VoxCeleb1

trials.txt:len:4874, 其中匹配个数:21,不匹配个数:4853
val_trials.txt:len:148642, 其中匹配个数:12,不匹配个数:148630
【注意】可能需要更改trails.txt和val_trails.txt,不平衡。
【解决】trials.txt,val_trials.txt存在问题,voxceleb1数据集需要划分为dev,train,test,然后再跑test.py得到trials.txt和val_trials.txt。
【完成】
trials.txt:len:7137, 其中匹配个数:21,不匹配个数:4853
val_trials.txt:len:16404, 其中匹配个数:171,不匹配个数:148630

VCTK

trials.txt:len:1858, 其中匹配个数:170,不匹配个数:6967
val_trials.txt:len:4151, 其中匹配个数:425,不匹配个数:16233

  1. 改代码路径。
    dev_scp:/hehua/DB/Aishell1/scp/train/train_wav_pe.scp
    eval_scp: /hehua/DB/Aishell1/scp/test/test_wav_pe.scp
    还需要增加一个验证路径(val_scp): /hehua/DB/Aishell1/scp/dev/dev_wav_pe.scp(代码中的变量:153行的val_lines)
    【完成】
  2. 01-trn_RawNet.py的104行代码assert _nb_samp >= nb_samp,不懂参数意义,注释了该行代码,采样率吗?
    【已处理】取消注释,略过不满足条件的音频。
  3. aishell1跑01-trn_RawNet.py
    (1) 【报错】:MemoryError:Unable to allocate array with shape…
    【解决】报错原因在于矩阵维度过大。解决方法win10 pycharm 出现MemoryError 和 Unable to allocate array with shape
    (2) 【卡死】:代码卡死在1-trn_RawNet.py的第296行loss, loss1, loss2, acc1, acc2 = model.train_on_batch([x, y], [dummy_y, dummy_y])
    【可能原因1———不是这个原因】分析是第288行代码y = to_categorical(y, num_classes=parser[‘model’][‘nb_spk’])将y值one-hot编码,要求y为[0,num_classes)间的整型,而当前y=[‘S0002’]这种字符串。后面打印验证,如果确认,则写dic[‘S0002’] = 2这种字典,可能涉及test函数的标签修改。
    【可能原因2———是这个原因】在处理一个批次时,对于提取特征失败的speaker我直接舍弃了(01-trn_RawNet.py的compose_batch函数),但是一个批次固定102个说话者,最终x,y矩阵维度不匹配。
    修改y和dummy_y矩阵维度。
    (3) 【本地cpu跑的太慢】准备用pycharm连接谷歌服务器,用免费GPU跑本地代码。
    【解决】用学校GPU
  4. vctk 跑00-pre_process_waveforms.py
    分了train:94个Speakers,dev:10个,test:5个。[参考Aishell1数据集划分比例]
    音频文件总个数:44243。
  5. vctk跑01-trn_RawNet.pys
    (1)epoch原为100,现设置成epoch=10,预计跑一天。
    (2)【问题】 使用两块gpu失败。
    【办法】 代码里参数mg=0,设置mg=1即可。
  6. 【问题】都没跑02-trn_bvec.py,不知道什么作用。
  7. aishell1跑01-trn_RawNet.pys
    (1)代码332行报错
fpr, tpr, thresholds = roc_curve(y, y_score, pos_label=1)
Input contains NaN, infinity or a value too large for dtype('float32').

【分析】极大可能y_score中含有NAN => 代码320行

cos_score = cos_sim(dic_val[spkMd], dic_val[utt])

计算得到的cos_score可能存在NAN => 计算余弦相似度的分母可能存在为0的情况。
【解决办法】法1:余弦相似度计算分母加上一个小数,保证分母不为0;
法2:如果计算得到的cos_score为NAN,直接舍弃这个y, y_score对。
采取法2,原因:为NAN的数据量可能不大
【注意】同时更改trival.txt处的代码

一、01-trn_RawNet.py

A. 功能:

Yaml load
Pre-train:make folders,train one epoch,validate(验证,用dev,文本存于val_trials.txt),evaluate(评估,用test,文本存于trials.txt)。
Train RawNet
Extract RawNet Embeddings
· 总共做了两次训练,一次预训练Pre-train,一次训练Train RawNet。
· 训练集的标签是在process_epoch(lines, q, batch_size, nb_samp, dic_spk, base_dir)函数和compose_batch(…)函数中处理的,(x,y)存储在队列q中,其中y对为每个说话人的编号,从0到399。

B. 函数

· make_spkdic(lines)

功能:返回一个字典,键是(str)说话人名称,值是(int)每个说话人的唯一整数(0,1,2…)。

· compose_spkFeat_dic(lines, model, f_desc_dic, base_dir)

功能:从给定模型中提取说话人嵌入。
lines:(列表)指示每种话语的字符串列表
model:(keras模型)DNN,用于提取说话者嵌入,
输出层应该被移动(model_pred)
f_desc_dic :(字典)文件对象的字典

· cos_sim(a,b)

功能:计算a,b矩阵的余弦。

二、model_RawNet_pre_train.py

A. 功能:

创建预训练RawNet模型。

B. 函数

· get_model(argDic)

功能:创建预训练模型。

三、00-pre_process_waveforms.py

A. 功能:

预训练波形图。

B. 函数

· get_model(argDic)

功能:创建预训练模型。

· extract_waveforms(lines, dir_trg)

功能:提取lines各目录下音频的波形图,存入dir_trg。

· pre_emp(x)

功能:预强调原始波形。(算式不太懂)

· join_scp(f_dir, nb_proc)

功能:归并scp文件。

四、02-trn_bvec.py

A. 功能:

B. 函数

· make_spkdic(lines)

功能:返回一个字典和一个list,字典的键是(str)说话人名称,值是(int)每个说话人的唯一整数(0,1,2…),list是说话人名称的列表。

·get_spk2utt_dic(lines)

功能:返回字典,键为说话人名字,值为对应语音路径。

五、model_bvec.py

A. 功能:

创建模型。

B. 函数

· get_model(argDic)

功能:创建模型。

RawNet代码解析相关推荐

  1. matrix_multiply代码解析

    matrix_multiply代码解析 关于matrix_multiply 程序执行代码里两个矩阵的乘法,并将相乘结果打印在屏幕上. 示例的主要目的是展现怎么实现一个自定义CPU计算任务. 参考:ht ...

  2. CornerNet代码解析——损失函数

    CornerNet代码解析--损失函数 文章目录 CornerNet代码解析--损失函数 前言 总体损失 1.Heatmap的损失 2.Embedding的损失 3.Offset的损失 前言 今天要解 ...

  3. 视觉SLAM开源算法ORB-SLAM3 原理与代码解析

    来源:深蓝学院,文稿整理者:何常鑫,审核&修改:刘国庆 本文总结于上交感知与导航研究所科研助理--刘国庆关于[视觉SLAM开源算法ORB-SLAM3 原理与代码解析]的公开课. ORB-SLA ...

  4. java获取object属性值_java反射获取一个object属性值代码解析

    有些时候你明明知道这个object里面是什么,但是因为种种原因,你不能将它转化成一个对象,只是想单纯地提取出这个object里的一些东西,这个时候就需要用反射了. 假如你这个类是这样的: privat ...

  5. python中的doc_基于Python获取docx/doc文件内容代码解析

    这篇文章主要介绍了基于Python获取docx/doc文件内容代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 整体思路: 下载文件并修改后缀 ...

  6. mongoose框架示例代码解析(一)

    mongoose框架示例代码解析(一) 参考: Mongoose Networking Library Documentation(Server) Mongoose Networking Librar ...

  7. ViBe算法原理和代码解析

    ViBe - a powerful technique for background detection and subtraction in video sequences 算法官网:http:// ...

  8. 【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中进行断点调试 | ELFFile 实例对象分析 )

    文章目录 一.PyCharm 中进行断点调试 二.ELFFile 实例对象分析 一.PyCharm 中进行断点调试 在上一篇博客 [Android 逆向]使用 Python 代码解析 ELF 文件 ( ...

  9. 密码算法中iv值是什么_?标检测中的?极?值抑制算法(nms):python代码解析

    ⾮极⼤值抑制(Non-Maximum Suppression)原理 ⾮极⼤值抑制,顾名思义,找出极⼤值,抑制⾮极⼤值.这种思路和算法在各个领域中应⽤⼴泛,⽐如边缘检测算法canny算⼦中就使⽤了该⽅法 ...

  10. python批量处理csv_Python批量处理csv并保存过程代码解析

    本篇文章小编给大家分享一下Python批量处理csv并保存过程代码解析,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 需求: 1.大量csv文件,以数字命 ...

最新文章

  1. Android 你知道界面布局嵌套多少层之后会Crash吗
  2. c# redis 如何设置过期时间_Redis Hash存储token、及设置过期时间
  3. 一起学asp.net基础文章二 服务器控件、客户端控件和html表单控件
  4. Spark笔记:复杂RDD的API的理解(上)
  5. GitHub 上100个优质前端项目整理,值得收藏!
  6. 如何进入zabbix的wab界面_如何不用光盘重装系统呢?
  7. 【数据库系统】笛卡尔积与自然连接
  8. Linux下实现流水灯等功能的LED驱动代码及测试实例
  9. IPv4的路由选择计算步骤
  10. SharePoint2010企业开发最佳实践(八)---- SPWeb 对象
  11. 拥抱模块化的javascript
  12. steam邮件认证出现Access Denied You don't have permission to....
  13. 队列fifo和lifo C语言数组实现
  14. nginx反向代理指定dns
  15. 《Linux Device Driver》——时间、延迟及延缓操作
  16. linux怎么查找接口,Linux终端命令接口(五)查找与搜索
  17. 分享几个学习翻译的方法
  18. 转载 解决 #65279 隐形字符的问题
  19. java解析asn.1编码_asn1编码格式的解析过程
  20. 算法学习(十六)——D3QN

热门文章

  1. 3.2配置自定义的路径映射
  2. Spring源码之ApplicationContext(九)初始化剩余的单例
  3. 【渝粤教育】电大中专微生物与寄生虫基础_1作业 题库
  4. 矩阵分析 (五) 矩阵的分解
  5. 数据挖掘算法-矩阵分解在推荐系统中的应用
  6. python的单元测试unittest模块
  7. 传输模型, tcp socket套接字
  8. static与extern 的作用、typedef关键字
  9. [转] 各种数据类型转换
  10. 安装篇——nginx安装ssl模块转发https请求