SDPN 说话人识别模型
自蒸馏原型网络(Self-Distillation Prototypes Network)是一种基于ECAPA-TDNN的自监督学习框架,由教师-学生模型构成,通过引入prototypes模型全监督模型中的分类器,通过教师模型的输出分布指导学生模型的输出分布,可用于说话人确认、说话人日志等任务。
模型简述
SDPN使用使用教师-学生模型结构,通过最大化同一语句中不同增强片段的特征分布相似性,自监督地获取说话人特征,在2024年5月刷新了最低的benckmark。
更详细的信息见
- github项目地址:3D-Speaker
训练数据
本模型使用公开的英文说话人数据集VoxCeleb2开发集进行训练,可以对16k采样率的英文音频进行说话人识别。
模型效果评估
- 选择EER、minDCF作为客观评价指标。
- 在VoxCeleb1-O测试集上,EER = 1.88%,minDCF(ptarget=0.05, cmiss=c_fa=1) = 0.141。
在线体验
在页面右侧,可以在“在线体验”栏内看到我们预先准备好的示例音频,点击播放按钮可以试听,点击“执行测试”按钮,会在下方“测试结果”栏中显示相似度得分(范围为[-1,1])和是否判断为同一个人。如果您想要测试自己的音频,可点“更换音频”按钮,选择上传或录制一段音频,完成后点击执行测试,识别内容将会在测试结果栏中显示。
在Notebook中体验
对于有开发需求的使用者,特别推荐您使用Notebook进行离线处理。先登录ModelScope账号,点击模型页面右上角的“在Notebook中打开”按钮出现对话框,首次使用会提示您关联阿里云账号,按提示操作即可。关联账号后可进入选择启动实例界面,选择计算资源,建立实例,待实例创建完成后进入开发环境,输入api调用实例。
from modelscope.pipelines import pipeline
sv_pipline = pipeline(
task='speaker-verification',
model='iic/speech_sdpn_ecapa_tdnn_sv_en_voxceleb_16k'
)
speaker1_a_wav = 'https://modelscope.cn/api/v1/models/damo/speech_ecapa-tdnn_sv_en_voxceleb_16k/repo?Revision=master&FilePath=examples/speaker1_a_en_16k.wav'
speaker1_b_wav = 'https://modelscope.cn/api/v1/models/damo/speech_ecapa-tdnn_sv_en_voxceleb_16k/repo?Revision=master&FilePath=examples/speaker1_b_en_16k.wav'
speaker2_a_wav = 'https://modelscope.cn/api/v1/models/damo/speech_ecapa-tdnn_sv_en_voxceleb_16k/repo?Revision=master&FilePath=examples/speaker2_a_en_16k.wav'
# 相同说话人语音
result = sv_pipline([speaker1_a_wav, speaker1_b_wav])
print(result)
# 不同说话人语音
result = sv_pipline([speaker1_a_wav, speaker2_a_wav])
print(result)
# 可以自定义得分阈值来进行识别
result = sv_pipline([speaker1_a_wav, speaker2_a_wav], thr=0.365)
print(result)
训练和测试自己的SDPN模型
本项目已在3D-Speaker开源了训练、测试和推理代码,使用者可按下面方式下载安装使用:
git clone https://github.com/alibaba-damo-academy/3D-Speaker.git && cd 3D-Speaker
conda create -n 3D-Speaker python=3.8
conda activate 3D-Speaker
pip install -r requirements.txt
运行SDPN在VoxCeleb集上的训练脚本
cd egs/voxceleb/sv-sdpn/
# 需要在run.sh中提前配置训练使用的GPU信息,默认是4卡
bash run.sh
评论