Transformers documentation
Audio Spectrogram Transformer
Ce modèle a été publié dans HF papers le 2021-04-05 et ajouté à Hugging Face Transformers le 2022-11-21.
Audio Spectrogram Transformer
Aperçu
Le modèle Audio Spectrogram Transformer a été proposé dans AST: Audio Spectrogram Transformer par Yuan Gong, Yu-An Chung et James Glass. L'Audio Spectrogram Transformer applique un Vision Transformer à l'audio en convertissant l'audio en image (spectrogramme). Le modèle obtient des résultats de l'état de l'art pour la classification audio.
L'abstract de l'article est le suivant :
Sur la dernière décennie, les réseaux de neurones convolutifs (CNN) ont été largement adoptés comme bloc de construction principal des modèles de classification audio de bout en bout, qui visent à apprendre une correspondance directe entre les spectrogrammes audio et les étiquettes correspondantes. Pour mieux capturer le contexte global à longue portée, une tendance récente consiste à ajouter un mécanisme d'auto-attention au-dessus du CNN, formant ainsi un modèle hybride CNN-attention. Cependant, il n'est pas clair si la dépendance à un CNN est nécessaire, et si des réseaux de neurones purement basés sur l'attention suffisent pour obtenir de bonnes performances en classification audio. Dans cet article, nous répondons à cette question en introduisant l'Audio Spectrogram Transformer (AST), le premier modèle sans convolution, purement basé sur l'attention, pour la classification audio. Nous évaluons AST sur diverses références de classification audio, où il atteint de nouveaux résultats de l'état de l'art : 0,485 mAP sur AudioSet, 95,6 % de précision sur ESC-50 et 98,1 % de précision sur Speech Commands V2.
Audio Spectrogram Transformer architecture. Taken from the original paper. Ce modèle a été contribué par nielsr. Le code d'origine peut être trouvé ici.
Conseils d'utilisation
- Lors de l’ajustement fin de l’Audio Spectrogram Transformer (AST) sur votre propre jeu de données, il est recommandé de prendre en charge la normalisation des entrées (pour s’assurer que les entrées ont une moyenne de 0 et un écart-type de 0,5). ASTFeatureExtractor s’en charge. Notez qu’il utilise par défaut la moyenne et l’écart-type d’AudioSet. Vous pouvez consulter
ast/src/get_norm_stats.pypour voir comment les auteurs calculent les statistiques pour un jeu de données en aval. - Notez que l'AST nécessite un taux d'apprentissage faible (les auteurs utilisent un taux d'apprentissage 10 fois plus petit par rapport à leur modèle CNN proposé dans l'article PSLA) et converge rapidement, veuillez donc rechercher un taux d'apprentissage et un planificateur de taux d'apprentissage adaptés à votre tâche.
Utilisation de l'attention à produit scalaire mis à l'échelle (SDPA)
PyTorch intègre un opérateur natif d'attention par produit scalaire mis à l'échelle (SDPA) au sein de torch.nn.functional. Cette fonction
englobe plusieurs implémentations qui peuvent être appliquées en fonction des entrées et du matériel utilisé. Consultez la documentation officielle ou la page GPU Inference pour plus d'informations.
SDPA est utilisé par défaut pour torch>=2.1.1 lorsqu’une implémentation est disponible, mais vous pouvez également définir attn_implementation="sdpa" dans from_pretrained() pour demander explicitement l’utilisation de SDPA.
from transformers import ASTForAudioClassification
model = ASTForAudioClassification.from_pretrained("MIT/ast-finetuned-audioset-10-10-0.4593", attn_implementation="sdpa", device_map="auto")
...Pour obtenir les accélérations optimales, nous recommandons de charger le modèle en demi-précision (par exemple torch.float16 ou torch.bfloat16).
Sur un benchmark local (A100-40GB, PyTorch 2.3.0, OS Ubuntu 22.04) avec float32 et le modèle MIT/ast-finetuned-audioset-10-10-0.4593, nous avons observé les accélérations suivantes lors de l'inférence.
| Taille du lot | Temps d'inférence moyen (ms), mode eager | Temps d'inférence moyen (ms), modèle sdpa | Accélération, Sdpa / Eager (x) |
|---|---|---|---|
| 1 | 27 | 6 | 4.5 |
| 2 | 12 | 6 | 2 |
| 4 | 21 | 8 | 2.62 |
| 8 | 40 | 14 | 2.86 |
Ressources
Une liste de ressources officielles Hugging Face et de la communauté (indiquées par 🌎) pour vous aider à démarrer avec l'Audio Spectrogram Transformer.
- Un notebook illustrant l'inférence avec AST pour la classification audio est disponible ici.
- ASTForAudioClassification est pris en charge par ce notebook.
- Voir aussi : Classification audio.
Si vous souhaitez soumettre une ressource pour qu'elle soit incluse ici, n'hésitez pas à ouvrir une Pull Request et nous la examinerons ! La ressource devrait idéalement démontrer quelque chose de nouveau plutôt que de dupliquer une ressource existante.
ASTConfig
classe 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 )
Paramètres
- hidden_size (
int, facultatif, par défaut768) — Dimension des représentations cachées. - num_hidden_layers (
int, facultatif, par défaut12) — Nombre de couches cachées dans le décodeur Transformer. - num_attention_heads (
int, facultatif, valeur par défaut12) — Nombre de têtes d'attention pour chaque couche d'attention du décodeur Transformer. - intermediate_size (
int, facultatif, par défaut3072) — Dimension des représentations du MLP. - hidden_act (
str, facultatif, par défautgelu) — La fonction d'activation non linéaire (fonction ou chaîne de caractères) du décodeur. Par exemple,"gelu","relu","silu", etc. - hidden_dropout_prob (
Union[float, int], facultatif, par défaut0.0) — La probabilité de dropout pour toutes les couches entièrement connectées des embeddings, de l'encodeur et du pooler. - attention_probs_dropout_prob (
Union[float, int], facultatif, par défaut0.0) — Le taux de dropout appliqué aux probabilités d'attention. - initializer_range (
float, facultatif, par défaut0.02) — L'écart-type de la truncated_normal_initializer utilisé pour initialiser toutes les matrices de poids. - layer_norm_eps (
float, facultatif, valeur par défaut1e-12) — L'épsilon utilisé par les couches de normalisation de couche. - patch_size (
Union[int, list[int], tuple[int, int]], facultatif, par défaut16) — La taille (résolution) de chaque patch. - qkv_bias (
bool, facultatif, par défautTrue) — Indique s'il faut ajouter un biais aux requêtes, clés et valeurs. - frequency_stride (
int, facultatif, valeur par défaut 10) — Pas de fréquence à utiliser lors de la création de patches des spectrogrammes. - time_stride (
int, facultatif, valeur par défaut 10) — Pas temporel à utiliser lors de la découpe en patches des spectrogrammes. - max_length (
int, facultatif, par défaut 1024) — Dimension temporelle des spectrogrammes. - num_mel_bins (
int, facultatif, par défaut128) — Nombre de caractéristiques mel utilisées par trame d’entrée. Doit correspondre à la valeur utilisée dans la classeAutoFeatureExtractor.
Ceci est la classe de configuration destinée à stocker la configuration d'un modèle Audio Spectrogram Transformer. Elle est utilisée pour instancier un modèle Audio Spectrogram Transformer en fonction des arguments spécifiés, définissant ainsi l'architecture du modèle. L'instanciation d'une configuration avec les valeurs par défaut produira une configuration similaire à celle de MIT/ast-finetuned-audioset-10-10-0.4593
Les objets de configuration héritent de PreTrainedConfig et peuvent être utilisés pour contrôler les sorties du modèle. Consultez la documentation de PreTrainedConfig pour plus d’informations.
Exemple :
>>> 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
classe 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 )
Paramètres
- feature_size (
int, facultatif, valeur par défaut 1) — La dimension des caractéristiques des fonctionnalités extraites. - sampling_rate (
int, facultatif, valeur par défaut 16000) — La fréquence d'échantillonnage à laquelle les fichiers audio doivent être numérisés, exprimée en hertz (Hz). - num_mel_bins (
int, facultatif, valeur par défaut 128) — Nombre de bandes de fréquence Mel. - max_length (
int, facultatif, par défaut 1024) — Longueur maximale à laquelle rembourrer/tronquer les extraits de caractéristiques. - do_normalize (
bool, facultatif, par défautTrue) — Indique s'il faut normaliser les caractéristiques log-Mel à l'aide demeanetstd. - mean (
float, facultatif, valeur par défaut -4.2677393) — La valeur moyenne utilisée pour normaliser les caractéristiques log-Mel. Utilise par défaut la moyenne d'AudioSet. - std (
float, facultatif, valeur par défaut 4.5689974) — La valeur d'écart type utilisée pour normaliser les caractéristiques log-Mel. Utilise par défaut l'écart type d'AudioSet. - return_attention_mask (
bool, facultatif, par défautFalse) — Indique si call() doit retournerattention_mask.
Construit un extracteur de caractéristiques Audio Spectrogram Transformer (AST).
Cet extracteur de fonctionnalités hérite de SequenceFeatureExtractor, qui contient la plupart des méthodes principales. Les utilisateurs doivent se référer à cette superclasse pour plus d'informations sur ces méthodes.
Cette classe extrait les caractéristiques de la banque de filtres mel à partir de la parole brute en utilisant TorchAudio s'il est installé, ou numpy sinon, les remplit/tronque à une longueur fixe et les normalise à l'aide d'une moyenne et d'un écart-type.
__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 )
Paramètres
- raw_speech (
np.ndarray,list[float],list[np.ndarray],list[list[float]]) — La séquence ou le lot de séquences à compléter. Chaque séquence peut être un tableau numpy, une liste de valeurs flottantes, une liste de tableaux numpy ou une liste de listes de valeurs flottantes. L’audio doit être en mono, pas en stéréo, c’est-à-dire un seul flottant par pas de temps. - sampling_rate (
int, facultatif) — La fréquence d’échantillonnage à laquelle l’entréeraw_speecha été échantillonnée. Il est fortement recommandé de passersampling_ratelors de l’appel forward afin d’éviter les erreurs silencieuses. - return_tensors (
strou TensorType, facultatif) — Si défini, renvoie des tenseurs au lieu d'une liste d'entiers Python. Les valeurs acceptées sont :'pt': Renvoie des objetstorch.Tensorde PyTorch.'np': Renvoie des objets Numpynp.ndarray.
Méthode principale pour vectoriser et préparer une ou plusieurs séquences pour le modèle.
ASTModel
classe transformers.ASTModel
< source >( config: ASTConfig )
Paramètres
- config (ASTConfig) — Classe de configuration du modèle contenant tous les paramètres du modèle. L’initialisation à partir d’un fichier de configuration ne charge pas les poids associés au modèle, uniquement la configuration. Consultez la méthode from_pretrained() pour charger les poids du modèle.
Le modèle Audio Spectrogram Transformer brut, qui produit des états cachés bruts sans aucune tête spécifique au sommet.
Ce modèle hérite de PreTrainedModel. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous ses modèles (tels que le téléchargement ou l'enregistrement, le redimensionnement des embeddings d'entrée, la taille des têtes, etc.)
Ce modèle est également une sous-classe de torch.nn.Module de PyTorch. Utilisez-le comme un module PyTorch standard et consultez la documentation de PyTorch pour tout ce qui concerne l'utilisation et le comportement généraux.
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)
Paramètres
- input_values (
torch.Tensorde forme(batch_size, max_length, num_mel_bins)) — Valeurs flottantes des caractéristiques mel extraites de la forme d’onde audio brute. La forme d’onde audio brute peut être obtenue en chargeant un fichier audio.flacou.wavdans un tableau de typelist[float], unnumpy.ndarrayou untorch.Tensor, par exemple via la bibliothèque torchcodec (pip install torchcodec) ou la bibliothèque soundfile (pip install soundfile). Pour préparer le tableau eninput_features, le AutoFeatureExtractor doit être utilisé pour extraire les caractéristiques mel, effectuer le bourrage (padding) et convertir en un tenseur de typetorch.Tensor. Voir call() - attention_mask (
torch.Tensorde forme(batch_size, sequence_length), facultatif) — Masque pour éviter d'appliquer l'attention aux indices des jetons de bourrage. Les valeurs du masque sont choisies dans[0, 1]:- 1 pour les jetons qui ne sont pas masqués,
- 0 pour les jetons masqués.
Retourne
BaseModelOutputWithPooling ou tuple(torch.Tensor)
Un BaseModelOutputWithPooling ou un tuple de
torch.Tensor (si return_dict=False est passé ou lorsque config.return_dict=False) comprenant divers
éléments en fonction de la configuration (ASTConfig) et des entrées.
La méthode forward de ASTModel redéfinit la méthode spéciale __call__.
Bien que la recette de la passe avant doive être définie dans cette fonction, il faut ensuite appeler l'instance
Moduleplutôt que celle-ci, car la première gère l'exécution des étapes de prétraitement et de post-traitement, tandis que la seconde les ignore silencieusement.
last_hidden_state (
torch.Tensorde forme(batch_size, sequence_length, hidden_size)) — Séquence d'états cachés à la sortie de la dernière couche du modèle.pooler_output (
torch.Tensorde forme(batch_size, hidden_size)) — État caché de la dernière couche du premier jeton de la séquence (jeton de classification) après un traitement supplémentaire par les couches utilisées pour la tâche de pré-entraînement auxiliaire. Par exemple, pour les modèles de la famille BERT, cela renvoie le jeton de classification après traitement par une couche linéaire et une fonction d'activation tanh. Les poids de la couche linéaire sont entraînés à partir de l'objectif de prédiction de la phrase suivante (classification) pendant le pré-entraînement.hidden_states (
tuple(torch.Tensor), facultatif, renvoyé lorsqueoutput_hidden_states=Trueest passé ou lorsqueconfig.output_hidden_states=True) — Tuple detorch.Tensor(un pour la sortie des embeddings, si le modèle possède une couche d’embedding, + un pour la sortie de chaque couche) de forme(batch_size, sequence_length, hidden_size).États cachés du modèle à la sortie de chaque couche, ainsi que les sorties d'incorporation initiales facultatives.
attentions (
tuple(torch.Tensor), facultatif, renvoyé lorsqueoutput_attentions=Trueest passé ou lorsqueconfig.output_attentions=True) — Tuple detorch.Tensor(un par couche) de forme(batch_size, num_heads, sequence_length, sequence_length).Poids des attentions après le softmax d'attention, utilisés pour calculer la moyenne pondérée dans les têtes d'auto-attention.
ASTForAudioClassification
classe transformers.ASTForAudioClassification
< source >( config: ASTConfig )
Paramètres
- config (ASTConfig) — Classe de configuration du modèle contenant tous les paramètres du modèle. L’initialisation à partir d’un fichier de configuration ne charge pas les poids associés au modèle, uniquement la configuration. Consultez la méthode from_pretrained() pour charger les poids du modèle.
Modèle Audio Spectrogram Transformer avec une tête de classification audio au sommet (une couche linéaire au-dessus de la sortie agrégée), par exemple pour des jeux de données comme AudioSet, Speech Commands v2.
Ce modèle hérite de PreTrainedModel. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous ses modèles (tels que le téléchargement ou l'enregistrement, le redimensionnement des embeddings d'entrée, la taille des têtes, etc.)
Ce modèle est également une sous-classe de torch.nn.Module de PyTorch. Utilisez-le comme un module PyTorch standard et consultez la documentation de PyTorch pour tout ce qui concerne l'utilisation et le comportement généraux.
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)
Paramètres
- input_values (
torch.Tensorde forme(batch_size, max_length, num_mel_bins)) — Valeurs flottantes des caractéristiques mel extraites de la forme d’onde audio brute. La forme d’onde audio brute peut être obtenue en chargeant un fichier audio.flacou.wavdans un tableau de typelist[float], unnumpy.ndarrayou untorch.Tensor, par exemple via la bibliothèque torchcodec (pip install torchcodec) ou la bibliothèque soundfile (pip install soundfile). Pour préparer le tableau eninput_features, il faut utiliser AutoFeatureExtractor pour extraire les caractéristiques mel, effectuer le bourrage (padding) et convertir en un tenseur de typetorch.Tensor. Voir call() - labels (
torch.LongTensorde forme(batch_size,), facultatif) — Étiquettes pour le calcul de la perte de classification/régression audio. Les indices doivent être dans[0, ..., config.num_labels - 1]. Siconfig.num_labels == 1, une perte de régression est calculée (perte du carré moyen). Siconfig.num_labels > 1, une perte de classification est calculée (entropie croisée). - attention_mask (
torch.Tensorde forme(batch_size, sequence_length), facultatif) — Masque pour éviter d'appliquer l'attention aux indices des jetons de bourrage. Les valeurs du masque sont choisies dans[0, 1]:- 1 pour les jetons qui ne sont pas masqués,
- 0 pour les jetons masqués.
Retourne
SequenceClassifierOutput ou tuple(torch.Tensor)
Un SequenceClassifierOutput ou un tuple de
torch.Tensor (si return_dict=False est passé ou lorsque config.return_dict=False) comprenant divers
éléments en fonction de la configuration (ASTConfig) et des entrées.
La méthode forward de ASTForAudioClassification redéfinit la méthode spéciale __call__.
Bien que la recette de la passe avant doive être définie dans cette fonction, il faut ensuite appeler l'instance
Moduleplutôt que celle-ci, car la première gère l'exécution des étapes de prétraitement et de post-traitement, tandis que la seconde les ignore silencieusement.
loss (
torch.Tensorde forme(1,), facultatif, renvoyé lorsquelabelsest fourni) — Perte de classification (ou de régression si config.num_labels==1).logits (
torch.Tensorde forme(batch_size, config.num_labels)) — Scores de classification (ou de régression si config.num_labels==1) (avant SoftMax).hidden_states (
tuple(torch.Tensor), facultatif, renvoyé lorsqueoutput_hidden_states=Trueest passé ou lorsqueconfig.output_hidden_states=True) — Tuple detorch.Tensor(un pour la sortie des embeddings, si le modèle possède une couche d’embedding, + un pour la sortie de chaque couche) de forme(batch_size, sequence_length, hidden_size).États cachés du modèle à la sortie de chaque couche, ainsi que les sorties d'incorporation initiales facultatives.
attentions (
tuple(torch.Tensor), facultatif, renvoyé lorsqueoutput_attentions=Trueest passé ou lorsqueconfig.output_attentions=True) — Tuple detorch.Tensor(un par couche) de forme(batch_size, num_heads, sequence_length, sequence_length).Poids des attentions après le softmax d'attention, utilisés pour calculer la moyenne pondérée dans les têtes d'auto-attention.
Exemple :
>>> 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)
...