VGGish模型及项目简介

VGGish项目简介

来自:http://www.linxiaosen.com/138.html
AudioSet 由Google的声音理解团队于2017年3月发布,旨在为音频事件检测提供常见的大规模评估任务,并为全面的声音事件词汇提供起点。 AudioSet是一个由200万个人标记的10秒YouTube视频音轨组成的数据集,其标签来自600多个音频事件类的本体。

Vggish模型是在YouTube的AudioSet数据预训练得到模型。
Vggish项目地址:https://github.com/tensorflow/models/tree/master/research/audioset/vggish

1 VGGish

在大量的YouTube数据集上训练得到类VGG模型,该模型中生成128维的embedding。最初版本的AudioSet每个数据是128维的embedding,而这128维的embedding就是有上述VGG模型生成的。

我们把这个基于tensorflow 的VGG模型,称为VGGish。VGGish支持从音频波形中提取具有语义的128维embedding特征向量。


image

图1 VGGish网络结构

1.1 VGGish 用法:

  1. 作为特征提取器:VGGish模型将音频输入特征转化为具有语义和有意义的128 维high-level的特征向量,而128维high-level特征向量可以作为下游模型的输入。

  2. 作为其它模型中的一部分:VGGish可以视为其它模型的较低层的“热启动“部分,其它模型可以在VGGish embedding之上添加更多层。

1.2 VGGish提取特征过程

输入数据为wav音频文件,音频文件的特征提取过程如下:

  1. 将音频重采样为16kHz单声道音频;
  2. 使用25 ms的Hann时窗,10 ms的帧移对音频进行短时傅里叶变换得到频谱图;
  3. 通过将频谱图映射到64阶mel滤波器组中计算mel声谱;
  4. 计算 log(mel-spectrum + 0.01),得到稳定的 mel 声谱,所加的 0.01 的偏置是为了避免对 0 取对数;
  5. 然后这些特征被以 0.96s的时长被组帧,并且没有帧的重叠,每一帧都包含 64 个mel 频带,时长 10ms(即总共 96 帧)。

VGGish模型输出数据格式为[nums_frames, 128],其中nums_frames为帧长,nums_frames=音频时长/0.96。

2 VGGish模型文件

VGGish模型包含8个python脚本文件:

  • vggish_slim.py: TensorFlow Slim中模型定义。
  • vggish_params.py:超参数。
  • vggish_input.py:音频波形转换为所需的输入数据格式。
  • mel_features.py:音频特征提取。
  • vggish_postprocess.py:后处理embedding。
  • vggish_inference_demo.py:显示了如何从任意音频中生成VGGish embedding。
  • vggish_train_demo.py:显示了如何在VGGish之上添加模型并训练整个模型
  • vggish_smoke_test.py:VGGish安装成功测试

3 安装

依赖python包:numpy,scipy,resampy,tensorflow,six,pysoundfile。在Ubuntu and Windows 10 with Python 3.6.6, Numpy v1.15.4, SciPy v1.1.0, resampy v0.2.1, TensorFlow v1.3.0, Six v1.11.0 and PySoundFile 0.9.0.环境中通过测试。

VGGish安装需要两个文件:

  1. vggish_model.ckpt(https://storage.googleapis.com/audioset/vggish_model.ckpt
  2. vggish_pca_params(https://storage.googleapis.com/audioset/vggish_pca_params.npz

将上述两个文件放在对应的路径中,运行vggish_some_test.py, 出现“Looks Good To Me”则安装完成。

4 数据处理示例

  1. 将音频重采样为 16kHz 单声道(vggish_input.py),如图1所示,此时输出数据格式为[num_samples, 96, 64], 其中num_samples与音频的时长有关。


    image

    :

  2. 使用 25ms 的帧长、10ms 的帧移,以及周期性的 Hann 窗口对语音进行分帧,对每一帧做短时傅里叶变换,然后利用信号幅值计算声谱图,如图2所示。

image
  1. 通过将声谱映射到 64 阶 mel 滤波器组中计算 mel 声谱, 如图3所示。


    image
  2. 计算 log(mel-spectrum + 0.01),得到稳定的 mel 声谱(图4),所加的 0.01 的偏置是为了避免对 0 取对数

image

然后这些特征被以 0.96s的时长被组帧,并且没有帧的重叠,每一帧都包含 64 个 mel 频带,时长 10ms(即总共 96 帧)。这些组帧后的特征数据格式为[nums_frames, 128]特征向量,将输入给下游模型进行进一步训练。

你可能感兴趣的:(VGGish模型及项目简介)