声纹识别算法阅读之VoxCeleb

论文:
  VoxCeleb: a large-scale speaker identification dataset
思想:
   1)整理了一个非约束的声纹识别数据集,1251个左右说话人,每个说话人100utts;整理来源youtube;
   2)采用VGG-M网络进行说话人辨别和验证特征表达学习,并在此基础上进行改进,将一层全连接层(维度9*8)修改为一层全连接9*1后接全局平均池化层1*8,9*8->(9*1->1*8);此改进一方面可以降低训练参数,一定程度防止过拟合,另一方面test时可以接受任意长度语音输入,只需要修改最后一个平均池化层卷积核尺寸1*n,n与语音输入长度有关;
模型:
  模型采用VGG-M的基本结构,并对倒数第三层全连接进行替换为一层全连接外加一层全局池化,最终的模型包含5*conv+2*maxpool+3*fc+1*global meanpool,具体参数如下:
  其中,data size是针对训练时的数据尺寸,训练时模型输入为固定长度为3s的音频切分段
训练:
  • 数据集:voxceleb:1251celebrities,over100000utts.
  • 输入:对输入音频进行滑动切片,每片3s,得到512*300大小的频-时图输入到网络中;
  • 预处理:CMVN,均值方差归一化
  • 训练目标:
  1. 说话人辨别:CE交叉熵损失,输出单元为1251
  2. 说话人确认:对比损失contrastive loss,采样先辨别预训练再siamese网络对比损失finetune策略
其中,d2为样本对之间的欧式距离,y属于{0,1},y=1表示样本对属于同一类,y=0表示不属于同一类;这样,对于同一类之间的距离越小,损失越小;对于不同类之间的距离越大,损失越小;这就起到缩小类内间距,同时扩大类间间距至少margin的目的
  注:但是这里有有一个小疑问:根据论文描述,输入音频采样率16khz,每帧25ms,step=10ms,那么每帧采样点个数为16000*25/1000=400;3s也就是3000/10=300帧;最后得到400*300大小的频时图。但论文为512*300,对应为32ms窗口。
实验结果
  • 在说话人辨别任务中,CNN结构相对于i-vector based模型具有明显的优势;此外,输入特征进行方差归一化有助于提升辨别效果;再者,对CNN改进引入全局平均池化层有助于进一步提升辨别效果
  • 在说话人确认任务中,CNN + Embedding同样取得了最好的效果,值得一提的时,采样embedding的方式比直接采用辨别任务全连接层输出效果更好
结论:本文做出了两点主要的贡献:
  1)提供了一个大规模的声纹识别数据集,该数据来源于YouTube,适应于非约束性的数据场景,能够更好的反映真实场景下的声纹识别情况,该数据包含1252个说话人,共计超过10万个句子;
  2)采用深度CNN网络进行说话人辨别和确认的基本框架,对VGG-M进行改进,引入全局平均池化,一方面减少模型训练参数,另一方面test能够接受任意长度的输入。
Reference:
posted @ 2020-09-12 16:18  卑微的蜗牛  阅读(1647)  评论(0编辑  收藏  举报