Transformers documentation
UnivNet
Model ini dipublikasikan di HF papers pada 2021-06-15 dan disumbangkan ke Hugging Face Transformers pada 2023-11-22.
UnivNet
Ikhtisar
Model UnivNet diusulkan dalam UnivNet: A Neural Vocoder with Multi-Resolution Spectrogram Discriminators for High-Fidelity Waveform Generation oleh Won Jang, Dan Lim, Jaesam Yoon, Bongwan Kin, dan Juntae Kim.
Model UnivNet adalah generative adversarial network (GAN) yang dilatih untuk mensintesis waveform ucapan berkefideltasan tinggi. Model UnivNet yang dibagikan di transformers adalah generator, yang memetakan log-mel spectrogram kondisional dan sekuens noise opsional menjadi waveform ucapan (misalnya, sebuah vocoder). Hanya generator yang diperlukan untuk inferensi. discriminator yang digunakan untuk melatih generator tidak diimplementasikan.
Abstrak dari makalah tersebut adalah sebagai berikut:
Sebagian besar voder neural menggunakan mel-spectrogram berbatas pita untuk menghasilkan waveform. Jika fitur spektral pita penuh digunakan sebagai input, voder dapat diberikan informasi akustik sebanyak mungkin. Namun, pada beberapa model yang menggunakan mel-spectrogram pita penuh, terjadi masalah over-smoothing, di mana dihasilkan spectrogram yang tidak tajam. Untuk mengatasi masalah ini, kami mengusulkan UnivNet, sebuah voder neural yang mensintesis waveform berkeandalan tinggi secara real time. Terinspirasi oleh karya-karya di bidang deteksi aktivitas suara, kami menambahkan diskriminator spectrogram multi-resolusi yang menggunakan beberapa magnitudo spectrogram linear yang dihitung menggunakan berbagai set parameter. Dengan menggunakan mel-spectrogram pita penuh sebagai input, kami berharap dapat menghasilkan sinyal beresolusi tinggi dengan menambahkan diskriminator yang menggunakan spectrogram multi-resolusi sebagai input. Dalam evaluasi pada dataset yang berisi informasi tentang ratusan pembicara, UnivNet memperoleh hasil objektif dan subjektif terbaik di antara model-model pesaing, baik untuk pembicara yang sudah dikenal maupun yang belum dikenal. Hasil-hasil ini, termasuk skor subjektif terbaik untuk text-to-speech, menunjukkan potensi adaptasi cepat ke pembicara baru tanpa perlu pelatihan dari awal.
Tips:
- Argumen
noise_sequenceuntuk UnivNetModel.forward() harus berupa noise Gaussian standar (misalnya daritorch.randn) dengan bentuk([batch_size], noise_length, model.config.model_in_channels), di mananoise_lengthharus sesuai dengan dimensi panjang (dimensi 1) dari argumeninput_features. Jika tidak diberikan, noise akan dihasilkan secara acak; sebuahtorch.Generatordapat diberikan ke argumengeneratoragar forward pass dapat direproduksi. (Perhatikan bahwa UnivNetFeatureExtractor akan mengembalikan noise yang dihasilkan secara default, sehingga seharusnya tidak perlu menghasilkannoise_sequencesecara manual.) - Padding yang ditambahkan oleh UnivNetFeatureExtractor dapat dihapus dari output UnivNetModel melalui metode
UnivNetFeatureExtractor.batch_decode(), seperti yang ditunjukkan pada contoh penggunaan di bawah ini. - Menambahkan padding berupa keheningan di akhir setiap waveform dapat mengurangi artefak di bagian akhir sampel audio yang dihasilkan. Hal ini dapat dilakukan dengan memberikan
pad_end = Trueke UnivNetFeatureExtractor.call(). Lihat isu ini untuk detail lebih lanjut.
Contoh Penggunaan:
import torch
from datasets import Audio, load_dataset
from scipy.io.wavfile import write
from transformers import UnivNetFeatureExtractor, UnivNetModel
model_id_or_path = "dg845/univnet-dev"
model = UnivNetModel.from_pretrained(model_id_or_path, device_map="auto")
feature_extractor = UnivNetFeatureExtractor.from_pretrained(model_id_or_path)
ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
# Resample the audio to the model and feature extractor's sampling rate.
ds = ds.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
# Pad the end of the converted waveforms to reduce artifacts at the end of the output audio samples.
inputs = feature_extractor(
ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], pad_end=True, return_tensors="pt"
)
with torch.no_grad():
audio = model(**inputs)
# Remove the extra padding at the end of the output.
audio = feature_extractor.batch_decode(**audio)[0]
# Convert to wav file
write("sample_audio.wav", feature_extractor.sampling_rate, audio)Model ini disumbangkan oleh dg845. Sejauh pengetahuan saya, tidak ada rilis kode resmi, tetapi implementasi tidak resmi dapat ditemukan di maum-ai/univnet dengan checkpoint terlatih di sini.
UnivNetConfig
kelas transformers.UnivNetConfig
< 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 = Nonemodel_in_channels: int = 64model_hidden_channels: int = 32num_mel_bins: int = 100resblock_kernel_sizes: list[int] | tuple[int, ...] = (3, 3, 3)resblock_stride_sizes: list[int] | tuple[int, ...] = (8, 8, 4)resblock_dilation_sizes: list | tuple = ((1, 3, 9, 27), (1, 3, 9, 27), (1, 3, 9, 27))kernel_predictor_num_blocks: int = 3kernel_predictor_hidden_channels: int = 64kernel_predictor_conv_size: int = 3kernel_predictor_dropout: float | int = 0.0initializer_range: float = 0.01leaky_relu_slope: float = 0.2 )
Parameter
- model_in_channels (
int, opsional, default 64) — Jumlah channel input untuk jaringan residual UnivNet. Nilai ini harus sesuai dengannoise_sequence.shape[1]dan nilai yang digunakan dalam kelas UnivNetFeatureExtractor. - model_hidden_channels (
int, opsional, default 32) — Jumlah kanal tersembunyi dari setiap blok residual dalam jaringan residual UnivNet. - num_mel_bins (
int, opsional, default 100) — Jumlah bin frekuensi pada spektrogram log-mel kondisional. Nilai ini harus sesuai dengan nilai yang digunakan pada kelas UnivNetFeatureExtractor. - resblock_kernel_sizes (
tuple[int]ataulist[int], opsional, default[3, 3, 3]) — Tuple bilangan bulat yang mendefinisikan ukuran kernel dari lapisan konvolusi 1D dalam jaringan residual UnivNet. Panjangresblock_kernel_sizesmenentukan jumlah blok resnet dan harus sesuai denganresblock_stride_sizesdanresblock_dilation_sizes. - resblock_stride_sizes (
tuple[int]ataulist[int], opsional, default[8, 8, 4]) — Tuple berisi bilangan bulat yang mendefinisikan ukuran stride dari lapisan konvolusi 1D dalam jaringan residual UnivNet. Panjangresblock_stride_sizesharus sama dengan panjangresblock_kernel_sizesdanresblock_dilation_sizes. - resblock_dilation_sizes (
tuple[tuple[int]]ataulist[list[int]], opsional, default[[1, 3, 9, 27], [1, 3, 9, 27], [1, 3, 9, 27]]) — Tuple bersarang dari bilangan bulat yang mendefinisikan laju dilatasi dari lapisan konvolusional 1D yang berdilatasi dalam jaringan residual UnivNet. Panjangresblock_dilation_sizesharus sama dengan panjangresblock_kernel_sizesdanresblock_stride_sizes. Panjang setiap daftar bersarang dalamresblock_dilation_sizesmendefinisikan jumlah lapisan konvolusional per blok resnet. - kernel_predictor_num_blocks (
int, opsional, default 3) — Jumlah blok residual dalam jaringan kernel predictor, yang menghitung kernel dan bias untuk setiap lapisan variabel lokasi convolution dalam jaringan residual UnivNet. - kernel_predictor_hidden_channels (
int, opsional, default 64) — Jumlah kanal tersembunyi untuk setiap blok residual dalam jaringan kernel predictor. - kernel_predictor_conv_size (
int, opsional, default 3) — Ukuran kernel dari setiap lapisan konvolusional 1D dalam jaringan kernel predictor. - kernel_predictor_dropout (
float, opsional, default 0.0) — Probabilitas dropout untuk setiap blok residual dalam jaringan kernel predictor. - initializer_range (
float, opsional, defaultnya0.01) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - leaky_relu_slope (
float, opsional, default 0.2) — Sudut kemiringan negatif yang digunakan oleh aktivasi leaky ReLU.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari UnivNetModel. Kelas ini digunakan untuk membuat instans model Univnet berdasarkan argumen yang ditentukan, sehingga mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari dg845/univnet-dev
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
Contoh:
>>> from transformers import UnivNetModel, UnivNetConfig
>>> # Initializing a Tortoise TTS style configuration
>>> configuration = UnivNetConfig()
>>> # Initializing a model (with random weights) from the Tortoise TTS style configuration
>>> model = UnivNetModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configUnivNetFeatureExtractor
kelas transformers.UnivNetFeatureExtractor
< source >( feature_size: int = 1sampling_rate: int = 24000padding_value: float = 0.0do_normalize: bool = Falsenum_mel_bins: int = 100hop_length: int = 256win_length: int = 1024win_function: str = 'hann_window'filter_length: int | None = 1024max_length_s: int = 10fmin: float = 0.0fmax: float | None = Nonemel_floor: float = 1e-09center: bool = Falsecompression_factor: float = 1.0compression_clip_val: float = 1e-05normalize_min: float = -11.512925148010254normalize_max: float = 2.3143386840820312model_in_channels: int = 64pad_end_length: int = 10return_attention_mask = True**kwargs )
Parameter
- feature_size (
int, opsional, default 1) — Dimensi fitur dari fitur yang diekstrak. - sampling_rate (
int, opsional, default 24000) — Laju sampling yang digunakan untuk mendigitalisasi file audio, dinyatakan dalam hertz (Hz). - padding_value (
float, opsional, default 0.0) — Nilai yang digunakan untuk mengisi padding saat menerapkan strategipaddingyang didefinisikan oleh argumenpaddingpada UnivNetFeatureExtractor.call(). Nilai ini harus sesuai dengan keheningan audio. Argumenpad_endpada__call__juga akan menggunakan nilai padding ini. - do_normalize (
bool, opsional, defaultFalse) — Apakah akan melakukan normalisasi Tacotron 2 pada input. Normalisasi dapat membantu meningkatkan kinerja secara signifikan untuk beberapa model. - num_mel_bins (
int, opsional, default 100) — Jumlah bin frekuensi mel pada fitur spektrogram yang diekstrak. Nilai ini harus sesuai denganUnivNetModel.config.num_mel_bins. - hop_length (
int, opsional, default 256) — Jumlah sampel langsung di antara jendela geser. Istilah lain yang sering digunakan dalam banyak paper adalah “shift”. Perhatikan bahwa ini berbeda dari ekstraktor fitur audio lainnya seperti SpeechT5FeatureExtractor yang mengambilhop_lengthdalam ms. - win_length (
int, opsional, default 1024) — Jumlah sampel langsung untuk setiap jendela geser. Perhatikan bahwa ini berbeda dari ekstraktor fitur audio lainnya seperti SpeechT5FeatureExtractor yang mengambilwin_lengthdalam ms. - win_function (
str, opsional, default"hann_window") — Nama untuk fungsi window yang digunakan untuk windowing, harus dapat diakses melaluitorch.{win_function} - filter_length (
int, opsional, default 1024) — Jumlah komponen FFT yang digunakan. JikaNone, nilai ini ditentukan menggunakantransformers.audio_utils.optimal_fft_length. - max_length_s (
int, opsional, default 10) — Panjang maksimum input model dalam detik. Ini digunakan untuk mengisi (padding) audio. - fmin (
float, opsional, default 0.0) — Frekuensi mel minimum dalam Hz. - fmax (
float, opsional) — Frekuensi mel maksimum dalam Hz. Jika tidak diatur, defaultnya adalahsampling_rate / 2. - mel_floor (
float, opsional, default 1e-09) — Nilai minimum dari bank frekuensi mel. Perhatikan bahwa cara UnivNetFeatureExtractor menggunakanmel_floorberbeda dengan di transformers.audio_utils.spectrogram(). - center (
bool, opsional, defaultFalse) — Apakah akan melakukan padding pada waveform sehingga frametberada di tengah waktut * hop_length. JikaFalse, frametakan dimulai pada waktut * hop_length. - compression_factor (
float, opsional, default 1.0) — Faktor kompresi multiplikatif untuk kompresi rentang dinamis selama normalisasi spektral. - compression_clip_val (
float, opsional, default 1e-05) — Nilai clip yang diterapkan pada waveform sebelum menerapkan kompresi rentang dinamis selama normalisasi spektral. - normalize_min (
float, opsional, default -11.512925148010254) — Nilai min yang digunakan untuk normalisasi linear bergaya Tacotron 2. Defaultnya adalah nilai asli dari implementasi Tacotron 2. - normalize_max (
float, opsional, default 2.3143386840820312) — Nilai maksimum yang digunakan untuk normalisasi linear bergaya Tacotron 2. Defaultnya adalah nilai asli dari implementasi Tacotron 2. - model_in_channels (
int, opsional, default 64) — Jumlah channel input untuk model UnivNetModel. Nilai ini harus sesuai denganUnivNetModel.config.model_in_channels. - pad_end_length (
int, opsional, default 10) — Jika melakukan padding di akhir setiap waveform, jumlah sampel setara dengan frame spectrogram yang akan ditambahkan. Jumlah sampel yang ditambahkan akan menjadipad_end_length * hop_length. - return_attention_mask (
bool, opsional, defaultTrue) — Apakah call() harus mengembalikanattention_mask.
Membangun feature extractor UnivNet.
Kelas ini mengekstrak fitur log-mel-filter bank dari ucapan mentah menggunakan short time Fourier Transform (STFT). Implementasi STFT mengikuti yang digunakan oleh TacoTron 2 dan Hifi-GAN.
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.
__call__
< source >( raw_speech: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]]sampling_rate: int | None = Nonepadding: bool | str | transformers.utils.generic.PaddingStrategy = Truemax_length: int | None = Nonetruncation: bool = Truepad_to_multiple_of: int | None = Nonereturn_noise: bool = Truegenerator: numpy.random._generator.Generator | None = Nonepad_end: bool = Falsepad_length: int | None = Nonedo_normalize: str | None = Nonereturn_attention_mask: bool | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = None )
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 dan memungkinkan pipeline pengenalan ucapan otomatis. - padding (
bool,stratau PaddingStrategy, opsional, defaultnyaTrue) — Pilih strategi untuk melakukan padding padaraw_speechwaveform (sesuai sisi padding dan indeks padding model) di antara:Trueatau'longest': Pad hingga urutan terpanjang dalam batch (atau tanpa padding jika hanya satu urutan yang diberikan).'max_length': Pad hingga panjang maksimum yang ditentukan dengan argumenmax_lengthatau hingga panjang input maksimum yang dapat diterima oleh model jika argumen tersebut tidak diberikan.Falseatau'do_not_pad'(default): Tidak ada padding (yaitu, dapat menghasilkan batch dengan urutan yang panjangnya berbeda).
Jika
pad_end = True, padding tersebut akan dilakukan sebelum strategipaddingditerapkan. - max_length (
int, opsional) — Panjang maksimum dari daftar yang dikembalikan dan secara opsional panjang padding (lihat di atas). - truncation (
bool, opsional, defaultTrue) — Mengaktifkan pemotongan untuk memotong urutan input yang lebih panjang darimax_lengthmenjadimax_length. - pad_to_multiple_of (
int, opsional) — Jika diset, akan melakukan padding pada urutan hingga menjadi kelipatan dari nilai yang diberikan.Ini sangat berguna untuk memungkinkan penggunaan Tensor Cores pada perangkat keras NVIDIA dengan compute capability
>= 7.5(Volta), atau pada TPU yang diuntungkan dari panjang sekuens yang merupakan kelipatan 128. - return_noise (
bool, opsional, defaultTrue) — Apakah akan menghasilkan dan mengembalikan gelombang noise untuk digunakan dalam UnivNetModel.forward(). - generator (
numpy.random.Generator, opsional, defaultNone) — Generator bilangan acaknumpy.random.Generatoropsional yang digunakan saat menghasilkan noise. - pad_end (
bool, opsional, defaultFalse) — Apakah akan menambahkan padding berupa keheningan di akhir setiap waveform. Hal ini dapat membantu mengurangi artefak di akhir sampel audio yang dihasilkan; lihat https://github.com/seungwonpark/melgan/issues/8 untuk detail lebih lanjut. Padding ini akan dilakukan sebelum strategi padding yang ditentukan dalampaddingditerapkan. - pad_length (
int, opsional, defaultNone) — Jika melakukan padding di akhir setiap waveform, panjang padding dalam frame spektrogram. Jika tidak diatur, nilai ini akan default keself.config.pad_end_length. - do_normalize (
bool, opsional) — Apakah akan melakukan normalisasi Tacotron 2 pada input. Normalisasi dapat membantu meningkatkan kinerja secara signifikan untuk beberapa model. Jika tidak diatur, nilai ini akan default keself.config.do_normalize. - return_attention_mask (
bool, opsional) — Apakah akan mengembalikan attention mask. Jika dibiarkan pada nilai default, akan mengembalikan attention mask sesuai dengan default feature_extractor tertentu. - return_tensors (
stratau TensorType, opsional) — Jika diatur, akan mengembalikan tensor alih-alih daftar integer Python. Nilai yang dapat diterima adalah:'pt': Mengembalikan objek PyTorchtorch.np.array.'np': Mengembalikan objek Numpynp.ndarray.
Metode utama untuk melakukan featurisasi dan persiapan satu atau beberapa sekuens untuk model.
UnivNetModel
kelas transformers.UnivNetModel
< source >( config: UnivNetConfig )
Parameter
- config (UnivNetConfig) — 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 Univnet 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_features: Tensornoise_sequence: typing.Optional[torch.Tensor] = Nonepadding_mask: typing.Optional[torch.Tensor] = Nonegenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool | None = None**kwargs ) → UnivNetModelOutput or tuple(torch.Tensor)
Parameter
- input_features (
torch.Tensordengan bentuk(batch_size, sequence_length, feature_dim)) — Tensor yang sesuai dengan fitur audio input. Fitur audio dapat diperoleh menggunakan UnivNetFeatureExtractor. Lihat UnivNetFeatureExtractor.call() untuk detailnya (processor_classmenggunakan UnivNetFeatureExtractor untuk memproses audio). - noise_sequence (
torch.Tensor, opsional) — Tensor yang berisi sekuens noise dari noise Gaussian standar. Dapat di-batch dengan bentuk(batch_size, sequence_length, config.model_in_channels), atau tanpa batch dengan bentuk (sequence_length, config.model_in_channels)`. Jika tidak diberikan, akan dihasilkan secara acak. - padding_mask (
torch.BoolTensor, opsional) — Mask yang menunjukkan bagian mana dari setiap sequence yang di-pad. Nilai mask dipilih dari[0, 1]:- 1 untuk token yang tidak dimasker
- 0 untuk token yang dimasker
Mask dapat di-batch dengan bentuk
(batch_size, sequence_length)atau tidak di-batch dengan bentuk(sequence_length,). - generator (
torch.Generator, opsional) — torch generator untuk membuat proses generasi menjadi deterministik. return_dict: Apakah akan mengembalikan subclass ModelOutput alih-alih tuple biasa. - return_dict (
bool, opsional) — Apakah akan mengembalikan ModelOutput alih-alih tuple biasa.
Mengembalikan
UnivNetModelOutput atau tuple(torch.Tensor)
UnivNetModelOutput atau tuple dari
torch.Tensor (jika return_dict=False diteruskan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (UnivNetConfig) dan input.
Metode forward dari UnivNetModel 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.
- gelombang suara (
torch.Tensordengan bentuk(batch_size, sequence_length)) — Gelombang audio keluaran 1D (mono-channel) yang di-batch. - waveform_lengths (
torch.Tensordengan bentuk(batch_size,)) — Panjang batch dalam sampel untuk setiap waveform tanpa padding diwaveforms.
Contoh:
>>> from transformers import UnivNetFeatureExtractor, UnivNetModel
>>> from datasets import load_dataset, Audio
>>> model = UnivNetModel.from_pretrained("dg845/univnet-dev")
>>> feature_extractor = UnivNetFeatureExtractor.from_pretrained("dg845/univnet-dev")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> # Resample the audio to the feature extractor's sampling rate.
>>> ds = ds.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
>>> inputs = feature_extractor(
... ds[0]["audio"]["array"], sampling_rate=ds[0]["audio"]["sampling_rate"], return_tensors="pt"
... )
>>> audio = model(**inputs).waveforms
>>> list(audio.shape)
[1, 140288]