使用机器学习实现多音频识别的一种设想

目录
  1. 单音频识别
  2. 多音频识别
  3. AI实现
TOC

做院里一个音频识别活动时的一点想法

单音频识别

参考文献:听歌识曲的原理是什么? - 知乎 (zhihu.com)

音频识别原理为:

先将音频进行傅里叶变换,使其变为频域上的信息,然后选取其中的极大值作为特征信息进行处理,这种信息被称为音频的指纹,相似的曲子应该有相似的指纹。理论上,可以直接用这种指纹和资料库进行对比,采用卷积等方式打分即可挑选出结果。

但为了加快对比的速度,可以将原本的指纹设计为由一个锚点所确定的时间对,并由此生成频率-时间的哈希值。而在比对时,相似的哈希值所形成的时间偏移将是基本一致的,它们都会有相似的起始时间,而这个时间就是片段在歌曲中的起始位置。

而正确的匹配将会使得时间偏移的数目很大,此时便可以确定正确的曲目了。

多音频识别

该部分只是个人根据单音频识别的原理提出的猜测,没有经过代码实际验证。

在多音频识别前,我们需要了解多音频是如何混合的:参考:音频混音算法介绍_混音算法

可以看出,多音频混合大多采用叠加的方式进行,各种算法只是在“溢出”等问题和其它问题的权衡上有所不同,但基本思路都是系数叠加。

在认为混音系数不变的情况下,我们可以通过估计音频中某个已知乐曲的权重的方式,除去这段音频,再进行识别。一一分离识别,即可做到多音频的混音识别。

而对于已知音频的权重的估计,可以采用分段的方式进行,通过将一段音频分段,并分别通过单音频识别,可以确认一首曲子在该音频中的比例,若打分高于阈值(说明这段音频中有这首曲目),则纳入观察,对于打分最高的部分,说明这段音频中该曲目占的比重很大。我们可以建立相应的对应关系,通过这个打分来衡量这段音频的权重。

若是不计较程序的复杂度,也可以选用更为稳妥的枚举方法:在一定范围内枚举可能的权重,然后对根据该权重去除了该曲目的音频进行下一次的单音频识别,总体分数越高,说明权重越接近真实情况。取打分最高的权重作为相应的权重,并继续这样的操作。

采用这样的办法,或许可以实现多音频的识别。

AI实现

利用AI实现多音频识别我认为是可能的。

首先,并非所有部分都需要使用AI,在单音频识别问题上,QQ音乐(腾讯),网易云等巨头基本已经完善了该功能,也有相应的算法和研究。因此,我认为多音频问题的重点应该是如何使用单音频的成果实现,而非另起高楼,结合之前的多音频混合方式可知,多音频分离的关键在于获得已知音频的权重,而这部分可以交给机器学习完成。

由于音频具有时间连续的特点,采用RNN神经网络进行训练,该网络一次(一帧)输入两个数据,分别是音频的该帧数据以及对应的已知曲目的对应该帧数据,而网络输出为一个实数,即当下预测的该曲目占音频的权重。

同时,为了避免不同区域的权重的不同,加入记忆设计,即采用LSTM网络训练。

即整体流程为:

单音频识别出A - 放入训练好的LSTM网络 - 得到权重序列 - 根据权重减去A - 单音频识别B - 放入LSTM ···

该方法的缺陷为,需要提前得知(或猜测)权重的生成方式,因为训练集中权重的生成会极大地影响网络对测试集中对权重的判断,也就是说,需要足够多的合格样本才可以训练出合格的网络。

但这也是机器学习的通病,即使是强化学习(将下一次单音频识别中的打分作为反馈),也需要一个漫长的训练过程,足够多的样本(学习机会)总是难以避免的。

DAR
SON