Transformers documentation
Audio Spectrogram Transformer
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
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.
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.pypara 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 lote | Tiempo medio de inferencia (ms), modo eager | Tiempo medio de inferencia (ms), modelo sdpa | Acelerar, Sdpa / Eager (x) |
|---|---|---|---|
| 1 | 27 | 6 | 4.5 |
| 2 | 12 | 6 | 2 |
| 4 | 21 | 8 | 2.62 |
| 8 | 40 | 14 | 2.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.
- Puede encontrar un cuaderno que ilustra la inferencia con AST para la clasificación de audio aquí.
- ASTForAudioClassification es compatible con este cuaderno.
- Véase también: Clasificación de audio.
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
< source >( 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 predeterminado768) — Dimensión de las representaciones ocultas. - num_hidden_layers (
int, opcional, valor predeterminado12) — Número de capas ocultas en el decodificador del Transformer. - num_attention_heads (
int, opcional, valor predeterminado12) — Número de cabezas de atención para cada capa de atención en el decodificador Transformer. - intermediate_size (
int, opcional, valor predeterminado3072) — Dimensión de las representaciones del MLP. - hidden_act (
str, opcional, valor predeterminadogelu) — 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 predeterminado0.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 predeterminado0.0) — La proporción de dropout para las probabilidades de atención. - initializer_range (
float, opcional, valor predeterminado0.02) — La desviación estándar del truncated_normal_initializer para inicializar todas las matrices de pesos. - layer_norm_eps (
float, opcional, valor predeterminado1e-12) — El epsilon utilizado por las capas de normalización de capa. - patch_size (
Union[int, list[int], tuple[int, int]], opcional, valor predeterminado16) — El tamaño (resolución) de cada parche. - qkv_bias (
bool, opcional, valor predeterminadoTrue) — 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 predeterminado128) — Número de características mel utilizadas por cada cuadro de entrada. Debe corresponder al valor utilizado en la claseAutoFeatureExtractor.
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.configASTFeatureExtractor
clase transformers.ASTFeatureExtractor
< source >( 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 predeterminadoTrue) — Indica si se deben normalizar las características log-Mel utilizandomeanystd. - 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 predeterminadoFalse) — Indica si call() debe devolverattention_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__
< source >( 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 entradaraw_speech. Se recomienda encarecidamente pasarsampling_rateen la llamada forward para evitar errores silenciosos. - return_tensors (
stro TensorType, opcional) — Si se establece, devolverá tensores en lugar de una lista de enteros de Python. Los valores aceptables son:'pt': Devuelve objetostorch.Tensorde PyTorch.'np': Devuelve objetos Numpynp.ndarray.
Método principal para extraer características y preparar una o varias secuencias para el modelo.
ASTModel
clase transformers.ASTModel
< source >( 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
< source >( 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.Tensorde 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.flaco.waven un array de tipolist[float], unnumpy.ndarrayo untorch.Tensor, por ejemplo, mediante la biblioteca torchcodec (pip install torchcodec) o la biblioteca soundfile (pip install soundfile). Para preparar el array comoinput_features, se debe utilizar AutoFeatureExtractor para extraer las características mel, aplicar relleno y convertirlo en un tensor de tipotorch.Tensor. Vea call() - attention_mask (
torch.Tensorde 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.
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
Moduledespué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.Tensorde forma(batch_size, sequence_length, hidden_size)) — Secuencia de estados ocultos en la salida de la última capa del modelo.pooler_output (
torch.Tensorde 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 pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.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 pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.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
< source >( 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
< source >( 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.Tensorde 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.flaco.waven un array de tipolist[float], unnumpy.ndarrayo untorch.Tensor, por ejemplo, mediante la biblioteca torchcodec (pip install torchcodec) o la biblioteca soundfile (pip install soundfile). Para preparar el array comoinput_features, se debe utilizar AutoFeatureExtractor para extraer las características mel, aplicar relleno y convertirlo en un tensor de tipotorch.Tensor. Vea call() - labels (
torch.LongTensorde 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]. Siconfig.num_labels == 1se calcula una pérdida de regresión (pérdida de error cuadrático medio), siconfig.num_labels > 1se calcula una pérdida de clasificación (entropía cruzada). - attention_mask (
torch.Tensorde 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.
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
Moduledespué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.Tensorde forma(1,), opcional, se devuelve cuando se proporcionalabels) — Pérdida de clasificación (o de regresión si config.num_labels==1).logits (
torch.Tensorde 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 pasaoutput_hidden_states=Trueo cuandoconfig.output_hidden_states=True) — Tupla detorch.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 pasaoutput_attentions=Trueo cuandoconfig.output_attentions=True) — Tupla detorch.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)
...