此项目源自2018年5月公司的一个实际项目: 检测主播是否在唱歌, 即通过直播间的声音信号判定主播当前时间段是否在唱歌. 该项目已于2018年6月20日上线, 准确率为 ~93%
.
在此之前, 我没有语音相关的经验, 不仅如此, 公司内部也没有相关技术储备. 只能凭借经验和 sense 去查找解决方案, 经过 1 星期的调研, 确定了使用深度学习, 并选定 特征提取 + 分类 这种比较传统但成熟的方案. 最后, 我与一个实习生经过一个月的努力, 在 deadline 之前完成上线. 具体地
- 特征提取 阶段选用 VGGish 网络结构, 这是由 Google 开源并在 YouTube8M 中实际应用的技术;
- 分类 阶段采用非常简单的结构:
2个全连接层 + 1个Softmax层
, 因为 VGGish 提取的特征(embedding)够紧凑, 包含的信息足够多, 可以应对一个二分类问题(唱歌和非唱歌);
在这篇文章中, 我将介绍关于这个项目涉及的主要问题和解决办法, 以及怎样通过一些技巧将准确率从 70% 提升至 93%. 并以一个公开数据集 UrbanSound 作为例子进行讲解.
开源地址: https://github.com/luuil/tensorflow-audio-classification