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.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Эта модель была опубликована в HF papers 05.04.2021 и добавлена в Hugging Face Transformers 21.11.2022.

Audio Spectrogram Transformer

FlashAttention SDPA

Обзор

Модель Audio Spectrogram Transformer была предложена в работе AST: Audio Spectrogram Transformer авторами Yuan Gong, Yu-An Chung, James Glass. Модель Audio Spectrogram Transformer применяет Vision Transformer к аудио, преобразуя звук в изображение (спектрограмму). Модель демонстрирует наилучшие результаты для классификации аудио.

Аннотация из статьи следующая:

За последнее десятилетие свёрточные нейронные сети (CNN) получили широкое распространение в качестве основного строительного блока для моделей классификации аудио, обученных end-to-end, которые стремятся выучить прямое отображение из спектрограмм аудио на соответствующие метки. Чтобы лучше улавливать глобальный контекст на больших расстояниях, в последнее время стало модным добавлять механизм self-attention поверх CNN, формируя гибридную модель CNN-attention. Однако неясно, является ли опора на CNN необходимой и достаточно ли нейронных сетей, основанных исключительно на attention, для достижения хороших результатов в классификации аудио. В данной статье мы отвечаем на этот вопрос, представляя Audio Spectrogram Transformer (AST) — первую модель для классификации аудио, не содержащую свёрток и основанную исключительно на attention. Мы оцениваем AST на различных бенчмарках классификации аудио, где он достигает новых рекордных результатов: 0.485 mAP на AudioSet, 95.6% точности на ESC-50 и 98.1% точности на Speech Commands V2.

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

Эта модель была предоставлена пользователем nielsr. Исходный код можно найти здесь.

Советы по использованию

  • При дообучении Audio Spectrogram Transformer (AST) на собственном наборе данных рекомендуется позаботиться о нормализации входных данных (чтобы среднее значение входных данных было равно 0, а стандартное отклонение — 0.5). ASTFeatureExtractor выполняет эту нормализацию. Обратите внимание, что по умолчанию используются среднее и стандартное отклонение из AudioSet. Вы можете посмотреть ast/src/get_norm_stats.py, чтобы узнать, как авторы вычисляют статистику для целевого набора данных.
  • Обратите внимание, что для AST требуется низкая скорость обучения (авторы используют скорость обучения в 10 раз меньшую по сравнению с их моделью CNN, предложенной в статье PSLA), и модель сходится быстро, поэтому подберите подходящую скорость обучения и планировщик скорости обучения для вашей задачи.

Использование масштабированного внимания на основе скалярного произведения (SDPA)

PyTorch включает в себя нативный оператор масштабированного внимания по скалярному произведению (SDPA) в составе torch.nn.functional. Эта функция объединяет несколько реализаций, выбор которых зависит от входных данных и используемого оборудования. Подробнее см. в официальной документации или на странице GPU Inference.

SDPA используется по умолчанию для torch>=2.1.1, когда доступна соответствующая реализация, но вы также можете установить attn_implementation="sdpa" в from_pretrained(), чтобы явно запросить использование SDPA.

from transformers import ASTForAudioClassification


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

Для достижения максимального ускорения мы рекомендуем загружать модель в половинной точности (например, torch.float16 или torch.bfloat16).

На локальном бенчмарке (A100-40GB, PyTorch 2.3.0, ОС Ubuntu 22.04) с float32 и моделью MIT/ast-finetuned-audioset-10-10-0.4593 мы наблюдали следующие ускорения при инференсе.

Размер пакетаСреднее время вывода (мс), режим eagerСреднее время инференса (мс), модель sdpaУскорение, Sdpa / Eager (x)
12764.5
21262
42182.62
840142.86

Ресурсы

Список официальных ресурсов Hugging Face и сообщества (отмечены значком 🌎), которые помогут вам начать работу с Audio Spectrogram Transformer.

Audio Classification

Если вы хотите предложить ресурс для включения в этот раздел, пожалуйста, создайте Pull Request, и мы его рассмотрим! В идеале ресурс должен демонстрировать что-то новое, а не дублировать уже имеющийся.

ASTConfig

класс 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 )

Параметры

  • hidden_size (int, необязательный, по умолчанию 768) — Размерность скрытых представлений.
  • num_hidden_layers (int, необязательный, по умолчанию 12) — Количество скрытых слоев в декодере Transformer.
  • num_attention_heads (int, необязательный, по умолчанию 12) — Количество головок внимания в каждом слое внимания декодера Transformer.
  • intermediate_size (int, необязательный, по умолчанию 3072) — Размерность представлений MLP.
  • hidden_act (str, необязательный, по умолчанию gelu) — Нелинейная функция активации (функция или строка) в декодере. Например, "gelu", "relu", "silu" и т. д.
  • hidden_dropout_prob (Union[float, int], необязательный, по умолчанию 0.0) — Вероятность dropout для всех полносвязных слоёв в блоках эмбеддингов, энкодера и пуллера.
  • attention_probs_dropout_prob (Union[float, int], необязательный, по умолчанию 0.0) — Коэффициент dropout для вероятностей внимания.
  • initializer_range (float, необязательный, по умолчанию 0.02) — Стандартное отклонение truncated_normal_initializer, используемое для инициализации всех матриц весов.
  • layer_norm_eps (float, необязательный, по умолчанию 1e-12) — Значение epsilon, используемое слоями нормализации.
  • patch_size (Union[int, list[int], tuple[int, int]], необязательный, по умолчанию 16) — Размер (разрешение) каждого патча.
  • qkv_bias (bool, необязательный, по умолчанию True) — Добавлять ли смещение к запросам, ключам и значениям.
  • frequency_stride (int, необязательный, по умолчанию 10) — Шаг по частоте, используемый при преобразовании спектрограмм в патчи.
  • time_stride (int, необязательный, по умолчанию 10) — Шаг по времени, используемый при разбиении спектрограмм на патчи.
  • max_length (int, необязательный, по умолчанию 1024) — Временное измерение спектрограмм.
  • num_mel_bins (int, необязательный, по умолчанию 128) — Количество mel-признаков, используемых на входной кадр. Должно соответствовать значению, используемому в классе AutoFeatureExtractor.

Это класс конфигурации для хранения настроек модели Audio Spectrogram Transformer. Он используется для создания модели Audio Spectrogram Transformer в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации MIT/ast-finetuned-audioset-10-10-0.4593

Объекты конфигурации наследуются от PreTrainedConfig и могут использоваться для управления выводами модели. Подробнее читайте в документации PreTrainedConfig.

Пример:

>>> 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

класс 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 )

Параметры

  • feature_size (int, необязательный, по умолчанию 1) — Размерность признаков извлечённых признаков.
  • sampling_rate (int, необязательный, по умолчанию 16000) — Частота дискретизации, с которой аудиофайлы должны быть оцифрованы, выраженная в герцах (Гц).
  • num_mel_bins (int, необязательный, по умолчанию 128) — Количество Mel-частотных бинов.
  • max_length (int, необязательный, по умолчанию 1024) — Максимальная длина, до которой выполняется выравнивание/обрезка извлечённых признаков.
  • do_normalize (bool, необязательный, по умолчанию True) — Определяет, следует ли нормализовать log-Mel-признаки с помощью mean и std.
  • mean (float, необязательный, по умолчанию -4.2677393) — Среднее значение, используемое для нормализации лог-Мель-фич. По умолчанию используется среднее значение AudioSet.
  • std (float, необязательный, по умолчанию 4.5689974) — Значение стандартного отклонения, используемое для нормализации лог-Мель-фич. По умолчанию используется стандартное отклонение AudioSet.
  • return_attention_mask (bool, необязательный, по умолчанию False) — Указывает, должен ли call() возвращать attention_mask.

Создаёт экстрактор признаков Audio Spectrogram Transformer (AST).

Этот экстрактор признаков наследуется от SequenceFeatureExtractor, который содержит большинство основных методов. За дополнительной информацией о них следует обращаться к этому суперклассу.

Этот класс извлекает характеристики mel-фильтрового банка из сырых речевых данных с использованием TorchAudio, если он установлен, или numpy в противном случае, дополняет/обрезает их до фиксированной длины и нормализует с помощью среднего значения и стандартного отклонения.

__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 )

Параметры

  • raw_speech (np.ndarray, list[float], list[np.ndarray], list[list[float]]) — Последовательность или батч последовательностей, для которых требуется выравнивание. Каждая последовательность может быть массивом numpy, списком значений float, списком массивов numpy или списком списков значений float. Аудио должно быть моноканальным, а не стерео, то есть одно значение float на каждый момент времени.
  • sampling_rate (int, необязательный) — Частота дискретизации, с которой была оцифрована входная raw_speech. Настоятельно рекомендуется передавать sampling_rate при вызове forward, чтобы избежать скрытых ошибок.
  • return_tensors (str или TensorType, необязательный) — Если задано, возвращает тензоры вместо списка целых чисел Python. Допустимые значения:
    • 'pt': возвращает объекты torch.Tensor PyTorch.
    • 'np': возвращает объекты Numpy np.ndarray.

Основной метод для создания признаков и подготовки одной или нескольких последовательностей для модели.

ASTModel

класс transformers.ASTModel

< >

( config: ASTConfig )

Параметры

  • config (ASTConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().

Модель Audio Spectrogram Transformer, выводящая необработанные скрытые состояния без какого-либо специализированного слоя на выходе.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

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)

Параметры

  • input_values (torch.Tensor формы (batch_size, max_length, num_mel_bins)) — Значения типа float, представляющие мел-фичи, извлечённые из исходной аудиоволны. Исходную аудиоволну можно получить, загрузив аудиофайл .flac или .wav в массив типа list[float], numpy.ndarray или torch.Tensor, например, с помощью библиотеки torchcodec (pip install torchcodec) или библиотеки soundfile (pip install soundfile). Для подготовки массива в input_features следует использовать AutoFeatureExtractor для извлечения мел-фич, дополнения (padding) и преобразования в тензор типа torch.Tensor. См. call()
  • attention_mask (torch.Tensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

Возвращает

BaseModelOutputWithPooling или tuple(torch.Tensor)

Объект BaseModelOutputWithPooling или кортеж torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (ASTConfig) и входных данных.

Метод forward класса ASTModel переопределяет специальный метод __call__.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.

  • last_hidden_state (torch.Tensor формы (batch_size, sequence_length, hidden_size)) — Последовательность скрытых состояний на выходе последнего слоя модели.

  • pooler_output (torch.Tensor формы (batch_size, hidden_size)) — Скрытое состояние последнего слоя для первого токена последовательности (токен классификации) после дополнительной обработки слоями, используемыми для вспомогательной задачи предварительного обучения. Например, для моделей семейства BERT это возвращает токен классификации после обработки линейным слоем и функцией активации tanh. Веса линейного слоя обучаются по задаче предсказания следующего предложения (классификации) во время предварительного обучения.

  • hidden_states (tuple(torch.Tensor), optional, возвращается, если передано output_hidden_states=True или если config.output_hidden_states=True) — кортеж из torch.Tensor (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы (batch_size, sequence_length, hidden_size).

    Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.

  • attentions (tuple(torch.Tensor), необязательный, возвращается при передаче output_attentions=True или при config.output_attentions=True) — Кортеж torch.Tensor (по одному на каждый слой) формы (batch_size, num_heads, sequence_length, sequence_length).

    Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

ASTForAudioClassification

класс transformers.ASTForAudioClassification

< >

( config: ASTConfig )

Параметры

  • config (ASTConfig) — Класс конфигурации модели, содержащий все параметры модели. Инициализация с помощью файла конфигурации не загружает веса, связанные с моделью, а только конфигурацию. Чтобы загрузить веса модели, используйте метод from_pretrained().

Модель Audio Spectrogram Transformer с головкой для классификации аудио (линейный слой поверх агрегированного вывода), например, для таких наборов данных, как AudioSet и Speech Commands v2.

Эта модель наследуется от PreTrainedModel. См. документацию родительского класса для общих методов, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка голов и т. д.)

Эта модель также является подклассом torch.nn.Module в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

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)

Параметры

  • input_values (torch.Tensor формы (batch_size, max_length, num_mel_bins)) — Значения типа float, представляющие мел-фичи, извлечённые из исходной аудиоволны. Исходную аудиоволну можно получить, загрузив аудиофайл .flac или .wav в массив типа list[float], numpy.ndarray или torch.Tensor, например, с помощью библиотеки torchcodec (pip install torchcodec) или библиотеки soundfile (pip install soundfile). Чтобы подготовить массив в input_features, следует использовать AutoFeatureExtractor для извлечения мел-фич, дополнения (padding) и преобразования в тензор типа torch.Tensor. См. call()
  • labels (torch.LongTensor формы (batch_size,), необязательный) — Метки для вычисления функции потерь классификации/регрессии аудио. Индексы должны находиться в диапазоне [0, ..., config.num_labels - 1]. Если config.num_labels == 1, вычисляется функция потерь регрессии (среднеквадратичная ошибка), если config.num_labels > 1 — функция потерь классификации (кросс-энтропия).
  • attention_mask (torch.Tensor формы (batch_size, sequence_length), , необязательный) — Маска для исключения токенов-заполнителей из внимания. Значения маски из диапазона [0, 1]:
    • 1 для токенов, которые не замаскированы,
    • 0 для токенов, которые замаскированы.

    Что такое маски внимания?

Возвращает

SequenceClassifierOutput или tuple(torch.Tensor)

Объект SequenceClassifierOutput или кортеж из torch.Tensor (если передано return_dict=False или если config.return_dict=False), содержащий различные элементы в зависимости от конфигурации (ASTConfig) и входных данных.

Метод forward класса ASTForAudioClassification переопределяет специальный метод __call__.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр Module, а не эту функцию, поскольку первый вариант обеспечивает выполнение шагов предварительной и последующей обработки, тогда как второй молча их игнорирует.

  • loss (torch.Tensor формы (1,), необязательный, возвращается, если задан labels) — Потери классификации (или регрессии, если config.num_labels==1).

  • logits (torch.Tensor формы (batch_size, config.num_labels)) — Оценки для классификации (или регрессии, если config.num_labels==1) до применения SoftMax.

  • hidden_states (tuple(torch.Tensor), optional, возвращается, если передано output_hidden_states=True или если config.output_hidden_states=True) — кортеж из torch.Tensor (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы (batch_size, sequence_length, hidden_size).

    Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.

  • attentions (tuple(torch.Tensor), необязательный, возвращается при передаче output_attentions=True или при config.output_attentions=True) — Кортеж torch.Tensor (по одному на каждый слой) формы (batch_size, num_heads, sequence_length, sequence_length).

    Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

Пример:

>>> 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