从零搭建音乐识别系统(五)embedding特征提取模型验证

13 篇文章 12 订阅
10 篇文章 0 订阅

从零搭建音乐识别系统(一)整体功能介绍_程大海的博客-CSDN博客

从零搭建音乐识别系统(二)音频特征提取_程大海的博客-CSDN博客_音乐特征提取

从零搭建音乐识别系统(三)音乐分类模型_程大海的博客-CSDN博客

从零搭建音乐识别系统(四)embedding特征提取模型_程大海的博客-CSDN博客

从零搭建音乐识别系统(五)embedding特征提取模型验证_程大海的博客-CSDN博客

 代码地址:GitHub - xxcheng0708/AudioEmbeddingExtraction: Extract audio embedding feature by metric learning


        在前面的内容中,我们已经借助于pytorch-metric-learning代码库,使用ResNet + Circle Loss+ sample mining的 方法训练了度量学习模型,该模型旨在将一个输入的10秒音频短片转化为一个具有表征能力的高维embedding向量。度量学习的目标是对于属于同一类别ID的音乐片段的embedding相似度大于属于不同类别ID的音乐片段的embedding相似度。

        关于如何验证特征提取模型的性能问题,在模型训练阶段,我们已经使用了独立于训练集的验证集和测试集,使用mean_average_precision_at_r指标来评估模型性能,这是在验证集和测试集上整体评估模型的性能,并且这种评估方式没有设定具体的置信度阈值,只是单纯的对top k的结果进行评估。

        本篇内容,我们就在上一篇的基础上讨论一下如何验证embedding特征提取模型的真实性能,以及如何在实际使用中确定embedding的相似度阈值(卡阈值)来实现稳定的embedding相似度识别。

        准备两个各有1000首(数据量大小依个人而定)不同歌曲的数据集,假设带music1和music2。我们使用正向评估和反向评估两种评估方法。

数据预处理

        将music1数据集和music2数据集中每首歌曲,以5秒为间隔,每次截取一个10秒的音乐片段,这样对于每首歌曲,截取的每个10秒片段和其前后片段之间具有5秒(50%)的重合度(第一个和最后一个片段除外),将每个10秒片段使用特征提取模型转换为embedding特征向量。

embedding特征向量归一化

        参考:向量搜索的简明数学基础 - 知乎

        参考:产品常见问题 · Open Source Vector Database designed for AI applications

        首先,将提取得到的每个embedding特征向量进行L2归一化,经过归一化之后的特征向量的模为1。L2归一化的具体步骤如下:

计算embedding空间距离或相似度

        参考:向量搜索的简明数学基础 - 知乎

        参考:产品常见问题 · Open Source Vector Database designed for AI applications

        我们通过计算embedding之间的空间距离(如欧式距离,值越小越相似),或者相似度(如余弦相似度,值越大越相似)来进行embedding相似性匹配检索。经过上一步特征归一化之后,对于两个embedding之间的欧式距离,取值范围在[0, 2]之间,对于两个embedding之间的余弦相似度,取值范围在[-1, 1]之间。关于欧式距离和余弦相似度的具体计算方法如下:

反向评估

        作用:使用反向评估方法确定embedding相似度识别阈值

      将从music1数据集提取到的所有embedding组成的集合作为被查询特征库,记做std,从music2数据集提取到的所有embedding组成的集合作为待查询特征库,记做query。假设跟embedding模型训练时采用的相似度度量方法一样,我们这里采用余弦相似度。分别设定[0, 1]之间依次递增的不同相似度阈值,将query中的每个embedding在std中进行相似度匹配检索,匹配的相似度大于设定阈值则检索成功,否则检索失败。找到使得query中所有embedding的检索结果均为空的最小的阈值条件即为实际中可以作为参考基准使用的相似度阈值。

正向评估

      作用:使用正向评估方法确定在设定相似度阈值条件下的识别准确率

      对于music1数据集中每首歌曲提取得到的embedding,将序号为1,3,5,……奇数的embedding添加到标准embedding集合中,记做std,将2,4,6,……偶数的embedding添加到待查询embedding集合中,记做query,然后使用query中的embedding在设定的相似度阈值条件下在std中检索满足设定阈值的匹配结果,如果匹配(来自于query)与被匹配(来自于std)的结果属于同一首歌曲,则认为识别成功。根据query中所有embedding的匹配结果计算识别准确率。

真实评估

        在上面描述的正向评估方法中,检索和被检索双方来自于同一首歌曲文件,我们把这种情况叫做同源,这样的话,来自同一首歌曲的检索和被检索的embedding,他们具有相同的初始比特率、采样率等信息,所以他们具有相同或相似的梅尔频谱特征分布,从而使得它们的embedding之间具有这种“与生俱来”的相似性,这使得在同源的内容上进行正向评估的结果是过于乐观的,也不符合我们的实际使用场景。我们在实际使用中常见的场景如下:

  1. Std标准特征库可能来自于各大音乐平台提供的歌曲文件
  2. query特征库来自于任意我们想识别的目标音频文件,比如短视频或者影视剧里面出现的片头曲、背景音乐等

        在这种情况下,对于听上去感觉属于同一首歌曲的内容,他们在std和query里面的比特率、采样率,以及梅尔频谱的数据分布可能差异很大,导致提取的embedding的差异变大,从而导致实际的识别结果就不是那么美丽了。所以在对模型进行正向评估和反向评估之后,我们还要再做一步非同源的相似歌曲识别评估。假如要识别神雕侠侣的片头曲《难念的经》,std库中采集某音乐平台上提供的音质较好的《难念的经》版本,query库中采集某视频平台上提供的某一集神雕侠侣的片头曲,然后进行互相匹配验证。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值