Transformers documentation
UnivNet
Ce modèle a été publié dans les papiers HF le 2021-06-15 et a été ajouté à Hugging Face Transformers le 2023-11-22.
UnivNet
Aperçu
The UnivNet model was proposed in UnivNet: A Neural Vocoder with Multi-Resolution Spectrogram Discriminators for High-Fidelity Waveform Generation by Won Jang, Dan Lim, Jaesam Yoon, Bongwan Kin, and Juntae Kim.
The UnivNet model is a generative adversarial network (GAN) trained to synthesize high fidelity speech waveforms. The UnivNet model shared in transformers is the generator, which maps a conditioning log-mel spectrogram and optional noise sequence to a speech waveform (e.g. a vocoder). Only the generator is required for inference. The discriminator used to train the generator is not implemented.
L'abstract de l'article est le suivant :
La plupart des vocodeurs neuronaux utilisent des mélospectrogrammes à bande limitée pour générer des formes d’onde. Si des caractéristiques spectrales pleine bande sont utilisées en entrée, le vocodeur peut recevoir le maximum d’informations acoustiques possible. Cependant, dans certains modèles utilisant des mélospectrogrammes pleine bande, un problème de lissage excessif se produit, entraînant la génération de spectrogrammes peu nets. Pour remédier à ce problème, nous proposons UnivNet, un vocodeur neuronal qui synthétise des formes d’onde haute fidélité en temps réel. Inspirés par des travaux dans le domaine de la détection d’activité vocale, nous avons ajouté un discriminateur de spectrogrammes multi-résolution qui utilise plusieurs amplitudes de spectrogrammes linéaires calculées à l’aide de divers ensembles de paramètres. En utilisant des mélospectrogrammes pleine bande en entrée, nous nous attendons à générer des signaux haute résolution en ajoutant un discriminateur qui utilise des spectrogrammes de plusieurs résolutions en entrée. Lors d’une évaluation sur un jeu de données contenant des informations sur des centaines de locuteurs, UnivNet a obtenu les meilleurs résultats objectifs et subjectifs parmi les modèles concurrents, tant pour les locuteurs vus que non vus. Ces résultats, y compris le meilleur score subjectif pour la synthèse vocale, démontrent le potentiel d’une adaptation rapide à de nouveaux locuteurs sans avoir besoin d’un entraînement à partir de zéro.
Astuces :
- L'argument
noise_sequencede UnivNetModel.forward() doit être un bruit gaussien standard (tel que celui produit partorch.randn) de forme([batch_size], noise_length, model.config.model_in_channels), oùnoise_lengthdoit correspondre à la dimension de longueur (dimension 1) de l'argumentinput_features. S'il n'est pas fourni, il sera généré aléatoirement ; untorch.Generatorpeut être fourni à l'argumentgeneratorafin que le passage avant (forward pass) puisse être reproduit. (Notez que UnivNetFeatureExtractor renvoie du bruit généré par défaut, il ne devrait donc pas être nécessaire de générernoise_sequencemanuellement.) - Le padding ajouté par UnivNetFeatureExtractor peut être retiré de la sortie de UnivNetModel à l’aide de la méthode
UnivNetFeatureExtractor.batch_decode(), comme le montre l’exemple d’utilisation ci-dessous. - L'ajout de silence à la fin de chaque forme d'onde peut réduire les artefacts en fin d'échantillon audio généré. Il est possible de le faire en transmettant
pad_end = Trueà UnivNetFeatureExtractor.call(). Consultez ce problème pour plus de détails.
Exemple d'utilisation :
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)Ce modèle a été contribué par dg845. À ma connaissance, il n'existe pas de publication officielle du code, mais une implémentation non officielle peut être trouvée sur maum-ai/univnet avec des points de contrôle pré-entraînés ici.
UnivNetConfig
classe 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 )
Paramètres
- model_in_channels (
int, facultatif, valeur par défaut 64) — Le nombre de canaux d’entrée pour le réseau résiduel UnivNet. Cette valeur doit correspondre ànoise_sequence.shape[1]et à la valeur utilisée dans la classe UnivNetFeatureExtractor. - model_hidden_channels (
int, facultatif, valeur par défaut : 32) — Le nombre de canaux cachés de chaque bloc résiduel dans le réseau résiduel UnivNet. - num_mel_bins (
int, facultatif, valeur par défaut 100) — Le nombre de bandes de fréquence dans le spectrogramme log-mel de conditionnement. Cette valeur doit correspondre à celle utilisée dans la classe UnivNetFeatureExtractor. - resblock_kernel_sizes (
tuple[int]oulist[int], facultatif, par défaut[3, 3, 3]) — Un tuple d'entiers définissant les tailles de noyau des couches de convolution 1D dans le réseau résiduel UnivNet. La longueur deresblock_kernel_sizesdéfinit le nombre de blocs resnet et doit correspondre à celle deresblock_stride_sizesetresblock_dilation_sizes. - resblock_stride_sizes (
tuple[int]oulist[int], facultatif, par défaut[8, 8, 4]) — Un tuple d'entiers définissant les tailles de pas des couches de convolution 1D du réseau résiduel UnivNet. La longueur deresblock_stride_sizesdoit correspondre à celle deresblock_kernel_sizeset deresblock_dilation_sizes. - resblock_dilation_sizes (
tuple[tuple[int]]oulist[list[int]], facultatif, par défaut[[1, 3, 9, 27], [1, 3, 9, 27], [1, 3, 9, 27]]) — Un tuple imbriqué d'entiers définissant les taux de dilatation des couches de convolution 1D dilatées du réseau résiduel de UnivNet. La longueur deresblock_dilation_sizesdoit correspondre à celle deresblock_kernel_sizeset deresblock_stride_sizes. La longueur de chaque liste imbriquée dansresblock_dilation_sizesdéfinit le nombre de couches de convolution par bloc resnet. - kernel_predictor_num_blocks (
int, facultatif, valeur par défaut : 3) — Le nombre de blocs résiduels dans le réseau du prédicteur de noyaux, qui calcule le noyau et le biais pour chaque couche de convolution à variables de position du réseau résiduel UnivNet. - kernel_predictor_hidden_channels (
int, facultatif, valeur par défaut : 64) — Le nombre de canaux cachés pour chaque bloc résiduel du réseau de prédiction de noyau. - kernel_predictor_conv_size (
int, facultatif, valeur par défaut : 3) — Taille du noyau de chaque couche de convolution 1D dans le réseau de prédiction de noyau. - kernel_predictor_dropout (
float, facultatif, valeur par défaut 0.0) — Probabilité de dropout pour chaque bloc résiduel du réseau de prédiction de noyau. - initializer_range (
float, facultatif, par défaut0.01) — L'écart-type de la truncated_normal_initializer utilisé pour initialiser toutes les matrices de poids. - leaky_relu_slope (
float, facultatif, valeur par défaut 0.2) — L'angle de la pente négative utilisé par l'activation leaky ReLU.
Ceci est la classe de configuration destinée à stocker la configuration d'un UnivNetModel. Elle est utilisée pour instancier un modèle Univnet en fonction des arguments spécifiés, en définissant l'architecture du modèle. L'instanciation d'une configuration avec les valeurs par défaut produira une configuration similaire à celle de dg845/univnet-dev
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 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
classe 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 )
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 : 24000) — Fréquence d'échantillonnage à laquelle les fichiers audio doivent être numérisés, exprimée en hertz (Hz). - padding_value (
float, facultatif, par défaut 0.0) — La valeur utilisée pour l’ajustement lors de l’application de la stratégie définie par l’argumentpaddingà UnivNetFeatureExtractor.call(). Elle doit correspondre au silence audio. L’argumentpad_endde__call__utilisera également cette valeur. - do_normalize (
bool, facultatif, valeur par défautFalse) — Indique s'il faut effectuer la normalisation Tacotron 2 sur l'entrée. La normalisation peut contribuer à améliorer considérablement les performances de certains modèles. - num_mel_bins (
int, facultatif, valeur par défaut 100) — Le nombre de bandes de fréquence mélo dans les caractéristiques du spectrogramme extrait. Cette valeur doit correspondre àUnivNetModel.config.num_mel_bins. - hop_length (
int, facultatif, par défaut 256) — Nombre direct d'échantillons entre les fenêtres glissantes. Ce paramètre est également appelé « shift » dans de nombreux articles. Notez que cela diffère d'autres extracteurs de caractéristiques audio, tels que SpeechT5FeatureExtractor, qui exprimenthop_lengthen millisecondes. - win_length (
int, facultatif, par défaut 1024) — Le nombre direct d'échantillons pour chaque fenêtre glissante. Notez que cela diffère d'autres extracteurs de caractéristiques audio tels que SpeechT5FeatureExtractor, qui prennentwin_lengthen millisecondes. - win_function (
str, facultatif, par défaut"hann_window") — Nom de la fonction de fenêtre utilisée pour le fenêtrage, doit être accessible viatorch.{win_function} - filter_length (
int, facultatif, valeur par défaut 1024) — Le nombre de composantes FFT à utiliser. SiNone, cette valeur est déterminée à l'aide detransformers.audio_utils.optimal_fft_length. - max_length_s (
int, facultatif, valeur par défaut 10) — La longueur maximale de l'entrée du modèle, en secondes. Cette valeur est utilisée pour compléter l'audio. - fmin (
float, facultatif, valeur par défaut 0.0) — Fréquence mélinique minimale en Hz. - fmax (
float, facultatif) — Fréquence mel maximale en Hz. Si non définie, la valeur par défaut estsampling_rate / 2. - mel_floor (
float, facultatif, valeur par défaut 1e-09) — Valeur minimale des banques de fréquences mel. Notez que la manière dont UnivNetFeatureExtractor utilisemel_floorest différente de celle de transformers.audio_utils.spectrogram(). - center (
bool, facultatif, par défautFalse) — Indique s'il faut ajouter des zéros à la forme d'onde afin que la trametsoit centrée sur le tempst * hop_length. SiFalse, la trametcommence au tempst * hop_length. - compression_factor (
float, facultatif, valeur par défaut 1.0) — Facteur de compression multiplicatif pour la compression de la plage dynamique lors de la normalisation spectrale. - compression_clip_val (
float, facultatif, valeur par défaut : 1e-05) — Valeur de clip appliquée à la forme d'onde avant l'application de la compression de plage dynamique lors de la normalisation spectrale. - normalize_min (
float, facultatif, valeur par défaut : -11.512925148010254) — Valeur minimale utilisée pour la normalisation linéaire de type Tacotron 2. La valeur par défaut est la valeur originale de l'implémentation Tacotron 2. - normalize_max (
float, facultatif, valeur par défaut 2.3143386840820312) — La valeur maximale utilisée pour la normalisation linéaire de type Tacotron 2. La valeur par défaut est la valeur originale de l'implémentation Tacotron 2. - model_in_channels (
int, facultatif, valeur par défaut : 64) — Le nombre de canaux d'entrée du modèle UnivNetModel. Cette valeur doit correspondre àUnivNetModel.config.model_in_channels. - pad_end_length (
int, facultatif, valeur par défaut 10) — Lors de l'ajout de padding à la fin de chaque forme d'onde, nombre d'échantillons correspondant aux trames du spectrogramme à ajouter. Le nombre d'échantillons ajoutés serapad_end_length * hop_length. - return_attention_mask (
bool, facultatif, par défautTrue) — Indique si call() doit retournerattention_mask.
Construit un extracteur de caractéristiques UnivNet.
Cette classe extrait les caractéristiques de la banque de filtres log-mel à partir de la parole brute en utilisant la transformée de Fourier de court terme (STFT). L’implémentation de la STFT suit celle de TacoTron 2 et Hifi-GAN.
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.
__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 )
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 et de permettre le pipeline de reconnaissance automatique de la parole. - padding (
bool,strou PaddingStrategy, facultatif, valeur par défautTrue) — Sélectionne une stratégie pour mettre en forme les formes d'onderaw_speechdes signaux audio bruts (selon le côté de mise en forme et l'indice de mise en forme du modèle) parmi les options suivantes :Trueou'longest': Ajuster à la séquence la plus longue du lot (ou aucun ajustement si une seule séquence est fournie).'max_length': Remplir jusqu'à une longueur maximale spécifiée par l'argumentmax_lengthou jusqu'à la longueur d'entrée maximale acceptable pour le modèle si cet argument n'est pas fourni.Falseou'do_not_pad'(par défaut) : aucun padding (c’est-à-dire, peut produire un lot avec des séquences de longueurs différentes).
Si
pad_end = True, ce bourrage sera effectué avant l'application de la stratégiepadding. - max_length (
int, facultatif) — Longueur maximale de la liste renvoyée et, le cas échéant, longueur du bourrage (voir ci-dessus). - truncation (
bool, facultatif, par défautTrue) — Active la troncature pour couper les séquences d'entrée plus longues quemax_lengthàmax_length. - pad_to_multiple_of (
int, facultatif) — Si défini, la séquence est rembourrée jusqu'à un multiple de la valeur fournie.Ceci est particulièrement utile pour permettre l'utilisation des Tensor Cores sur le matériel NVIDIA avec une capacité de calcul
>= 7.5(Volta), ou sur les TPU qui bénéficient d'avoir des longueurs de séquence qui sont un multiple de 128. - return_noise (
bool, facultatif, par défautTrue) — Indique s'il faut générer et renvoyer une forme d'onde de bruit à utiliser dans UnivNetModel.forward(). - generator (
numpy.random.Generator, facultatif, par défautNone) — Générateur de nombres aléatoiresnumpy.random.Generatorfacultatif à utiliser lors de la génération du bruit. - pad_end (
bool, facultatif, par défautFalse) — Indique s'il faut ajouter du silence à la fin de chaque forme d'onde. Cela peut aider à réduire les artefacts en fin d'échantillon audio généré ; voir https://github.com/seungwonpark/melgan/issues/8 pour plus de détails. Ce bourrage sera effectué avant l'application de la stratégie de bourrage spécifiée danspadding. - pad_length (
int, facultatif, par défautNone) — Lors de l'ajout d'un remplissage à la fin de chaque forme d'onde, la longueur du remplissage en trames de spectrogramme. Si non défini, cette valeur est par défautself.config.pad_end_length. - do_normalize (
bool, facultatif) — Indique s'il faut effectuer la normalisation Tacotron 2 sur l'entrée. La normalisation peut contribuer à améliorer significativement les performances de certains modèles. Si non défini, la valeur par défaut estself.config.do_normalize. - return_attention_mask (
bool, facultatif) — Indique s'il faut retourner le masque d'attention. Si la valeur par défaut est conservée, le masque d'attention est retourné selon la valeur par défaut du feature_extractor spécifique. - 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.np.arrayde PyTorch.'np': Renvoie des objets Numpynp.ndarray.
Méthode principale pour vectoriser et préparer une ou plusieurs séquences pour le modèle.
UnivNetModel
classe transformers.UnivNetModel
< source >( config: UnivNetConfig )
Paramètres
- config (UnivNetConfig) — 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 Univnet 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_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)
Paramètres
- input_features (
torch.Tensorde forme(batch_size, sequence_length, feature_dim)) — Les tenseurs correspondant aux caractéristiques audio d’entrée. Les caractéristiques audio peuvent être obtenues à l’aide de UnivNetFeatureExtractor. Voir UnivNetFeatureExtractor.call() pour plus de détails (processor_classutilise UnivNetFeatureExtractor pour le traitement des audios). - noise_sequence (
torch.Tensor, facultatif) — Tenseur contenant une séquence de bruit de bruit gaussien standard. Peut être groupé (batched) et de forme(batch_size, sequence_length, config.model_in_channels), ou non groupé et de forme (sequence_length, config.model_in_channels)`. S'il n'est pas fourni, il sera généré aléatoirement. - padding_mask (
torch.BoolTensor, facultatif) — Masque indiquant quelles parties de chaque séquence sont remplies par du 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
Le masque peut être groupé et de forme
(batch_size, sequence_length)ou non groupé et de forme(sequence_length,). - generator (
torch.Generator, facultatif) — Un générateur torch pour rendre la génération déterministe. return_dict : Indique s'il faut retourner une sous-classe de ModelOutput plutôt qu'un simple tuple. - return_dict (
bool, facultatif) — Indique s'il faut retourner un ModelOutput plutôt qu'un simple tuple.
Retourne
UnivNetModelOutput ou tuple(torch.Tensor)
Un UnivNetModelOutput 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 (UnivNetConfig) et des entrées.
La méthode forward du modèle UnivNetModel 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.
- formes d’onde (
torch.Tensorde forme(batch_size, sequence_length)) — Formes d’onde audio de sortie 1D (mono-canal) par lot. - waveform_lengths (
torch.Tensorde forme(batch_size,)) — La longueur en échantillons de chaque forme d’onde non rembourrée du lot danswaveforms.
Exemple :
>>> 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]