Walleclipse / Deep_Speaker-speaker_recognition_system

Keras implementation of ‘’Deep Speaker: an End-to-End Neural Speaker Embedding System‘’ (speaker recognition)
245 stars 81 forks source link

跨信道验证 #58

Closed ZengHorace closed 4 years ago

ZengHorace commented 4 years ago

非常感谢前辈分享的项目 两段语音是一个人说话时同时用两部手机录的,现在要验证这两段语音是否是同一个人,按照这个方式 embed1_1 = model.predict(feature1_1) embed1_2 = model.predict(feature1_2) mul = np.multiply(embed1_1, embed1_2) s = np.sum(mul, axis=1) print(s) 我有两个问题: 1.这种方式对吗? 2.如果对的话,这种方式对跨信道的语音效果比较差,但同信道的效果很好,有其他方法提升跨信道语音验证吗

Walleclipse commented 4 years ago

你做的应该没有问题, 你要人为的定一个阈值,比如说 thr = 0.5, 当 你计算的相似度 s>thr 的时候,就说明是同一个人的语音,反之就是不同人的语音。你可以根据实际情况调整 thr 的大小来权衡 False positive rate 和 false negative rate。 如果总的性能很差,那么说明这个模型不好,你可能需要和你测试集类似的数据上进行进一步的训练。 不好意思,我不知道很好的提升跨信道语音验证的方法。收集跨信道数据,然后用这些数据训练可能是一个方案。

ZengHorace commented 4 years ago

谢谢前辈,还有个问题,你的静音检测原理有相关文献吗,调试了一遍代码,没看懂

Walleclipse commented 4 years ago

我用的是很简单的基于能量的的静音检测模块 (VAD)。( 在 silence_detector.py 文件里面的 SilenceDetector class里面)。大致原理就是 计算每一小部分语音的能量 (local energy),如果这个能量小于一个阈值那就认为是静音。我也不清楚有没有参考文献,但这些资料可能会有用。