Transformers documentation

Audio Spectrogram Transformer

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Este modelo se publicó en HF papers el 2021-04-05 y se contribuyó a Hugging Face Transformers el 2022-11-21.

Audio Spectrogram Transformer

FlashAttention SDPA

Resumen

El modelo Audio Spectrogram Transformer fue propuesto en AST: Audio Spectrogram Transformer por Yuan Gong, Yu-An Chung y James Glass. El Audio Spectrogram Transformer aplica un Vision Transformer al audio, convirtiendo el audio en una imagen (espectrograma). El modelo obtiene resultados de estado del arte para la clasificación de audio.

El resumen del artículo es el siguiente:

En la última década, las redes neuronales convolucionales (CNN) se han adoptado ampliamente como el bloque de construcción principal para los modelos de clasificación de audio de extremo a extremo, que buscan aprender un mapeo directo desde los espectrogramas de audio hasta las etiquetas correspondientes. Para capturar mejor el contexto global de largo alcance, una tendencia reciente es añadir un mecanismo de autoatención sobre la CNN, formando un modelo híbrido CNN-atención. Sin embargo, no está claro si la dependencia de una CNN es necesaria y si las redes neuronales basadas puramente en la atención son suficientes para obtener un buen rendimiento en la clasificación de audio. En este artículo, respondemos a la pregunta introduciendo el Audio Spectrogram Transformer (AST), el primer modelo sin convoluciones y basado puramente en la atención para la clasificación de audio. Evaluamos AST en varios puntos de referencia de clasificación de audio, donde logra nuevos resultados de estado del arte de 0,485 mAP en AudioSet, 95,6 % de precisión en ESC-50 y 98,1 % de precisión en Speech Commands V2.

drawing Audio Spectrogram Transformer architecture. Taken from the original paper.

Este modelo fue aportado por nielsr. El código original se puede encontrar aquí.

Consejos de uso

  • Al realizar el ajuste fino del Audio Spectrogram Transformer (AST) en tu propio conjunto de datos, se recomienda cuidar la normalización de la entrada (para asegurarse de que la entrada tenga una media de 0 y una desviación estándar de 0.5). ASTFeatureExtractor se encarga de esto. Ten en cuenta que utiliza la media y la desviación estándar de AudioSet de forma predeterminada. Puedes consultar ast/src/get_norm_stats.py para ver cómo los autores calculan las estadísticas para un conjunto de datos de nivel inferior.
  • Tenga en cuenta que el AST requiere una tasa de aprendizaje baja (los autores utilizan una tasa de aprendizaje 10 veces menor en comparación con su modelo CNN propuesto en el artículo PSLA) y converge rápidamente, por lo que busque una tasa de aprendizaje y un programador de tasa de aprendizaje adecuados para su tarea.

Uso de la atención de producto escalar de puntos (SDPA)

PyTorch incluye un operador nativo de atención de producto escalar (SDPA) como parte de torch.nn.functional. Esta función abarca varias implementaciones que pueden aplicarse según las entradas y el hardware en uso. Consulte la documentación oficial o la página de GPU Inference para obtener más información.

SDPA se utiliza de forma predeterminada para torch>=2.1.1 cuando hay una implementación disponible, pero también puede establecer attn_implementation="sdpa" en from_pretrained() para solicitar explícitamente el uso de SDPA.

from transformers import ASTForAudioClassification


model = ASTForAudioClassification.from_pretrained("MIT/ast-finetuned-audioset-10-10-0.4593", attn_implementation="sdpa", device_map="auto")
...

Para obtener las mejores mejoras de velocidad, recomendamos cargar el modelo en media precisión (por ejemplo, torch.float16 o torch.bfloat16).

En un benchmark local (A100-40GB, PyTorch 2.3.0, SO Ubuntu 22.04) con float32 y el modelo MIT/ast-finetuned-audioset-10-10-0.4593, observamos las siguientes aceleraciones durante la inferencia.

Tamaño del loteTiempo medio de inferencia (ms), modo eagerTiempo medio de inferencia (ms), modelo sdpaAcelerar, Sdpa / Eager (x)
12764.5
21262
42182.62
840142.86

Recursos

Una lista de recursos oficiales de Hugging Face y de la comunidad (indicados por 🌎) para ayudarte a empezar con el Audio Spectrogram Transformer.

Audio Classification

Si te interesa enviar un recurso para que se incluya aquí, no dudes en abrir una Pull Request y lo revisaremos. Lo ideal es que el recurso demuestre algo nuevo en lugar de duplicar un recurso existente.

ASTConfig

clase transformers.ASTConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12intermediate_size: int = 3072hidden_act: str = 'gelu'hidden_dropout_prob: float | int = 0.0attention_probs_dropout_prob: float | int = 0.0initializer_range: float = 0.02layer_norm_eps: float = 1e-12patch_size: int | list[int] | tuple[int, int] = 16qkv_bias: bool = Truefrequency_stride: int = 10time_stride: int = 10max_length: int = 1024num_mel_bins: int = 128 )

Parámetros

  • hidden_size (int, opcional, valor predeterminado 768) — Dimensión de las representaciones ocultas.
  • num_hidden_layers (int, opcional, valor predeterminado 12) — Número de capas ocultas en el decodificador del Transformer.
  • num_attention_heads (int, opcional, valor predeterminado 12) — Número de cabezas de atención para cada capa de atención en el decodificador Transformer.
  • intermediate_size (int, opcional, valor predeterminado 3072) — Dimensión de las representaciones del MLP.
  • hidden_act (str, opcional, valor predeterminado gelu) — La función de activación no lineal (función o cadena) en el decodificador. Por ejemplo, "gelu", "relu", "silu", etc.
  • hidden_dropout_prob (Union[float, int], opcional, valor predeterminado 0.0) — La probabilidad de dropout para todas las capas totalmente conectadas en las incrustaciones, el codificador y el pooler.
  • attention_probs_dropout_prob (Union[float, int], opcional, valor predeterminado 0.0) — La proporción de dropout para las probabilidades de atención.
  • initializer_range (float, opcional, valor predeterminado 0.02) — La desviación estándar del truncated_normal_initializer para inicializar todas las matrices de pesos.
  • layer_norm_eps (float, opcional, valor predeterminado 1e-12) — El epsilon utilizado por las capas de normalización de capa.
  • patch_size (Union[int, list[int], tuple[int, int]], opcional, valor predeterminado 16) — El tamaño (resolución) de cada parche.
  • qkv_bias (bool, opcional, valor predeterminado True) — Si se debe añadir un sesgo a las consultas, claves y valores.
  • frequency_stride (int, opcional, valor predeterminado 10) — Paso de frecuencia a utilizar al aplicar patchification a los espectrogramas.
  • time_stride (int, opcional, valor predeterminado 10) — Paso temporal a utilizar al aplicar patchification a los espectrogramas.
  • max_length (int, opcional, valor predeterminado 1024) — Dimensión temporal de los espectrogramas.
  • num_mel_bins (int, opcional, valor predeterminado 128) — Número de características mel utilizadas por cada cuadro de entrada. Debe corresponder al valor utilizado en la clase AutoFeatureExtractor.

Esta es la clase de configuración para almacenar la configuración de un modelo Audio Spectrogram Transformer. Se utiliza para instanciar un modelo Audio Spectrogram Transformer según los argumentos especificados, definiendo la arquitectura del modelo. Instanciar una configuración con los valores predeterminados producirá una configuración similar a la de MIT/ast-finetuned-audioset-10-10-0.4593

Los objetos de configuración heredan de PreTrainedConfig y se pueden usar para controlar las salidas del modelo. Lea la documentación de PreTrainedConfig para obtener más información.

Ejemplo:

>>> from transformers import ASTConfig, ASTModel

>>> # Initializing a AST MIT/ast-finetuned-audioset-10-10-0.4593 style configuration
>>> configuration = ASTConfig()

>>> # Initializing a model (with random weights) from the MIT/ast-finetuned-audioset-10-10-0.4593 style configuration
>>> model = ASTModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

ASTFeatureExtractor

clase transformers.ASTFeatureExtractor

< >

( feature_size = 1sampling_rate = 16000num_mel_bins = 128max_length = 1024padding_value = 0.0do_normalize = Truemean = -4.2677393std = 4.5689974return_attention_mask = False**kwargs )

Parámetros

  • feature_size (int, opcional, valor predeterminado 1) — La dimensión de las características de las características extraídas.
  • sampling_rate (int, opcional, valor predeterminado 16000) — La tasa de muestreo a la que deben digitalizarse los archivos de audio, expresada en hercios (Hz).
  • num_mel_bins (int, opcional, valor predeterminado 128) — Número de bins de frecuencia Mel.
  • max_length (int, opcional, valor predeterminado 1024) — Longitud máxima a la que se rellenan/truncan las características extraídas.
  • do_normalize (bool, opcional, valor predeterminado True) — Indica si se deben normalizar las características log-Mel utilizando mean y std.
  • mean (float, opcional, valor predeterminado: -4.2677393) — El valor medio utilizado para normalizar las características log-Mel. Utiliza la media de AudioSet de forma predeterminada.
  • std (float, opcional, valor predeterminado 4.5689974) — El valor de la desviación estándar utilizado para normalizar las características log-Mel. Utiliza la desviación estándar de AudioSet de forma predeterminada.
  • return_attention_mask (bool, opcional, valor predeterminado False) — Indica si call() debe devolver attention_mask.

Construye un extractor de características Audio Spectrogram Transformer (AST).

Este extractor de características hereda de SequenceFeatureExtractor, que contiene la mayoría de los métodos principales. Los usuarios deben consultar esta superclase para obtener más información sobre dichos métodos.

Esta clase extrae características de banco de filtros mel de audio bruto usando TorchAudio si está instalado o usando numpy en caso contrario, las rellena/trunca hasta una longitud fija y las normaliza usando una media y una desviación estándar.

__call__

< >

( raw_speech: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]]sampling_rate: int | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = None**kwargs )

Parámetros

  • raw_speech (np.ndarray, list[float], list[np.ndarray], list[list[float]]) — La secuencia o lote de secuencias que se van a rellenar. Cada secuencia puede ser un array de numpy, una lista de valores float, una lista de arrays de numpy o una lista de listas de valores float. Debe ser audio de canal mono, no estéreo, es decir, un solo float por paso de tiempo.
  • sampling_rate (int, opcional) — La tasa de muestreo a la que se muestreó la entrada raw_speech. Se recomienda encarecidamente pasar sampling_rate en la llamada forward para evitar errores silenciosos.
  • return_tensors (str o TensorType, opcional) — Si se establece, devolverá tensores en lugar de una lista de enteros de Python. Los valores aceptables son:
    • 'pt': Devuelve objetos torch.Tensor de PyTorch.
    • 'np': Devuelve objetos Numpy np.ndarray.

Método principal para extraer características y preparar una o varias secuencias para el modelo.

ASTModel

clase transformers.ASTModel

< >

( config: ASTConfig )

Parámetros

  • config (ASTConfig) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.

El modelo Audio Spectrogram Transformer básico que genera estados ocultos sin ningún cabezal específico en la parte superior.

Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).

Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.

forward

< >

( input_values: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)

Parámetros

  • input_values (torch.Tensor de forma (batch_size, max_length, num_mel_bins)) — Valores flotantes de características mel extraídas de la forma de onda de audio cruda. La forma de onda de audio cruda se puede obtener cargando un archivo de audio .flac o .wav en un array de tipo list[float], un numpy.ndarray o un torch.Tensor, por ejemplo, mediante la biblioteca torchcodec (pip install torchcodec) o la biblioteca soundfile (pip install soundfile). Para preparar el array como input_features, se debe utilizar AutoFeatureExtractor para extraer las características mel, aplicar relleno y convertirlo en un tensor de tipo torch.Tensor. Vea call()
  • attention_mask (torch.Tensor de forma (batch_size, sequence_length), opcional) — Máscara para evitar realizar atención en los índices de tokens de relleno. Valores de máscara seleccionados en [0, 1]:
    • 1 para los tokens que no están enmascarados,
    • 0 para los tokens que están enmascarados.

    ¿Qué son las máscaras de atención?

Devuelve

BaseModelOutputWithPooling o tuple(torch.Tensor)

Un BaseModelOutputWithPooling o una tupla de torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios elementos según la configuración (ASTConfig) y las entradas.

El método forward de ASTModel sobrescribe el método especial __call__.

Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de Module después en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.

  • last_hidden_state (torch.Tensor de forma (batch_size, sequence_length, hidden_size)) — Secuencia de estados ocultos en la salida de la última capa del modelo.

  • pooler_output (torch.Tensor de forma (batch_size, hidden_size)) — Estado oculto de la última capa del primer token de la secuencia (token de clasificación) después de un procesamiento adicional a través de las capas utilizadas para la tarea de preentrenamiento auxiliar. Por ejemplo, para la familia de modelos BERT, esto devuelve el token de clasificación después de procesarlo a través de una capa lineal y una función de activación tanh. Los pesos de la capa lineal se entrenan a partir del objetivo de predicción de la siguiente oración (clasificación) durante el preentrenamiento.

  • hidden_states (tuple(torch.Tensor), opcional, devuelto cuando se pasa output_hidden_states=True o cuando config.output_hidden_states=True) — Tupla de torch.Tensor (una para la salida de las incrustaciones, si el modelo tiene una capa de incrustaciones, + una para la salida de cada capa) de forma (batch_size, sequence_length, hidden_size).

    Estados ocultos del modelo en la salida de cada capa más las salidas opcionales de la incrustación inicial.

  • attentions (tuple(torch.Tensor), opcional, se devuelve cuando se pasa output_attentions=True o cuando config.output_attentions=True) — Tupla de torch.Tensor (una por cada capa) de forma (batch_size, num_heads, sequence_length, sequence_length).

    Pesos de atención tras el softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.

ASTForAudioClassification

clase transformers.ASTForAudioClassification

< >

( config: ASTConfig )

Parámetros

  • config (ASTConfig) — Clase de configuración del modelo con todos los parámetros del modelo. Inicializar con un archivo de configuración no carga los pesos asociados con el modelo, solo la configuración. Consulte el método from_pretrained() para cargar los pesos del modelo.

Modelo Audio Spectrogram Transformer con una cabeza de clasificación de audio en la parte superior (una capa lineal sobre la salida agrupada), por ejemplo, para conjuntos de datos como AudioSet, Speech Commands v2.

Este modelo hereda de PreTrainedModel. Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos sus modelos (como la descarga o el guardado, el redimensionamiento de las incrustaciones de entrada, la poda de cabezas, etc.).

Este modelo también es una subclase de torch.nn.Module de PyTorch. Úsalo como un módulo de PyTorch regular y consulta la documentación de PyTorch para todo lo relacionado con el uso y el comportamiento generales.

forward

< >

( input_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → SequenceClassifierOutput or tuple(torch.Tensor)

Parámetros

  • input_values (torch.Tensor de forma (batch_size, max_length, num_mel_bins)) — Valores flotantes de características mel extraídas de la forma de onda de audio cruda. La forma de onda de audio cruda se puede obtener cargando un archivo de audio .flac o .wav en un array de tipo list[float], un numpy.ndarray o un torch.Tensor, por ejemplo, mediante la biblioteca torchcodec (pip install torchcodec) o la biblioteca soundfile (pip install soundfile). Para preparar el array como input_features, se debe utilizar AutoFeatureExtractor para extraer las características mel, aplicar relleno y convertirlo en un tensor de tipo torch.Tensor. Vea call()
  • labels (torch.LongTensor de forma (batch_size,), opcional) — Etiquetas para calcular la pérdida de clasificación/regresión de audio. Los índices deben estar en [0, ..., config.num_labels - 1]. Si config.num_labels == 1 se calcula una pérdida de regresión (pérdida de error cuadrático medio), si config.num_labels > 1 se calcula una pérdida de clasificación (entropía cruzada).
  • attention_mask (torch.Tensor de forma (batch_size, sequence_length), opcional) — Máscara para evitar realizar atención en los índices de tokens de relleno. Valores de máscara seleccionados en [0, 1]:
    • 1 para los tokens que no están enmascarados,
    • 0 para los tokens que están enmascarados.

    ¿Qué son las máscaras de atención?

Devuelve

SequenceClassifierOutput o tuple(torch.Tensor)

Un SequenceClassifierOutput o una tupla de torch.Tensor (si se pasa return_dict=False o cuando config.return_dict=False) que comprende varios elementos según la configuración (ASTConfig) y las entradas.

El método forward de ASTForAudioClassification sobrescribe el método especial __call__.

Aunque la receta para la pasada hacia adelante debe definirse dentro de esta función, se debe llamar a la instancia de Module después en lugar de a esta, ya que la primera se encarga de ejecutar los pasos de pre y postprocesamiento, mientras que la segunda los ignora silenciosamente.

  • loss (torch.Tensor de forma (1,), opcional, se devuelve cuando se proporciona labels) — Pérdida de clasificación (o de regresión si config.num_labels==1).

  • logits (torch.Tensor de forma (batch_size, config.num_labels)) — Puntuaciones de clasificación (o de regresión si config.num_labels==1) (antes de SoftMax).

  • hidden_states (tuple(torch.Tensor), opcional, devuelto cuando se pasa output_hidden_states=True o cuando config.output_hidden_states=True) — Tupla de torch.Tensor (una para la salida de las incrustaciones, si el modelo tiene una capa de incrustaciones, + una para la salida de cada capa) de forma (batch_size, sequence_length, hidden_size).

    Estados ocultos del modelo en la salida de cada capa más las salidas opcionales de la incrustación inicial.

  • attentions (tuple(torch.Tensor), opcional, se devuelve cuando se pasa output_attentions=True o cuando config.output_attentions=True) — Tupla de torch.Tensor (una por cada capa) de forma (batch_size, num_heads, sequence_length, sequence_length).

    Pesos de atención tras el softmax de atención, utilizados para calcular la media ponderada en las cabezas de autoatención.

Ejemplo:

>>> from transformers import AutoFeatureExtractor, ASTForAudioClassification
>>> from datasets import load_dataset
>>> import torch

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate

>>> feature_extractor = AutoFeatureExtractor.from_pretrained("MIT/ast-finetuned-audioset-10-10-0.4593")
>>> model = ASTForAudioClassification.from_pretrained("MIT/ast-finetuned-audioset-10-10-0.4593")

>>> # audio file is decoded on the fly
>>> inputs = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> predicted_class_ids = torch.argmax(logits, dim=-1).item()
>>> predicted_label = model.config.id2label[predicted_class_ids]
>>> predicted_label
...

>>> # compute loss - target_label is e.g. "down"
>>> target_label = model.config.id2label[0]
>>> inputs["labels"] = torch.tensor([model.config.label2id[target_label]])
>>> loss = model(**inputs).loss
>>> round(loss.item(), 2)
...
Update on GitHub