VoxCeleb 说话人识别挑战
VoxSRC 消息:
2020 VoxCeleb Speaker Recognition Challenge (VoxSRC) 将联合 Interspeech 国际会议于 2020 年 10 月 30 日在上海举办。
文章目录
- VoxCeleb 说话人识别挑战
- 摘要
- VoxSRC
- 度量学习与编码器
- 高维度数据可视化 TSNE
- 深度学习平台 NSML
- 参考文献:
摘要
“Speaker recognition in the wild” 是一项非常具有挑战性的任务,需要面对语音中各种不确定性,例如复杂的噪声、不同程度的背景音、短促的笑声等情况。针对这一问题,可以在 VoxSRC 提供的语料及其各种模型的实验结果,寻找合适的语音段编码器,设计合理的度量学习模型,分析造成性能降低的数据因素,都将成为提升识别性能的潜在解决方案。本文就 VoxSRC 提供的实验结果和相关的论文进行归纳、总结与展望。
VoxSRC
2020 VoxCeleb Speaker Recognition Challenge (VoxSRC) 旨在研究现有的说话人识别方法对来自 “in the wild” 语音数据的识别效果。这次挑战提供了来自 YouTube 名人访问视频的语音语料。相对传统的电话、麦克风语音,这类数据集包含更多的干扰与不确定性。
此次挑战分为 3 项任务,分别是:
- 特定训练数据的说话人确认监督任务(Fixed-Full):VoxCeleb2 dev 数据集作为训练数据;
- 训练数据不受限的说话人确认监督任务(Open-Full):训练数据可以使用 VoxSRC 测试数据以外的任意数据集;
- 特定训练数据说话人确认自监督任务(Fixed-Self):VoxCeleb2 dev 数据集作为训练数据,但无法使用说话人的标签,但可以使用除此以外的其它标签,例如跨模态的视觉帧,但无法使用任意模态的预训练模型。
竞赛举办方为任务 1 与 2 提供了说话人确认监督学习的基准,为任务 3 提供了说话人确认自监督学习的基准。
根据 3 个任务场景,不难看出主办方对于竞赛的想法,针对固定的评估数据:
- 针对任务 1,训练集是固定的,该任务旨在设计最佳的学习算法;
- 针对任务 2,训练集是开放的,该任务除了设计合理的学习算法,还需要选择能够提高评估数据性能的训练数据,因此,该任务旨在跨领域的知识迁移;
- 针对任务 3,训练集是固定的,无说话人标签,存在跨域标签,该任务旨在跨任务的知识迁移。
根据对 3 个任务的分析,可以发现三个任务是依次递进、逐渐复杂的。为了解决这些问题,学习方法的设计、迁移学习方法、跨领域/任务的方法会有利于改善这些问题。
度量学习与编码器
论文 Exploring the Encoding Layer and Loss Function in End-to-End Speaker and Language Recognition System 讨论了几种(段层次)编码器和几种损失函数对说话人识别性能的影响,其中编码器包含 temporal average pooling (TAP)、self-attentive pooling (SAP) 和 learnable dictionary encoding (LDE),损失函数包含 Softmax、Center 和 augular softmax (ASoftmax),并将这些编码器和损失函数整合到端到端模型中,评估算法在 VoxCeleb1 数据集上的效果。以 Cosine 作为评分函数,性能(低于 4.90% EER)的排名分别是:
LDE-ASoftmax (4.56) > TAP-Center (4.75) > SAP-ASoftmax (4.90)。
论文 In defence of metric learning for speaker recognition 讨论了多种损失函数(包含分类损失和度量学习)对 CNN 学习算法的影响,并在 VoxCeleb 数据集上分别评估 VGG-M-40 模型和 Thin ResNet-34 模型的性能,该评估方式与 VoxSRC 任务 1 (Fixed-Full) 一致,其中损失函数包含:
- 分类目标:Softmax、AM-Softmax (CosFace) 和 AAM-Softmax (ArcFace);
- 度量学习目标:Triplet、Prototypical、Generalised end-to-end (GE2E) 和 Angular Prototypical。
以 10 × 10 10 \times 10 10×10 对的 ∥ ⋅ ∥ \Vert\cdot\Vert ∥⋅∥ 的平均值作为评分函数,不同损失函数的性能(仅考虑 Thin ResNet-34,因为这里 VGG-M-40 性能较差)排名分别是:
分类目标:AAM-Softmax (2.36) > AM-Softmax (2.40) > Softmax (5.82)
度量学习目标:Angular Prototypical (2.21) > Prototypical (2.34) > GE2E (2.52) > Triplet (2.53)
分类目标中,相比较 AM-Softmax,AAM-Softmax 对算法参数更加敏感,从在 2.36 ~ 10.55 的波动;对比分类损失,度量学习能够更实现更优的性能。
从数据集上看,VoxCeleb2 作为训练数据,对于 VoxCeleb1 的提升效果非常明显,即从 4.56% EER 改善到 2.21% EER,50% 的提升量,可以猜想:数据集的补充,有利于学习算法的改进。
高维度数据可视化 TSNE
说话人的特征表示,在解释性上,仍然存在很大的障碍,很多时候,很难了解学习到的说话人特征是怎么样的。2008 年发布的 TSNE 可视化方法,提供了一种高维数据转化为低维流形的方法,为说话人表示提供了一种可行的可视化方案。
TSNE 提供了一种高维特征距离投影为低维特征距离的方法,采用了基于概率的模型来刻画数据点上的距离,其学习过程类似一种数据合成的迭代方法,可以大胆地想象:如果直接将这类方法引入说话人建模,能够改善说话人特征的解释性。
考虑到这类方法的实用性,笔者寻找了 sklearn
关于 TSNE 的实现,它提供了一个手写数字的案例:
from time import time
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import offsetbox
from sklearn import manifold, datasets, discriminant_analysis# Prepare digits dataset
digits = datasets.load_digits(n_class=6)
X = digits.data
y = digits.target
n_samples, n_features = X.shape
n_neighbors = 30# Scale and visualize the embedding vectors
def plot_embedding(X, title=None, sub_num=111):x_min, x_max = np.min(X, 0), np.max(X, 0)X = (X - x_min) / (x_max - x_min)# plt.figure()ax = plt.subplot(sub_num)for i in range(X.shape[0]):plt.text(X[i, 0], X[i, 1], str(y[i]),color=plt.cm.Set1(y[i] / 10.),fontdict={'weight': 'bold', 'size': 9})if hasattr(offsetbox, 'AnnotationBbox'):# only print thumbnails with matplotlib > 1.0shown_images = np.array([[1., 1.]]) # just something bigfor i in range(X.shape[0]):dist = np.sum((X[i] - shown_images) ** 2, 1)if np.min(dist) < 4e-3:# don't show points that are too closecontinueshown_images = np.r_[shown_images, [X[i]]]imagebox = offsetbox.AnnotationBbox(offsetbox.OffsetImage(digits.images[i], cmap=plt.cm.gray_r),X[i])ax.add_artist(imagebox)plt.xticks([]), plt.yticks([])if title is not None:plt.title(title)# Plot images of the digits
print("Showing selected digits")
n_img_per_row = 20
img = np.zeros((10 * n_img_per_row, 10 * n_img_per_row))
for i in range(n_img_per_row):ix = 10 * i + 1for j in range(n_img_per_row):iy = 10 * j + 1img[ix:ix + 8, iy:iy + 8] = X[i * n_img_per_row + j].reshape((8, 8))
plt.figure(figsize=(12, 10))
plt.subplot(2,2,1)
plt.imshow(img, cmap=plt.cm.binary)
plt.xticks([])
plt.yticks([])
plt.title('A selection from the 64-dimensional digits dataset')# t-SNE embedding of the digits dataset
print("Computing t-SNE embedding")
tsne = manifold.TSNE(n_components=2, init='pca', random_state=0)
t0 = time()
X_tsne = tsne.fit_transform(X)
plot_embedding(X_tsne,"t-SNE embedding of the digits (time %.2fs)" %(time() - t0), sub_num=222)# Projection on to the first 2 linear discriminant components
print("Computing Linear Discriminant Analysis projection")
X2 = X.copy()
X2.flat[::X.shape[1] + 1] += 0.01 # Make X invertible
t0 = time()
X_lda = discriminant_analysis.LinearDiscriminantAnalysis(n_components=2).fit_transform(X2, y)
plot_embedding(X_lda,"Linear Discriminant projection of the digits (time %.2fs)" %(time() - t0), sub_num=223)# Isomap projection of the digits dataset
print("Computing Isomap projection")
t0 = time()
X_iso = manifold.Isomap(n_neighbors, n_components=2).fit_transform(X)
plot_embedding(X_iso,"Isomap projection of the digits (time %.2fs)" %(time() - t0), sub_num=224)print("0 and 1 are Red.\n2 is Blue.\n3 is Green.\n4 is Purple.\n5 is Orange.")
plt.tight_layout()
plt.savefig('t-SNE.png')
深度学习平台 NSML
VoxSRC 采用了韩国 NSML 平台,这个平台提供了研究者很多自动化的功能,使开发者可以更专注模型的设计。这与深度学习平台的开发需求是非常吻合的。在国内,也有非常多的深度学习竞赛拥有这这类平台,例如阿里云、腾讯云、百度云、京东云、华为云、ucloud 云。
尽管笔者在单机上的深度学习平台上有所尝试,但是高门槛成为了平台建设的主要困难,这些困难包含技术上的,和设计思路上的。这方面非常希望有读者愿意加入到笔者到团队中来,一起研究。
参考文献:
- VoxCeleb Speaker Recognition Challenge (VoxSRC): Chung, J.S., Huh, J., Mun, S., Lee, M., Heo, H.S., Choe, S., Ham, C., Jung, S., Lee, B.-J., Han, I., 2020. In defence of metric learning for speaker recognition. arXiv Prepr. arXiv2003.11982.
- 编码器与损失函数对说话人/语音识别的讨论: Cai, W., Chen, J., Li, M., 2018. Exploring the Encoding Layer and Loss Function in End-to-End Speaker and Language Recognition System, in: Odyssey 2018 The Speaker and Language Recognition Workshop. ISCA, Les Sables d’Olonne, France, pp. 74–81. https://doi.org/10.21437/odyssey.2018-11
- 高维数据可视化 TSNE: Van Der Maaten, L., Hinton, G., 2008. Visualizing data using t-SNE. J. Mach. Learn. Res. 9, 2579–2625.
- 深度学习平台: Sung, N., Kim, M., Jo, H., Yang, Y., Kim, J., Lausen, L., Kim, Y., Lee, G., Kwak, D.-H., Ha, J.-W., Kim, S., 2017. NSML: A Machine Learning Platform That Enables You to Focus on Your Models. CoRR arXiv prep.
作者:王瑞 同济大学 计算机系博士研究生
邮箱:rwang@tongji.edu.cn
CSDN:https://blog.csdn.net/i_love_home
Github:https://github.com/mechanicalsea
如果大家有兴趣参加 2020 VoxSRC 竞赛,欢迎一起交流~