【文献阅读】AST: Audio Spectrogram Transformer

news/2024/10/3 16:35:26 标签: transformer, 深度学习, 人工智能

Abstract

在过去的十年中,CNN被广泛应用作为端到端音频分类模型的主要构建块,这些模型旨在学习从音频谱图到相应标签的直接映射。为了更好地捕捉长距离的全局上下文,最近的趋势是在 CNN 之上添加自注意力机制,从而形成 CNN-注意力混合模型。然而,目前尚不清楚依赖 CNN 是否是必要的,以及仅基于注意力的神经网络是否足以在音频分类中获得良好的性能。在本文中,我们通过引入Audio Spectrogram Transformer(AST)来回答这一问题,AST 是首个不使用卷积、完全基于注意力的音频分类模型。我们在各种音频分类基准上评估 AST,结果在 AudioSet 上取得了 0.485 的 mAP、在 ESC-50 上达到 95.6% 的准确率,以及在 Speech Commands V2 上达到 98.1% 的准确率,均创下了新的最先进结果。

Introduction

在过去的十年中,CNN被广泛用于从原始谱图中学习表征,直接将音频谱图映射到相应的标签,以进行端到端建模,因为 CNN 固有的归纳偏差(例如空间局部性和平移不变性)被认为是有帮助的。为了更好地捕捉长距离的全局上下文,最近的趋势是在 CNN 之上添加自注意力机制。然而,受到纯基于注意力模型在视觉领域成功的启发,目前的问题是 CNN 是否仍然对音频分类至关重要。

为此引入Audio Spectrogram Transformer(AST),这是一个不使用卷积、完全基于注意力的模型,能够直接应用于音频谱图,并在最低层中捕捉长距离的全局上下文。此外,还提出了一种将 Vision Transformer(ViT)从在 ImageNet 上预训练的知识转移到 AST 的方法,这可以显著提高性能。

AST 的优势有三点:

  • 在多种音频分类任务和数据集(包括 AudioSet、ESC-50 和 Speech Commands)上评估 AST,结果在这些数据集上均超越了最先进的系统。
  • AST 支持变长输入,并且可以在不改变架构的情况下应用于不同任务。相比之下,基于 CNN 的模型通常需要调整架构,以获得不同任务的最佳性能。
  • 与最先进的 CNN-注意力混合模型相比,AST 具有更简单的架构和更少的参数,并且在训练过程中收敛更快。

AST 和 ViT 的架构相似,但 ViT 仅应用于固定维度的输入(图像),而 AST 可以处理变长的音频输入。此外,本文提出了一种将在 ImageNet 上预训练的 ViT 知识转移到 AST 的方法。

Audio Spectrogram Transformer

在这里插入图片描述

首先,将 t 秒的输入音频波形转换为128维的对数梅尔滤波器组(log Mel filterbank, fbank)特征,这些特征每10毫秒(1秒有100帧)使用25毫秒的Hamming窗计算一次。这样就得到一个大小为 128×100t 的谱图,作为 AST的输入。接着,将该谱图分割成N个16×16的patch,在时间和频率维度上均有6的重叠,其中N = 12d(100t − 16)/10e 是patch的数量,也是Transformer的有效输入序列长度。我们使用线性投影层将每个16×16的patch展平为大小为768的一维patch嵌入层。我们将该线性投影层称为patch嵌入层。由于Transformer架构不能捕捉输入顺序信息,而patch序列也不按时间顺序排列,因此我们为每个patch嵌入添加一个可训练的位置嵌入(同样大小为768),以使模型能够捕捉2D音频谱图的空间结构。在序列的开头添加了一个 [CLS] token。生成的序列随后输入到Transformer中。Transformer编码器具有768的嵌入维度、12层和12个头。Transformer编码器的[CLS] token输出作为音频谱图的表征。一个带有sigmoid激活函数的线性层将音频谱图表征映射到用于分类的标签。严格来说,patch嵌入层可以被视为一个大核和大步长的单个卷积层,而Transformer块中的投影层相当于1×1卷积。然而,这种设计不同于常规的CNN,其有多个层和较小的核与步长。这些Transformer模型通常被称为“无卷积模型”,以区分它们与CNN

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/caeb208883da4148926de613c5ecd3fb.png
在这里插入图片描述
在这里插入图片描述

在[11]中,作者指出,只有当用于图像分类任务的数据量超过1400万时,Transformer才开始表现优于CNN。
在这里插入图片描述

迁移学习——(适配预训练视觉Transformer(ViT)到AST)

在这里插入图片描述

Experiment

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.niftyadmin.cn/n/5688681.html

相关文章

2024年7月大众点评武汉餐饮美食店铺基础信息

在做一些城市分析、学术研究分析、商业选址、商业布局分析等数据分析挖掘时,大众点评的数据参考价值非常大,截至2024年7月,大众点评美食店铺剔除了暂停营业、停止营业后的最新数据情况分析如下。 武汉餐饮美食店铺约9.6万家,有均…

【嵌入式裸机开发】智能家居入门3(MQTT服务器、MQTT协议、微信小程序、STM32)

前面已经写了两篇博客关于智能家居的,服务器全都是使用ONENET中国移动,他最大的优点就是作为数据收发的中转站是免费的。本篇使用专门适配MQTT协议的MQTT服务器,有公用的,也可以自己搭建 前言一、项目总览二、总体流程分析1、了解…

一文了解构建工具——Maven与Gradle的区别

目录 一、Maven和Gradle是什么? 构建工具介绍 Maven介绍 Gradle介绍 二、使用时的区别: 1、新建项目 Maven: Gradle: 2、配置项目 Maven: Gradle: 3、构建项目——生成项目的jar包 Gradle&…

rabbitMq------信道管理模块

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言信道管理的字段申明/删除交换机申明/删除队列绑定/解绑消息的发布消息确认订阅队列取消订阅信道内存管理类打开信道关闭信道/获取指定信道 总结 前言 信道是在…

JavaScript Array(数组)

JavaScript Array(数组) JavaScript 中的数组是一种特殊的对象,用于存储一系列有序的值。数组是 JavaScript 中非常强大的数据结构,广泛用于各种编程任务。本文将详细介绍 JavaScript 数组的特性、用法和操作方法。 数组的创建 在 JavaScript 中,创建数组有多种方式: …

深入理解 Solidity 修饰符(Modifier):功能、应用与最佳实践

1. 什么是修饰符(Modifier)? 1.1 修饰符的定义 在 Solidity 中,修饰符(Modifier)是一种用于更改函数行为的关键字。它们可以用于控制函数的执行条件、添加前置检查、简化重复逻辑等。修饰符在函数执行之前…

滚雪球学Oracle[1.3讲]:Oracle数据库架构基础

全文目录: 前言一、SGA的深度解析1.1 SGA的作用与构成SGA的大小与调整 1.2 数据库缓冲区缓存(DB Cache)DB Cache的工作原理案例演示:调整DB Cache的大小 1.3 共享池(Shared Pool)的构成与调优共享池的组成部…

http cache-control

Cache-Control 是 HTTP 协议中用于控制缓存行为的重要头部字段。它定义了客户端和服务器端如何缓存资源,以及缓存的有效期。以下是关于 Cache-Control 的详细解释: 请求指令 max-age 指示客户端接受的响应最大年龄。如果缓存的响应超过这个年龄&#x…