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

融合模型问题 #77

Closed RershallzzZ closed 2 years ago

RershallzzZ commented 3 years ago

大佬你好,我最近在做毕业设计,也是关于声纹识别方向的,仔细阅读了你的代码,收获良多! 但关于其中融合模型部分代码感觉有些费解,好像没有在训练时采用融合策略,还是使用CNN去select batch然后各自训练,只是测试模型的时候进行了打分融合?不知道融合模型的训练这一块该具体怎么实现,还请大佬指教。

Walleclipse commented 3 years ago

你好, 由于CNN与GRU的参数各不相同也不相关,所以可以单独进行训练。然后只是融合输出结果,这个是比较常见的融合方法。也就是各自模型单独训练,随后组合(比如说加权平均)得到的输出结果,论文里报告的效果也不错。
根据论文里说的,实际上组合结果有两种策略: 1) score_fuse: 分别用两个模型的结果计算similarity score,然后再对score进行平均。也就是我在 test_model.py的122-134行实现的效果。大概是下面这个思路:

embedding_cnn = cnn_model.predict(X)
pred_cnn = call_similar(embedding_cnn)
embedding_gru = gru_model.predict(X)
pred_gru = call_similar(embedding_gru)
final_pred = (normalize_scores(pred_cnn) + normalize_scores(pred_gru))/2

2)embedding_fuse: 也就是先组合两个模型的embedding,然后再计算similarity score. 大概是下面这个思路:

embedding_cnn = cnn_model.predict(X)
embedding_gru = gru_model.predict(X)
embedding_final = (embedding_cnn+embedding_gru)/2
final_pred = call_similar(embedding_final)

还有一点说明以下:我在报告里说明了,我没有训练出来融合策略。我也不太清楚什么样的融合训练方式更好。但是我实现的方法在理论上是没有问题的。