基于交叉熵的音频指纹快速搜索方法 技术领域 本发明涉及一种基于交叉熵的音频指纹快速搜索方法, 可以实现合理的跳跃式比 对, 达到从大量音频数据中进行高效准确的搜索的目的。
背景技术 音频指纹是指音频自身的基于内容的低维表示 ( 一段音频被表示成一个低维特 征矢量 ), 不同内容的音频有不同的指纹。音频指纹技术有着广泛的应用背景, 包括基于内 容的音频辨识和检索, 版权管理等领域。
现阶段已经存在很多不同的算法。这些算法主要在以下几点有区别 :
1. 音频特征的选取, 如音频短时频谱的均值、 方差、 谱中心、 基音等。
2. 指纹模型的构造, 如矢量量化码本, 高斯混合模型等。
3. 音频指纹对比所用的距离算法, 如欧氏距离, 马氏距离等
4. 检索算法, 如线性比对, 最近邻比对等。
优秀的音频指纹搜索方法应该能够在音频信号由于压缩、 传输等造成一定的失真 之后, 仍然能够进行正确比对, 并且满足计算的时间复杂度要求。
发明目的
本发明提出了种对失真有更好稳健性, 对距离度量具有更广的适应性的基于交叉 熵的音频指纹快速搜索方法。
本发明的特征在于 : 是在计算机中依次按以下步骤实现的 :
步骤 (1) 计算机初始化 :
设置 : 共分量高斯混合模型生成模块, 基于共分量高斯混合模型的音频指纹提取 模块, 广义动态时序比对模块, 其中 :
所述共分量高斯混合模型生成模块, 使用事先采集好的约 100 个小时的音频数 据, 进行最大似然参数估计, 创建一个共分量高斯混合模型 ;
所述音频指纹提取模块, 基于所述共分量高斯混合模型提取音频指纹, 并且用交 叉熵衡量音频指纹间距离 ;
所述广义动态时序比对模块, 以滑动窗方式将用户指定音频段与输入音频流进行 指纹比较, 判断音频流中是否包含有指定音频段。
步骤 (2) 按以下步骤创建一个共分量高斯混合模型 :
步骤 (2.1) 事先采集好约 100 个小时的音频数据。经过短时傅立叶分析, 以 10 毫 秒为一帧提取一个倒谱特征矢量。
步骤 (2.2) 利用步骤 (2.1) 得到的倒谱特征矢量集, 进行最大似然参数估计, 创建 一个共分量高斯混合模型。该模型包含 M 个高斯分布作为其分量, 以及 M 个权重系数, M的 取值为 512 :
{ωi(u), μi(u), ∑ i(u)}i = 1,…, M (u) (U)
其中 μi , ∑ i 表示第 i 个高斯分量的均值矢量和协方差矩阵, ωi(u) 表示第 i
个高斯分量的权重系数, i = 1,…, M, 上标 u 标识此共分量高斯混合模型。
步骤 (3) 按以下步骤对用户指定音频段进行预处理 :
步骤 (3.1) 向计算机输入用户指定音频段 c, 时间长度为几秒, 经过短时傅立叶 分析, 以 10 毫秒为一帧提取一个倒谱特征矢量。这样, 音频段 c 用一个倒谱特征矢最序列 (c) {xn }n = 1,…,W 来表示, W 表示音频段 c 的帧数, n = 1,…, W 表示音频段 c 的各帧的序号, 上标 c 标识此音频段 c。
步骤 (3.2) 按下式计算共分量高斯混合模型的第 i 个高斯分量在音频段 c 的第 n (c) 帧的权重系数 ωi, , n = 1,…, W: n
其中 i = 1, …, M, j = 1, …, M 为共分量高斯混合模型的高斯分量的编号, (u) (u) Ni(x|μi , ∑ i ) 表示均值矢量为 μi , 协方差矩阵为∑ i(u) 的高斯分布概率密度函数。
按下式计算第 i 个高斯分量在音频段 c 中各帧的权重系数的算术平均值, 用 ωi(c) 表示 :
(u)
计算得到的各个高斯分量的权重系数的算术平均值组成一个矢量 {ωi(c)}i = 1, …, M, 将该矢量作为音频段 c 的低维表示 - 音频指纹。
步骤 (4) 以滑动窗方式将用户指定音频段 c 与被测试音频流 s 进行指纹比较 :
步骤 (4.1) 在设定的小时数内, 向计算机输入被测试音频流 s, 经过短时傅立叶分 析, 以 10 毫秒为一帧提取一个倒谱特征矢量。这样, 被测试音频流 s 用一个倒谱特征矢量 (s) 序列 {xt }t = 1,…,T 来表示, T 为被测试音频流 s 的帧数, t = 1,…, T 表示音频流 s 的各 帧的序号, 上标 s 标识此音频流 s。
步骤 (4.2) 按下式计算共分量高斯混合模型的第 i 个高斯分量在音频流 s 的第 t (s) 帧的权重系数 ωi, , t = 1,…, T: t
其中 i = 1, …, M, j = 1, …, M 为共分最高斯混合模型的高斯分量的编号。 (u) (u) Ni(x|μi , ∑ i ) 表示均值矢量为 μi , 协方差矩阵为∑ i(u) 的高斯分布概率密度函数。
步骤 (4.3) 设置 l = 1。
步骤 (4.4) 如果 l+W-1 > T, 则退出。
步骤 (4.5) 将音频流 s 从第 l 帧开始的长度为 W 的一个窗内的音频段 {xt(s)}t = 以下称音频段 s(l), 与音频段 c 进行指纹距离计算。 l,…, l+W-1,
首先, 按下式计算得到音频段 s(l) 的指纹
(u)
即第 i 个高斯分量在音频段 s(l) 中各帧的权重系数的算术平均值作为音频段 s(l)的音频指纹的第 i 维。 l) (c)
然后, 按下式计算出音频段 s(l) 的指纹 {ωi(s, }i = 1, } …, M 与音频段 c 的指纹 {ωi i = 1,…, M 之间交叉熵距离
如果 dKL(l) ≤ θ, 则判断音频流 s 从第 l 帧开始包含了音频段 c, 其中 θ 为一个 预设检测阈值, 取 0.01。接着令 l = l+1, 回到步骤 (4.4) 继续搜索音频流 s 的剩下部分是 否还包含有音频段 c。
如果 dKL(l) > θ, 则按下式计算出一个跳跃步长
其中 Δ 为一个预设偏移量, 取 0.001 或 0.005, 表示向下取整。接着令 l =l+τL-skip, 回到步骤 (4.4) 继续搜索音频流 s 的剩下部分是否还包含有音频段 c。
本发明的特征点在于 :
1. 建 立 共 分 量 高 斯 混 合 模 型 (CCGMM, Common Component Gaussian MixturoModel) 来描述音频指纹, 并且选用交叉熵衡量音频指纹间的距离。 交叉熵距离度量 具有更好的对低速率音频压缩、 回响干扰、 D/A 和 A/D 转换等失真的更好的稳健性。
2. 提出广义动态时序比对技术, 不仅适用于传统的 L1 距离, 而且适用于交叉熵距 离, 以及其他任意距离函数为凸函数的距离度量。
测试表明, 本发明使用偏移量为 0.005 的交叉熵距离相对线性逐帧计算可以减 少 93.47%的距离计算次数, 并且在多种失真下, 本发明的错误率相对使用 L1 距离降低了 31.7%。 附图说明
图1: 基于交叉熵的音频指纹搜索方法的原理图。
图2: 基于交叉熵的音频指纹搜索方法的程序流程图。 具体实施方式
本发明具体包括三个模块, 共分量高斯混合模型生成模块, 基于共分量高斯混合 模型的音频指纹提取模块, 广义动态时序比对模块。各模块的具体说明如下。
共分量高斯混合模型生成模块
首先, 事先采集好约 100 个小时的音频数据。经过短时傅产叶分析, 以 10 毫秒为 一帧提取一个倒谱特征矢量。
然后, 利用上述得到的倒谱特征矢量集, 进行最大似然参数估计, 创建一个共分量 高斯混合模型。该模型包含 M 个高斯分布作为其分量, 以及 M 个权重系数, M 的取值为 512 :{ωi(u), μi(u), ∑ i(u)}i = 1,…, M (u) (u)
其中 μi , ∑ i 表示第 i 个高斯分量的均值矢量和协方差矩阵, ωi(u) 表示第 i 个高斯分量的权重系数, i = 1,…, M。上标 u 标识此共分量高斯混合模型。
音频指纹提取模块
现有技术常常是通过简单的矢量量化得到特征矢量或是直方图作为音频指纹。 本 发明使用基于共分量高斯混合模型计算出的音频段的各帧的权重系数的算术平均值作为 音频段的指纹。在指纹搜索系统中, 有两处地方需要调用音频指纹提取模块。
用户指定音频段的指纹提取
对于用户指定音频段 c, 时间长度为几秒, 经过短时傅立叶分析, 以 10 毫秒为一帧 (c) 提取一个倒谱特征矢量。这样, 音频段 c 用一个倒谱特征矢量序列 {xn }n = 1,…, W W 来表示, 表示音频段 c 的帧数, n = 1,…, W 表示音频段 c 的各帧的序号。上标 c 标识此音频段 c。
按下式计算共分量高斯混合模型的第 i 个高斯分量在音频段 c 的第 n 帧的权重系 (c) 数 ωi, n = 1,…, W: n ,
其中 i = 1, …, M, j = 1, …, M 为共分量高斯混合模型的高斯分量的编号。 (u) (u) Ni(x|μi , ∑ i 表示均值矢量为 μi , 协方差矩阵为∑ i(u) 的高斯分布概率密度函数。
按下式计算第 i 个高斯分量在音频段 c 中各帧的权重系数的算术平均值, 用 ωi(c) 表示 :
(u)
计算得到的各个高斯分量的权重系数的算术平均值组成一个矢量 {ωi(c)}i = 1, …, M, 将该矢量作为音频段 c 的低维表示 - 音频指纹。
被测试音频流的指纹提取
在设定的小时数内, 向计算机输入被测试音频流 s, 经过短时傅立叶分析, 以 10 毫 秒为一帧提取一个倒谱特征矢量。这样, 被测试音频流 s 用一个倒谱特征矢量序列 {xt(s)}t T 为被测试音频流 s 的帧数, t = 1,…, T 表示音频流 s 的各帧的序号。上 = 1,…, T 来表示, 标 s 标识此音频流 s。
按下式计算共分量高斯混合模型的第 i 个高斯分量在音频流 s 的第 t 帧的权重系 (s) 数 ωi, t = 1,…, T: t ,
其中 i = 1, …, M, j = 1, …, M 为共分量高斯混合模型的高斯分量的编号。 Ni(x|μi(u), ∑ i(u)) 表示均值矢量为 μi(u), 协方差矩阵为∑ i(u) 的高斯分布概率密度函数。
在指纹搜索中, 我们需要将音频流 s 从第 l 帧开始的长度为 W 的一个窗内的音频 (l) 段 {xt(s)}t = l,…, 按下式计算 l+W-1( 以下称音频段 s ) 与音频段 c 进行指纹距离计算。为此, (l) 得到音频段 s 的指纹
即第 i 个高斯分量在音频段 s(l) 中各帧的权重系数的算术平均值作为音频段 s(l) 的音频指纹的第 i 维。
广义动态时序比对模块
音频指纹比对是指, 以滑动窗方式将用户指定的音频段 c 与被测试音频流 s 进行 指纹比较, 滑动窗长度设为音频段 c 的长度。如果发现音频流 s 的某处位置的片段与音频 段 c 之间指纹距离小于预设的检测阈值, 则判断在音频流 s 发现了音频段 c。
注意到由于应用在音频流上的滑动窗会逐步随时间推移向后滑动 ( 以帧作为时 间单位 ), 因此在连续的窗之间会体现出一种连续性。动态时序比对技术就是利用了这种 连续性, 通过计算出以时间步长为参量的距离度量的下界, 跳过不需要的距离计算直至这 个下界小于检测阈值为止, 从而大大提高检索效率。 在原始的时序动态检索中, 距离度量局 限为 L1 距离。本发明将其扩展为任意距离函数为凸函数的距离度量, 提出广义动态时序比 对, 具体步骤如下 :
如上所述, 对用户指定音频段 c 进行处理, 得到一个倒谱特征矢量序列 {xn(c)}n =
, 其中 W 表示音频段 c 的帧数, n = 1,…, W 表示音频段 c 的各帧的序号。上标 c 标识 是音频段 c 的特征。对 n = 1,…, W, i = 1,…, M, 按公式 (1) 计算出第 i 个高斯分量在 (c) 音频段 c 的第 n 帧的权重系数 ωtn 。按公式 (2) 计算得到音频段 c 的音频指纹, 即维数为 (c) M 的矢量 {ωi }i = 1,…, M。
如上所述, 对被测试音频流进行处理, 得到一个倒谱特征矢量序列 {xt(s)}t = 1,…,T, 其中 T 为被测试音频流 s 的帧数, t = 1,…, T 表示音频流 s 的各帧的序号。上标 s 标识 是音频流 s 的特征。对 t = 1,…, T, i = 1,…, M, 按公式 (3) 计算出第 i 个高斯分量在 (s) 音频流 s 的第 t 帧的权重系数 ωi, 。 t
设置 l = 1。
如果 l+W-1 > T, 则退出。
将音频流 s 从第 l 帧开始的长度为 W 的一个窗内的音频段 {xt(s)}t = l,…, l+W1( 以下 (l) 称音频段 s ) 与音频段 c 进行指纹距离计算。
首先, 按下式计算得到音频段 s(l) 的指纹1,…, W
即第 i 个高斯分量在音频段 s(l) 中各帧的权重系数的算术平均值作为音频段 s(l) 的音频指纹的第 i 维。 l) (c)
然后, 按下式计算出音频段 s(l) 的指纹 {ωi(s, }i = 1, } …, M 与音频段 c 的指纹 {ωi i = 1,…, M 之间交叉熵距离
8其中利用第 i 维计算的交叉熵距离记为101853262 A CN 101853263
说明书6/7 页我们有如果 dKL(l) ≤ θ, 则判断音频流 s 从第 l 帧开始包含了音频段 c, 其中 θ 为一个 预设检测阈值 ( 通常可取 0.01)。接着令 l = l+1, 回到步骤 (5.3.4) 继续搜索音频流 s 的 剩下部分是否还包含有音频段 c。
如果 dKL(l) > θ, 则按下式计算出一个跳跃步长
其中(s, l) l) 表示将 dKL, 的函数, 对 ωi(s, 求偏导 : i(l) 视为 ωi
表示向下取整。接着令 l = l+τKL-skip, 回到步骤 (5.3.4) 继续搜索音频流 s 的剩下部分是否还包含有音频段 c。
可以证明, 按照 (9) 式计算出的跳跃步长可以保证不漏过任何距离小于阈值 θ 的 比对, 从而通过避免不必要的计算的方法加快了检索速度。τKL-skip 越大, 检索效率越高。
讨论 :
1. 上述的广义动态时序比对技术可以应用在任意满足下式的距离度量
l) 且 di(l) 为 ωi(s, 的凸函数的情形, 这包括但不限于公式 (7) 定义的交叉熵距离, 以及下面公式 (12) 给出 L1 距离。
其中利用第 i 维计算的 L1 距离记为2. 采用交叉熵距离时跳跃步长的公式 (9)(10) 在实际计算时需做一些调整。注 l) 意到如果某个高斯分量的权重 ωi(s, 接近 0, (10) 式的分母会变得很大从而使得跳跃步长 经常小于 1。 为了解决这个问题, 权重系数会被加上一个正的偏移量 Δ( 通常可取 0.001 或 0.005), 采用下面的交叉熵距离计算公式。这时广义动态时序比对技术依旧适用。
3. 由于使用共分量高斯混合模型, 在进行音频指纹提取时只需要估计各高斯分量的权重系数, 因此成功避免了有可能因为数据不足而导致的错误估计问题, 这对于持续时 间仅有 2 至 3 秒的短音频段的精确指纹提取有重要意义。同时, 使用共分量高斯混合模型 之后大大简化了两个高斯混合模型之间 KL 距离的计算, 才有可能进行下一步的动态时序 比对。
测试结果
首先使用事先采集好约 100 个小时的音频数据 ( 来自 CCTV, VOA 等 ), 进行最大似 然参数估计, 创建一个共分最高斯混合模型。
作为被测试音频流, 我们录制了 10 小时 VOA 广播新闻, 从中提取了 1000 段长度为 3 秒的音频段作为用户指定音频段。我们对被测试音频流做了三种不同的失真处理 :
1) 低质量 VBR mp3 压缩处理 (40-50Kbps) ;
2) 使用 CoolEdit 叠加房间回声效果 ;
3) 使用低质量扬声器重放并用低质量麦克风重新录制。
搜索任务就是在 10 小时的失真处理之后的音频流中搜索用户指定音频段。 表格 1 列出了实验结果。其中 CPU 时间表示在 10 小时的音频流中找到 3 秒的音频段所需的平均 时间 ( 使用 1.4GHz 奔腾 4 处理器进行实验 )。 测 试 表 明, 使 用 偏 移 量 为 0.005 的 交 叉 熵 距 离 相 对 线 性 逐 帧 计 算 可 以 减 少 93.47%的距离计算次数, 并且在多种失真下, 其错误率相对使用 L1 距离降低了 31.7%。
表 1 测试结果