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特征向量。
![](https://img.haomeiwen.com/i9473443/fb59930d35812c5e.png)
图1 VGGish网络结构
1.1 VGGish 用法:
-
作为特征提取器:VGGish模型将音频输入特征转化为具有语义和有意义的128 维high-level的特征向量,而128维high-level特征向量可以作为下游模型的输入。
-
作为其它模型中的一部分:VGGish可以视为其它模型的较低层的“热启动“部分,其它模型可以在VGGish embedding之上添加更多层。
1.2 VGGish提取特征过程
输入数据为wav音频文件,音频文件的特征提取过程如下:
- 将音频重采样为16kHz单声道音频;
- 使用25 ms的Hann时窗,10 ms的帧移对音频进行短时傅里叶变换得到频谱图;
- 通过将频谱图映射到64阶mel滤波器组中计算mel声谱;
- 计算 log(mel-spectrum + 0.01),得到稳定的 mel 声谱,所加的 0.01 的偏置是为了避免对 0 取对数;
- 然后这些特征被以 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安装需要两个文件:
- vggish_model.ckpt(<u>https://storage.googleapis.com/audioset/vggish_model.ckpt</u>)
- vggish_pca_params(<u>https://storage.googleapis.com/audioset/vggish_pca_params.npz</u>)
将上述两个文件放在对应的路径中,运行vggish_some_test.py, 出现“Looks Good To Me”则安装完成。
4 数据处理示例
-
将音频重采样为 16kHz 单声道(vggish_input.py),如图1所示,此时输出数据格式为[num_samples, 96, 64], 其中num_samples与音频的时长有关。
image
:
-
使用 25ms 的帧长、10ms 的帧移,以及周期性的 Hann 窗口对语音进行分帧,对每一帧做短时傅里叶变换,然后利用信号幅值计算声谱图,如图2所示。
![](https://img.haomeiwen.com/i9473443/c843550692fec28c.png)
-
通过将声谱映射到 64 阶 mel 滤波器组中计算 mel 声谱, 如图3所示。
image
-
计算 log(mel-spectrum + 0.01),得到稳定的 mel 声谱(图4),所加的 0.01 的偏置是为了避免对 0 取对数
![](https://img.haomeiwen.com/i9473443/fee64b3955a121ff.png)
然后这些特征被以 0.96s的时长被组帧,并且没有帧的重叠,每一帧都包含 64 个 mel 频带,时长 10ms(即总共 96 帧)。这些组帧后的特征数据格式为[nums_frames, 128]特征向量,将输入给下游模型进行进一步训练。
网友评论