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

Model ini dipublikasikan di HF papers pada 2021-04-05 dan disumbangkan ke Hugging Face Transformers pada 2022-11-21.

Audio Spectrogram Transformer

FlashAttention SDPA

Ikhtisar

Model Audio Spectrogram Transformer diusulkan dalam AST: Audio Spectrogram Transformer oleh Yuan Gong, Yu-An Chung, James Glass. Audio Spectrogram Transformer menerapkan Vision Transformer pada audio, dengan mengubah audio menjadi gambar (spektrogram). Model ini memperoleh hasil state-of-the-art untuk klasifikasi audio.

Abstrak dari makalah tersebut adalah sebagai berikut:

Sejak satu dekade terakhir, convolutional neural networks (CNN) telah banyak diadopsi sebagai blok bangunan utama untuk model klasifikasi audio end-to-end, yang bertujuan mempelajari pemetaan langsung dari spektrogram audio ke label yang sesuai. Untuk menangkap konteks global jarak jauh dengan lebih baik, tren terbaru adalah menambahkan mekanisme self-attention di atas CNN, membentuk model hibrida CNN-attention. Namun, belum jelas apakah ketergantungan pada CNN itu diperlukan, dan apakah jaringan saraf yang murni berbasis attention sudah cukup untuk mendapatkan kinerja yang baik dalam klasifikasi audio. Dalam makalah ini, kami menjawab pertanyaan tersebut dengan memperkenalkan Audio Spectrogram Transformer (AST), model bebas konvolusi dan murni berbasis attention pertama untuk klasifikasi audio. Kami mengevaluasi AST pada berbagai benchmark klasifikasi audio, di mana model ini mencapai hasil state-of-the-art baru, yaitu 0.485 mAP pada AudioSet, akurasi 95,6% pada ESC-50, dan akurasi 98,1% pada Speech Commands V2.

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

Model ini disumbangkan oleh nielsr. Kode aslinya dapat ditemukan di sini.

Tips penggunaan

  • Saat melakukan fine-tuning Audio Spectrogram Transformer (AST) pada dataset Anda sendiri, disarankan untuk memperhatikan normalisasi input (untuk memastikan input memiliki mean 0 dan std 0.5). ASTFeatureExtractor menangani hal ini. Perhatikan bahwa secara default, ia menggunakan mean dan std dari AudioSet. Anda dapat memeriksa ast/src/get_norm_stats.py untuk melihat bagaimana para penulis menghitung statistik untuk dataset downstream.
  • Perhatikan bahwa AST memerlukan learning rate yang rendah (para penulis menggunakan learning rate yang 10 kali lebih kecil dibandingkan model CNN mereka yang diusulkan dalam makalah PSLA) dan konvergen dengan cepat, jadi silakan cari learning rate dan learning rate scheduler yang sesuai untuk tugas Anda.

Menggunakan Scaled Dot Product Attention (SDPA)

PyTorch menyertakan operator scaled dot-product attention (SDPA) native sebagai bagian dari torch.nn.functional. Fungsi ini mencakup beberapa implementasi yang dapat diterapkan tergantung pada input dan perangkat keras yang digunakan. Lihat dokumentasi resmi atau halaman GPU Inference untuk informasi lebih lanjut.

SDPA digunakan secara default untuk torch>=2.1.1 ketika implementasi tersedia, tetapi Anda juga dapat mengatur attn_implementation="sdpa" di from_pretrained() untuk secara eksplisit meminta penggunaan SDPA.

from transformers import ASTForAudioClassification


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

Untuk percepatan terbaik, kami merekomendasikan memuat model dalam presisi setengah (misalnya torch.float16 atau torch.bfloat16).

Pada benchmark lokal (A100-40GB, PyTorch 2.3.0, OS Ubuntu 22.04) dengan float32 dan model MIT/ast-finetuned-audioset-10-10-0.4593, kami melihat peningkatan kecepatan berikut selama inferensi.

Ukuran batchRata-rata waktu inferensi (ms), mode eagerRata-rata waktu inferensi (ms), model sdpaPercepatan, Sdpa / Eager (x)
12764.5
21262
42182.62
840142.86

Sumber daya

Daftar sumber resmi Hugging Face dan komunitas (ditandai dengan 🌎) untuk membantu Anda memulai dengan Audio Spectrogram Transformer.

Audio Classification

Jika Anda tertarik untuk mengirimkan sumber daya agar disertakan di sini, silakan buka Pull Request dan kami akan meninjaunya! Sumber daya tersebut sebaiknya mendemonstrasikan sesuatu yang baru, bukan menduplikasi sumber daya yang sudah ada.

ASTConfig

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

Parameter

  • hidden_size (int, opsional, default 768) — Dimensi dari representasi tersembunyi.
  • num_hidden_layers (int, opsional, default 12) — Jumlah lapisan tersembunyi dalam decoder Transformer.
  • num_attention_heads (int, opsional, default 12) — Jumlah attention head untuk setiap lapisan attention di decoder Transformer.
  • intermediate_size (int, opsional, default 3072) — Dimensi representasi MLP.
  • hidden_act (str, opsional, defaultnya gelu) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya, "gelu", "relu", "silu", dan sebagainya.
  • hidden_dropout_prob (Union[float, int], opsional, default 0.0) — Probabilitas dropout untuk semua lapisan fully connected di embeddings, encoder, dan pooler.
  • attention_probs_dropout_prob (Union[float, int], opsional, default 0.0) — Rasio dropout untuk probabilitas perhatian.
  • initializer_range (float, opsional, defaultnya 0.02) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot.
  • layer_norm_eps (float, opsional, defaultnya 1e-12) — Epsilon yang digunakan oleh lapisan normalisasi lapisan.
  • patch_size (Union[int, list[int], tuple[int, int]], opsional, defaultnya 16) — Ukuran (resolusi) dari setiap patch.
  • qkv_bias (bool, opsional, defaultnya True) — Apakah akan menambahkan bias ke queries, keys, dan values.
  • frequency_stride (int, opsional, default 10) — Stride frekuensi yang digunakan saat melakukan patchifikasi pada spektrogram.
  • time_stride (int, opsional, default 10) — Stride temporal yang digunakan saat melakukan patchifikasi pada spektrogram.
  • max_length (int, opsional, default 1024) — Dimensi temporal dari spektrogram.
  • num_mel_bins (int, opsional, default 128) — Jumlah fitur mel yang digunakan per frame input. Seharusnya sesuai dengan nilai yang digunakan di kelas AutoFeatureExtractor.

Ini adalah kelas konfigurasi untuk menyimpan konfigurasi model Audio Spectrogram Transformer. Kelas ini digunakan untuk membuat model Audio Spectrogram Transformer berdasarkan argumen yang ditentukan, sehingga mendefinisikan arsitektur model. Membuat konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari MIT/ast-finetuned-audioset-10-10-0.4593

Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.

Contoh:

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

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

Parameter

  • feature_size (int, opsional, default 1) — Dimensi fitur dari fitur yang diekstrak.
  • sampling_rate (int, opsional, default 16000) — Laju sampling di mana file audio harus didigitalisasi, dinyatakan dalam hertz (Hz).
  • num_mel_bins (int, opsional, default 128) — Jumlah bin frekuensi Mel.
  • max_length (int, opsional, default 1024) — Panjang maksimum untuk melakukan padding/truncation pada fitur yang diekstrak.
  • do_normalize (bool, opsional, default True) — Apakah fitur log-Mel akan dinormalisasi menggunakan mean dan std.
  • mean (float, opsional, defaultnya -4.2677393) — Nilai rata-rata yang digunakan untuk menormalisasi fitur log-Mel. Secara default menggunakan rata-rata AudioSet.
  • std (float, opsional, default 4.5689974) — Nilai standar deviasi yang digunakan untuk menormalisasi fitur log-Mel. Menggunakan standar deviasi AudioSet secara default.
  • return_attention_mask (bool, opsional, default False) — Apakah call() harus mengembalikan attention_mask atau tidak.

Membuat feature extractor Audio Spectrogram Transformer (AST).

Feature extractor ini mewarisi dari SequenceFeatureExtractor yang berisi sebagian besar metode utama. Pengguna harus merujuk ke superclass ini untuk informasi lebih lanjut mengenai metode-metode tersebut.

Kelas ini mengekstrak fitur mel-filter bank dari ucapan mentah menggunakan TorchAudio jika terinstal, atau menggunakan numpy jika tidak, kemudian melakukan padding/truncation ke panjang tetap dan menormalisasikannya menggunakan rata-rata dan standar deviasi.

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

Parameter

  • raw_speech (np.ndarray, list[float], list[np.ndarray], list[list[float]]) — Sequens atau batch dari sequens yang akan di-pad. Setiap sequens dapat berupa array numpy, daftar nilai float, daftar array numpy, atau daftar dari daftar nilai float. Harus berupa audio mono channel, bukan stereo, yaitu satu float per timestep.
  • sampling_rate (int, opsional) — Laju sampling di mana input raw_speech disampelkan. Sangat disarankan untuk meneruskan sampling_rate pada panggilan forward untuk mencegah kesalahan yang tidak terdeteksi.
  • return_tensors (str atau TensorType, opsional) — Jika diset, akan mengembalikan tensor alih-alih daftar integer Python. Nilai yang dapat diterima adalah:
    • 'pt': Mengembalikan objek PyTorch torch.Tensor.
    • 'np': Mengembalikan objek Numpy np.ndarray.

Metode utama untuk melakukan featurisasi dan persiapan satu atau beberapa sekuens untuk model.

ASTModel

kelas transformers.ASTModel

< >

( config: ASTConfig )

Parameter

  • config (ASTConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.

Model Audio Spectrogram Transformer polos yang menghasilkan hidden-states mentah tanpa head spesifik di atasnya.

Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)

Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.

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)

Parameter

  • input_values (torch.Tensor dengan bentuk (batch_size, max_length, num_mel_bins)) — Nilai float fitur mel yang diekstrak dari gelombang audio mentah. Gelombang audio mentah dapat diperoleh dengan memuat file audio .flac atau .wav ke dalam array bertipe list[float], numpy.ndarray, atau torch.Tensor, misalnya melalui pustaka torchcodec (pip install torchcodec) atau pustaka soundfile (pip install soundfile). Untuk menyiapkan array menjadi input_features, gunakan AutoFeatureExtractor untuk mengekstrak fitur mel, melakukan padding, dan mengonversinya menjadi tensor bertipe torch.Tensor. Lihat call()
  • attention_mask (torch.Tensor dengan bentuk (batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari [0, 1]:
    • 1 untuk token yang tidak dimasker,
    • 0 untuk token yang dimasker.

    Apa itu attention mask?

Mengembalikan

BaseModelOutputWithPooling atau tuple(torch.Tensor)

A BaseModelOutputWithPooling atau tuple dari torch.Tensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai elemen tergantung pada konfigurasi (ASTConfig) dan input.

Metode forward dari ASTModel menimpa metode khusus __call__.

Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance Module setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

  • last_hidden_state (torch.Tensor dengan bentuk (batch_size, sequence_length, hidden_size)) — Urutan hidden-states pada keluaran lapisan terakhir model.

  • pooler_output (torch.Tensor dengan bentuk (batch_size, hidden_size)) — Hidden-state lapisan terakhir dari token pertama dalam urutan (token klasifikasi) setelah diproses lebih lanjut melalui lapisan yang digunakan untuk tugas pra-pelatihan tambahan. Misalnya, untuk keluarga model BERT, ini mengembalikan token klasifikasi setelah diproses melalui lapisan linear dan fungsi aktivasi tanh. Bobot lapisan linear dilatih dari tujuan prediksi kalimat berikutnya (klasifikasi) selama pra-pelatihan.

  • hidden_states (tuple(torch.Tensor), opsional, dikembalikan saat output_hidden_states=True dilewatkan atau saat config.output_hidden_states=True) — Tuple dari torch.Tensor (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk (batch_size, sequence_length, hidden_size).

    Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.

  • attentions (tuple(torch.Tensor), opsional, dikembalikan saat output_attentions=True dilewatkan atau saat config.output_attentions=True) — Tuple dari torch.Tensor (satu untuk setiap layer) dengan bentuk (batch_size, num_heads, sequence_length, sequence_length).

    Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).

ASTForAudioClassification

kelas transformers.ASTForAudioClassification

< >

( config: ASTConfig )

Parameter

  • config (ASTConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.

Model Audio Spectrogram Transformer dengan kepala klasifikasi audio di atasnya (lapisan linear di atas output yang dipooling), misalnya untuk dataset seperti AudioSet, Speech Commands v2.

Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)

Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.

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)

Parameter

  • input_values (torch.Tensor dengan bentuk (batch_size, max_length, num_mel_bins)) — Nilai float fitur mel yang diekstrak dari gelombang audio mentah. Gelombang audio mentah dapat diperoleh dengan memuat file audio .flac atau .wav ke dalam array bertipe list[float], numpy.ndarray atau torch.Tensor, misalnya melalui perpustakaan torchcodec (pip install torchcodec) atau perpustakaan soundfile (pip install soundfile). Untuk menyiapkan array menjadi input_features, gunakan AutoFeatureExtractor untuk mengekstrak fitur mel, melakukan padding, dan mengonversinya menjadi tensor bertipe torch.Tensor. Lihat call()
  • labels (torch.LongTensor dengan bentuk (batch_size,), opsional) — Label untuk menghitung loss klasifikasi/regresi audio. Indeks harus berada dalam [0, ..., config.num_labels - 1]. Jika config.num_labels == 1, loss regresi dihitung (Mean-Square loss). Jika config.num_labels > 1, loss klasifikasi dihitung (Cross-Entropy).
  • attention_mask (torch.Tensor dengan bentuk (batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari [0, 1]:
    • 1 untuk token yang tidak dimasker,
    • 0 untuk token yang dimasker.

    Apa itu attention mask?

Mengembalikan

SequenceClassifierOutput atau tuple(torch.Tensor)

A SequenceClassifierOutput atau tuple dari torch.Tensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai elemen tergantung pada konfigurasi (ASTConfig) dan input.

Metode forward ASTForAudioClassification menimpa metode khusus __call__.

Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance Module setelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.

  • loss (torch.Tensor dengan bentuk (1,), opsional, dikembalikan saat labels disediakan) — Loss klasifikasi (atau regresi jika config.num_labels==1).

  • logits (torch.Tensor dengan bentuk (batch_size, config.num_labels)) — Skor klasifikasi (atau regresi jika config.num_labels==1) (sebelum SoftMax).

  • hidden_states (tuple(torch.Tensor), opsional, dikembalikan saat output_hidden_states=True dilewatkan atau saat config.output_hidden_states=True) — Tuple dari torch.Tensor (satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk (batch_size, sequence_length, hidden_size).

    Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.

  • attentions (tuple(torch.Tensor), opsional, dikembalikan saat output_attentions=True dilewatkan atau saat config.output_attentions=True) — Tuple dari torch.Tensor (satu untuk setiap layer) dengan bentuk (batch_size, num_heads, sequence_length, sequence_length).

    Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).

Contoh:

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