YAMNet:Google 的 521 类音频事件分类器
> 来源: https://github.com/tensorflow/models/tree/master/research/audioset/yamnet
> 开发者: Google Research(Manoj Plakal & Dan Ellis)
> 框架: TensorFlow / Keras
> 首次发布: ~2019 年(GitHub);2021 年 3 月(TensorFlow Hub 正式版 + 官方博客)
> 论文: 无独立论文,技术基础见 AudioSet (ICASSP 2017) 和 MobileNet v1 (arXiv 2017)
> 许可: Apache-2.0(TensorFlow Models 仓库)
📌 项目概述
YAMNet(Yet Another Audio Mobilenet Network)是 Google 开发的预训练音频事件分类器,能识别 521 种音频事件,从人声(说话、笑声、歌唱)到环境声(警笛、狗叫、雷声)再到音乐(吉他、钢琴、鼓声)。
它基于 AudioSet 数据集训练——一个包含 200 万+ 条 YouTube 音频片段的大规模标注数据集。
🔬 技术架构
深度可分离卷积(核心架构创新)
YAMNet 使用 MobileNet v1 的深度可分离卷积(Depthwise Separable Convolution)作为核心架构。这是一种将标准卷积拆分为两步的技术:
1. 逐通道卷积(Depthwise):每个输入通道独立做空间卷积,提取空间特征
2. 逐点卷积(Pointwise):1×1 卷积混合通道信息
这种拆分使计算量降至标准卷积的约 1/8~1/9,是 2019 年移动端部署的最优解。YAMNet 没有使用 Transformer 架构——在当时的技术条件下,轻量级 CNN 是性能与效率的最佳平衡。
深度可分离卷积(核心架构创新)
YAMNet 使用 MobileNet v1 的深度可分离卷积(Depthwise Separable Convolution)作为核心架构。这是一种将标准卷积拆分为两步的技术:
1. 逐通道卷积(Depthwise):每个输入通道独立做空间卷积,提取空间特征
2. 逐点卷积(Pointwise):1×1 卷积混合通道信息
这种拆分使计算量降至标准卷积的约 1/8~1/9,是 2019 年移动端部署的最优解。YAMNet 没有使用 Transformer 架构——在当时的技术条件下,轻量级 CNN 是性能与效率的最佳平衡。
模型结构
| 组件 | 详情 |
|---|---|
| 骨干网络 | MobileNet v1(深度可分离卷积) |
| 参数量 | **3.7M**(非常轻量) |
| 推理计算量 | 69.2M 乘法运算 / 帧 |
| 输入 | 960ms 音频片段(至少需 975ms) |
| 输出 | 521 维分类分数 |
| 嵌入维度 | 1024 维 |
音频特征处理流水线
原始音频
↓ 重采样至 16kHz 单声道
短时傅里叶变换(STFT)
↓ 窗口 25ms,跳步 10ms,Hann 窗
梅尔频谱图
↓ 64 个梅尔频带,125-7500 Hz
对数梅尔频谱图
↓ log(mel + 0.001)
分帧
↓ 96×64 的 patch(0.96s,50% 重叠)
MobileNet v1
↓ 3×2 × 1024 激活 → 全局平均池化
1024 维嵌入
↓ 单层 logistic 分类
521 类分数输出
性能指标
在 AudioSet 评估集(20,366 段,521 类)上:
| 指标 | 数值 |
|---|---|
| 平衡平均 d-prime | 2.318 |
| 平衡 mAP | 0.306 |
| 平衡平均 lwlrap | 0.393 |
521 类音频事件示例
YAMNet 能识别的音频类别覆盖面极广:
- 人声:说话、低语、喊叫、笑声、哭泣、咳嗽、打喷嚏、打呼噜
- 音乐:吉他、钢琴、鼓、小提琴、合唱、嘻哈、爵士
- 动物:狗叫、猫叫、鸟鸣、虫鸣、马嘶
- 环境:雨声、雷声、风声、水流、火焰
- 机械:汽车引擎、警笛、电话铃、键盘敲击
- 家居:门关、水龙头、微波炉、洗衣机
> 注:出于公平性考虑,原始 AudioSet 的 527 类中删除了 6 类——性别化的说话/歌唱分类(男性/女性)、战吼和搞笑音乐。
💡 核心价值:迁移学习基座
YAMNet 最重要的用途不是直接分类 521 种声音,而是作为音频领域的迁移学习基座模型。
工作原理
1. 加载预训练的 YAMNet
2. 提取 1024 维音频嵌入(倒数第二层输出)
3. 在嵌入之上训练你自己的小型分类器
4. 只需少量标注数据即可实现高精度的自定义音频分类
实际应用场景
| 场景 | 做法 |
|---|---|
| 婴儿哭声检测 | 用 YAMNet 嵌入 + 少量婴儿哭声样本训练 |
| 工厂异常声检测 | 正常运转声 vs 异常声的二分类 |
| 鸟类物种识别 | 不同鸟鸣的多分类 |
| 音乐流派分类 | 嵌入 + 流派标签训练 |
| 安防声音告警 | 玻璃碎裂、枪声、尖叫检测 |
| 智能家居 | 门铃、烟雾报警器、敲门声识别 |
TensorFlow 官方提供了完整的迁移学习教程,还可以用 TFLite Model Maker 导出到移动端。
📊 与同类模型对比
| 模型 | 参数量 | 类别数 | 框架 | 特点 |
|---|---|---|---|---|
| **YAMNet** | 3.7M | 521 | TensorFlow | 极轻量,迁移学习友好 |
| VGGish | ~72M | 嵌入 | TensorFlow | YAMNet 前身,更重 |
| PANNs | 80M+ | 527 | PyTorch | 更高精度,更重 |
| AST | 87M | 527 | PyTorch | Transformer 架构 |
| BEATs | 90M | 527 | PyTorch | 迭代式预训练 |
| Whisper | 39M-1.5B | 语音 | PyTorch | 语音识别,非事件分类 |
YAMNet 的定位:不追求最高精度,而是在轻量级 + 易用性 + 迁移学习友好之间取得最佳平衡。3.7M 参数意味着它可以轻松部署在移动设备和边缘设备上。
🚀 快速上手
# 克隆仓库
git clone https://github.com/tensorflow/models.git
cd models/research/audioset/yamnet
# 安装依赖
pip install numpy resampy tensorflow soundfile tf-keras
# 下载模型权重
curl -O https://storage.googleapis.com/audioset/yamnet.h5
# 测试安装
python yamnet_test.py
# 对音频文件分类
python inference.py your_audio.wav
⚠️ 注意事项
- 目前依赖 Keras 2,与 TF 2.16+ 默认的 Keras 3 不兼容
- 需要安装
tf-keras包来使用 Keras 2 - 也可通过 TensorFlow Hub 直接加载:
hub.load('https://tfhub.dev/google/yamnet/1')
💡 分析与评价
为什么在 2026 年仍然值得关注
1. 边缘部署:3.7M 参数 + MobileNet 架构 = 手机/树莓派/IoT 设备上实时音频分类
2. 迁移学习性价比极高:1024 维嵌入质量好,少量样本就能训出效果不错的自定义分类器
3. AudioSet 生态:底层的 AudioSet 数据集仍然是音频 AI 领域最重要的基准之一
4. TFLite 支持:可以导出为 TFLite 模型,部署到 Android/iOS
局限性
- Keras 2 依赖在未来可能成为维护负担
- 对中文语音相关的分类支持有限(训练数据以英文为主)
- 960ms 的帧长对于极短声音事件可能不够
- 不支持连续音频流的实时推理(需要自行实现滑窗)
评分
| 维度 | 评分(/10) |
|---|---|
| 技术实力 | 8 |
| 实用价值 | 8.5 |
| 易用性 | 8 |
| 生态成熟度 | 9 |
| 轻量级设计 | 9.5 |
| **综合** | **8.6** |
🔗 与我们的关联
1. 音频 AI 入门:如果想做任何音频分类相关的项目,YAMNet 是最好的起点
2. 嵌入提取器:即使不做分类,YAMNet 的 1024 维嵌入也可以用于音频相似度搜索、聚类等
3. 边缘部署:如果有 IoT/树莓派项目需要音频识别(如智能门铃、环境监测),YAMNet 是理想选择
4. 教学价值:完整的特征提取流水线(STFT → 梅尔频谱 → 对数 → CNN)是学习音频 ML 的经典路径
报告由深度研究助手自动生成 | 2026-03-07