AudioCLIP
首个支持图像、文本、音频三模态对比学习的开源模型,实现声音零样本分类与跨模态语义检索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
首个支持图像、文本、音频三模态对比学习的开源模型,实现声音零样本分类与跨模态语义检索
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
试想这样一个场景:你在路上听到一段从未见过的鸟叫声,随手用手机录了下来。普通 AI 只能告诉你"这是一段音频",而 AudioCLIP 能在 0.3 秒内告诉你——这是一段非洲灰鹦鹉的叫声,它属于鹦鹉科,主要分布在西非热带雨林,叫声特征与 AudioSet 数据集中的样本相似度达 94.7%,如果你想进一步了解,相关论文是 Guzhov 等人 2021 年发表于 arXiv 的工作。
这不是魔法,而是 AudioCLIP——一个将 CLIP 的图文跨模态能力扩展到音频领域的里程碑式模型。
AudioCLIP 的诞生并非偶然。2021 年初,OpenAI 发布 CLIP(Contrastive Language-Image Pre-training)模型,在图文匹配领域掀起了一阵浪潮。CLIP 的核心思路是:将图像和文本映射到同一个向量空间,通过对比学习(Contrastive Learning)让匹配的图文在空间中距离更近、不匹配的更远。这种"语言引导的视觉理解"范式展现了惊人的零样本泛化能力。
然而,CLIP 的世界是"无声的"。它只理解图像和文本,对声音世界——人声、动物鸣叫、环境音效、机械运转声——一无所知。
与此同时,音频领域的研究者一直在探索如何借助视觉模型的强大表征能力来提升声音分类的效果。其中,Andrey Guzhov 团队在 ESResNeXt-fbsp(基于滤波组频谱图的残差网络)上的工作,为音频特征提取奠定了坚实基础。
AudioCLIP 的创新点在于:将 CLIP 的多模态对比学习框架与 ESResNeXt 音频编码器相结合,构建了一个同时支持图像、文本、音频三种模态的统一模型。研究团队来自德国凯泽斯劳滕-兰道大学(TU Kaiserslautern-Landau)和 DFKI(德国人工智能研究中心),论文发表于 arXiv:2106.13043。
AudioCLIP 的架构设计体现了典型的"模块化集成"思路,继承自 OpenAI CLIP 的核心框架,并在音频模态上做了针对性扩展。

图1:AudioCLIP 整体架构,展示了 Audio、Image、Text 三个编码器的融合方式
图像编码器(Image Encoder):沿用 CLIP 的 Vision Transformer(ViT)或 ResNet 架构,将输入图像转换为 1024 维的密集向量表示。预训练权重直接来自 OpenAI 的 CLIP 模型,继承了其在 LAION-5B 子集上学习到的丰富视觉概念。
文本编码器(Text Encoder):使用标准的 Transformer 编码器,将文本序列映射为相同维度的向量。分词器(Tokenizer)基于 BPE,最大上下文长度为 77 个 token。
音频编码器(Audio Encoder):这是 AudioCLIP 的核心创新所在,采用团队自研的 ESResNeXt-FBSP(Extended Squeeze-and-Excitation ResNeXt with Filter Bank Spectral Parameterization)网络。与传统梅尔频谱图(Mel Spectrogram)不同,ESResNeXt-FBSP 使用可学习的滤波器组参数化,将音频转换为时频表示后再进行卷积处理。这种设计的优势在于:网络能够自适应地学习最适合当前任务的频谱分解方式,而非依赖手工设计的滤波器组。
AudioCLIP 定义了三对跨模态相似度:
在训练阶段,模型同时优化这三对模态的对比损失,并引入音频特有的频谱时频损失(loss_ttf),帮助音频编码器学习更精细的声学特征。logit_scale 可学习参数控制相似度矩阵的缩放因子,使训练更加稳定。
音频前处理使用短时傅里叶变换(STFT),关键参数:
AudioCLIP 不仅仅是一个"音频分类器",它的真正威力在于跨模态语义检索。
在两个权威基准数据集上,AudioCLIP 刷新了有监督学习的 SOTA:
| 数据集 | 准确率 | 说明 |
|---|---|---|
| UrbanSound8K | 90.07% | 城市环境声音(10类,8732段) |
| ESC-50 | 97.15% | 细粒度环境声音(50类,2000段) |
相比传统方法,AudioCLIP 的优势在于:即使只有部分模态(仅音频,或音频+文本)参与推理,也能通过跨模态对齐获得高质量的分类效果。
这是 AudioCLIP 最具想象力的能力。不同于传统分类器需要预先定义类别标签,AudioCLIP 可以通过自然语言描述来定义任意分类任务:
# 示例:零样本分类
text_labels = [["dog barking"], ["car horn"], ["rain"], ["children playing"]]
text_features = acl.encode_text([text_labels])
audio_features = acl.encode_audio(audio_tensor)
similarity = audio_features @ text_features.T # 直接得到每类的相似度
在 UrbanSound8K 和 ESC-50 上,AudioCLIP 实现了 68.78% 和 69.40% 的零样本准确率——仅凭文本描述就能对未见过的声音进行分类,这对于稀有声音事件检测具有重要价值。
AudioCLIP 支持"以音搜图"、"以图搜音"、"以文搜音"等多种检索模式。例如,给定一张森林照片,系统可以找到与之语义最相关的环境音频;或者给定一段"海浪拍打礁石"的文字描述,系统可以检索出最匹配的音频片段。
AudioCLIP 的代码库组织清晰,主要包含以下模块:
| 目录/文件 | 作用 |
|---|---|
model/audioclip.py | 核心模型类 AudioCLIP,封装三模态编码和前向传播 |
model/clip/ | CLIP 框架的图像和文本编码器实现 |
model/esresnet/ | ESResNeXt-FBSP 音频编码器 |
ignite_trainer/ | 基于 PyTorch-Ignite 的训练框架(29KB Trainer类) |
protocols/ | 预置的 ESC-50 和 UrbanSound8K 数据集训练配置 |
utils/ | 数据处理、可视化等辅助工具 |
demo/AudioCLIP.ipynb | Jupyter Notebook 交互式演示 |
训练入口为 main.py,通过 --config 指定 JSON 配置文件:
python main.py --config protocols/audioclip-esc50.json --Dataset.args.root /path/to/ESC50
配置文件定义了数据集路径、模型超参数、优化器设置和评估指标。训练后模型自动保存,支持断点续训。
作者在 AudioSet(200 万段音频)上完成预训练,提供了两种权重:
| 依赖 | 版本 | 用途 |
|---|---|---|
| Python | >= 3.7 | 运行环境 |
| PyTorch | 1.7.1 | 深度学习框架 |
| torchvision | 0.8.2 | 图像预处理 |
| pytorch-ignite | 0.3.0 | 训练框架 |
| librosa | 0.7.2 | 音频处理 |
| scikit-learn | 0.22.1 | 评估指标 |
| scipy | 1.4.1 | 科学计算 |
| visdom | 0.1.8.9 | 训练可视化(可选) |
由于涉及音频频谱计算和深度网络推理,推荐使用 NVIDIA GPU。官方建议显存不低于 6GB(RTX 2070 及以上级别)。CPU 可以运行,但训练速度会非常慢。
# 1. 克隆仓库
git clone https://github.com/AndreyGuzhov/AudioCLIP.git
cd AudioCLIP
# 2. 安装依赖
pip install -r requirements.txt
# 3. 下载预训练权重(Full-Training 版本,约 400MB)
wget https://github.com/AndreyGuzhov/AudioCLIP/releases/download/v0.1/AudioCLIP-Full-Training.pt
# 4. 使用 Jupyter Notebook 体验演示
jupyter notebook demo/AudioCLIP.ipynb
需要注意的是,该仓库是纯研究代码,没有 Docker 支持、没有 Web 界面,需要手动准备数据集。对于普通用户,ESC-50 数据集可自由下载,但 UrbanSound8K 需要单独注册申请。
当前实现对输入音频长度没有明确的变长支持,主要针对短片段(1-10秒)的分类任务。对于长音频(如整首音乐或几小时的录音),需要自行实现滑动窗口切分。
requirements.txt 中 PyTorch 版本锁定为 1.7.1(2020年发布),与 2024-2026 年的最新生态存在兼容性问题。numpy 1.18.1 和 pandas 1.0.3 也已停止维护,升级后可能出现 API 变更。
CLIP 原始模型主要在英文数据上训练,AudioCLIP 继承了这一点。中文或其他语言的文本描述可能导致跨模态匹配性能下降。
训练数据来自 AudioSet,这是一个由 YouTube 视频提取音频构成的众包数据集,标注噪声较高。模型在干净录音上的表现可能优于有噪声的真实环境。
AudioCLIP 的发布在多模态学习领域具有重要的标杆意义。它证明了 CLIP 的对比学习范式可以跨出图像-文本的二元框架,自然地扩展到第三种模态。这一思路直接启发了后续工作,如微软的 CLAP(Contrastive Language-Audio Pretraining)、Google 的 AudioLM(纯音频语言模型)以及多种"音频+视觉+文本"的三模态模型。
从工程角度看,AudioCLIP 展示了如何将成熟的预训练视觉模型与领域特定的音频网络进行有效整合——冻结视觉权重、只训练音频编码器的策略降低了训练成本,同时保留了 CLIP 的丰富语义知识。
在应用层面,AudioCLIP 的零样本声音分类能力为以下场景打开了可能性:
AudioCLIP 是多模态 AI 发展历程中的一次重要探索,它将 CLIP 的图文对齐能力成功延伸到了声音领域。三模态编码器的协同设计、ESResNeXt-FBSP 的音频特征提取创新、以及在多个基准数据集上刷新的 SOTA 结果,共同构成了这个项目的核心价值。
尽管存在依赖版本老旧、缺乏便捷部署方式等不足,但对于研究者和开发者而言,AudioCLIP 提供了两个不可替代的资产:可复现的论文实现代码和可直接使用的预训练权重。如果你正在探索多模态 AI 或音频理解领域,AudioCLIP 仍是一个值得深入研究的经典之作。