Transformers documentation
Audio Spectrogram Transformer
Model ini dipublikasikan di HF papers pada 2021-04-05 dan disumbangkan ke Hugging Face Transformers pada 2022-11-21.
Audio Spectrogram Transformer
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.
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.pyuntuk 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 batch | Rata-rata waktu inferensi (ms), mode eager | Rata-rata waktu inferensi (ms), model sdpa | Percepatan, Sdpa / Eager (x) |
|---|---|---|---|
| 1 | 27 | 6 | 4.5 |
| 2 | 12 | 6 | 2 |
| 4 | 21 | 8 | 2.62 |
| 8 | 40 | 14 | 2.86 |
Sumber daya
Daftar sumber resmi Hugging Face dan komunitas (ditandai dengan 🌎) untuk membantu Anda memulai dengan Audio Spectrogram Transformer.
- Notebook yang mengilustrasikan inferensi dengan AST untuk klasifikasi audio dapat ditemukan di sini.
- ASTForAudioClassification didukung oleh notebook ini.
- Lihat juga: Klasifikasi audio.
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
< 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 )
Parameter
- hidden_size (
int, opsional, default768) — Dimensi dari representasi tersembunyi. - num_hidden_layers (
int, opsional, default12) — Jumlah lapisan tersembunyi dalam decoder Transformer. - num_attention_heads (
int, opsional, default12) — Jumlah attention head untuk setiap lapisan attention di decoder Transformer. - intermediate_size (
int, opsional, default3072) — Dimensi representasi MLP. - hidden_act (
str, opsional, defaultnyagelu) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya,"gelu","relu","silu", dan sebagainya. - hidden_dropout_prob (
Union[float, int], opsional, default0.0) — Probabilitas dropout untuk semua lapisan fully connected di embeddings, encoder, dan pooler. - attention_probs_dropout_prob (
Union[float, int], opsional, default0.0) — Rasio dropout untuk probabilitas perhatian. - initializer_range (
float, opsional, defaultnya0.02) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - layer_norm_eps (
float, opsional, defaultnya1e-12) — Epsilon yang digunakan oleh lapisan normalisasi lapisan. - patch_size (
Union[int, list[int], tuple[int, int]], opsional, defaultnya16) — Ukuran (resolusi) dari setiap patch. - qkv_bias (
bool, opsional, defaultnyaTrue) — 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, default128) — Jumlah fitur mel yang digunakan per frame input. Seharusnya sesuai dengan nilai yang digunakan di kelasAutoFeatureExtractor.
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.configASTFeatureExtractor
kelas 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 )
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, defaultTrue) — Apakah fitur log-Mel akan dinormalisasi menggunakanmeandanstd. - 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, defaultFalse) — Apakah call() harus mengembalikanattention_maskatau 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__
< 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 )
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 inputraw_speechdisampelkan. Sangat disarankan untuk meneruskansampling_ratepada panggilan forward untuk mencegah kesalahan yang tidak terdeteksi. - return_tensors (
stratau TensorType, opsional) — Jika diset, akan mengembalikan tensor alih-alih daftar integer Python. Nilai yang dapat diterima adalah:'pt': Mengembalikan objek PyTorchtorch.Tensor.'np': Mengembalikan objek Numpynp.ndarray.
Metode utama untuk melakukan featurisasi dan persiapan satu atau beberapa sekuens untuk model.
ASTModel
kelas transformers.ASTModel
< source >( 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
< 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)
Parameter
- input_values (
torch.Tensordengan 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.flacatau.wavke dalam array bertipelist[float],numpy.ndarray, atautorch.Tensor, misalnya melalui pustaka torchcodec (pip install torchcodec) atau pustaka soundfile (pip install soundfile). Untuk menyiapkan array menjadiinput_features, gunakan AutoFeatureExtractor untuk mengekstrak fitur mel, melakukan padding, dan mengonversinya menjadi tensor bertipetorch.Tensor. Lihat call() - attention_mask (
torch.Tensordengan 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.
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
Modulesetelahnya 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.Tensordengan bentuk(batch_size, sequence_length, hidden_size)) — Urutan hidden-states pada keluaran lapisan terakhir model.pooler_output (
torch.Tensordengan 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 saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.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 saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.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
< source >( 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
< 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)
Parameter
- input_values (
torch.Tensordengan 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.flacatau.wavke dalam array bertipelist[float],numpy.ndarrayatautorch.Tensor, misalnya melalui perpustakaan torchcodec (pip install torchcodec) atau perpustakaan soundfile (pip install soundfile). Untuk menyiapkan array menjadiinput_features, gunakan AutoFeatureExtractor untuk mengekstrak fitur mel, melakukan padding, dan mengonversinya menjadi tensor bertipetorch.Tensor. Lihat call() - labels (
torch.LongTensordengan bentuk(batch_size,), opsional) — Label untuk menghitung loss klasifikasi/regresi audio. Indeks harus berada dalam[0, ..., config.num_labels - 1]. Jikaconfig.num_labels == 1, loss regresi dihitung (Mean-Square loss). Jikaconfig.num_labels > 1, loss klasifikasi dihitung (Cross-Entropy). - attention_mask (
torch.Tensordengan 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.
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
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
loss (
torch.Tensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Loss klasifikasi (atau regresi jika config.num_labels==1).logits (
torch.Tensordengan bentuk(batch_size, config.num_labels)) — Skor klasifikasi (atau regresi jika config.num_labels==1) (sebelum SoftMax).hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.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 saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.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)
...